3.1 代码检查与走查
代码检查、走查以及可用性测试是三种主要的人工测试方法。这些测试方法可以应用在软件开发的任何阶段,包括在一个应用程序编码基本结束或者每一个模块(单元)编码结束之后(阅读第5章关于模块或单元测试的更多内容)。本章将主要介绍前两种针对代码的(白盒级别的)测试方法。在第7章我们会讨论可用性测试。
由于代码走查和检查这两种方法具有很多共同之处,所以在这里我们将讨论它们的相似点,而它们的不同之处将在后续章节中介绍。
代码检查与走查都要求人们组成一个小组来阅读或直观检查特定的程序。无论采用哪种方法,参加者都需要完成一些准备工作。准备工作的高潮是在参加者会议上进行的所谓“头脑风暴会”。“头脑风暴会”的目标是找出错误来,但不必找出改正错误的方法。换句话说,是测试,而不是调试。
代码检查与走查已经广泛运用了很长时间。我们认为,它们的成功与本书第2章所述的一些原则有关。
在代码走查中,一组开发人员(三到四人为最佳)对代码进行审核。其中只有一人是代码的作者。因此,代码走查的主要工作是由其他人,而不是作者本人完成的,这和软件测试的第2原则,也即“软件编写者往往不能有效地测试自己的软件”相符合。(参见第2章,表2.1,本书将陆续涉及表中归纳的10条测试原则。)
代码检查与走查是对过去桌面检查过程(在提交测试前由程序员阅读自己程序的过程)的改进。与原方法相比,代码检查与走查更为有效,同样是因为在实施过程中,除了软件编写者本人,还有其他人参与进来。
代码走查的另一个优点在于,一旦发现错误,通常就能在代码中对其进行精确定位,这就降低了调试(错误修正)的成本。另外,这个过程通常发现成批的错误,这样错误就可以一同得到修正。而基于计算机的测试通常只能暴露出错误的某个表症(程序不能停止,或打印出了一个无意义的结果),错误通常是逐个地被发现并得到纠正的。
在典型的程序中,这些方法通常会有效地查找出30%~70%的逻辑设计和编码错误。但是,这些方法不能有效地查找出高层次的设计错误,例如在软件需求分析阶段的错误。请注意,所谓30%~70%的错误发现率,并不是说所有错误中多达70%可能会被找出来,而是讲这些方法在测试过程结束时可以有效地查找出多达70%的已知错误。请记住,第2章告诉我们,程序中的错误总数始终是未知的。
当然,可能存在对这些统计数字的批评,即人工方法只能发现“简单”的错误(即与基于计算机的测试方法相比,所发现的问题显得微不足道),而困难的、不明显的或微妙的错误只能用基于计算机的测试方法才能找到。然而,一些测试人员在使用了人工方法之后发现,对于某些特定类型的错误,人工方法比基于计算机的方法更有效,而对于其他错误类型,基于计算机的方法更有效。这就意味着,代码检查/走查与基于计算机的测试是互补的。缺少其中任何一种,错误检查的效率都会降低。
最后,不但这些测试过程对于测试新开发的程序有着不可估量的作用,而且对于测试更改后的程序,这些测试过程具有相同的作用,甚至更大。根据我们的经验,修改一个现存的程序比编写一个新程序更容易产生错误(以每写一行代码的错误数量计)。因此,除了回归测试方法之外,更改后的程序还要进行这些人工方法的测试。