发布网友 发布时间:2022-10-13 20:44
共1个回答
热心网友 时间:2023-11-12 13:08
1、单元测试的基本方法
单元测试的基本方法有:人工静态分析、自动静态分析、自动动态测试,人工动态测试。
人工静态分析:通过人工阅读代码来查找错误,一般是程序员交叉查看对方的代码,可能发现有特征错误和无特征错误。
自动静态分析:使用工具扫描代码,根据某些预先设定的错误特征,发现并报告代码中的可能错误,自动静态分析只能发现语法特征错误。
自动动态测试:使用工具自动生成测试用例并执行被测试程序,通过捕捉某些行为特征(如产生异常/程序崩溃等)来发现并报告错误,自动动态测试只能发现行为特征错误,对无特征错误完全*为力,例如,前面所说的加法函数,代码可以说是最简单的,错误也是最简单的,但是自动动态测试仍然无法发现,因为测试工具不可能自动了解代码的功能。
人工动态测试:人工设定程序的输入和预期的正确输出,执行程序,并判断实际输出是否符合预期,如果不符合预期,自动报告错误。这里所说的"人工",仅指测试用例的输入和预期输出是人工设定的,其他工作可以由人工完成,也可以借助工具自动完成。人工动态测试可以发现有特征错误和无特征错误,例如,前面所说的加法函数,只要人工建立一个测试用例,输入两个1,并判断输出是否等于2,运行测试,就可以发现代码中含有错误。
以上四种方法还可以进一步细分,例如,人工动态测试又有多种设计测试用例的方法,如果根据程序的功能来设计测试用例,就是黑盒测试,如果根据代码及代码的逻辑结构来设计测试用例,就是白盒测试。
2、测试方法的选择
工作中是不是把各种测试方法不分轻重都做一遍呢?显然不行,项目工期和预算不会允许这么做,也不符合效益原则,应该选择一种方法作为主要测试方法,其他视情况取舍。
自动静态分析、自动动态测试只能发现有特征错误,这两种方法加起来,做到最好也仅限于发现有特征错误,而多数语法特征错误编译器就能发现,很多行为特征错误会在开发过 程中,或集成测试和系统测试中自动暴露出来,所以这两种方法不宜作为主要测试方法。
人工静态分析虽然可能发现有特征错误和无特征错误,但是要彻底找出所有错误来,显然太难了。
人工动态测试可以发现有特征错误和无特征错误,并且具有广阔的发挥空间,可以作为主要测试方法。
3、黑盒测试与白盒测试
常常见到"单元测试是白盒测试","单元测试也有黑盒"之类的说法,容易引起混乱。黑盒与白盒其实是测试方法,黑盒就是针对系统的外部特性进行测试,把目标系统看作一个黑盒子,不考虑内部结构;白盒就是针对系统的内部结构进行测试。各个测试阶段都可以使用黑盒方法和白盒方法,即无论是单元测试、集成测试、系统测试阶段都可以使用黑盒方法和白盒方法。
黑盒测试又叫功能测试,我们首先要测试程序是否实现了基本功能,因此,黑盒测试是基本测试。黑盒测试的主要缺陷是难于衡量完整性,而白盒测试正好可以弥补个缺陷。
白盒测试通过逻辑覆盖率来衡量完整性,具有可以精确统计的数字指标。逻辑单位主要有:语句、分支、条件、条件值、条件值组合,路径。语句覆盖就是覆盖所有的语句,其他类推。另外还有一种判定条件覆盖,其实是分支覆盖与条件覆盖的组合。跟条件有关的覆盖就有三种,解释一下:条件覆盖是指覆盖所有的条件表达式,即所有的条件表达式都至少计算一次,不考虑计算结果;条件值覆盖是指覆盖条件的所有可能取值,即每个条件的取真值和取假值都要至少计算一次;条件值组合覆盖是指覆盖所有条件取值的所有可能组合。与条件直接有关的错误主要是逻辑操作符错误,例如:||写成&&,漏了写!什么的,采用分支覆盖与条件覆盖的组合,基本上可以发现这些错误,而条件值覆盖与条件值组合覆盖往往需要大量的测试用例,因此,条件值覆盖和条件值组合覆盖的效费比偏低,比较有价值的覆盖率是语句覆盖、条件覆盖、分支覆盖、路径覆盖。
4、测试用例
人工动态测试需要人工设计测试用例。一个测试用例,就是设定输入数据,执行被测试程序,并判断输出是否符合预期。输出符合预期,则测试通过,否则测试失败。一般来说,测试工具要能自动报告失败的测试。
测试用例的主要内容是输入数据和预期输出,简称输入输出,其中输入是核心,输入确定了,再根据程序的功能设定预期的正确输出。
如果我们把函数看作测试单元,那么,输入数据就是被测试函数所读取的外部数据及这些数据的初始值。"外部数据"是对于被测试函数来说的,就是除了局部变量以外的其他数据,分为几类:参数、成员变量、全局变量、IO媒体。IO媒体是指文件、数据库或其他储存或传输数据的媒体,例如,被测试函数要从文件或数据库读取数据,那么,文件或数据库中的原始数据也属于输入数据。