软件过程的历史演变和经典工作

软件发展的三大阶段

  • 软硬件一体化阶段 50年代-70年代
    • 软件完全依附于硬件
      • 软件应用典型特征
        • 软件支持硬件完成计算任务
        • 功能单一
        • 复杂度有限
        • 几乎不需要需求变更
      • 软件开发典型特征
        • 硬件太贵
        • 团队以硬件工程师和数学家为主
      • 典型软件过程和实践
        • 典型软件过程借鉴硬件工程思想,把开发划分为计划、规格说明、编码、测试、试运行和系统评估等阶段,强调先把需求和设计尽量确定清楚,再进入实现与验证;“Measure twice, cut once”体现的就是这种计划驱动思想,即动手前反复确认,减少后期返工和成本失控
    • 软件作坊
      • 软件应用典型特征
        • 功能简单
        • 规模小
      • 软件开发典型特征
        • 很多非专业领域的人员涌入软件开发领域
        • 高级程序语言出现
        • 质疑权威文化盛行
      • 典型软件过程和实践
        • Code and Fix
  • 软件成为独立的产品 70年代-90年代
    • 软件应用特征
      • 摆脱了硬件束缚(OS)
      • 功能强大
      • 规模和复杂度剧增
      • 个人电脑出现 普通人变成软件用户
        • 需求多变
        • 兼容性要求
      • 来自市场的压力
    • 典型软件过程和实践
      • 形式化方法
        • 试图用数学化、严格化的方法描述和验证软件系统
        • 目标是提高软件正确性和可靠性
        • 不足:扩展性和可用性有限,难以大规模普及
      • 结构化程序设计和瀑布模型
        • 强调需求、设计、编码、测试、维护等阶段顺序推进
        • 重视设计文档化、计划管理、测试监控和客户参与
        • 瀑布模型不足:容易变成重文档、慢节奏的开发过程
      • 成熟度模型
        • Level 1 Initial 初始级 过程混乱,主要靠个人能力,结果不可预测。
        • Level 2 Managed 已管理级 项目层面有基本管理,比如计划、跟踪、配置管理。
        • Level 3 Defined 已定义级 组织层面形成统一标准流程,各项目按组织标准裁剪执行。
        • Level 4 Quantitatively Managed 量化管理级 用数据度量和控制过程,过程表现可以量化分析。
        • Level 5 Optimizing 优化级 持续改进过程,主动发现问题并优化。
      • CMMI 能力成熟度模型集成
        • 过程改进模型而非软件过程或者软件过程模型
        • 不是过程优劣的标准
  • 网络化和服务化 90年代中期至今
    • 软件应用特征
      • 功能更复杂,规模更大
      • 用户数量急剧增加
      • 快速演化和需求不稳定
      • 分发方式的变化(SaaS)
    • 典型软件过程和实践
      • 迭代式
      • 敏捷宣言
      • XP
      • Scrum
      • Kanban
      • 开源软件开发方法

当前软件发展现状

  • 软件应用典型特征

    • 进一步服务化和网络化(移动是主流)

    • 用户需求多样性进一步凸显

    • 软件产品和服务的地位变化

    • 错综复杂的部署环境

    • 近乎苛刻的用户期望

      • 多 快 好 省
  • 软件开发典型特征

    • 空前强大的开发和部署环境——XaaS(一切皆服务)
    • 盛行共享和开源
    • 潜在支撑长足进步(AI、Bigdata等等)

典型DevOps实践和方法

  • 方法论基础是敏捷软件开发、精益思想以及Kanban方法
  • 以领域驱动设计为指导的微服务架构方式
  • 大量虚拟化技术的使用

  • XaaS的理念指导
  • 构建了强大的工具链,支持高水平自动化

练习题

1. “Measure twice, cut once”描述的是下述哪个软件开发场景?

题干:

“Measure twice,cut once”描述的是下述哪个软件开发场景:

  • 软件设计
  • 代码评审
  • 需求开发
  • V&V

答案:软件设计

解析: “Measure twice, cut once”原意是“量两次,切一次”,强调动手实现前先充分设计和确认,减少后期返工。在软件过程中对应的是先做好软件设计,再进入编码实现。


2. 以下不属于软件发展的三大主要阶段的是?

题干:

整体来看,我们可以把软件的发展分为三大阶段,以下不属于三大主要阶段的是:

  • 软硬件一体化
  • 网络化和服务化
  • 云计算化和云原生
  • 软件成为独立产品

答案:云计算化和云原生

解析: PPT 中软件发展的三大阶段是:软硬件一体化阶段、软件成为独立产品阶段、网络化和服务化阶段。“云计算化和云原生”属于当前软件技术发展特征,但不是 PPT 划分的三大历史阶段之一。


3. 以下描述中,不属于软件开发本质困难或者本质挑战的是?

题干:

以下描述中,不属于软件开发本质困难或者本质挑战的是:

  • 质量难题
  • 复杂性
  • 不可见
  • 一致性

答案:质量难题

解析: PPT 根据《没有银弹》总结的软件开发本质困难包括:不可见性、复杂性、可变性、一致性。“质量难题”虽然是软件开发中的重要问题,但不是这里列出的本质困难之一。


4. 以下哪一种实践是软硬件一体化阶段的典型实践?

题干:

以下描述中,哪一种实践是软硬件一体化阶段的典型实践:

  • Code and Fix
  • 迭代式开发
  • 瀑布生命周期模型
  • 成熟度模型

答案:Code and Fix

解析: 在软硬件一体化阶段内部,软件作坊时期的典型实践是 “Code and Fix”,即先写代码,发现问题后再不断修改。它适合早期功能简单、规模较小的软件,但不适合大型软件项目开发。