Skip to content

第五章 软件工程基础

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 软件度量