课程-演进式设计
软件技术演进趋势
演进式设计
其中代码中开发占用比例在1/6,更多的时间用在需求分析、软件设计、软件测试、软件维护
计划式设计的假设漂移:
- 软件变化频率越来越快,需求可预测性变差
- 软件规模越来越快,解决问题复杂
- 软件技术、工程和工具变更变亏啊
沿用原来的方式:
- 设计人员为了得到完美设计
- 过度设计
- 设计难产
- 设计和开发由不同团队完成
- 沟通成本
- 再设计
- 反馈周期变长
- 需要进行大重构
长生命周期系统软件,面临问题
- 底层软件
- 平台软件
- 业务软件
- 长生命周期
演进式设计
- 适度预先设计
- 保持设计合理状态
设计能力要求:
- 保持简单:简单设计原则
- 完善测试:
- 及时重构:小步安全及时重构
- 设计能力:保持软件灵活变化
- 快速反馈:迭代开发、持续集成交付
- 延迟决策:预防过度设计,第二次需求时
实战演练
简单设计
思考什么是好的“软件设计”
- 软件>>>满足客户价值>>>>收入
- 效率和成本
成本:
- 内在成本
- 偶发成本:
内在成本:
printf(“hello world”)
偶发成本:遍历字符串,输出对应的字符
重复带来偶发成本:
- 确保一致性的成本
- 散弹式修改
- 测试范围扩大
简单设计的原则(重要程度依次降低):
- 通过所有测试,即满足客户需求
- 尽量消除重复,即代码可复用程度高
- 尽可能清晰表达,软件易于理解
- 没有冗余,避免过度设计