The notes of How We Test Software At Microsoft(4)

来源:互联网 发布:健身软件app 编辑:程序博客网 时间:2024/05/22 02:11

Boundary Value Analysis

所谓边界条件,是值输入和输出等价类中哪些恰好处于边界,或超过边界,或在边界以下的状态。边界值分析方法与等价类划分方法存在两方面不同:

·         与等价类中挑选出任意一个元素为代表不同,边界值分析需要选择一个或多个元素,以便等价类的每个边界都经过一次测试。

·         与仅仅关注输入条件(输入空间)不同,还需要考虑从结果空间(输出等价类)设计测试用例。

BVT对于发下以下几种错误非常有用:

1)      Incorrect artificial constraints of a data type

2)      Erroneously assigned relational operators

3)      Wrapping of data types

4)      Problems with looping structures

5)      Off-by-one errors

Note:缓冲区被分配一个特定大小,然后根据边界的大小使用这个操作,然而程序言经常忘记字符串必须包含一个空字节终止符。一些常见的字符串操作尽管被界定,也不会加上这个字符,不能有效地将字符串和堆栈地其他缓冲区界定隔开。如果这个字符串稍后又被使用,两个缓冲区会被当作一个缓冲区,如果期望一个以空字符终止地缓冲区,这个缓冲区将会导致潜在地益处。

设计边界条件测试

1)      Paul Jorgensen suggests that the number of tests for basic boundary value analysis can be calculated by using the formula (4n+1)or (6n+1) including the minimum-1 and maximum+1 values for robust boundary testing), where n is equal the number of independent parameters.

Note:如果是6n+1,包含有minimum1minimumminimum1maximummaximum1maximum1,最后加一个所有参数都是normal

这个公式对于有一定输入值范围的简单的独立参数有用,但是难于应付比较复杂的情况。比如使用这个公式就忽略了等价类的子集的边界情况以及等价类中某些比较特殊的参数,这些参数并不处于边界的位置。

2)      新的边界值分析公式:3BC,where BC is equal to the number of specific boundary conditions.  这个公式是基于边界值的个数而不是参数的个数,这样更能全面准确的估算边界值的测试用例。

在《软件测试的艺术》书中给出了设计边界测试的通用指南:

·         如果输入条件规定了一个输入值范围,那么应针对范围的边界设计测试用例,针对刚刚越界的情况设计无效输入测试用例。

·         如果输入条件规定了输入值的数量,那么应针对最小数量深入值,最大数量输入值,以及比最小值量少一个,比最大数量多一个的情况设计测试用例。

·         针对每个输出条件用用指南1

·         对每个输出条件应用指南2

·         如果程序的输入或输出是一个有序序列(例如顺序文件,线性列表或表格),则应特别注意该序列的第一个和最后一个元素。

此外,要注意找出一些隐藏的边界条件。

Note:循环结构易导致软件的边界缺陷。要考虑第一次循环,两次循环,最大次数的循环,以及最大次数减一次循环,并尝试超过最大次数的循环。

Combinatorial Analysis

To test the interactions between the variable states of several dependent parameters systematically combinatorial analysis is a best practice as compared to alternative approaches.

测试一些有依赖关系的参数的不同状态的交互,组合分析测试是最好的方法。

The benefits of the combinatorial analysis:

·         Identifies most defects caused by variable interaction.(可以找到大部分由于变量交互导致的缺陷)

·         Provides greater structural coverage.(更广泛的结构性覆盖)

·         Has great potential to reduce overall testing costs(when used appropriately)(正确的使用组合分析可以降低测试成本)

要引起注意的是组合分析测试并不是能应用到所有的待测试的产品中,它并不适用于测试没有任何交互没有依赖关系的输入的参数。组合分析测试能有效的应用到测试的产品是它的输出是由输入参数的逻辑关系决定,并且输出的结果不依赖于输入参数的先后顺序。

有两种方法测试变量的交互,一种是结合错误猜测法进行ad hoc 测试,随机选择要测试的变量组合,第二种是科学系统的测试方法,包括每个变量或每个组合的测试(EC),base choiceBC),正交序列(OA),组合测试(结对测试等)以及穷尽测试(exhaustive testingAC)。

EC-保证每个变量被遍历一次,同其它组合测试方法比较,EC提供了数量最少的测试,但不适用于复杂的测试系统。

BC-把某一个变量的组合作为base test,通常是以happy path 或是常用的变量状态的组合作为base test。一次只改变一个变量的状态。比如:有三个参数ABC,其中A的变量有123B的变量45C的变量是67。假设base test146,那么基于BC的测试用例是:

First BC

1

4

6

2

4

6

3

4

6

Second BC

1

4

6

1

5

6

Third BC

1

4

6

1

4

7

-

Orthogonal Arrays (OA)- 参考http://blog.csdn.net/roger_ge/archive/2010/02/26/5329690.aspx

PairWise Testing,类似PICT的工具http://cvg.codeplex.com/,只是添加了图形界面,更简单方便。

使用PICT或者是其它组合测试工具,并不是简单的把参数和变量的状态输入到工具即可,需要测试人员深入分析待测产品,确定独立的变量和半耦合关系的变量,并且对参数进行分解。系统的组合分析的步骤:

·         Create an input matrix of BC tests

·         Create an input matrix of common or probable scenarios and historical failure indicators

·         Create an input model file of the variable states for each parameter

·         Customize the model file to exclude mutually exclusive variable states of invariant parameter( 优化模型,去除参数的互斥状态)

·         Apply all input files to the PICT Tool

·         Review the tool output

·         Refine and customize the model file if necessary

·         Reapply all input file files to the PICT tool

·         Revalidate output

·         Execute test cases

组合测试的实践过程:

·         首先找出有依赖关系的参数

·         确定每个参数的取值(变量状态)

·         划分等价类,随机抽取每个等价类子集

·         制作BC matrixBC matrix非常重要,研究表明BC结合组合的结对测试或是N维测试,可以更有效的暴露产品由于输入参数的组合关系导致的缺陷

·         找出用户常用的参数组合,或是BC matrix没有包含的,以及有些是基于风险分析或是历史数据表明易导致缺陷发生的组合,列出这些参数的组合,生成seed文件。输入seed文件到PICTPICT的测试用例输出会包含seed文件所列出的所有参数组合。

·         生成一个参数的输入文件,包含所有参数及其参数的取值的信息

·         通过PICT生成测试用例:

命令行的格式为:

Pict.exe myModeFile.txt  /e:mySeededInput.txt >output.xls

·         优化生成的测试用例

测试工具PICT/ Combinatorial Variation Generator,都可以定制参数的限制条件,PICT使用的命令行例子为:

IF [Font]=”BrushScript” AND [Italic]=”Uncheck” THEN [Bold] <>”Check”;

对于等价的变量可以在输入参数的文件中插入“|”, 比如Aril|Tahoma

另外一个非常重要的功能是保持n维覆盖不变,使得输出的测试用例能够随机产生。因为如果每次都使用同样的测试用例,就不能提高测试的覆盖率和有效性。

最后建议,使用组合测试方法时,首先做BCpairwise测试,然后利用PICT等工具,保持维数不变,改变测试用例,如果还需要更高的覆盖率,就增加组合测试的维数。一般二维就能达到相应的测试覆盖要求

 

原创粉丝点击