话说2006年7月的一天,笔者写了一篇题为“软件测试架构师——众里寻她千百度”的博客,文中称网友bywind 给我们讲了一个有趣的故事,也可以说,打了一个有趣的比方。
周星驰主演的《武状元苏乞儿》末尾有这样一段对话—
皇帝:你丐帮弟子几千万,你一天不解散,叫朕怎么安心?
苏乞儿:丐帮有多少弟子不是由我来决定的,而是由你决定的。
皇帝:我?
苏乞儿:如果你真的英明神武,使得国泰民安,鬼才愿意当乞丐呐!
言外之意就是说:如果皇帝干得好,人民没有什么疾苦,乞丐自然就少了,丐帮自然就小了。 皇帝要阻止丐帮的壮大,靠的不是官府差役,也不是加重刑罚,而是靠治国,把天下治理得井井有条,民富国强,丐帮自然就被削弱了!
这也好比软件开发和测试的关系,皇帝代表开发的一方,苏乞儿的丐帮就代表众多的Bug。如果开发人员把事情做好了,哪有那么多缺陷? 如果开发架构师真能把系统设计得很完美,哪需要测试架构师呢?
在启动一个软件项目时,人们经常会问:用户要求是什么?用户真正想要哪些功能?但很少有人问及系统的非功能特性,用户自身对非功能性需求也很模糊,提出的要求可能非常主观,例如,“这个系统必须很快”。但是,如果非功能性需求模糊、主观,那就无法验证。不能验证,就不能说明系统是有效的。如果需要得到验证,那非功能性需求应能通过量化指标来表示,具有可度量性和可测试性。而影响软件系统的非功能特性的关键元素是系统的架构,即在很大程度上取决于系统内部结构是如何被组织起来的,例如有没有冗余组件、组件接口是否单一、是否为数据存取提供了高速缓存机制等。只有软件系统能很好地满足非功能性需求,包括性能、可靠性、可扩充性、兼容性等,我们才能说,软件系统的架构设计是成功的。
对系统架构的验证,我们也不能等到系统都完成以后才开始进行。因为如果在最后一刻发现重大问题,再推倒重来,重新设计、重新编程,那开发成本就很大,而且更糟糕的是,开发周期会大大延长,系统不能及时交付,造成合同失约,经济和信誉上会遭受重大损失。所以,系统架构的先期验证必须在设计时就进行。