软件工程

3 - 工程化软件

2019-12-19 03:00 CST
2019-12-18 23:02 CST
CC BY-NC 4.0

3.1 软件失败的示例和特点

项目失败

项目成功的4个最重要的原因:

  1. 用户的参与
  2. 高级管理层的支持
  3. 明确的需求声明
  4. 恰当的规划

“挑战性”(已完成,但超出预算或时间,或缺少功能)项目失败的前3项原因:

  1. 用户输入不足
  2. 需求和规约不完整
  3. 需求和规约变更

出现问题最终被取消,导致项目失败的原因:

  1. 需求不完整
  2. 用户参与不足
  3. 资源不足

Capers Jones将“忽视用户需求”作为管理信息系统的最高风险。

软件产品失效

  • 需求错误
  • 设计错误
  • 编码错误(最多)
  • 文档错误
  • 错误修正错误

协调和其他关注点

大型项目涉及复杂的因素:

  • 管理层的决心和领导力
  • 对业务和技术流程的周密规划
  • 熟练和经验丰富的顾问
  • 对项目的持续关注和监督
  • 在需要时愿意进行修改和调整

3项基本的管理策略被认为是按时并在预算范围内交付高质量软件的关键:

  1. 重点关注软件开发环境
  2. 规范的开发过程
  3. 系统地度量成本、进度计划和绩效目标

3.2 软件工程

软件工程的定义:

  • 由多人构建多个软件版本的过程
  • 一个工程学科,重点是高性价比地开发高质量软件系统
  • 用于设计和实现问题解决方案的工具
  • ACM/IEEE课程指南中的定义:
    • 建立并使用健全的工程原理(方法),以便经济地获得可靠的、可以在真实机器上运行的软件
    • 一种工程的形式,应用计算机科学和数学原理,以获得成本效益好的软件问题解决方案
    • 对开发、运行和维护软件所采用的系统的、规范的、可量化的方法

软件工程设计开发和支持软件系统各个方面的广泛领域:技术和业务流程,具体方法和技术,产品特性和指标,人员、技能和团队合作,工具和培训,项目协调与管理。

3.3 软件工程职业与道德规范

(略,看书)

3.4 软件工程的原则

软件工程原则:软件工程中来源于广泛的观察的规则和假设。

Alan Davis

  1. 质量放在首位
  2. 高质量的软件是可能的
  3. 尽早向客户提供产品
  4. 在编写需求之前确定问题
  5. 评估可选设计方案
  6. 使用适当的过程模型
  7. 在不同阶段使用不同的语言
  8. 最小化智力差距:软件解决方案的结构需要尽可能接近现实世界的问题结构
  9. 将技术置于工具之前
  10. 在使其更快之前确保其正确性
  11. 检查代码
  12. 好的管理比好的技术更重要
  13. 人是成功的关键
  14. 勿盲目跟风
  15. 承担责任

产品属性:

  • 可维护性
  • 易安装性
  • 可用性
  • 可重用性
  • 互操作性
  • 可修改性

Walker Royce

基础开发过程本质上是迭代的。

  1. 基于架构优先的方法建立过程
  2. 建立一个迭代过程,以通过此过程尽早解决风险
  3. 强调基于组件的开发,以减少编码工作量
  4. 应该建立变更管理来处理迭代过程
  5. 增强迭代开发过程环境(双向工程),以通过自动化工具在多个制品上频繁地进行多次变更
  6. 使用基于模型和计算机可处理的符号来进行设计
  7. 建立质量控制和项目进度评估的客观过程
  8. 使用基于演示的方法将中间制品转换为用户场景的可执行演示
  9. 计划增量式发布多个版本,每个版本由一组使用场景组成,并在细节上逐步演化
  10. 建立一个可配置的过程,因为没有一个过程适合所有的软件开发

Anthony Wasserman

软件工程学科的基础:

  • 抽象化
  • 分析、设计的方法和表示法
  • 用户界面原型
  • 模块化和架构
  • 复用
  • 生命周期和过程
  • 度量
  • 工具和集成环境