白盒测试技术综述
x=4,y=5,z=11 这个测试用例包括了一个判断均取真值的情况一个取假的 情况,这样继续设计测试用例就需要包括一个判断均取假 值的情况以及另一个判断取真值的情况,故而 2.x=2,y=5, z=5 判定覆盖较语句覆盖更为的完善,因为每个判定的分 支都执行过了,故而满足了语句覆盖,但是并没有执行过 两个条件均取真值的情况,因而并不充分,所以有了条件 覆盖较为完善得设计测试用例。 (3) 条件覆盖 上述讲到判定覆盖也不是太充分,所以条件覆盖指的是要 使判定表达式的各个条件均分别取真值或假值个至少一次。 分析上述实例可以得到共有四个条件,,分别为 X>3, Z<10, X=4, Y<5, 根据条件覆盖可以得到三个测试用例分别为 1:x=4,y=6, z=5; 2:x=2,y=6,z=5,; 3:x=4,y=5,z=15; 这三个测试用例覆盖了上面的四个条件,在执行的过程中 我们会发现这三个测试用例虽然满足条件覆盖,但是第二个判 断表达式并没有取过假值,故而我们发现条件覆盖并不一定能 过包含判定覆盖,这种覆盖方式也同样不充分,所以有一种新 的覆盖方式,将判定覆盖于条件覆盖结合在一起使用使程序的 测试更加完善。 (4) 判定条件覆盖 上述中条件覆盖的测试用例并没有将判定覆盖包含在内, 所以在设计测试用例的时候让它同时满足判定覆盖以及条件覆 盖,这样的方式较前两种更为充分一些 针对上述的实例我们可以设计测试用例为 1:x=4,y=6, z=5; 2:x=2,y=5,z=15,; 这两个测试用例包含了四个条件各自取一次真值一次假值
代码的检查主要通过桌面检查、代码审查、走查等方式来 检查代码和设计的一致性、代码的可读性、逻辑表达的正确性 等等。
桌面检查通常都是由程序的开发人员进行的,由于他们对 编写的代码理解程度高,往往能发现在编码过程中出现的一些 问题。代码审查由测试人员以及开发人员一起组成审查小组, 根据一系列的文档,通过分析代码以及文档来对代码进行测试, 发现其中出现的缺陷和错误。走查则是分析代码的逻辑运行来 设计一些测试用例,从逻辑的角度来对代码进行测试。
Keywords Software White box testing Logic-cov不断发展,软件产业同样得到了飞速的 发展,甚至在发展的速度上超过了硬件。而伴随着发展如此之 快的软件产业,软件测试这一行业也逐渐的发展了起来,软件 测试,顾名思义就是对做的软件来进行测试的,发现软件存在 的一系列缺陷与错误,来确保软件的质量。在软件的生产过程 中,代码的编写人员有时随机地也会输入一些输入值,通过输 出值来观察代码的正确性,由于输入值的数量少以及随机性, 往往检测不出代码的一些缺陷与漏洞,效率低下。软件测试就 是采用科学的方法,用较少的测试用例、时间以及人力资源来 检测出软件中潜在的缺陷以及错误。在软件测试中有两种基本 的测试方法,黑盒测试以及白盒测试。这里先来说说白盒测试 的一些测试技术。
计算机应用与软件 程杰俊:白盒技术综述
白盒测试技术综述
程杰俊
1(南昌航空大学软件学院 江西 南昌 230063)
摘 要 白盒测试又称为透明盒测试,与黑盒测试一样为软件测试技术中最基础的测试技术,在软件生命周期中扮演着重要的 作用,是软件质量保证的一个重要手段。白盒测试主要根据程序内部的工作过程来发现缺陷,是按照程序内部的结构测试程序, 用来检验程序的各条通路是否都能正常工作。白盒测试可分为静态测试以及动态测试,静态测试不运行程序,用于纠正程序在描 述、表示以及规格上的错误。动态测试主要验证程序在检查状态下是否会发生错误。动态测试技术有路径测试、程序插桩以及逻 辑覆盖。其中逻辑覆盖尤为重要,本文会较为详细的表述逻辑覆盖等一些白盒的测试技术。
关键词 白盒测试 软件质量保证 逻辑覆盖
WHITE BOX TESTING SUMMARIZE
Cheng Jiejun
(Nanchang Hangkong University Software College, Jiangxi Nanchang 230063)
Abstract White box testing and black box testing is fundamental for software testing, Software testing is important for software life cycle, Test outside of software is black box testing , Test outside of software is white box testing, White box testing main finding defects according to the procedures of internal work process, Inspection procedures of various pathways whether can work normally. White box testing can be divided into static testing and dynamic testing, Dynamic testing can be divided into logic-coverage testing and path testing coverage and Program Instrumentation. In this article will focus on logic-coverage.
2 白盒测试
2.1 静态测试
在白盒测试里可以分为静态测试以及动态测试,静态测试 不需要程序运行,它是根据对程序源代码的分析,以及设计规 格书、常见的错误清单等一系列文档,分析设计一些测试用例, 使软件在逻辑运行,通过测试人员对逻辑输入输出进行分析, 从而发现软件的缺陷和错误。
静态测试不需要软件的运行,所以最常见的静态测试即为 编码过程中编译器来检查语法错误,静态测试里有代码的检查、 静态结构的分析等。
由图可以得到有三条独立的路径 3 7 11,3 5 7 11, 3 7 9 11 有两种得到路径总数的方法,其一按照公式环路的复杂性 为: V(G)=E-N+2 其中 E 为边的数目,N 为结点数。其二按照公式: V(G)=p+1 P 为控制流图里面判定结点的数目。环路的复杂性为构成 独立路径的上界。即环路复杂性为多少即独立路径有多少条。 故而能够设计三个测试用例来进行测试: 1:x=2 y=3 z=4 ; 2:x=5 y=3 z=4 ; 3:x=2 y=6 z=15; 这三组测试用例满足路径测试 通过这个实例我们了解了各种的测试方法都不是完全完 备的,如何正确地选择方法来设计优质的测试用例是每个测试 人员所需具备的素质,在合适的案例里选择合适的方法,使得 设计的测试用例足够优质,以尽可能少的测试用例来发现程序 中所出现的缺陷。
通过静态测试能够发现一些代码,编码风格以及一些逻辑 上的错误。
计算机应用与软件
2.2 动态测试
动态测试是设计一些测试用例运行程序,根据输出的结果 来分析程序中存在的一些问题,不同于黑盒测试,动态测试是 先分析代码,根据代码来设计测试用例,发现程序存在的逻辑 错误等。动态测试方法主要有:程序插桩、逻辑覆盖、路径测 试等方法。
4 结论
白盒测试在软件测试里是很重要的一项测试技术。能够发 现代码中存在的一些错误,白盒测试技术较黑盒测试技术较为 麻烦,但是往往能够发现一些错误,在软件测试中应用较多, 虽存在一些技术性,却不可或缺。白盒测试的一些方法往往需 要测试人员对代码了解程度较高,对程序的结构有较为深入的 了解,由于程序内部逻辑的不确定性因素较多我们不能够将每 一种可能都给做成一个测试用例,利用白盒测试的方法能够以 较少的测试用例来发现较多程序存在的错误。白盒测试技术只 是测试程序内部的错误,并没有测试需求是否完整,所以通常 情况下需与黑盒测试结合在一起,这样才能更好地发现程序的 缺陷,从而保证软件的质量。
程杰俊:白盒测试技术综述
的情况,同时也包括了判定覆盖的要求,故而判定条件覆盖更 为的充分一些,看上去条件覆盖更为充分,实则不然,在判定 表达式 X>3&&Z<10 里,当 X 不满足条件,即 X>3 取假时判定 表达式即取假值,根本不管 Z 的取值,所以并没有判断 Z 的值, 这时程序不能发现一些逻辑的错误了,同样判定条件覆盖也同 样不够充分。
图 1 程序流程图
(1) 语句覆盖 设计若干个测试用例,使得程序的每一条可执行语句都能 够被至少执行一次。 在该实例中,执行语句块有三个,故而只需设计能够执行 这三条语句的测试用例即可。通过分析可以知道 “x=4,y=5,z=6” 该测试用例满足语句覆盖。语句覆盖能够很直观地从程序 的源代码里得到测试用例,但是这样的测试用例只覆盖到了每 一条可执行的语句,并没有考虑到判定表达式取其他的情况, 不能发现某些错误,故而在逻辑覆盖准则里,语句覆盖是最弱 的,也是最不充分的。 (2) 判定覆盖 由于语句覆盖太过于不充分,因而出现了判定覆盖,判定 覆盖旨在设计测试用例,使得程序的每个判定表达式都能够至 少取一次真值与一次假值,即每个判断的真假值都被至少取到 过一次。 在该实例中有两个判定的表达式,因而需要设计测试用例, 使得两个判定表达式都取到一次真值与一次假值。通过分析我 们得到
(5) 条件组合覆盖 条件组合覆盖为设计足够多的测试用例,使得各个判定表 达式中各个条件取不同值的各种可能组合至少出现一次,在上 述的实例中有两个判定表达式,各有两个条件,所谓条件组合, 即为每个判定表达式中的条件取真假值,然后进行笛卡尔积, 经过笛卡尔积后我们能得到各个条件的组合,根据组合来设计 测试用例。 条件总共有四个,分别设为 1,2,3,4,取真为 T,假为 F,可以得到这些条件组合 T1T2, T1F2, F1T2, F1F2, T3T4, T3F4, F3T4, F3F4, 共八个,条件 1,2 为第一个判定表达式的,3,4,为第二 个判定表达式。设计测试用例为: T1T2T3T4:x=4,y=6, z=5; T1F2T3F4:x=4,y=5, z=15; F1T2F3T4:x=2,y=6, z=5; F1F2F3F4:x=2,y=5, z=15; 则可分别在前四个条件取一个,后四个条件取一个,保证 每个组合都取到即可。条件组合覆盖包含了判定覆盖以及条件 覆盖,较为充分,但是一旦程序中判定条件增多,条件组合将 会增加非常多,所需要的测试用例数量也是巨大的。 在实际的测试中我们要根据测试对象来选择覆盖方式,从 而设计优质的测试用例。 路径测试 根据上方的程序流程图可以将其映射成控制流程图如下