# 第五章 软件工程基础

# 5.1 软件工程概述

# 5.1.1 计算机软件

  1. 系统软件
  2. 应用软件
  3. 工程/科学软件
  4. 嵌入式软件
  5. 产品线软件
  6. Web 应用
  7. 人工智能软件
  8. 开放计算
  9. 网络资源
  10. 开源软件

# 5.1.2 软件工程基本原理

  1. 用分阶段的生命周期计划严格管理
  2. 坚持进行阶段评审
  3. 实现严格的产品控制
  4. 采用现代程序设计技术
  5. 结果应能清楚的审查
  6. 开发小组的人员应该少而精
  7. 承认不断改进软件工程实践的必要性

# 5.1.3 软件生存周期

  1. 可行性分析与项目开发计划
  2. 需求分析
  3. 概要设计
  4. 详细设计
  5. 编码
  6. 测试
  7. 维护

# 5.1.4 软件过程

  1. 能力成熟度模型
  2. 能力成熟度模型集成

# 5.2 软件过程模型

# 5.2.1 瀑布模型

# 5.2.2 增量模型

# 5.2.3 演化模型

  1. 原型模型
  2. 螺旋模型

# 5.2.4 喷泉模型

# 5.2.5 基于构件的开发模型

# 5.2.6 形式化方法模型

# 5.2.7 统一过程模型

  1. 起始阶段
  2. 精化阶段
  3. 构建阶段
  4. 移交阶段

# 5.2.8 敏捷方法

  1. 极限编程
  2. 水晶法
  3. 并列争求法
  4. 自适应软件开发
  5. 敏捷统一过程

# 5.3 需求分析

# 5.3.1 软件需求

  1. 功能需求
  2. 性能需求
  3. 用户或人的因素
  4. 环境需求
  5. 界面需求
  6. 文档需求
  7. 数据需求
  8. 资源使用需求
  9. 安全保密要求
  10. 可靠性要求
  11. 软件成本消耗与开发进度需求
  12. 其他非功能性要求

# 5.3.2 需求分析原则

  1. 必须能够表示和理解问题的信息域
  2. 必须能够定义将完成的任务
  3. 必须能够表示软件的行为
  4. 必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节
  5. 分析过程应该从要素信息移向细节信息

# 5.3.3 需求工程

  1. 需求获取
  2. 需求分析与协商
  3. 系统建模
  4. 需求规约
  5. 需求验证
  6. 需求管理

# 5.4 系统设计

# 5.4.1 概要设计

  1. 设计软件系统总体结构
  2. 数据结构及数据库设计
  3. 编写概要设计文档
  4. 评审

# 5.4.2 详细设计

  1. 对每个模块进行详细的算法设计
  2. 对模块内的数据结构进行设计
  3. 对数据库进行物理设计
  4. 其他设计
  5. 编写详细设计说明书
  6. 评审

# 5.5 系统测试

# 5.5.1 系统测试与调试

  1. 系统测试的意义、目的及原则
  2. 测试过程

# 5.5.2 传统软件的测试策略

  1. 单元测试
  2. 集成测试
  3. 确认测试
  4. 系统测试

# 5.5.3 测试面向对面软件

  1. 单元测试。封装的类是单元测试的重点
  2. 集成测试。

# 5.5.4 测试 Web 应用

  1. 质量维度
  2. WebApp 测试策略

# 5.5.5 测试方法

  1. 黑盒测试
  2. 白盒测试

# 5.5.6 调试

  1. 调试过程
  2. 调试方法

# 5.6 运行和维护知识

# 5.6.1 系统转换

# 5.6.2 系统维护概述

# 5.6.3 系统评价

# 5.7 软件项目管理

# 5.7.1 软件项目管理涉及的范围

  1. 人员
  2. 产品
  3. 过程
  4. 项目

# 5.7.2 软件项目估算

  1. 成本估算方法
  2. COCOMO 估算模型
  3. COCOMOII 模型
  4. Putnam 估算模型

# 5.7.3 进度管理

  1. 进度管理的基本原则
  2. 进度安排

# 5.7.4 软件项目的组织

  1. 组织结构的模式
  2. 程序设计小组的组织方式

# 5.7.5 软件配置管理

  1. 基线
  2. 软件配置项
  3. 版本控制
  4. 变更控制

# 5.7.6 风险管理

  1. 风险识别
  2. 风险预测
  3. 风险评估
  4. 风险控制

# 5.8 软件质量

# 5.8.1 软件质量特性

# 5.8.2 软件质量保证

# 5.8.3 软件评审

# 5.8.4 软件容错技术

# 5.8.5 软件度量