02-历史与演变
1. 软件开发三大阶段
- 软硬件一体化阶段(50年代~70年代)
- 软件完全依附于硬件
- 软件作坊
- 软件成为独立的产品(70年代~90年代)
- 网络化和服务化(90年代中期迄今)
软件开发方法=软件过程
2. 软硬件一体化
2.1. 典型特征
- 软件应用典型特征
- 软件支持硬件完成计算任务
- 功能单一
- 复杂度有限
- 几乎不需要需求变更
- 软件开发典型特征
- 硬件太贵
- 团队以硬件工程师和数学家为主
2.2. 典型的软件过程和实践
- “Measure twice, cut once“:对应代码审查,因为早期开发过程中机器很贵/人力资源便宜
3. 软件作坊/软硬件一体化后期
3.1. 典型特征
- 软件应用典型特征
- 功能简单
- 规模小
- 软件开发的典型特征
- 很多非专业领域的人员涌入软件开发领域
- 高级程序设计语言的出现
- 质疑权威文化的盛行
3.2. 典型软件过程和实践
- code and fix:非常适合小规模团队
- 软件工程和软件危机:code and fix不适合大型软件开发
4. 软件成为独立产品
4.1. 典型特征
- 摆脱了硬件束缚(OS)
- 功能强大
- 规模和复杂度剧增
- 个人电脑出现 => 普通人成为软件用户
- 需求多变
- 兼容性要求
- 来自市场的压力
4.2. 典型软件过程和实践
- 形式化方法
- 结构化程序设计和瀑布模型
4.2.1. 瀑布模型
- 最早期的瀑布模型(Royce Waterfall Model)其实可以回溯,有试错过程。瀑布模型是一个家族,由简单的瀑布模型也有复杂的瀑布模型
- 问题和不足
- 形式化在扩展和可用性方面存在不足
- 瀑布模型重文档、慢节奏
- 左边才是真正的瀑布模型
4.2.2. 成熟度模型
成熟度模型:列出很多最佳实践,划分为5个等级,123低等级(眼前),45高等级(未来)
- 几乎可以描述所有“可以用过程描述”的事情
- level 1 开发相对混乱,依赖个人英雄主义,没有过程概念,救火文化盛行
- level 2 项目小组体现出项目管理特征,有项目计划和跟踪、需求管理、配置管理等
- level 3 公司层面有规范,项目小组可裁剪组织的规范
- level 4 构建预测模型,以统计过程控制的手段来管理过程
- level 5 继续应用统计方法识别过程偏差,找到问题根源并消除,避免未来继续发生类似问题
“项目进度落后20%,就要加班”是 level1/2/3, 只根据已经发生的事情来决策,没有模型只有数据,属于低等级的管理。
- 这里的20%是指团队整体觉得进度整体落后,只是感觉
分析
- CMMI是过程改进模型而不是软件过程或软件过程模型
- CMMI不是过程优劣的标准,也不适合用作公司之间的能力比较。CMMI表示的不是公司的绝对能力,刻画的是公司再满足它自己的业务目标的能力。
- 一线大公司很可能是CMMI一级。而初创公司可能比起大公司更能满足自己的商业目标。
- 虽然可以为了提高等级降低商业目标,但是招标时CMMI等级不是唯一标准。
- 商业目标相同时,可以使用等级比较,如选择供应商
- 为什么CMMI VS. Agile 是个伪命题?
- CMMI是软件过程改进模型,描述一个组织的过程管理从不成熟到成熟的路线图;大部分敏捷方法是软件开发方法,两者是不同性质的事物,说两者对立是不合适的。
PDCA模型
- 步骤
- 分析问题。找出问题
- 分析影响质量的原因
- 找出措施
- 拟定措施计划
- 执行措施,执行计划
- 检查效果,发现问题
- 总结经验,纳入标准
- 遗留问题转入下期PDCA循环
IDEAL模型
解决了软件组织在各种质量改进环境下的需要,包括软件过程改进周期中的五个阶段。
- I: Initiating 初始
- D: Diagnosing 诊断
- E: Establishing 建立
- A: Acting 执行
- L: Leveraging 调整
5. 服务化和网格化
5.1. 典型特征
- 软件应用特征
- 功能复杂,规模更大
- 用户数量急剧增加(这会带来什么问题)
- 快速演化和需求不确定
- 分发方式的变化(SaaS)
- 功能上线到发布时间很短,对质量要求更高
5.2. 典型软件过程和实践
5.2.1. 迭代式开发
- 迭代式开发:大型软件开发系统的开发过程也是一个逐步学习和交流的过程,软件系统的交付不是一次完成,而是通过多个迭代周期,逐步完成交付。
- 学习和交流:甲方迭代开发的过程中越来越熟悉软件系统,乙方越来越理解甲方的需求
迭代和增量的区别:迭代重点在学习和交流
TDD:测试驱动开发
5.2.2. 敏捷开发
雪鸟会议和敏捷宣言
- 个体和互动胜过流程和工具
- 可以工作的软件胜过详尽的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
- 尽管右项有其价值, 我们更重视左项的价值
- 没有第五项就是错的
代表方法
- XP(eXtreme Programing)
- 偏重与一些工程实践的描述,每周工作时间不超过40h,连续加班不超过两周;结对编程;测试驱动开发;持续集成
- Scrum
- 管理框架和管理实践
- 只有管理,没有技术
- Kanban
- 精益生产的具体体验
- 典型实践:可视化工作流,限定WIP,管理周期时间
- XP(eXtreme Programing)
敏捷方法具有的特征
- 小周期迭代
- 快速响应变更
- 价值交付
- 自动化
5.3. 开源软件开发方法
一种基于并行开发模式的软件开发的组织与管理方式
Linus定律:只要有足够的开发者和测试者,几乎所有问题都会被发现
代码管理:严格的代码提供社区审核制度
- 真正能对系统建立信心的是评审而不是测试
演化
- 内部开源:早期公司项目没那么多,时间没那么紧张
- 众包
6. 当前软件应用的典型特征
- 应用特征
- 进一步服务化和网格化(移动是主流)
- 用户需求的多样性进一步凸显
- 软件产品和服务的地位变化
- 错综复杂的部署环境
- 解决了数量的问题,但是有新的困难如容量预测
- 近乎苛刻的用户期望
- 开发特征
- 空前强大的开发和部署环境
- 盛行分享和开源
- 潜在支持获得长足进步(AI,大数据,云计算)
7. 问题
不属于软件开发的本质难题?
- 不可见性、复杂性、一致性、可变性
- 没有
质量
软硬件一体化阶段的典型实践
- Code and fix
- 标题: 02-历史与演变
- 作者: Charlie
- 创建于 : 2024-03-05 10:03:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/5e3ee645/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论