软件生命周期

前言

这几天我都在深深地反思,发现自己的确是一个很功利的人,从框架的工具化就可以看出来。越是患得患失就越容易失去。我觉得我这段时间可以多写点代码,并且这不能很以往一样,一个劲地写,应该从工程上开始考量所有问题。


软件生命周期6大阶段

  1. 可行性分析和计划阶段
    • 确定软件开发的总体目标,给出功能,性能,可靠性,接口等方面的要求,进行可行性分析
    • 估计可利用的资源(硬件,软件,人力等),成本,效益,开发进度,进行投资收益分析,制定开发计划
    • 提交可行性分析报告,开发计划等文档
  2. 需求分析阶段
    • 分析用户提出的要求,给出需求详细定义,确定软件系统的各项功能,性能需求和设计约束,确定对文档的编制的要求
    • 提交软件需求说明,软件规格说明,数据要求说明等文档和初步用户手册
  3. 设计阶段
    • 概要设计:将各项需求转换为软件的体系结构。软件的每一组成部分都是意义明确的模块,每个模块和某些需求相对应
    • 详细设计:对没一个模块要完成的工作进行具体的描述,提供源编程编写的直接依据
    • 提交结构设计说明,详细设计说明和测试计划初稿等文稿
  4. 实现阶段
    • 实现源码编码,编译,和排错调试,得到没有语法错误的程序清单。程序结构良好,清晰易读,且与设计想一致
    • 编写进度日报,周报,和月报
    • 提交用户手册,操作手册等面向用户的文档的编写工作
    • 编写测试计划
  5. 测试阶段
    • 全面测试目标软件系统,并检查审阅已编制的文档,提交测试分析报告。逐项评价所生产的程序、文档以及开发工作本身,提交项目开发总结报告
    • 在整个开发过程中 (即前五个阶段中),开发集体需要按月编写
      开发进度月报。
  6. 运行与维护阶段
    • 软件提交给用户后,在运行使用中得到持续维护,根据用户新
      提出的需求进行必要而且可能的扩充、删改、更新和升级。
    • 软件维护包括改正性维护 (发现错误)、适应性维护 (适应运行
      环境变化) 和完善性维护 (增强功能)。

常见软件生命周期模型

软件开发过程一般应该采用某种类型的软件生命周期模型,按
照一定的开发方法,使用相应的工具系统实现。

常见模型

  • 瀑布模型 (Waterfall Model)
  • V-W 模型 (V Model and W Model)
  • 快速应用开发模型 (RAD Model)
  • 原型模型 (Prototype Model)
  • 增量/演化/迭代模型 (Incremental Model)
  • 螺旋模型 (Spiral Model)
  • 喷泉模型 (Fountain Model, Object-Oriented Model)
  • 基于构件的开发模型 (CBSD Model)
  • Rational 统一过程模型 (RUP Model)
  • *敏捷开发模型与极限编程 (Agile Modeling and XP)

瀑布模型

image_1c8ias8gck9c5rmro9cihae89.png-96.4kB

特征

  • 每一阶段工作对象来自于上一阶段的输出
  • 根据本阶段的活动规程执行相应的任务
  • 本阶段产生相关软件工件,作为下一阶段活动的输入
  • 对本阶段的活动情况进行评审

优点

  • 降低软件开发的复杂程度,提高软件开发过程的透明性,提高软件开发过程的可管理性
  • 推迟软件实现,强调在软件实现前必须进行分析和设计工作
  • 以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,保证了阶段之间的正确衔接,能够及时发现并纠正开发过程中存在的缺陷,使产品达到预期的质量要求

缺点

  • 强调过程活动的线性顺序
  • 缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题
  • 风险控制能力较弱
  • 瀑布模型中的软件活动是文档驱动的,当阶段之间规定过多的文档时,会极大地增加系统的工作量
  • 管理人员如果仅仅以文档的完成情况来评估项目完成进度,往往会产生错误的结论