软件工程基础
1. 概述
1.1 软件的生存周期
- 可行性分析和项目开发计划
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 维护
2. 软件过程模型
-
瀑布模型。将软件生存周期的各个部分顺序连接划分为若干个阶段。
-
增量模型
对瀑布模型的基本成分进行分版本迭代。每一个需求分段为一个增量产品,每个增量产品可以分别开发。
-
演化模型
快速开发一个简单的产品,通过市场的验证和用户的反馈,优化产品的需求和开发方向。演化模型可分为原型模型和螺旋模型等。- 原型模型
- 螺旋模型
- 原型模型
-
喷泉模型
3. 软件开发方法
- 结构化方法
- Jackson方法
- 原型方法
- 面向对象方法
- 敏捷方法
敏捷方法的总体目标是“尽可能早地、持续地对有价值的产品的交付”使客户满意。
3.1 敏捷方法
- 极限编程(XP)
极限编程由四部分组成,彼此相互依赖、关联,并通过行为贯穿整个软件生存周期。
(一)四大价值观:沟通、简单性、反馈和勇气
(二)五个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
(三)12个最佳实践:计划游戏(快速制定计划、随着细节的不断变化而完善)、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、继续集成、每周工作40小时、现场客户和编码标准。 - 水晶法(Crystal)
每一个不同的项目都需要一套不同的策略、约定和方法论。 - 并列争球法(Scrum)
把每30天的一次迭代称为一个“冲刺”,并按需求的优先级来实现产品。多个自组织和自治的小组并行的递增实现产品。协调通过简短的日常会议来进行,就像橄榄球中的“并列争球”。 - 自适应软件开发(ASD)
ASD有6个基本原则:有一个使命作为指导;特征被视为客户价值的关键点;过程中的等待很重要,重做和做同样关键;变化不是改正而是对软件开发实际情况的调整;确定的交付时间迫使开发者认证考虑每个版本的关键需求;风险控制。
4. 成本估算方法
估算软件开发所需成本、时间和工作量。常用估算方法有三种:
- 基于已经完成的类似项目进行估算。
- 基于分解技术进行估算。包括问题分解和过程分解。问题分解是把问题分解为多个小问题来估算。过程分解是把软件开发过程(分析、设计、编码、测试)进行分解估算。
- 基于经验估算模型的估算。典型的经验估算模型有IBM估算模型、COCOMO估算模型、Putnam估算模型。
多个估算模型可以组合使用,提高估算精度。
- 自顶向下估算方法
- 自底向上估算方法
- 差别估算方法
- 其他估算方法
- COCOMO模型
- COCOMOII模型
- Putnam模型
5. 进度管理
5.1 进度管理的基本原则
- 划分
- 相互依赖性
- 时间分配
- 工作量确认
- 确定责任
- 明确输出结果
- 确定里程碑
5.2 进度安排
采用图示的方法展示项目的进展情况。图中需包含:
(1)各个任务计划的开始时间和完成时间
(2)各个任务的完成标志
(3)各个任务与参与的工作人数,各个任务与工作量之间的衔接情况
(4)完成各个任务所需的物理资源和数据资源
进度安排的常用图形有甘特图(Gantt)和项目计划评审技术图(PERT)。
- Gantt图。
- PERT图
松弛时间为0的事件流是完成项目的关键路径。如下图的关键事件流是1-2-3-4-6-8-10-11。
6. 软件项目的组织
软件项目组织有三条原则
- 尽早落实责任
- 减少交流接口
- 责任均衡
组织结构的模式
- 按项目划分模式
- 按职能划分模式
- 矩阵模式
程序设计小组的组织方式
- 主程序员制小组。一名主程序员负责小组技术活动,分配任务,协调技术问题,必要时完成程序的关键部分。
- 民主制小组。小组各成员地位平等,有组长,但是工作目标和决策都是由全体成员集体决定,相互合作。
- 层次式小组。组长领导若干高级程序员,每个高级程序员领导若干程序员。
7. 软件质量管理
7.1 ISO/IEC 9126软件质量模型
7.2 Mc Call软件质量模型
8. 软件配置管理
8.1 基线
基线是软件生存周期中各个阶段的的一个特定点。用来工作划分,用作检查点用来检查各阶段的完成情况。
8.2 软件配置项
- 系统规格说明书
- 软件项目实施计划
- 软件需求规格说明书
- 软件设计规格说明书(数据设计,体系结构设计、模块设计、接口设计、对象描述)
- 源代码清单
- 测试计划和过程、测试用例和测试结果记录
- 操作和安装手册
- 可执行程序
- 数据库描述
- 用户手册
- 维护文档(如软件问题报告、维护请求、工程编程次序)
- 软件工程标准
- 项目开发小结
8.3 版本控制
软件的版本升级,使用文档记录各个版本的时间、更新内容,功能特点等。
8.4 变更控制
软件工程过程中某一阶段的变更加以控制和管理,保持修改信息,把信息传递到下一阶段。
9. 风险管理
略
10. 软件复杂性度量
10.1 McCabe度量法