3.2 动态测试技术
3.2.1 动态测试的特点
动态测试是使用测试数据运行程序并分析输出以发现缺陷的过程。根据测试理论,如果测试数据满足一定要求,那么通过测试可以发现程序中的大多数缺陷,并且可以评估程序质量(如正确性、可靠性等)。
动态测试具有以下特点。
第一,实际运行被测试程序,得到程序运行的真实情况、动态情况,进而进行分析。这是动态测试的优势,也带来一定的要求。实际运行被测试程序需要运行环境、输入数据及输出处理手段,有时还需要运行控制手段。尤其对于软硬件综合系统,这类系统中的软件一般具有如下特点:具有极高的专用外部设备处理要求,和硬件联系紧密;通常要求强实时性;通常运行于特定或具有特殊条件的环境,与交互环境相关;安全性要求高。因此,要建立一个满足具有上述特点软件要求的运行环境实属不易。此外,还需要输入数据和运行控制手段,就更增加了难度。
第二,必须生成测试数据来运行程序,测试质量依赖于测试数据。
第三,生成测试数据、分析测试结果工作量大,开展测试工作费时、费力。
第四,动态测试涉及多方面的工作,涉及的人员多、数据多、设备多,要求有较好的管理和工作规程。
动态测试包括三部分核心内容:生成测试数据、运行程序与验证程序的输出结果。围绕上述核心内容还有文档编制、数据管理、操作规程化及工具应用等方面的工作,其中最重要的内容是生成测试数据的策略。测试数据准确、完整的名称应为测试用例,包括输入数据和预期结果。一般在说到测试用例生成时,由于预期结果构造的困难性,因此侧重或仅生成输入数据,并称其为测试数据,下面的讨论即按此约定进行。
生成测试数据的策略有黑盒测试和白盒测试,它们共同构成动态测试技术的基本内容。
3.2.2 黑盒测试和白盒测试
黑盒测试(Black-Box Testing)是一种按照需求规格说明设计测试数据的测试技术。它把程序看作内部不可见的黑盒,测试者完全无须顾及程序内部的逻辑结构和编码结构,也不用考虑程序中的语句及路径,只需了解程序输入和输出之间的关系,或者程序功能,完全依靠能够反映这一关系和程序功能的需求规格说明确定测试数据,判定测试结果的正确性,即所依据的只是程序的外部特性。图3.2所示为黑盒测试的示意图。
图3.2 黑盒测试的示意图
使用黑盒测试技术的典型测试类型包括功能测试、强度测试、随机测试等。因为黑盒测试从程序功能需求出发,所以黑盒测试有时也被称为功能测试。但需要明确的是,功能测试使用黑盒测试技术,而黑盒测试除包括功能测试以外,还包括其他基于需求规格说明的测试,如强度测试。
白盒测试(White-Box Testing)是一种按程序内部的逻辑结构和编码结构设计测试数据的测试技术。采用这一测试技术,测试者可以看到被测试程序的内部结构,并根据其内部结构设计测试数据,使程序中的每条语句、每个条件分支、每条路径都在程序测试中受到检验。所以也称白盒测试为结构测试。图3.3所示白盒测试的示意图。
图3.3 白盒测试的示意图
白盒测试可以不考虑程序的需求规格说明,但是需要有设计说明作为依据,单纯从程序源代码出发设计测试数据会降低白盒测试的有效性。
必须说明的是,无论是黑盒测试还是白盒测试,都不可能对程序进行完整、彻底的测试。黑盒测试从输入数据出发验证功能,除非进行穷举,否则不可能进行完整、彻底的测试。白盒测试从程序结构出发,由于程序结构的复杂性,路径条数本身有时是不能确定的,即使确定下来也往往是天文数字,所以要测试程序的全部结构(每条路径)也是不现实的。另外,黑盒测试基于需求规格说明,如果需求规格说明有误,则通过黑盒测试是发现不了的。白盒测试基于逻辑结构,如果程序的逻辑结构有错误或遗漏,则通过白盒测试也是无法发现的。表3.1所示为黑盒测试与白盒测试的优缺点对比,介绍了它们各自的能力范围,各自的不足,以及它们的互补关系。黑盒测试与白盒测试能够发现的错误如图3.4所示。
表3.1 黑盒测试与白盒测试的优缺点对比
图3.4 黑盒测试与白盒测试能够发现的错误