与任何事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的过程,这个过程称为软件生存周期(软件生命周期)。详细的划分如下图:
它们的主要任务如下:
-
制定规划(可行性分析)
确定要开发软件系统的总目标,给出它的功能、性能、可靠性以及接口等方面的要求。由系统分析员和用户合作,研究该项任务的可行性,探讨解决问题的可能方案。并对可利用资源(硬件、软件、人力等)、成本、效益、开发进度等作出估计,制定开发任务的实施计划,连同可行性报告一同提交管理部门评审。
通常可行性分析与规划制定的过程由用户、项目负责人和系统分析师共同进行,这个阶段主要产生文档:可行性分析报告、项目开发计划。
-
系统与软件需求分析(定义)
与客户合作,获取待开发软件的功能、性能、可靠性、接口以及其它质量需求,并进行需求分析与建模,从而得到待开发软件的详细定义。基于获得的文档与模型,编写系统和软件需求规格说明,提交管理部门评审。
这个过程的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统的功能、性能、数据、界面等要求,从而确定一个系统的逻辑模型。
-
软件设计
把各项需求转换为相应的体系结构,包括数据的、系统的及软件的。每一组成部分都应是意义明确的模块,每个模块都和需求相对应,也即是概要设计/高层设计。进而对模块进行具体的描述,为编写源代码打下基础,即是详细设计。所有设计都应以设计规格说明形式形成文档,以便后续使用并提交评审。
概要设计主要由系统分析师和软件设计师参加,主要产生 概要设计书 。而详细设计阶段主要由软件设计师和程序员参加,将概要设计的理念进一步细化,产生 详细设计文档。
-
编程与单元测试
把上述设计转换为计算机程序即实现和单元测试。对于编写出的源程序必须进行单元测试,查找各模块在功能和结构上存在的问题并纠正。这一步必须注意程序设计风格,源程序应该是结构良好、清晰、易读的,并与设计一致。
-
集成与系统测试
测试是保证质量的重要手段,主要方式是在设计测试用例的基础上检验软件的各部分。把已测试过的模块按一定顺序组装起来,最后按规定的需求,逐项进行系统的确认测试,确定软件是否满足需求规格,能否交付。
测试阶段通常会由另一个部门的软件设计师或系统分析师参加(为了避免自我产生的盲区),一般来说还会产生 软件测试计划、测试用例、软件测试报告。
-
运行与维护
自软件投入使用则进入运行阶段,软件在运行中可能由于多方面的原因需要修改,主要目的均为维护软件正常使用。