自动检验测试结果的程序单元测试方法转让专利

申请号 : CN200510100657.6

文献号 : CN1952818B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李巧珍

申请人 : 康佳集团股份有限公司

摘要 :

本发明提供一种自动检验测试结果的程序单元测试方法,在测试用例中通过不同的桩函数为被测单元构建的各种测试环境,以字符串或者有代表性的数字设定标准路径,同时针对有返回值的被测单元在相应的测试用例中设定标准返回值。测试控制模块按顺序依次控制运行每个测试脚本,每个测试用例控制被测单元走相应的分支,并通过被测单元的插桩函数将走过的分支记录下来,测试用例在控制被测代码运行时,记录下测试代码运行得出的返回值,然后通过自动检测模块比较检测路径是否覆盖完全、返回值是否正确。本发明实现了自动检验单元测试的路径覆盖情况和返回值的正确性,大大提高了单元测试的测试效率,并且可以方便的进行回归测试。

权利要求 :

1.一种自动检验测试结果的程序单元测试方法,测试控制模块控制主测试过程,测试脚本由多个测试用例组成,其特征在于该测试方法包括以下的步骤:(a).在构成测试脚本的每个测试用例中根据需要通过插桩函数生成被测代码运行的一种环境,控制被测代码的运行;

(b).在每个测试用例中预设一个标准路径,代表在本测试用例环境下被测代码要走的分支的先后次序和走的总分支数,同时根据需要在相应的测试用例中预设一个本测试用例环境下被测代码应该返回的标准返回值;

(c).测试控制模块执行测试脚本,按顺序依次运行该测试脚本的测试用例;

(d).测试控制模块判断测试用例中是否有标准返回值,如果有,转步骤(e)如果没有,转步骤(f);

(e).当测试用例控制被测代码运行时,记录下被测代码运行得出的实际返回值;

(f).测试用例按顺序依次控制被测代码走相应的分支,并通过被测代码的插桩函数将走过的分支记录下来;

(g).当检测到测试脚本运行结束时,通过自动检测模块比较检测路径是否覆盖完全,如果覆盖完全则提示成功信息,如果没有覆盖完全,则提示出覆盖不完全信息,同时自动检测模块比较定义的标准返回值与实际返回值是否相符,如果完全相符则提示成功信息,如果不完全相符,则提示出返回值不符信息;

(h).测试控制模块判断是否所有的测试脚本都已经被执行完毕,如果还有未被执行的测试脚本,测试控制模块执行下一个测试脚本,转步骤(c),如果检测到所有的测试脚本都已经执行完毕,测试结束。

2.根据权利要求1所述的程序单元测试方法,其特征在于步骤(b)中所述的标准路径以字符串或有代表性的数字来设定。

3.根据权利要求1所述的程序单元测试方法,其特征在于步骤(g)中所述的返回值不符信息包括返回值不符的测试用例和返回值不符的原因信息。

4.根据权利要求1所述的程序单元测试方法,其特征在于步骤(g)中所述的覆盖不完全信息包括未完全覆盖位置和未完全覆盖的原因信息。

5.根据权利要求1所述的程序单元测试方法,其特征在于所述的插桩函数在代码测试完成后可重新生成为空函数以发布版本,不需要再更改被测试的代码。

6.根据权利要求1所述的程序单元测试方法,其特征在于在测试过程中,如果发现了程序错误并且对程序代码进行了修改,此时执行回归测试,即对修改过的程序再重新测试一遍。

7.根据权利要求6所述的程序单元测试方法,其特征在于所述回归测试是在测试脚本中增加相应的测试用例,然后执行测试过程。

说明书 :

技术领域

本发明涉及程序单元测试领域,尤其是能够对测试结果进行自动化检测的程序单元测试方法。

背景技术

单元测试是集中对由源代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能,检查各程序模块的返回值是否正确。单元测试检查每一个控制结构的分支以确保完全覆盖和最大可能的错误检查。
有些单元测试方法,虽然设计了一个控制模块来控制程序的被测代码的运行,有限的提高了编写测试代码的效率和回归测试的效率。但是,对单元测试执行结果的检查却没有实现自动化。目前的对单元测试执行结果的检查都是通过程序单步跟踪或者输出测试结果来进行人工检查的方式来进行,单步跟踪操作繁琐、工作量大,而人工的检查有以下三个不足的地方:
一、对测试路径覆盖的完全程度、测试结果和返回值等用人工的方法检测要花费很大的精力,检查速度很慢。
二、检查是人工的,由于主观因素的影响,很容易因为人的大意而产生误判。
三、回归测试很不方便。单元测试是为了尽可能多的发现程序的错误,发现错误后,为了修正错误,是需要对程序代码进行修改的。每当程序代码被修改的时候,程序配置的某些方面(如文档或者数据)也会被修改。回归测试是对修改过的程序再重新测试一遍,以保证修改是正确的,同时保证所做的修改不会带来不可预料的行为或者新的错误。由于测试结果不能自动检测,因此对于错误修改后的回归测试过程就会十分繁琐。必需将测试正确的测试用例再重新测试一遍,重新检查测试结果,以确保修改是正确的,并且没有引入其他的错误,没有由于失误造成误判而错过了某些问题的发现。
此外,现有的测试方法还存在另一个弊端,当测试完成、发布版本的时候,还需要从程序代码中删除大量的测试代码,这个过程往往复杂而且极易出错。

发明内容

本发明所要解决的技术问题在于提供一种自动检验测试结果的程序单元测试方法,自动检验单元测试的路径覆盖情况和返回值的正确性,提高单元测试的测试效率,避免人工检测的低效率和高误差率的弊端。
为解决上述技术问题,本发明所采用的技术方案是:
提供一种自动检验测试结果的程序单元测试方法,测试控制模块控制主测试过程,测试脚本由多个测试用例组成,该测试方法包括以下的步骤:
(a).在构成测试脚本的每个测试用例中根据需要通过插桩函数生成被测代码运行的一种环境,控制被测代码的运行;
(b).在每个测试用例中预设一个标准路径,代表在本测试用例环境下被测代码要走的分支的先后次序和走的总分支数,同时根据需要在相应的测试用例中预设一个本测试用例环境下被测代码应该返回的标准返回值;
(c).测试控制模块执行测试脚本,按顺序依次运行该测试脚本的测试用例;
(d).测试控制模块判断测试用例中是否有标准返回值,如果有,转步骤(e),如果没有,转步骤(f);
(e).当测试用例控制被测代码运行时,记录下被测代码运行得出的实际返回值;
(f).测试用例按顺序依次控制被测代码走相应的分支,并通过被测代码的插桩函数将走过的分支记录下来;
(g).当检测到测试脚本运行结束时,通过自动检测模块比较检测路径是否覆盖完全,如果覆盖完全则提示成功信息,如果没有覆盖完全,则提示出覆盖不完全信息,同时自动检测模块比较定义的标准返回值与实际返回值是否相符,如果完全相符则提示成功信息,如果不完全相符,则提示出返回值不符信息;
(h).测试控制模块判断是否所有的测试脚本都已经被执行完毕,如果还有未被执行的测试脚本,测试控制模块执行下一个测试脚本,转步骤(c),如果检测到所有的测试脚本都已经执行完毕,测试结束。
本发明的有益效果是:实现了单元测试的全自动,自动检验单元测试的路径覆盖情况和返回值的正确性,大大提高了单元测试的测试效率,避免了由于人工的误判而带来的失误,并且可以方便的进行回归测试。

附图说明

图1是测试工程的整体结构图。
图2是测试自动检验的流程图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面与附图结合说明本发明的具体实施方式。
本发明的技术方案大致可分为四个部分:
第一个部分为测试控制模块,控制整个单元测试的进行。
第二个部分是测试脚本,测试脚本由很多个测试用例构成,这些测试用例是通过不同的插桩函数为被测单元构建的各种测试环境,测试用例越丰富,被测单元就会被测试的越充分。测试控制模块按顺序依次执行各个测试脚本, 控制整个测试过程。测试用例和被测代码的运行结果通过测试结果自动检测模块来检测其正确性。
第三个部分是测试自动检测模块,负责对测试结果进行自动检测,如路径覆盖是否完全,如果被测单元有返回值,则需要判断返回值是否正确。
第四个部分就是被测单元,被测单元在测试过程中只需要在相应分支增加一个插桩函数,不需要增加代码,当代码测试完成,发布版本的时候,只需要把插桩函数定义成空函数就可以了。
如图1测试工程的整体结构图所示,测试控制模块控制主测试过程,测试脚本由很多个测试用例组成,每个测试用例都根据需要通过插桩函数构建被测代码运行的一种环境,来控制被测代码的运行,在每个测试用例中设定一个标准路径,这个标准路径可以以字符串或有代表性的数字等多种方式设定,代表在本测试用例环境下被测代码要走的分支的先后次序和走的总分支数。运行测试脚本的时候,每个测试用例控制被测单元走相应的分支,并通过被测单元的插桩函数将走过的分支记录下来,测试脚本运行结束时,通过自动检测模块检测路径是否覆盖完全。如果覆盖完全则报成功信息,如果没有覆盖完全,则报出未覆盖的分支位置。
如果被测单元有返回值,则在测试用例中设定一个标准的正确的返回值,代表在本测试用例的环境下被测代码执行后返回的正确结果。测试用例在控制被测代码运行时,记录下测试代码运行得出的返回值,在自动检验过程中将通过自动检测模块比较标准返回值和测试代码运行得出的返回值,检测测试代码运行得出的返回值是否正确。
如图2测试自动检验的流程图所示:
(1)在测试脚本中定义一个标准路径数组,记录下测试用例依次要走的被测单元分支路径1、路径2、路径3……路径n,同时定义一个实际执行路径数组,这个数组在测试过程中记录下被测单元在测试用例构建的环境下实际所走的分支路径1′、路径2′、路径3′……路径n′;然后在被测代码的 每一个分支做一个插桩函数(这个插桩函数将在发布版本的时候重新定义成空函数,不需再更改经过测试的代码);下一步执行测试脚本,测试脚本依次控制每一个测试用例的执行,同时通过插桩函数将所走的分支记录在实际执行路径数组中。
(2)如果被测单元有返回值,则对应相关的测试用例定义一个本测试用例环境下被测代码应该返回的正确返回值,例如返回值1、返回值2……返回值n,在代码执行过程中,每个测试用例记录被测代码实际运行得到的返回值1′、返回值2′、返回值n′等。
(3)自动测试模块执行自动检测过程,比较标准路径与其对应的实际执行路径,判断路径1′与路径1是否相符、路径2′与路径2是否相符……路径n′与路径n是否相符,如果相符则提示成功信息,如果不相符则指出失败位置以及失败原因等信息;如果被测单元有返回值,自动测试模块比较返回值1′与返回值1是否相符、返回值2与返回值2′是否相符……返回值n′与返回值n是否相符,如果相符则提示成功,如果不相符则指出失败位置以及失败原因等信息。
如果单元测试发现了程序错误并且对程序代码进行了修改,此时执行回归测试,也就是对修改过的程序再重新测试一遍,以保证修改是正确的,同时保证所做的修改不会带来不可预料的行为或者新的错误。依据本发明的技术方案,在测试脚本中增加相应的测试用例,然后执行上述的测试过程即可施行回归测试。
测试完毕,将前述的插桩函数重新定义成空函数,直接发布版本,不需再更改经过测试的代码。