单元测试和白盒测试相关总结 (4)

基 本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。设计出的测试用例要保证在测试 中程序的每个可执行语句至少执行一次。基本路径测试法包括以下5个方面:(1)、程序的控制流图:描述程序控制流的一种图示方法;(2)、程序环境复杂 性:McCabe复杂性度量;从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行依次所必须的测试用例数 目的上界;(3)、导出测试用例;(4)、准备测试用例,确保基本路径集中的每一条路径的执行;(5)、图形矩阵:是在基本路径测试中起辅助作用的软件工 具,利用它可以实现自动地确定一个基本路径集。

另外,对于测试用例的选择除了满足所选择的覆盖程度(或覆盖标准)外还需要尽可能的采用边界 值分析法、错误推测法等常用地设计方法。采用边界值分析法设计合理的输入条件与不合理的输入条件;条件边界测试用例应该包括输入参数的边界与条件边界 (if,while,for,switch ,SQL Where子句等)。错误推测法,列举出程序中所有可能的错误和容易发生错误的特殊情况,根据它们选择测试用例;在编码、单元测试阶段可以发现很多常见的 错误和疑似错误,对于这些错误应该作重点测试,并设计相应的测试用例。

(2)、黑盒技术:等价划分类、边界值分析、错误推测、因果图、综合策略

4.        测试类设计:一个模块或一个方法(Method)并不是一个独立的程序,在考虑测试它时要同时考虑它和外界的联系,用些辅助模块去模拟与所测模块相联系的其他模块。这些辅助模块分为两种:

(1)、驱动模块(driver):相当于所测模块的主程序。它接收测试数据,把这些数据传送给所测模块,最后再输出实际测试结果;

(2)、桩模块(stub):用于代替所测模块调用的子模块。桩模块可以做少量的数据操作,不需要把子模块所有功能都带进来,但不容许什么事情也不做。

打桩:一般在做单元或集成测试时,如果某个程序单元的某条语句,需要调用的一个外部函数还没有设计、编码、调试完成的话,可以只让它简单地返回几个支持测试用例的值就可以了,这种状态的外部函数一般就叫做“打桩”。

所测模块与它相关的驱动模块及桩模块共同构成了一个“测试环境”。

驱 动模块和桩模块的编写会给测试带来额外的开销。因为它们在软件交付时并不作为产品的一部分一同交付,而且它们的编写需要一定的工作量。特别是桩模块,不能 只简单地给出“曾经进入”的信息。为了能够正确的测试软件,桩模块可能需要模拟实际子模块的功能,这样桩模块的建立就不是很轻松了。

编写桩 模块是困难费时的,其实也是完全可以避免编写桩模块的;只需在项目进度管理时将实际桩模块的代码编写工作安排在被测模块前编写即可。而且这样可以提高测试 工作的效率,提高实际桩模块的测试频率从而更有效的保证产品的质量。但是,为了保证能够向上一层级提供稳定可靠的实际桩模块,为后续模块测试打下良好的基 础,驱动模块还是必不可少的。

对于每一个包或子系统我们可以根据所编写的测试用例来编写一个测试模块类来做驱动模块,用于测试包中所有的待 测试模块。而最好不要在每个类中用一个测试函数的方法,来测试跟踪类中所有的方法。这样的好处在于:(1)、能够同时测试包中所有的方法或模块,也可以方 便的测试跟踪指定的模块或方法;(2)、能够联合使用所有测试用例对同一段代码执行测试,发现问题;(3)、便以回归测试,当某个模块作了修改之后,只要 执行测试类就可以执行所有被测的模块或方法。这样不但能够方便得检查、跟踪所修改的代码,而且能够检查出修改对包内相关模块或方法所造成的影响,使修改引 进的错误得以及时发现;(4)、复用测试方法,使测试单元保持持久性,并可以用既有的测试来编写相关测试;(5)、将测试代码与产品代码分开,使代码更清 晰、简洁;提高测试代码与被测代码的可维护性。

5.        跟踪调试:跟踪调试不但是深入测试代码的最佳方法,而且也是程序调试发 现错误根源的有利工具。测试类设计完成后,最好能借助代码排错工具来跟踪调试待测代码段以深入的检查代码的逻辑错误。现有的代码开发工具 (如:JBuilder)一般都集成了这类排错工具。排错工具一般由执行控制程序、执行状态查询程序、跟踪程序组成。执行控制程序包括断点定义、断点撤 销、单步执行、断点执行、条件执行等功能。执行状态查询程序包括寄存器、堆栈状态、变量、代码等与程序相关的各种状态信息的查询。跟踪程序用以跟踪程序执 行过程中所经历的事件序列(如:分支、子程序调用等)。程序员可通过对程序执行过程中各种状态的判别进行程序错误的识别、定位及改正。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysydf.html