标签:
天有其时,地有其材,人有其治,夫是之谓能参。—《询子》
读中国古代哲学,首先感受到的是它的整体思维。
例如天地人一体观,讲究在看待任何事物时,都要把它们放置于天、地、人三大要素构成的宇宙框架中去分析、衡量,以寻找他们的本质和规律,预测它们的未来变化。
基于中国古代哲学的中医也是如此,认为为医之道,应该上知天文,下知地理,中知人事,综合考虑自然环境、社会环境、个人气质,把人体地生理、病理变化放在天、地、人三大要素构成的宇宙框架中去分析和权衡,以寻找其本质和规律,预测其发展变化。
说到整体思维,我就想到了一种非常早期的软件工程模型-瀑布模型。
瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动。这六个步骤必须按照它们的顺序严格地依次进行。但如果发现前面的某一步出现了错误,就不得不返回到那一步。
客户需求 |--(分析)--(设计)--(编写)--(测试)--(交付)-->最终产品
由此可见,越前面的步骤,对整个生命周期的影响就越大,而且对最终结果的影响也越大。这就使得在前面分析设计的过程中,一定要尽量地小心谨慎,思虑万全。(当时的分析师、设计师们一定压力山大 :-( )
然而即使有着这样优质的分析与设计为生命周期打前锋,但这样的模型仍然不受欢迎,因为它固有的缺点。
1.过程中缺少与客户的交流,如果产品偏离了客户的目标,要等到交付的时候才能发现
2.发现上一阶段的问题,不得不返工
3.生命同期的过程中,如果客户想看看半成品是否满足需求,却是很难做到的
4.过于倚重分析设计阶段,对于暂未暴露的问题难以应对
难道这种全局观的思维方式对计算机软件开发过程不适用吗?
上文说过,中医要求通过各个方面去考察,从整体上把握人体的病理状态与趋势。既然得到了病理状态和趋势,就要对证施治了。他会把施治过程所有要用到的方法与药物一次性列出来,告诉病人第几天吃什么,第几天做什么,等到把这一系列整事情做完,就痊愈了吗?
病人 |-- (治疗1)--(治疗2)--(治疗3)-->健康的人
也许神人能做到,但作为医生不可能也不允许这么做。
医生的通常做法是这样的:
医生结合病人的反馈,进一步从整体上辨证及施治。
这样的好处很明显:
- 只是对短期目标施治,相对来说简单,容易做过
- 如果诊断失误或出现没有预料到的问题,能够及时调整策略
看上去刚好能解决瀑布模型的问题,我们也把整个工程分阶段,每一个阶段是一个小瀑布。每次只选择当前最需要完成的小瀑布并把它做好。这样一直持续迭代下去,当每一个小瀑布完成,整个工程也就完成了。这样,每次只需要对小瀑布做分析设计,不是简单的多?
客户需求 |--(目标1)--(目标2)--(目标3)--最终目标
那么问题来了,部分+部分+……+部分=整体?这等式成立吗?
不一定。所有局部都是最优并不一定最终结果是最优的。
再仔细观察辨症论治的过程,发现每次重新辨证的时候,不但要分析病理状态和趋势,还要结合上一个迭代同期中病人反馈的结果。
这就是持续集成的过程。
把持续集成与持续迭代运用于瀑布过程中,就成了这样:
瀑布模型只是一个简单的例子,瀑布模型已经不再流行,而各种更合适的模型横行天下。
这种分析与改进瀑布模型的文章已没有新意,对软件工程来说也没有意义。
以下才是我想要表达的观点:
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/mishifangxiangdefeng/article/details/49405841