软件工程概述
软件生存周期:可行性分析与项目开发计划、需求分析、概要分析、详细分析、编码、测试、维护
基本要素:方法、工具、过程
软件过程
能力成熟模型CMM
- 初始级:无制度管理,依靠核心人物作用
- 可重复级:建立基本管理过程,跟踪项目费用,进度,功能特性,可重复以前同类项目的成功
- 已定义级:建立标准化管理过程,管理和工程两方面,已经文档化、标准化,有标准的软件开发过程。所有项目基本依照标准过程开发
- 已管理级:管理标准量化,制定软件过程和产品质量的详细度量标准
- 优化级:有反馈机制,能够吸收新观念、新技术
能力成熟度模型CMMI
阶段模型
- 初始的:过程不可预测且缺乏控制
- 已管理:过程为项目服务
- 已定义:过程为组织服务
- 定量管理:过程已度量和控制
- 优化的:集中与过程改进
连续模型:不同过程域不同的过程域能力等级
统一过程模型UP
- 特点:用例和风险驱动,架构中心,迭代并增量
- 四个阶段
- 起始:需求确认,风险评估
- 精化:需求分析,架构设计
- 构建:实现
- 移交:测试,交付
- 每次迭代都是一次完整的开发过程:需求、分析、设计、实现、测试
软件过程模型
- 瀑布模型:前提需求明确,按流程,一步一步的往下开发
- V模型:每个阶段都要测试,对瀑布模型的一种优化,确认每一步的正确性
- 原型模型:需求不明确时,快速构建功能模型,进行演示,并按用户要求,及时修改
- 螺旋模型:风险分析。原型的优化,在原型的基础上,增加了风险分析
- 增量模型:逐步交付,系统划分模块,按优先级,逐步交付
- 喷泉模型:面向对象开发过程,以用户需求为动力,对象作为驱动
- 基于构件模型:预包装构件库,并使用构件开发,提高可靠性,节省时间与成本
- 形式化方法模型:建立数学基础上,生成软件形式化的数学规格说明
敏捷开发
适用于中小型项目,去掉不必要的会议和文档
- 结对编程:一个编码,一个审查
- 自适应开发:开发方法的适用性
- 水晶方法:不同项目,管理方法不同
- 特性驱动开发:快速迭代,需求变动
- 极限编程XP:前期无需过多文档,提倡测试先行
- SCRUM:30天一次迭代为一个“冲刺”,多个小组并行增量实现产品
软件项目管理
项目估算方法
成本估算
- 自顶向下:确定总金额,向下分摊功能点
- 自底向上:模块成本,向上累加
- 差别估算:与想以前项目比较,查找不同点,重新估算
软件规模估算
- COCOMO:以代码行作为度量标准,计算成本
- 基本COCOMO:静态单变量,纯粹代码行
- 中级COCOMO:基本+产品、硬件、人员、项目等
- 详细COCOMO:中级+设计与分析
- COCOMOⅡ:分三个阶段性模型,前期,设计,开发
- Patnam:动态多变量
进度管理与关键路径
进度管理图
- Gantt图:很好的体现并行关系
- PERT图:体现活动间的依赖关系
关键路径计算
- 最早开始时间:依赖项的最早完成时间
- 最早完成时间:依赖项的最早完成时间+自身
- 关键路径:耗时最长的路线
- 最晚完成时间:被依赖项的最晚开始时间,倒着算,总长,往后减
- 最晚开始时间:最晚完成 - 自身
- 松弛时间:最晚开始 - 最早开始