软件测试的艺术(读书笔记3)

下面继续本书第二部分的读书笔记部分

第二部分 软件测试基础

  包括第4章 测试用例设计;第5章 单元(模块)测试;第6章 更高级别的测试

第5章 单元(模块)测试

  单元(模块)测试时构建大型程序测试的第一个步骤。模块测试时对程序中的单个子程序、子程序或过程进行测试的过程。单元(模块)测试的动机:1.一种管理组合的测试元素的手段;2.减轻调试的难度(错误被发现,可以知道在哪个具体的模块中);3.为同时测试多个模块提供可能。分为三个部分进行探讨:1.单元(模块)测试的测试用例设计方法;2.模块测试及集成的顺序;3.对执行模块测试的建议;

  1、模块测试的测试用例设计方法

  设计测试用例时,需要两种信息:1.模块的规格说明(规格说明规定了模块的输入和输出以及模块的功能);2.模块的源代码。

  模块测试总体上时面向白盒的测试。模块测试用例的设计过程如下:使用一种或多种白盒测试方法分析模块的逻辑结构,然后使用黑盒测试方法对照模块的规格说明以补充测试用例。

  首先,找出程序中所有的条件判断,如下图所示

  

  然后,使用判定覆盖准则设计设计用例;接着,使用条件覆盖准则设计测试用例,如果不满足要求,需要将判定和条件合并后进行测试用例的设计;

  最后,如果都不太完善,则需要使用多重条件覆盖准则进行设计。设计测试用例的方法是:挑选一个测试用例尽可能覆盖多种组合,然后再挑选一个测试用例覆盖剩余的准则。

  以上是通过模块的源代码进行用例设计,然后需要通过模块的规格说明书设计测试用例,这种设计用例的方法,需要借鉴黑盒设计方法(等价类、边界值,错误推测方法等)。

  2、模块测试及集成的顺序 

  2.1 增量测试和非增量测试区别

  非增量测试:一个模块一个模块的进行测试,最后将所有模块集成到一起测试(先独立测试每个模块,然后将模块组装成完整程序)。

    如下图所示,分别对A、B、C、D、E、F分别进行单独测试。而每个单独的模块需要一个驱动模块(driver module)和一个或多个桩模块(stub module)

    驱动模块:编写的小模块,用于将测试用例传输到被测模块中。桩模块:用于代替真实模块的临时模块(需具有真实模块的控制功能并能够编译通过)。

  增量测试:将未测试的模块添加到测试好的模块中进行测试(将下一步要测试的模块组装到测试完成的模块集合中,再进行测试)。

    如下图所示,如果按照从底部往上进行测试,先测试模块E、C、F,同时为他们准备驱动模块;然后,测试模块B、D,会将模块E、F合并到B、D模块中进行测试;最后测试到模块A。

    

  增量测试和非增量测试优点:

  1)增量测试工作量少

    非增量测试,每个模块都需要驱动模块和桩模块;增量测试,自底向上,无需桩模块;自顶向下,无需驱动模块。

  2)增量测试可较早发现接口不匹配和不正确错误

    增量测试,早早的对模块进行组合测试,非增量测试,最后阶段才进行模块组合。

  3)增量测试让调试会容易些

    模块接口间错误会较早定位解决。

  4)增量测试会将测试进行的更彻底

    增量测试使用先前测试过的模块,取代非增量测试中使用的桩模块或驱动模块。

  5)增量测试需要时间多些

  6)非增量测试可以并行操作

  2.2 自顶向下测试与自底向上测试

  1.自顶向下测试:从程序顶部或初始模块开始测试。

  原则:1)后续测试模块的从属模块须经过测试;

     2)编写桩模块很关键;

     3)程序中关键部分应尽早添加测试;

     4)I/O模块应尽早测试;

  2.自底向上测试:从程序底部往上进行测试。

  原则:1)后续测试模块的从属模块须经过测试;

     2)每个模块都需要特殊的驱动模块;

  3.比较

  3、执行模块测试的建议

  1)应在执行测试之前对测试用例集进行审核或检查

    测试用例造成输出的实际结果与预期结果不匹配时,要么是模块有问题,要么是测试用例不正确。

  2)应使用自动化工具提升效率

    使用工具生成驱动模块;使用流程分析工具列举程序路径。

  3)执行模块测试时,应遵守软件测试的心理和经济学原则

    比如,对预期输出进行定义;执行测试时,应查找模块执行了那些不该执行的操作;程序员不应测试自己编写的模块;对模块的调试应由编程人员本人进行。 

 

参考文献:

[1].百度文库,PL1初学指南.https://wenku.baidu.com/view/a4fc2eefb8f67c1cfad6b81b.html

[2].shenghuiping2001,PL/1基础入门教程.https://blog.csdn.net/shenghuiping2001/article/details/4155294

[3].PL/I Language Programmer's Guide.http://bitsavers.informatik.uni-stuttgart.de/pdf/digitalResearch/pl1/PL1_Language_Programmers_Guide_Dec82.pdf

[4].茹炳晟,软件测试52讲.https://time.geekbang.org/column/article/10275

猜你喜欢

转载自www.cnblogs.com/chengabc/p/11260916.html