软件过程的历史演变和经典工作
软件发展的三大阶段
- 软硬件一体化阶段 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”,即先写代码,发现问题后再不断修改。它适合早期功能简单、规模较小的软件,但不适合大型软件项目开发。