《测试驱动开发与设计模式》 适应并改进软件设计过程

1. 软件设计是一个小步走的过程

软件设计是对某个系统进行建模的过程,这是一个渐进完善、从不怎么了解到深入了解的过程。这是人类不断学习进步的一个例子。人的认识总是不够,总是一小步一小步往前走,软件设计过程也是一小步一小步走。接受这一点,就容易理解,测试驱动开发为什么能适应,并有效改进这个过程。

认识不够有两种:一是认识的广度不够,二是认识的深度不够。

2. 认识广度不够

广度不够就像“盲人摸象”,看到的只是局部。这部分是这样,那部分是那样,放到一起才看到全貌。

这跟“分而治之”看着像,但其实有很多不同。

“分而治之”是自上而下,先见到一个模模糊糊的全局,分拆后,再细化每个局部。在软件设计中这个策略是个让人难受的悖论。我们希望给所谓的全局划个边界,在局部之间再划个边界,然后再深入局部。但是,在深入局部之前,这些边界又是隐晦不明、不确定的。

测试驱动开发走的是“盲人摸象”的路,自下而上,看清每个局部,再拼起整个全局。整个过程中都不特意去界定边界,而是看到多少,就吸收多少,就构建多少。边界只是副产品,是水到渠成的结果,而全貌,只要一直往前走,它会自然而然、逐渐丰满起来。这里不需要纠结。

3. 认识深度不够

深度不够就像“雾里看花”,远看是那个,近看是这个,再拿到手上,可能又变点花样,甚至再成另外一个。

天文史上,从“地心说”到“日心说”就是这样的情况。“地心说”可以计算天体运行,但新的观测数据一出来,它就不能覆盖,只好一直打补丁,本轮加到80多个,计算特别复杂。后来“日心说”换了一个出发点,把同一个东西解释得井井有条。更精确的数据让科学家们看得更清楚,推动他们尝试更合理的设想。正是他们勇于改变固有的观念,勇于探索新的思路,才让理论更接近天体运行的实际情形。

测试驱动开发也经常有类似情况。拿到一个新模块,看着像是某个模式,那就套上去,或者跟以前哪个模块相似,那就抄过来。结果逻辑散乱,重复代码越来越多,总感觉别扭,硌得慌。这个时候,就是该抛弃成见、重新出发、尝试其他可能的时候。测试驱动开发鼓励尝试变更,鼓励寻找简洁明了的解决办法。因为它相信本体就该是那样。

4. 测试驱动开发鼓励开放心态

本质上说,软件设计是一门“解释”的科学,尊重本体的逻辑是一个当然的选择,所以驱动测试开发支持设计者开放心态,从不假设自己的想法完美无缺,随时准备聆听不一样的声音,随时准备调整设计,以便符合实际。这就是术语“拥抱变化”的含义。

参考资料

盲人摸象
http://www.putixin.com/continue/gushi/wy-mangren.htm
天文学发展的三个阶段:地心说、日心说、大爆炸说
https://baijiahao.baidu.com/s?id=1617450411088492650&wfr=spider&for=pc

相关链接

测试驱动开发与设计模式 - 为什么使用测试驱动开发
测试驱动开发与设计模式 - 从入门到精通
测试驱动开发与设计模式 - C++书籍及网站
测试驱动开发与设计模式 - 适应并改进软件设计过程
测试驱动开发与设计模式 - 让“理想结构”与“快速变更”并行
测试驱动开发与设计模式 - 提速 — 在纸上做细节设计
测试驱动开发与设计模式 - 开发实例一 DVR-POS库
测试驱动开发与设计模式 - 开发实例二 JSON过滤库
测试驱动开发与设计模式 - 开发实例三 rs_driver库

你可能感兴趣的:(《测试驱动开发与设计模式》 适应并改进软件设计过程)