软件开发的生命周期
传统的软件开发生命周期是指软件产品从构思开始,经过定义、开发、使用和维护直到最后废弃的全过程。按照传统的软件生命周期方法,可以把软件生命周期划分为软件定义、软件开发、软件运行与维护三个阶段。
软件定义包括问题定义、可行性研究、需求分析。
- 问题定义明确了软件的定位以及范围等,说明是一种什么性质的系统;
- 可行性研究包括技术可行性,经济可行性,操作可行性、社会可行性等;
- 需求分析的任务是确定软件的功能需求,性能需求,和运行环境的约束,写出软件的需求规格说明书,软件系统测试大纲,用户手册概要
软件开发阶段的工作内容是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。
- 概要设计是在软件需求规格说明的基础上,建立系统的总体结构和模块之间的关系,定义功能模块及各功能模块之间的关系;
- 详细设计是对概要设计产生的功能模块细化,把模块内部细节转化为可编程的程序过程性描述。详细设计包括算法、数据结构、数据分布、数据组织、模块间接口信息和用户界面等的设计。
- 编码的任务是把详细设计转化为程序。
- 测试可以分为单元测试、集成测试、确认测试、和系统测试等。
软件过程模型
软件过程模型是软件开发实际过程的抽象与概括。它为软件工程管理提供里程碑和进度表,为软件开发过程提供原则和方法。以下是主要的软件开发模型的介绍:
瀑布模型
瀑布模型描述了软件生命周期的基本过程活动,这些活动从一个阶段到另一个阶段逐次下降,它的工作流程形式上很像瀑布。

瀑布模型的优点是因果关系紧密联系,前一个阶段的工作结果是后一个阶段工作的输入。利于人员的组织和开发成本的控制。缺点是软件需求分析的准确性很难确定,因为用户具有软件开发的专业知识,无法对目标系统给出明确定义,对系统将来的改变范围难以确定。并且用户和软件的负责人要很长时间才能完成需求分析和设计,这时如果改变需求将会带来巨大损失。
原型模型
原型模型又称为快速模型,其有两个阶段——原型开发阶段、目标软件开发阶段。原型开发阶段是软件开发人员根据用户提出的软件定义快速的开发出一个原型。该原型应该包含目标系统的关键问题,能够反映目标系统大致面貌。目标软件开发阶段是在原型的基础上和用户确认原型的需求后对原型进行修改完善和进一步开发。

对大型软件来说,原型可能非常复杂难以快速成型,应避免使用原型模型进行开发。
螺旋模型
螺旋模型是在快速模型的的基础上扩展而成,这种模型把整个软件开发流程分为多个阶段,每个阶段都由四部分组成。它们是:
- 目标设定,为目标需求分析,定义和确定 当前阶段的目标内容;
- 风险分析,对可选方案进行风险识别和详细分析,制定对应解决策略;
- 开发和有效性验证,开发软件产品,实现需求目标;
- 评审,对项目进行评审,以确定是否需要进入螺旋线的下一次回路,对下一个螺旋周期制定计划。
螺旋模型是一个螺旋上升的过程,该模型支持大型软件的开发,适用于面向规格说明,面向过程和面向对象的软件开发方法。

基于可重用构件的模型
在许多软件都存在一些重用软件,开发人员可以把这些软件抽象出来成为一个个构件,人门可以把软件工程项目中所创造的构件不断积累存储在一个构件库中。当我们需要开发一个新的软件系统时,只需检索构件库,对最终的软件系统进行组装式的开发。对于不存在构件库中的组件,则开发新的构件入库。

需求管理
需求管理是对系统需求变更,了解和控制的过程。需求管理主要活动如图:

需求管理强调:
- 控制对需求基线的变动
- 保持项目计划与需求一致
- 控制需求版本
- 管理需求依赖关系,跟踪需求对应的上下游需求
- 跟踪基线需求中的需求状态
为避免测试人员使用过时的软件需求说明,必须统一确定需求文档的每一个版本。迟到的需求变更会对已进行的工作产生很大的影响,如果不控制范围的扩张,会导致我们不断采纳新功能,推翻原有功能逻辑。需要不断调整资源、进度、或者质量标准,是极为有害的。
软件需求文档应该精确描述软件产品是基本原则,为了能够严格控制软件项目,应该仔细评估需求变更,及时通知对应人员变更内容,制定标准的需求变更评审流程。一旦确定需求基线,应该使所有的新的需求变更都遵循变更控制过程,变更控制过程如图:

开发管理
软件开发管理的内容包括,软件项目的范围、时间、成本、配置管理、文档管理、开发风险与质量管理。
在项目规划中,知道了更多的项目信息,项目范围应该被更详细地进行描述。应检查假设和约束的完整性,并根据需要增加必要的补充说明,和约束条件。
项目时间管理中的过程包括:活动定义、活动排序、活动的资源估算、活动历时估算、进度计划、进度控制。为了使项目目标得以实现并且制定出比较完善的项目进度计划,要再对项目进行分解的基础上还必须对分解出的具体的目标进行与排期。
todo