笔者在一家日本企业里面从事软件开发工作。作为一家典型的日本企业,软件开发的流程显然是按着日本的软件工程方式进行的。同样作为一家日企,在很多方面和欧美企业有着截然不同的开发角度。这里想讨论的,就是对Review和对Test的一些看法
日本企业对review是十分看重的。他们认为review是解决bug最好的办法,在开发中甚至会采用过度review的办法。
比较典型的是我们开发课长的想法:既然现在在工业生产领域不是在产品制造出来之后通过测试来判断质量,同样的软件开发就不应该通过测试来保证质量,而应该通过反复的review,来保证代码的质量。在这样的思想指导下甚至于把review作为通过CMMI的标准。
我认为这里存在三点问题。
一,把软件开发等同于工业生产。这是绝对不正确的。软件开发是一个高智力的活动,而不是零件的生产,每个部件都一样。在所谓构件时代没有大规模应用的时候,起码现在的软件更像一种工艺学,而不是工程学其含义就是,软件开发,更多的是一种渐进成熟的过程,代码从核心草案(有时候我们称之为详细设计)到最终成品(有时候我们称之为release)是要通过不断的测试才能渐进成熟。所谓测试,是把软件模块放到真是或者模拟真实的环境中去运行才能知道答案,这有点像科学研究。而review,更多的像是纸上谈兵。让一群没有参与代码开发的人对着陌生的代码看,要发现隐藏的bug?天方夜谈。
二,Review更像是一种作坊的产物,没有客观的评价标准,没有自动化工具,在大型项目,动辄几万行的代码中去寻找可能的bug,显然是不太可能的。如果硬要把软件工程比作建筑工程的话,review就好像用肉眼去观察每一块砖,每一面墙,只能有主观的影响,而真正的需要检验质量的时候,需要的是尺子和吊线,当使用这些工具的时候,对应于软件开发,就可以称为测试了。
三,现代软件开发中,所提倡的XP方法,都是以测试优先的,包括微软在内,所采用的开发方式也是测试优先,他们有专门的测试工程师,却没有Review工程师。死抱着Review的开发态度,只能让软件开发走入死胡同。