3.软件相关研发活动与非研发活动说明
软件开发活动即使取得了软件著作权,也不一定是研发活动。只有当软件开发活动符合研发活动的界定时,才属于研发活动。
(1)软件研发活动的典型
①在计算机科学领域产生新的原理、语言、操作系统;
②基于独创技术,对新搜索引擎的设计和执行;
③基于系统或者网络的流程再造,试图解决硬件或者软件的冲突;
④创建新的或者更有效的算法,开发计算专业领域中的软件工具,如图像处理、地理数据显示、字符识别等;
⑤建立新的、独创的加密技术或者安全技术;
⑥在操作系统、编程语言、数据管理、通讯软件和软件开发工具层面上的信息技术开发;
⑦开源软件的开发;
⑧互联网技术的发展;
⑨软件的设计、开发、配置和维护等方面方法的研究;
⑩在捕捉、传输、存储、检索、处理或显示信息等通用方法上产生进步的软件开发;
⑪开发软件程序或系统所必需的,旨在填补技术知识空白的试验发展;
⑫对现有程序或系统的升级、扩充或改变体现了科学和(或)技术的进步,并带来了知识存量的增加,可将其归为研发活动,如软件适配不同的操作系统或硬件、产品运行性能得以显著提升;
⑬针对新应用场景的软件开发,如算法的优化迭代、产品基础架构和功能模块的重新设计等。
软件相关研发活动是一个复杂且系统的过程,它涵盖了从需求分析到产品上线的多个阶段。以下是对软件相关研发活动的主要阶段和内容的详细阐述:
1. 需求分析目标:理解和规定用户需求和系统需求,为软件设计和实现提供依据。主要任务:需求获取:通过访谈、问卷调查、观察和文档分析等方式,从用户和其他相关人员那里获取系统需求。需求分析和规格化:将收集到的需求进行分类、组织和文档化,形成需求规格说明书。需求验证:检查需求是否正确、一致、完整和可实现。需求管理:对需求的变更进行控制和管理。2. 系统设计目标:将需求分析阶段得到的需求规格说明书转化为系统设计文档。主要任务:概念设计:确定系统的总体结构和主要功能模块。逻辑设计:设计系统的数据结构、算法和接口。物理设计:确定系统的硬件配置、网络配置和软件配置。3. 编码实现目标:将系统设计文档转化为具体的软件产品。主要任务:选择合适的编程语言,考虑到系统的性能需求、开发人员的技能水平、开发工具的支持等因素。确定编程风格,以提高代码的可读性和可维护性。编写代码,并遵循设计文档的要求,注意代码的效率和质量。进行测试和调试,确保代码的正确性和性能。4. 系统测试目标:通过各种测试方法和工具,检查软件产品是否满足需求规格说明书中的要求。主要任务:单元测试:测试软件产品的各个模块。集成测试:测试软件产品的各个模块之间的交互。系统测试:测试软件产品作为一个整体的功能和性能。验收测试:由用户参与,检查软件产品是否满足用户的需求。5. 系统部署目标:将软件产品安装到用户的环境中,并进行必要的配置和调整。主要任务:数据迁移:确保用户的原有数据能够正确地迁移到新的系统中。系统配置:确保系统的各项参数设置能够满足用户的需求。用户培训:确保用户能够正确地使用和维护新的系统。6. 系统维护目标:在软件产品投入运行后,对其进行持续的维护和改进。主要任务:故障修复:快速响应用户的问题和故障报告,及时进行修复。性能优化:根据系统的运行情况和用户的反馈,对系统的性能进行优化。功能改进:根据用户的需求和市场的变化,对系统的功能进行改进。版本升级:根据系统的改进和优化,制定和实施版本升级计划。7. 项目管理内容:项目管理是软件研发活动库的重要组成部分,它涉及到项目的计划、组织、监控和控制。主要任务:项目计划的制定和实施、项目组织的构建和管理、项目进度的监控和控制、项目质量的保证和提高、项目风险的识别和管理、项目成本的预算和控制等。8. 质量保证内容:质量保证是软件研发活动库的重要组成部分,它涉及到软件产品的质量控制和质量提升。主要任务:质量计划的制定和实施、质量标准的设定和执行、质量度量和分析、质量改进和优化、质量审核和评价等。9. 工具与技术支持开发工具:如集成开发环境(IDE)、版本控制系统(VCS)、自动化构建工具、单元测试工具、持续集成/持续部署(CI/CD)工具等。项目管理工具:如Jira、Trello、Asana等,帮助开发者管理项目的进度、任务和资源。文档管理工具:如Confluence、SharePoint、Google Docs等,帮助开发者管理项目的文档,包括需求文档、设计文档、技术文档等。10. 文档编写目标:为软件研发、使用和维护提供必要的文档支持。活动:编写和维护需求文档、设计文档、测试文档、用户手册等。10. 研发方式典型的软件研发方式包括瀑布模型、迭代式研发和敏捷式研发等:
瀑布模型:按照需求分析、设计、编码、测试、部署的顺序进行,每个阶段完成后才进入下一个阶段。迭代式研发:将项目分解为多个迭代周期,每个迭代周期都包括需求分析、设计、编码、测试等活动,通过不断迭代完善软件产品。敏捷式研发:强调快速响应变化、高度协作和持续交付,通过短迭代周期和敏捷方法(如Scrum、Kanban)进行软件开发。