软件的真实质量

https://www.joelonsoftware.com/2007/12/03/talk-at-yale-part-1-of-3/ 中文摘自阮一峰翻译的《软件随想录》

程序员总想着不断提高效率,不断地将各种事情自动化。为了让问题可以被自动化解决,擅自修改问题的定义,企图用一个简单的定义来代替真实的定义。我们可以在形式上将问题A转换成为问题B,但是必须非常小心,必须确保两个问题是等价的,而不是简化的。

关于软件质量就是这么一个例子。我们讲软件质量问题转换成为自动化测试,然后认为两个问题是完全等价的,认为只要通过了自动化那么软件质量就是100%合格。但是用户体验算不算软件质量呢?用户体验有没有经过自动化测试呢?


说到这里就引出了我职业生涯中的一个重要发现。周而复始的,你会注意到,当程序员遇到遇到问题的时候,他们会把问题重新定义,使得这些问题可以用算法来解决。这样一来,问题转换成他们可以解决的形式,但实际上,那些问题是一种“琐碎”的问题,也就是说程序员解决的只是问题的某种外在形式,而并没有真解决真正的问题,原因是这些问题非常难,不是表面的算法可以概括的,下面我就给你举个例子。

有一种说法,你们以后会经常听到,那就是软件工程或多或少正在遭遇质量危机。我本人是不同意这种说法的,同生活中的其他商品相比,大多数人用到的大多数软件质量好的出奇。但是这种说法指的不是这个意思,它所声称的“质量危机”涉及许多观念和研究,目标就是如何才能生产出更高质量的软件。从这个角度上看,计算机界可以分为技术派(geek)和务实派(suits)两大类。

技术方案想要把质量问题用软件自动处理。为了这个目的,他们发明了单元测试(unit testing),测试驱动开发方法(test-driven development),自动测试(automated testing),动态逻辑等。目的只有一个,就是“证明”程序中没有错误。务实派并不真的关心质量有没有问题,只要有人愿意出钱购买软件,他们才不想关心代码中有没有错误。当然,在技术派和务实派的大战中,务实派是获胜的一方,因为他们控制了公司的预算。老实说,我不觉得这是一件很糟糕的事。务实派认识到,消灭软件代码中的错误是一个边际报酬递减的事件。一旦软件的质量达到了一定的水准,能够用来解决特定的问题,那么就会有用户从这个软件中获益,用户也会因此愿意出钱购买。

同时,务实派对于“质量”有一个更广义的定义。你尽管大胆的想象,这个定义完全符合利益原则。所谓软件的“质量”,就是看它能为大家带来多少奖金,奖金越多,也就表明软件的质量越高。出人意料的是,“质量”的这种定义有深得多的内涵,远不止于写出没有错误的代码。举例来说,这个定义很看重为软件添加更多的功能,使得它能为更多的人解决更多的问题,而技术派很可能会嘲讽这种类型的软件为膨胀件(bloatware)。这个定义还要看重将软件做得更美观,一个好看的软件就是比一个难看的软件销量更好。这个定义还看重程序是否能使用户感到很愉快。基本上这个定义就是让用户自己来表达什么是软件的质量,让用户自己来决定某一个程序是否符合他们的需要。

现在回过头来再看技术派,他们只是对狭义的技术方面的质量感兴趣。他们只关注从代码中能看的出来的东西,而不关心用户将会怎么判断。他们是程序员,所以会想让生活中每一件事情都自动完成,因此很自然的,他们也想自动完成QA过程,这就是单元测试的来历。不要误解我,单元测试本身并不坏,当你运行完所有的单元测试,就可以机械实例“证明”一个程序是“正确”的。但是,这样做的不利之处是,任何不能被自动测试的东西,就会被排斥在质量的定义之外,变成与软件质量无关。即使我们明知用户更喜欢看上去很漂亮的软件,但是因为没有办法自动评估一个软件看上去到底有多漂亮,所以软件的美观就被排斥在自动化运维过程之外。

老式的微软公司测试员要做很多事情,包括检查自己是否协调和清晰,检查对话框中控制按钮的位置是否合理和对齐,检查用户操作时屏幕是否闪烁,观察用户界面的流程,考虑软件是否容易上手,判断用词是否合适,评估软件的表现,检查所有错误信息的拼写和语法。他们花大量的时间去确保软件的不同组成部分中用户界面都保持一致,因为协调的用户界面会让用户更容易上手。

所有这些事情,没有一件可以用程序自动完成。微软公司向自动测试靠拢的政策导致的后果之一就是,windows vista发布出来的时候,这个产品是极端不协调的,很多细节处都没有处理好,许许多多非常明显的问题没有解决,最终产品就上市了。这些问题中,没有一个是自动化脚本进行软件测试时定义的“错误”,但是他们中的任何一个都会让用户产生一种种的看法,即windows vista不如windows xp. 在这里,技术派的质量定义压倒了务实派的定义。我完全相信,在微软内部,现在所有的自动化脚本都显示软件100%合格,但是这又有什么用呢?此刻差不多每一个技术评论家都建议用户,只要有可能,就继续使用windows xp。他们没有人写过这样一个自动化测试,就是去测试window vista有没有给用户提供一个令人信服的从windows xp升级的理由。