5.2.1 软件测试方法概述
  软件测试的方法和技术是多种多样的,可以从不同的角度加以分类。从是否需要执行被测软件的角度来看,可分为静态测试和动态测试;从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为白盒测试和黑盒测试。

静态测试与动态测试
  静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测,主要方法包括:
  (1) 人工测试
  人工测试是指不依靠计算机而靠人工审查程序或评审软件。人工审查程序侧重于对编码质量的检验,而软件审查除了审查编码还要对各阶段的软件产品进行检验。人工测试可以发现计算机不易发现的错误,据统计,可以有效地发现30%~70%的逻辑设计和编码错误,可以减少系统测试的总工作量。
  (2) 计算机辅助静态分析
  计算机辅助静态分析是指利用静态分析工具对被测试程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种错误和可疑的程序构造,如错误地使用局部变量和全局变量、不匹配的参数、潜在的死循环以及不会执行到的代码等。另外,这种测试还可以提供一些间接涉及程序欠缺的信息、各种类型的语句出现的次数、变量和常量的引用表、标识符的使用方式、过程的调用层次及违背编码规则等。
  动态测试是指通过运行程序发现错误,一般意义上的测试主要是指动态测试。为了使测试发现更多的错误,需要运用一些有效的方法,一种是黑盒测试,即测试产品的功能,一种是白盒测试,即测试产品内部结构及处理过程。

黑盒测试与白盒测试
  黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有功能的情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。黑盒测试方法主要有等价类划分、边值分析、因果图、错误推测等,主要用于软件确认测试。


  黑盒测试着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。理想情况下,黑盒测试应该是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
  白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基本路径测试等,主要用于软件验证。


  白盒测试全面了解程序内部逻辑结构、对所有逻辑路径进行测试。理想情况下,白盒测试应该是穷举路径测试,在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。然而贯穿程序的独立路径数是天文数字,但即使每条路径都测试了仍然可能有错误。
  第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
  第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
  第三,穷举路径测试可能发现不了一些与数据相关的错误。

  所以,黑盒测试与白盒测试都不能使测试达到彻底,为了用有限的测试发现更多的错误,需要精心设计测试用例。选择测试用例是软件测试人员最重要的一项任务。不正确的选择可能导致测试量过大或者过小,甚至测试目标不对。准确评估风险,将不可穷尽的可能性减少到可以控制的范围是成功的诀窍。