软件设计:从专业到卓越
张刚
资深技术专家
374 人已学习
立即订阅
软件设计:从专业到卓越
15
15
1.0x
00:00/00:00
登录|注册

第 11 章 让设计持续演进

演进是软件的本质特征。在人类通过智力劳动创造的一切事物中,软件大概是最为独特的了。这不仅是因为软件很复杂,更重要的是软件具有可变更和可演进特征。“软件”这个名字本身,已经充分凸显了这一点——软件应该是“软”的。
不过,如果设计方法不当,软件就可能一点也不“软”,面对纷至沓来的变更需求,往往很难轻松适应。而且随着软件的持续“生长”,一些在初期看起来写得很好的代码,很快变成了人见人厌的“遗留代码”,变得难以理解、维护和扩展。
持续演进必须成为软件内建的能力。为了达成这个目标,本章将从如下三个方面讨论演进式设计。
软件设计的演进本质:为什么必须用演进式思维来设计软件?在 11.1 节,我们将讨论用“生长”思维开发软件的重要性。
简单的设计才是易于演进的设计:什么样的软件特别适于演进呢?或许和有些读者想的不一样——一个系统如果做了很多预先设计,那么它在面临新的场景时反而非常脆弱。在 11.2 节,我们将介绍简单设计,并把它和大规模预先设计比较。
演进式设计的思维方法和实践:演进式设计本质上是一种思维方法,是一种持续的探索过程和适应过程。11.3 节要介绍的重构和 11.4 节将要介绍的测试驱动开发都是重要的演进式设计技能。
熟悉极限编程[7]的读者应该已经发现,简单设计、重构、持续集成、测试驱动开发、代码集体所有制都是来自极限编程的实践,确实如此。从技术实践角度看,极限编程的根本出发点就是演进式设计。

11.1 软件设计的演进本质

软件设计的本质是演进,不过最开始人们并不是这样认为的。软件工程之所以被命名为工程,很大程度上是因为向成熟的工程领域学习。工程是按照严格的步骤执行的一系列活动。比如,我们可以把软件设计类比为建筑设计,那么很自然地就会想到:首先进行需求分析,然后进行架构设计,接下来严格按照设计开始建造,建造完成后进行项目验收,之后就进入了维护阶段,整个工程过程也就完成了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了软件设计的演进本质和简单设计的重要性。持续演进是软件的根本要求,而简单设计有利于软件的演进能力。简单设计源自极限编程,强调保留必需的设计元素,易于沟通和理解,没有重复,以及最少的代码元素。重构是演进式设计的发动机,能够让简单设计始终保持简单,并且随时随地都在演进。文章还警示了破窗效应在软件开发中的普遍存在,强调了重构如何驱动设计演进。通过对杨辉三角代码的重构示例,展示了重构如何提升设计质量和程序员抽象能力。此外,文章还介绍了代码坏味道作为重构信号的重要性,以及熟悉重构手法和使用领域模型牵引重构的重要性。最后,文章还探讨了测试驱动开发的基本步骤和其在设计演进中的作用。整体而言,本文强调了在软件设计中采用柔性设计和支持演进的机制,以适应业务的持续演进。文章还介绍了持续集成的概念,强调了持续集成的本质是一种以质量为基准的沟通方式,分为空间和时间两个维度。在空间维度上,持续集成要求频繁提交,且始终保持主分支的工作正常。在时间维度上,持续集成要求每前进一小步,就立即运行自动化测试。文章还介绍了持续集成服务器的作用和遵循持续集成的工作规范。总的来说,本文强调了软件设计的持续演进,以及通过简单设计、重构、持续集成和测试驱动开发等工程实践,实现设计的持续演进。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计:从专业到卓越》
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部