`
yangshen998
  • 浏览: 1248306 次
文章分类
社区版块
存档分类
最新评论

实现完整测试的思路和方法

 
阅读更多

这里提出用“三步法”尽可能实现完整测试:

第一步:基本功能测试
程序的功能是人为的规定,工具不可能自动了解,因此,针对基本功能的测试用例需要人工来建立,这是无可躲避的。根据程序的设计要求,基本功能用例通常不难设计,把程序功能细化、明确化,列成“什么输入,应产生什么输出”的形式,就是测试用例。程序员准备编码时和编码过程中,是建立基本功能用例的最佳时机,为什么呢?因为程序员编码之前和编码过程中,一定要弄明白程序的功能,也就是要想清楚“会有哪些输入?某种输入时程序应该做什么?产生什么结果?”,这里,“哪些输入”就是指有哪些等价类,产生的“结果”就是输出,从编码的角度来看,这些就是程序的功能点,从测试的角度来看,这些就是现成的用例。如果有详细设计文档,那么测试人员可以根据文档来设计用例,否则最好由程序员建立基本功能用例。这一步可视为“黑盒方法”。

第二步:用白盒方法找出遗漏用例
正因为程序功能是人为的规定,“黑盒方法”很难衡量完整性,而“白盒方法”恰恰具有易于衡量测试完整性的优点,两者可以很好互补,请看下面的示例代码:

voidFunc(int* p)
{
if(p)
{
*p = 0;
}
else
{
return;
}

}

参数p是一个指针,测试时当然要将空指针作为一个等价类,如果漏了这个等价类,会怎么样呢?分支覆盖会不完整:else分支未覆盖。从这个例子可以看出,未覆盖的逻辑单位通常对应未测试的等价类,因此,白盒覆盖可以衡量等价类是否完整并可帮助找出遗漏的用例。

  “白盒方法”用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合。跟条件有关的覆盖就有三种:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。与条件直接有关的错误主要是逻辑操作符错误,例如:||写成&&,漏了写!什么的,采用分支覆盖与条件覆盖的组合,基本上可以发现这些错误,另一方面,条件值覆盖与条件值组合覆盖往往需要大量的测试用例,因此,这两种覆盖的效费比偏低。基于以上理由,这里提出采用语句、条件、分支、路径覆盖的组合来衡量测试完整性和找出遗漏用例。

第三步:用自动用例捕捉漏网之鱼
还是上面的例子,假如程序员完全忘了有空指针这回事,把代码写成这样:
voidFunc(int* p)
{
*p = 0;
}

由于判断p是否为空指针的代码不存在,白盒覆盖当然不会提示“某某代码或某某分支未覆盖”,因此,白盒覆盖不能发现“程序员未处理某些特殊输入”形成的错误,即使达到了无与伦比的白盒覆盖率,仍然不能保证找出所有等价类。
程序员会忘记处理哪些输入呢?常见的输入一般是不会记的,否则程序的起码功能都未实现,容易忘记的是一些"偏僻"的输入,例如,空指针、空字符串、很大的数、很小的数、合法取值边界附近的值等等,从输入的角度来看,这些特殊值通常跟数据类型有关,从程序的行为来看,这些特殊输入常常会导致崩溃、产生异常,或超时,即具有行为特征,正好是自动用例可以发现的,因此,可以利用自动用例来捕捉“程序员未处理某些特殊输入”形成的错误。这就是“三步法”中的第三步。

分享到:
评论

相关推荐

    测试的思路方法和技术.pdf

    软件Software测试思路方法和技术是多种多样  对于软件Software测试技术可以从区别角度加以分类:  从是否需要执行被测软件Software角度可分为静态测试和动态测试  从测试是否针对系统内部结构和具体实现算法角度来...

    自动化测试框架的思路

    通过以往的尝试,发现真正实现自动化测试,并不是掌握了某个自动化测试工具,掌握了脚本的编写技术就能够达成,面对复杂的ERP系统,简单的 录制/回放并不能达到自动化测试的要求,完全通过编写脚本的方式,工作量...

    《用户体验测试的自动化实现》QTP源代码

    《用户体验测试的自动化实现》一文结合QTP的脚本编写,介绍了几个用户体验和界面规范测试方面的测试用例的自动化实现方法,通过工具的自动检查和比较,可避免人工检查的时间、精力的耗费,以及人工检查的误差。...

    连连看设计思路与java代码实现

    练练看设计思路,以及java代码实现,使用数组类作为测试

    Java实现点击文字验证码与拖动/滑动图片验证码(源码+demo+单元测试+实现思路)

    1.部署步骤 ...4.实现思路 4.1点击文字图片验证码:https://blog.csdn.net/m0_38138879/article/details/117552010 4.2拖动图片验证码:https://blog.csdn.net/m0_38138879/article/details/117559456

    软件测试之 web自动化测试.m4a

    自动化测试将测试信息和数据储存在文件中,思路清晰明确,交接方便 轻易获取覆盖率 自动化测试能够解放测试人员,使测试人员能够有更多的精力做那些非重复性的工作 其他 自动化测试可以是实现自动或者定时执行

    非打扰式无线传感器网络测试仪的设计与实现

    传感器网络测试方法,并介绍了基于该方法的无线传感器网络测试仪的设计思路和详细实现。该测试仪采用可编程 逻辑阵列( FPGA) 高速采集传感器节点的内部互连信息,并将采集的信息通过额外网络传输到测试服务器进行集中 ...

    白盒测试(分别以判定覆盖、条件覆盖、条件组合覆盖设计测试用例)

    本次实验主要是用逻辑覆盖法和基路径测试法对程序进行测试验证,运行程序测试之前按照老师课上讲的思路先将各种测试方法的测试用例以及预期结果写了下来,然后对其进行上机测试,得出真实结果与预期结果进行对比。...

    SSH框架实现BBS完整版

    4.9 分析JSP中要实现的功能在实体中建立实体方法 4.10 建立Struts2映射路径 4.11 分析实体中需要的业务逻辑在Service中定义相应的方法 4.12 配置 配置Spring(IOC) 4.13 重复上述思路直到实现基本功能 4.14 根据...

    TD-SCDMA网络测试仪NBAP协议仿真软件设计

    本文首先指明了TD-SCDMA网络测试仪NBAP协议仿真的作用,然后提出了仿真软件设计中模块划分和代码实现的方案,介绍了NBAP协议消息编码和解码关键技术问题的解决方法,指明了发送协议消息触发完整流程是实现协议仿真...

    毕业设计-http服务器的实现(完整版).zip

    3. 设计思路和方法:提供毕业设计的设计思路和方法指导。这些指导包括项目规划、需求分析、系统设计、算法实现等方面的内容,帮助学生建立系统化的设计思维和方法论,从而高效地完成毕业设计项目。 4. 编程实现和...

    app资源下载测试思路记录

    app资源下载测试思路记录 在app中经常会有资源下载的场景,这里就来记录一下资源下载的一些测试思路 如果按照运行过程的角度考虑的话大致为以下流程 a、资源下载时机、资源下载次数、资源下载正确性 b、资源下载过程...

    Java电费营销业务平台欠费子系统设计与实现

    根据系统的实际测试思路及工作,对系统的测试环境配置、测试方法及流程、测试内容进行了详细介绍,并总结整理了系统的测试结果,评价系统的开发成果,从系统功能和性能两个角度进行分析,检查系统的功能 BUG 检查...

    毕业设计-http代理服务器的实现(程序)(完整版).zip

    3. 设计思路和方法:提供毕业设计的设计思路和方法指导。这些指导包括项目规划、需求分析、系统设计、算法实现等方面的内容,帮助学生建立系统化的设计思维和方法论,从而高效地完成毕业设计项目。 4. 编程实现和...

    在移动设备上开发实现的单目视觉方法,是基于视觉slam十四讲的项目0.4的思路扩展的C++源码+文档说明

    在移动设备上实现的单目视觉方法,是基于视觉slam十四讲的项目0.4的思路扩展的C++源码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源...

    毕业设计-struts+hibernate实现的网络购物系统(完整版).zip

    3. 设计思路和方法:提供毕业设计的设计思路和方法指导。这些指导包括项目规划、需求分析、系统设计、算法实现等方面的内容,帮助学生建立系统化的设计思维和方法论,从而高效地完成毕业设计项目。 4. 编程实现和...

    接口自动化测试方案.docx

     之前自动测试实践过程中遇到的诸多问题(代码复用率低,Case开发及数据构造繁琐,问题定位困难,学习成本高等),为解决相关痛点问题,我们重新实现了一套APP自动测试框架。本文将着重介绍技术选型、设计思路及...

    数字通信同步技术的MATLAB与FPGA实现 AlteraVerilog版_PDF 完整PDF高清

    本书以Altera公司的FPGA器件为开发平台,采用MATLAB及Verilog HDL语言为开发工具,详细阐述数字通信同步技术的FPGA实现原理、结构、方法和仿真测试过程,并通过大量工程实例分析FPGA实现过程中的具体技术细节。...

Global site tag (gtag.js) - Google Analytics