黑盒测试--蜕 变 测 试

1、 蜕变测试的出发点  

        判断软件是否存在缺陷的基本方法是将软件实际的运行结果和软件预期结果进行比较,所以软件运行的预期结果是构造软件测试用例最重要的因素之一。但在实际测试过程中,测试工程师无法构造或者说很难构造程序的预期结果。

2、蜕变测试的基本理论

蜕变关系:软件实际运行结果约束关系,称为蜕变关系。

蜕变测试(metamorphic testing)利用程序执行结果之间的关系来测试程序,无需构造预期输出。

蜕变测试的结果:蜕变关系的选择和构造是影响测试效果的最重要因素。在实际测试中,可能存在三种情况: (1)程序实现正确,蜕变测试通过。 (2)程序实现不正确,蜕变测试未通过。 (3)程序实现不正确,但是蜕变测试通过。

蜕变测试的评价:有效的蜕变测试,应该使用尽可能少的测试用例发现其中的错误,可以通过变异分析等方法来验证蜕变测试用例的效果

3.典型例子

例1:对于一个任意的角度(除30°、45°等义务教育阶段常见角度),要判断其运用三角函数的预期输出是非常困难的。故而考虑其特殊的关系:

对于程序而言,这些等式就是蜕变关系。蜕变关系可能有多个。上述四个等式均是蜕变关系。

例2:若程序P实现函数f,那么P必须遵守函数f的约束条件,否则程序P是不正确的。 例如,若程序P实现了余弦函数cos(x)的功能,若其输入变元x1,x2满足关系: x1+x2 = 0,那么P的输出值必须满足关系:P(x1) = P(x2)。

4.蜕变测试的例子

        一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。

         一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最长公共子序列LCS((Longest Common Subsequence)。 例如有两个序列分别cnblogs和belong,那么他们的最长公共子序列为blog。在这两个序列中,n、b、b、l、o、g、ng、bl、bo、bg、blo、blg、log、blog等等都是原序列的两个公共子序列,显然blog是所有子序列的中的最长子序列。

         假设序列A共有m个字符,序列B共有n个字符, 如果A[m]==B[n],那么A[1:m]和B[1:n]的最长公共子序列长度就是A[1:m-1]和B[1:n-1]的最长公共子序列长度+1; 如果A[m]!=B[n],那么A[1:m]和A[1:n]的最长公共子序列长度就是MAX(A[1:m-1]和B[1:n]的最长公共子序列长度,A[1:m]和B[1:n-1]的最长公共子序列长度)。 用c[i,j] 表示A中长度为i的字符串和B中长度为j的字符串的公共子序列:

        两个字符串的最长公共子序列具有如下关系:

        若字符串A和B的前面增加1个不相同字符,A’=aA, B’=bB,且a,b均不出现在A或者B中,那么: LCS长度不变。

        在字符串A和B的结尾增加1个不相同字符,A’=Aa, B’=Bb,且a,b均不出现在A或者B中:             LCS长度不变。

        在字符串A和B中的前面增加1个相同的字符LCS长度增加1。

        在字符串A和B中的结尾增加1个相同的字符: LCS长度增加1。

         若字符串A和B中的第1个字符不相同,A=aA’,B=bB’且a≠b(a和b表示不同的字符),那么:     LCS(A,B)=max(LCS(A’,B),LCS(A,B’))。

        在程序输入参数中,交换字符串A和B的输入顺序,那么:LCS长度不变。 将序列A和B中的 字符逆序以后作为程序的输入,那么:LCS长度不变。

        根据上述关系,可以构造最长公共子序列蜕变测试的用例。例如

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
- 黑盒测试的目的是验证软件系统的功能是否按照规格说明书的要求正常工作,而不需要了解系统内部的实现细节。测试人员根据输入和预期输出来设计测试用例,然后执行这些测试用例,验证系统是否能够正确地处理输入并产生正确的输出。 - 白盒测试的目的是验证软件系统的内部逻辑是否正确。测试人员需要了解系统的内部实现细节,通过检查代码、执行路径和数据流等来设计测试用例,然后执行这些测试用例,验证系统是否能够正确地执行各种情况下的代码路径。 - 沙箱测试的目的是测试软件系统在隔离环境中的行为。测试人员在隔离的环境中运行系统,以确保系统不会对外部系统或环境产生负面影响。 - 单元测试的目的是验证系统中的单个模块是否按照设计要求正常工作。测试人员编写测试用例来验证模块的输入和输出,以确保模块能够正确地处理各种情况下的数据和逻辑。 - 集成测试的目的是验证系统中各个子系统之间的交互是否按照设计要求正常工作。测试人员使用模拟数据和环境来测试系统的各个部分,以确保它们能够协同工作。 - 用户验收测试的目的是验证系统是否满足用户的需求和期望。测试人员使用真实数据和环境来测试系统,并且模拟用户的使用情况,以确保系统能够满足用户的需求,并且易于使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值