软件测试与等价类划分

1.软件测试的定义

        软件测试实际上就是一个实际输出与预期输出间的比较过程,用来鉴定软件的正确性、完整性、安全性和质量的过程。或许到这里,你会认为,软件测试是通过正确的例子去证明软件无错,但实际上,软件测试的目标与其相反,它是为了破坏,证错,尽可能寻找程序的错误。软件测试的经典定义正是如此:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。软件测试是提高软件质量的重要手段。如今的软件测试与整个开发流程融合为一体,已经成为了一个专业,需要一个专业的团队来承担。

2.软件测试的原则:

1) 测试应基于客户需求

        所有的测试工作都应该建立在满足客户需求的基础上,从客户角度来看,最严重的错误就是软件无法满足要求。有时候,软件产品的测试结果非常完美,但却不是客户最终想要的产品,那么软件产品的开发就是失败的,而测试工作也是没有任何意义的。因此测试应依照客户的需求配置环境,并且按照客户的使用习惯进行测试并评价结果。

2)测试要尽早进行

        软件的错误存在于软件生命周期的各个阶段,因此应该尽早开展测试工作,把软件测试贯穿到软件生命周期的各个阶段中,这样测试人员能够尽早地发现和预防错误,降低错误修复的成本。尽早地开展测试工作有利于帮助测试人员了解软件产品的需求和设计,从而预测测试的难度和风险,制订出完善的计划和方案,提高测试的效率。

3) 穷尽测试是不可能的

        由于时间和资源的限制,进行完全(各种输入和输出的全部组合)的测试是不可能的测试人员可以根据测试的风险和优先级等确定测试的关注点,从而控制测试的工作量,在测试成本、风险和收益之间求得平衡。

4)遵循GoodEnough原则

        GoodEnough原则是指测试的投入与产出要适当权衡,形成充分的质量评估过程,这个过程建立在测试花费的代价之上。测试不充分无法保证软件产品的质量,但测试投入过多会造成资源的浪费。随着测试资源投入的增加,测试的产出也是增加的,但当投入达到一定的比例后,测试的效果就不会明显增强了。因此在测试时要根据实际要求和产品质量考虑测试的投入,最好使测试投入与产出达到一个GoodEnough状态。

5) 测试缺陷要符合“二八”定理

        缺陷的“二八”定理也称为Pareto原则、缺陷集群效应,一般情况下,软件80%缺陷会集中在20%模块中,缺陷并不是平均分布的。因此在测试时,要抓住主要矛盾,如果发现某些模块比其他模块具有更多的缺陷,则要投入更多的人力、精力重点测试这些模块以提高测试效率。

6)避免缺陷免疫

        我们都知道虫子的抗药性原理,即一种药物使用久了,虫子就会产生抗药性。而在软件测试中,缺陷也是会产生免疫性的。同样的测试用例被反复使用,发现缺陷的能力就会越来越差;测试人员对软件越熟悉越会忽略一些看起来比较小的问题,发现缺陷的能力也越差,这种现象被称为软件测试的“杀虫剂”现象。它主要是由于测试人员没有及时更新测试用例或者是对测试用例和测试对象过于熟悉,形成了思维定式。

        要克服这种情况,就要不断对测试用例进行修改和评审,不断增加新的测试用例,同时,测试人员也要发散思维,不能只是为了完成测试任务而做一些输入和输出的对比。

        最后,没有缺陷的软件是不存在的,软件测试是为了找出软件测试中的缺陷,而不是为了证明软件没有缺陷。

3.软件测试的方法:

1)静态测试

        静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做源程序结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。

 2)动态测试

        计算机动态测试的主要目的为检测软件运行中出现的问题,较静态测试方式相比,其被称为动态的原因即为其测试方式主要依赖程序的运用,主要为检测软件中动态行为是否缺失、软件运行效果是否良好。其最为明显的特征即为进行动态测试时软件为运转状态,只有如此才能于使用过程中发现软件缺陷,进而对此类缺陷进行修复。动态测试过程中可包括两类因素,即被测试软件与测试中所需数据,两类因素决定动态测试正确展开、有效展开。

3)黑盒测试

         黑盒测试,它是通过测试来检测每个功能是否都能正常使用。在测试程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。 黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。 

4)白盒测试

        白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。 

4.等价类划分

        基于等价类划分的测试:将被测函数的输入域划分为等价类,从等价类中导出测试用例。

        如何划分等价类:针对每个输入数据需要满足的约束条件,划分等价类。每个等价类代表着对输入约束加以满足/违反的有效/无效数据的集合。

        基于的假设:相似的输入,将会展示相似的行为。故可从每个等价类中选一个代表作为测试用例即可,从而降低测试用例数量。

  举个例子:两个int整数相乘——a×b

  首先我们可以从正负的角度对二维空间进行等价类划分

(1)a和b都是正数

(2)a和b都是负数

(3)a是正数,b是负数

 (4)a是负数,b是正数

但我们需要考虑的输入数据的特殊情况,比如任何数乘0都为0,任何数乘1(-1)都为其本身(相反数),需要考虑输入的上限,int的数据范围为(-2^31~2^31-1),考虑乘很大的数时结果是否正确。

因此我们对单个a或b进行等价类划分。

(1)0

(2)1

(3)-1

(4)小的正数(远小于上限)

(5)绝对值小的负数

(6)很大的正数(接近于上限)

(7)绝对值很大的负数

因此我们有了7*7=49种组合方式来涵盖所有的等价类

例如

5.总结

一个好的测试用例在于它发现至今未发现的错误。

一个成功的测试是发现了至今未发现的错误的测试。

测试是不可穷尽的,测试人员不可能发现系统中所有的缺陷,软件测试整体是验证功能的实现、可用性,检查程序的错误,最终目的是为了提高用户体验;在测试过程中,有一些缺陷级别低,解决与否都不影响用户使用,且缺陷存在本身用户也不会有感知,这时就需要从用户体验的角度去考量是否要定义该类问题为缺陷。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值