第五章 软件工程基础
5.1 软件工程概述
5.1.1 计算机软件
- 系统软件
- 应用软件
- 工程/科学软件
- 嵌入式软件
- 产品线软件
- Web 应用
- 人工智能软件
- 开放计算
- 网络资源
- 开源软件
5.1.2 软件工程基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实现严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚的审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
5.1.3 软件生存周期
- 可行性分析与项目开发计划
- 需求分析
- 概要设计
- 详细设计
- 编码
- 测试
- 维护
5.1.4 软件过程
- 能力成熟度模型
- 能力成熟度模型集成
5.2 软件过程模型
5.2.1 瀑布模型
5.2.2 增量模型
5.2.3 演化模型
- 原型模型
- 螺旋模型
5.2.4 喷泉模型
5.2.5 基于构件的开发模型
5.2.6 形式化方法模型
5.2.7 统一过程模型
- 起始阶段
- 精化阶段
- 构建阶段
- 移交阶段
5.2.8 敏捷方法
- 极限编程
- 水晶法
- 并列争求法
- 自适应软件开发
- 敏捷统一过程
5.3 需求分析
5.3.1 软件需求
- 功能需求
- 性能需求
- 用户或人的因素
- 环境需求
- 界面需求
- 文档需求
- 数据需求
- 资源使用需求
- 安全保密要求
- 可靠性要求
- 软件成本消耗与开发进度需求
- 其他非功能性要求
5.3.2 需求分析原则
- 必须能够表示和理解问题的信息域
- 必须能够定义将完成的任务
- 必须能够表示软件的行为
- 必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节
- 分析过程应该从要素信息移向细节信息
5.3.3 需求工程
- 需求获取
- 需求分析与协商
- 系统建模
- 需求规约
- 需求验证
- 需求管理
5.4 系统设计
5.4.1 概要设计
- 设计软件系统总体结构
- 数据结构及数据库设计
- 编写概要设计文档
- 评审
5.4.2 详细设计
- 对每个模块进行详细的算法设计
- 对模块内的数据结构进行设计
- 对数据库进行物理设计
- 其他设计
- 编写详细设计说明书
- 评审
5.5 系统测试
5.5.1 系统测试与调试
- 系统测试的意义、目的及原则
- 测试过程
5.5.2 传统软件的测试策略
- 单元测试
- 集成测试
- 确认测试
- 系统测试
5.5.3 测试面向对面软件
- 单元测试。封装的类是单元测试的重点
- 集成测试。
5.5.4 测试 Web 应用
- 质量维度
- WebApp 测试策略
5.5.5 测试方法
- 黑盒测试
- 白盒测试
5.5.6 调试
- 调试过程
- 调试方法
5.6 运行和维护知识
5.6.1 系统转换
5.6.2 系统维护概述
5.6.3 系统评价
5.7 软件项目管理
5.7.1 软件项目管理涉及的范围
- 人员
- 产品
- 过程
- 项目
5.7.2 软件项目估算
- 成本估算方法
- COCOMO 估算模型
- COCOMOII 模型
- Putnam 估算模型
5.7.3 进度管理
- 进度管理的基本原则
- 进度安排
5.7.4 软件项目的组织
- 组织结构的模式
- 程序设计小组的组织方式
5.7.5 软件配置管理
- 基线
- 软件配置项
- 版本控制
- 变更控制
5.7.6 风险管理
- 风险识别
- 风险预测
- 风险评估
- 风险控制