摘要:Eric Gunnerson 介绍了事先测试开发的思想,并提供了一个实用实例来演示如何在您自己的应用程序中应用它。
本专栏末尾有我的简介,如果您读过的话,就会知道我在担任程序经理之前曾出任 C# 编译器的测试组长,而在此之前是 C++ 编译器的测试组长。这些工作经历使我对分析和尽量避免软件错误特别感兴趣。
要减少软件中的错误数目,方法之一就是拥有一个专业的测试组,其工作就是尽一切可能使软件崩溃。不幸的是,如果拥有测试组,那么即使是经验丰富的开发人员,也会倾向于花费较少的时间来保证代码的可靠性。
软件界有一句俗语:“开发人员不应该测试他们自己的代码”。这是因为开发人员对自己的代码了如指掌,他们很清楚如何采用适当的方法对代码进行测试。尽管这句俗语很有道理,但却忽略了非常重要的一点 - 如果开发人员不对自己的代码进行测试,又如何知道代码能否按照预期的方式运行?
简单说来,他们根本无从得知。开发人员编写那种运行不正常或只在某些情况下运行正常的代码是一个严重的问题。他们通常只测试代码能否在很少的情况下正常运行,而不是验证代码能够在所有情况下均正常运行。
发现软件错误
发现软件错误的情况有很多:
1、由首次编写代码的开发人员发现。
2、由尝试运行代码的开发人员发现。
3、由组中的其他开发人员或测试人员发现。
4、作为产品大规模测试的一部分。
5、由最终用户发现。
如果在第一种情况下发现软件错误,则修复错误比较容易,成本也很低。情况越靠后,修复软件错误的成本就越高;修复一个由最终用户发现的软件错误可能要耗费 100 或 1000 倍的成本。更不用说用户通常因为软件错误导致工作无法继续,而一直等到下一个版本才能解决问题。
如果开发人员能够在编写代码期间发现所有的软件错误,那就再好不过了。为此,您必须编写能在编写代码时运行的测试。有一种很不错的方法,它恰好可以做到这一点。
事先测试开发
所谓的事先测试开发是指在编写代码前编写测试。如果所有测试均正常运行,便可以断定代码运行正常;添加新功能时,这些测试会继续验证您是否破坏了代码的任何部分。
此概念于 20 世纪 90 年代初诞生于 Smalltalk 世界,Kent Beck 在当时编写了 SmalltalkUnit。在过去的几年中,大部分环境都具备了单元测试工具,其中有一个很出色的适用于 .NET Framework 领域的工具,即 nUnit(英文)。
文章来源于领测软件测试网 https://www.ltesting.net/