CN1987821A - 一种实现单元测试的方法及系统 - Google Patents
一种实现单元测试的方法及系统 Download PDFInfo
- Publication number
- CN1987821A CN1987821A CN 200610104897 CN200610104897A CN1987821A CN 1987821 A CN1987821 A CN 1987821A CN 200610104897 CN200610104897 CN 200610104897 CN 200610104897 A CN200610104897 A CN 200610104897A CN 1987821 A CN1987821 A CN 1987821A
- Authority
- CN
- China
- Prior art keywords
- test
- function
- module
- result
- tested
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明为一种单元测试系统及方法,尤其是一种利用记录函数信息的方式,将一函数抽离开发环境进行单元测试,依据该函数的测试实例对该函数进行测试产生的测试覆盖率及测试报告,做为该函数的品质参考数据的单元测试系统及方法。其技术解决方案为:该方法包括以下步骤:1)记录待测试函数的函数信息、储存测试实例以及对应的预期结果;2)将所记录的待测试函数加载,并初始化;3)读出存储的测试实例与预期结果;4)依序测试读出的测试实例,得到测试结果;5)判断是否测完,否则返回4),是则进6);6)产生本次测试的测试覆盖率,比较预期结果与测试结果,产生本次测试的测试报告,输出测试覆盖率与测试结果。
Description
技术领域
一种单元测试系统及方法,尤其是一种利用记录函数信息的方式,将一函数抽离开发环境进行单元测试,依据该函数的测试实例(test case)对该函数进行测试产生的测试覆盖率及测试报告,做为该函数的品质参考数据的单元测试系统及方法。
背景技术
单元测试是程序设计领域中多种测试的其中一种。通常是为了测试程序中的一个单元,例如一个类别(class)、一个函数(function)等,由负责该单元的程序设计人员作测试。所测试的是,其所撰写的程序代码单元是否依据程序设计人员所设想的方式执行,从而产生出符合预期的结果。单元测试是程序设计很重要的一环,它起着问题报告(bug report)的作用,告诉我们程序代码中那里有错误。由于当我们完成或修改一个单元后都需要再进行单元测试,若程序代码还有问题的话会继续显示出来。
随着软件的功能越来越强大,软件的程序代码也越来越冗长,软件的各模块在进行整合时所产生的臭虫(bug)也越来越多,因此在整合时要找出bug的复杂度也相对的提升,如果纯以人工的方式来找bug,往往仅能够发现该bug而无法提供更有价值的信息。
为了提供更有价值的测试信息,有程序设计师会撰写单元测试的程序,但却无法离开其开发的环境来做测试,以致于万一在软件各单元进行整合时的开发环境稍有不同,一旦整合的结果不如预期,依然无法得知究竟是整合环境造成的影响,或是两个单元的接口(interface)在数据传递上出了问题,如是前者,那么先前所做的单元测试就失去了意义。
另外,因为有单元测试的程序,那么就会需要有单元测试的测试实例来进行单元测试。不过测试实例能否测到多少部分的程序代码,也就是单元的测试覆盖率,就目前来说,还没有更好的测试方式。
发明内容
本发明为解决背景技术中存在的上述技术问题,而提供一种可产生的测试覆盖率及测试报告做为该函数的品质参考数据,以提高软件品质的单元测试的方法及其系统。
本发明的技术解决方案是:本发明为一种实现单元测试的方法,其特殊之处在于:该方法包括以下步骤:
1)首先记录待测试函数的函数信息、将待测试函数的测试实例以及与测试实例对应的预期结果储存在测试数据库中;
2)接着将所记录的待测试函数加载,并且在加载后将待测试函数初始化;
3)跟着由测试数据库中读出待测试函数的测试实例与测试实例对应的预期结果;
4)将读出的测试实例依序对待测试函数进行测试,以得到测试实例的测试结果;
5)判断测试实例是否全部测完,否则返回步骤4),是则进至步骤6);
6)在所有的测试实例全部测试完成之后产生本次测试的测试覆盖率,并借助比较测试实例对应的预期结果与测试结果,产生本次测试的测试报告,输出测试覆盖率与测试报告。
上述步骤6)之后还包括有步骤7)将测试时覆盖的程序代码完全相同的测试实例只保留一个,将其余的测试实例全数删除,把测试所产生的测试报告、测试覆盖率、以及删除后剩余的各测试实例的测试结果存入数据库中。
上述步骤2)中待测试函数初始化的过程中发现待测试的函数有呼叫其它的函数,则以被呼叫的函数的回传值取代被呼叫的函数。
一种实现上述的实现单元测试的方法的测试系统,其特殊之处在于:该系统包括测试数据库模块110、函数注册模块120、函数加载模块130、函数测试模块140、结果比较模块150、结果记录模块160,函数注册模块120分别接入测试数据库模块110和函数加载模块130,函数加载模块130接入函数测试模块140,函数测试模块140接入结果比较模块150,结果比较模块150接入结果记录模块160,结果记录模块160接入测试数据库模块110,测试数据库模块110接入函数加载模块130。
本发明利用记录函数信息的方式,将一函数抽离开发环境进行单元测试,根据该函数的测试实例对该函数进行测试,并且产生测试覆盖率及测试报告,通过本发明所产生的测试覆盖率及测试报告,可以获得一个量化的数值,使软件有一个品质上的指针,依次发现找出软件中的bug,以达到提高软件品质的效果。
附图说明
图1为本发明测试方法的流程图;
图2本发明测试的系统框图;
图3本发明实施例中的第一测试函数的程序代码;
图4为本发明实施中的第一测试函数修改过后的程序代码;
图5为本发明实施例中的执行本发明方法的过程;
图6为本发明实施例中由第一测试实例测试第一测试函数产生的测试覆盖率示意图;
图7为本发明实施例中由第一测试实例测试第一测试函数产生的测试报告;
图8为本发明实施例中由第一与第二测试实例测试修改后的第一测试函数产生的测试覆盖率示意图;
图9为本发明实施例中由第一与第二测试实例测试修改后的第一测试函数产生的测试报告;
图10为本发明实施例由第三与第四测试实例测试第二测试函数产生的测试覆盖率示意图;
图11为本发明实施例由第三与第四测试实例测试第二测试函数产生的测试报告;
图12为本发明实施例由第三测试实例测试第二测试函数的测试覆盖率示意图;
图13为本发明实施例由第四测试实例测试第二测试函数的测试覆盖率示意图。
具体实施方式
参见图1,本发明的具体方法步骤如下:
1)首先记录待测试函数的函数信息、将待测试函数的测试实例以及与测试实例对应的预期结果储存在测试数据库中;
2)接着将所记录的待测试函数加载,并且在加载后将待测试函数初始化,该初始化的过程中发现待测试的函数有呼叫其它的函数,则以被呼叫的函数的回传值取代被呼叫的函数;
3)跟着由测试数据库中读出待测试函数的测试实例与测试实例对应的预期结果;
4)将读出的测试实例依序对待测试函数进行测试,以得到测试实例的测试结果;
5)判断测试实例是否全部测完,否则返回步骤4),是则进至步骤6);
6)在所有的测试实例全部测试完成之后产生本次测试的测试覆盖率,并借助比较测试实例对应的预期结果与测试结果,产生本次测试的测试报告,输出测试覆盖率与测试结果。
7)将测试时覆盖的程序代码完全相同的测试实例只保留一个,将其余的测试实例全数删除,把测试所产生的测试报告、测试覆盖率、以及删除后剩余的各测试实例的测试结果存入数据库中。
参见图2,本发明的系统包含有测试数据库模块110、函数注册模块120、函数加载模块130、函数测试模块140、结果比较模块150、结果记录模块160。其中测试数据库模块110负责储存函数注册模块120所记录的待测试函数之函数信息、被记录之待测试函数之测试实例、及测试实例对应的预期结果;函数注册模块120负责将待测试函数的函数名称、回传值与各参数的定义等函数信息存入测试数据库模块110中;函数加载模块130负责由测试数据库模块110读出透过函数注册模块120所储存的函数信息,依据读出的函数信息将待测试函数加载函数测试模块140中,并进行初始化,如初始化的过程中发现待测试的函数有呼叫其它的函数,则必需要以被呼叫的函数的回传值取代被呼叫的函数,这样可确保一次测试仅针对一个函数,这样如果出现问题,可断定是此函数本身问题。函数测试模块140负责读出储存在测试数据库模块110的待测试函数的测试实例及测试实例对应的预期结果,将读出的测试实例依序对待测试的函数进行测试,可以产生测试实例对应的测试结果,同时可以在所有的测试实例全部测试完成之后产生并输出所有测试实例对待测试函数进行测试的测试覆盖率;结果比较模块150负责比较由函数测试模块140产生的测试结果与测试结果对应的测试实例对应的预期结果,产生测试报告,并将该测试报告输出;结果记录模块160会于稍后说明。
当使用者欲使用本发明时,首先要经由函数注册模块120将待测试函数的函数信息储存至测试数据库110中,并将测试实例与其对应的预期结果也存入测试数据库模块110中,接着开始进行测试,函数加载模块130会由测试数据库模块110读出待测试函数的函数信息,依据读出的函数信息取得待测试函数的程序代码,将取得的程序代码加载在函数测试模块140中,并将待测试的函数初始化,跟着函数测试模块140会读出存于测试数据库模块110的待测试函数的测试实例,以及测试实例对应的预期结果,函数测试模块140在读出测试实例之后,会将读出的测试实例依序对待测试的函数进行测试,并产生测试实例对应的测试结果,同时函数测试模块140会将各测试实例进行测试所覆盖过的待测试函数的程序代码记录下来,当所有的测试实例全部测试完成之后,函数测试模块140会依据各测试实例所覆盖的程序代码产生测试覆盖率并显示,接着结果比较模块150会比较由函数测试模块140产生的测试结果与测试结果对应的测试实例对应的预期结果,产生测试报告并显示。
下面结合具体实施例对本发明做进一步的详细描述:
参见图3至9,第一测试函数310实现由输入的变量i与j找出较大的变量后输出,程序设计人员使用本发明进行测试,首先会输入第一测试函数310的函数资料-函数名称3311、回传值3312、参数一3313、参数二3314-来执行本发明的注册程序331,并另外将第一测试函数310的第一测试实例“(5,3))”与第一预期结果“(5)”存入数据库中,接着执行本发明的测试程序332,本发明便会去数据库中取得第一测试函数310的第一测试实例并将第一测试函数加载并进行测试,测试完成之后产生测试覆盖率340,其中第一测试函数310前面的粗黑体数字为该行程序代码被测试时所执行到的次数,前面的次数为零的该行程序代码341表示本次测试的测试实例没有覆盖到该行程序代码。测试完成后产生测试报告350,由测试报告350中的测试失败讯息352可以知道第一测试函数310以第一测试实例进行测试时出现问题,可以提供程序设计人员对第一测试函数310进行修改。同时,由测试覆盖率340可知第一测试函数310的程序代码未全部经过测试,因此须要再增加测试实例来测试该行程序代码。程序设计人员在第一测试函数修改完成320之后,将第二测试实例“(2,7)”与第二预期结果“(7)”存至数据库中,再次对修改完成后的第一测试函数320进行测试,测试完成之后产生的测试覆盖率360显示第一测试实例与第二测试实例已将第一测试函数的程序代码全部测试完成,测试报告所显示的讯息373表示为全部测试实例均如预期结果,如此一来,第一测试函数310的品质便可以有所凭依,将来会出错的机率大幅减少。
本发明中结果比较模块150还可以在函数测试模块140进行测试时,将覆盖的程序代码完全相同的测试实例中只保留一个进行测试,其余的测试实例全数删除,将一组程序代码完全相同的测试实例中只选择一个作为代表去执行测试,这样可节省大量执行测试实例的时间,结果记录模块160负责将结果比较模块150产生的测试报告、函数测试模块140产生的测试覆盖率与测试得到的测试结果存入测试数据库模块110中,如此可以便可以提供后续的回归测试使用,以使测试实例有不断重用的功效。因此结果比较模块150在比较由函数测试模块140产生的各测试结果与对应于各测试实例的预期结果之后,会依据各测试实例的测试覆盖率,将覆盖的程序代码完全相同的测试实例只保留一个,其余的全部删除,接着才会产生测试报告并显示,并且把测试所产生的测试报告、测试覆盖率、以及将删除后剩余的各测试实例的测试结果存入数据库中。
参见图10-13,第二测试函数410实现由输入的变量i与j找出较小的变量后输出,程序设计人员执行本发明的注册程序后,将第二测试函数410的第三测试实例“(2,7)”与第三预期结果“(2)”、第四测试实例“(4,8)”与第四预期结果“(4)”存入数据库中,对第二测试函数410进行测试,测试完成之后产生测试覆盖率420与测试报告430,并将产生的测试覆盖率420与测试报告430以及第三、第四测试实例的测试结果存入数据库中,接着,第三测试实例的测试覆盖率421与第四测试实例的测试覆盖率422完全相同,测试报告430显示第三测试实例的删除讯息433。
Claims (4)
1、一种实现单元测试的方法,其特征在于:该方法包括以下步骤:
1)首先记录待测试函数的函数信息、将待测试函数的测试实例以及与测试实例对应的预期结果储存在测试数据库中;
2)接着将所记录的待测试函数加载,并且在加载后将待测试函数初始化;
3)跟着由测试数据库中读出待测试函数的测试实例与测试实例对应的预期结果;
4)将读出的测试实例依序对待测试函数进行测试,以得到测试实例的测试结果;
5)判断测试实例是否全部测完,否则返回步骤4),是则进至步骤6);
6)在所有的测试实例全部测试完成之后产生本次测试的测试覆盖率,并借助比较测试实例对应的预期结果与测试结果,产生本次测试的测试报告,输出测试覆盖率与测试结果。
2、根据权利要求1所述的实现单元测试的方法,其特征在于:所述步骤6)之后还包括有步骤7)将测试时覆盖的程序代码完全相同的测试实例只保留一个,将其余的测试实例全数删除,把测试所产生的测试报告、测试覆盖率、以及删除后剩余的各测试实例的测试结果存入数据库中。
3、根据权利要求1或2所述的实现单元测试的方法,其特征在于:所述步骤2)中待测试函数初始化的过程中发现待测试的函数有呼叫其它的函数,则以被呼叫的函数的回传值取代被呼叫的函数。
4、一种实现权利要求1所述的实现单元测试的方法的测试系统,其特征在于:该系统包括测试数据库模块110、函数注册模块120、函数加载模块130、函数测试模块140、结果比较模块150、结果记录模块160,所述函数注册模块120分别接入测试数据库模块110和函数加载模块130,所述函数加载模块130接入函数测试模块140,所述函数测试模块140接入结果比较模块150,所述结果比较模块150接入结果记录模块160,所述结果记录模块160接入测试数据库模块110,所述测试数据库模块110接入函数加载模块130。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101048978A CN100451988C (zh) | 2006-11-14 | 2006-11-14 | 一种实现单元测试的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006101048978A CN100451988C (zh) | 2006-11-14 | 2006-11-14 | 一种实现单元测试的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1987821A true CN1987821A (zh) | 2007-06-27 |
CN100451988C CN100451988C (zh) | 2009-01-14 |
Family
ID=38184623
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006101048978A Expired - Fee Related CN100451988C (zh) | 2006-11-14 | 2006-11-14 | 一种实现单元测试的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100451988C (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567152A (zh) * | 2010-12-27 | 2012-07-11 | 佛山市顺德区顺达电脑厂有限公司 | 在线测试装置自动分点系统及其方法 |
CN103309807A (zh) * | 2013-05-31 | 2013-09-18 | 中国联合网络通信集团有限公司 | 程序测试方法及平台 |
CN103364713A (zh) * | 2012-03-31 | 2013-10-23 | 中芯国际集成电路制造(上海)有限公司 | 电性失效分析的测试方法及装置 |
CN103778052A (zh) * | 2012-10-17 | 2014-05-07 | 百度在线网络技术(北京)有限公司 | 一种前端javascript代码的测试方法和装置 |
CN104657270A (zh) * | 2015-02-28 | 2015-05-27 | 北京嘀嘀无限科技发展有限公司 | 测试方法和系统 |
CN105204982A (zh) * | 2014-06-13 | 2015-12-30 | 腾讯科技(深圳)有限公司 | 代码测试方法及代码测试系统 |
CN105301480A (zh) * | 2015-11-19 | 2016-02-03 | 四川和芯微电子股份有限公司 | Soc芯片的测试方法 |
CN105487982A (zh) * | 2015-12-22 | 2016-04-13 | 艾体威尔电子技术(北京)有限公司 | Api测试方法及系统 |
CN106294130A (zh) * | 2016-07-28 | 2017-01-04 | 浪潮电子信息产业股份有限公司 | 一种单元测试方法及装置 |
CN104182348B (zh) * | 2014-09-15 | 2017-04-12 | 北京国双科技有限公司 | 软件测试方法及装置 |
CN107038110A (zh) * | 2016-02-03 | 2017-08-11 | 北京京东尚科信息技术有限公司 | 白盒测试的方法和系统 |
CN108572911A (zh) * | 2017-03-14 | 2018-09-25 | 北京京东尚科信息技术有限公司 | 自动化安全测试方法、装置、电子设备和可读存储介质 |
CN110603546A (zh) * | 2017-05-09 | 2019-12-20 | 帝斯贝思数字信号处理和控制工程有限公司 | 技术系统以及尤其是自主驾驶车辆的产品成熟度确定 |
CN113360377A (zh) * | 2021-06-01 | 2021-09-07 | 北京京东振世信息技术有限公司 | 一种测试方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
CN1273897C (zh) * | 2002-11-04 | 2006-09-06 | 华为技术有限公司 | 一种单元测试自动化方法 |
CN1641601A (zh) * | 2004-01-04 | 2005-07-20 | 华为技术有限公司 | 一种软件的单元测试方法 |
CN1767453A (zh) * | 2004-10-31 | 2006-05-03 | 中兴通讯股份有限公司 | 自动测试方法和系统 |
-
2006
- 2006-11-14 CN CNB2006101048978A patent/CN100451988C/zh not_active Expired - Fee Related
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102567152A (zh) * | 2010-12-27 | 2012-07-11 | 佛山市顺德区顺达电脑厂有限公司 | 在线测试装置自动分点系统及其方法 |
CN103364713A (zh) * | 2012-03-31 | 2013-10-23 | 中芯国际集成电路制造(上海)有限公司 | 电性失效分析的测试方法及装置 |
CN103778052A (zh) * | 2012-10-17 | 2014-05-07 | 百度在线网络技术(北京)有限公司 | 一种前端javascript代码的测试方法和装置 |
CN103778052B (zh) * | 2012-10-17 | 2017-12-19 | 百度在线网络技术(北京)有限公司 | 一种前端javascript代码的测试方法和装置 |
CN103309807A (zh) * | 2013-05-31 | 2013-09-18 | 中国联合网络通信集团有限公司 | 程序测试方法及平台 |
CN103309807B (zh) * | 2013-05-31 | 2016-03-02 | 中国联合网络通信集团有限公司 | 程序测试方法及平台 |
CN105204982A (zh) * | 2014-06-13 | 2015-12-30 | 腾讯科技(深圳)有限公司 | 代码测试方法及代码测试系统 |
CN104182348B (zh) * | 2014-09-15 | 2017-04-12 | 北京国双科技有限公司 | 软件测试方法及装置 |
CN104657270A (zh) * | 2015-02-28 | 2015-05-27 | 北京嘀嘀无限科技发展有限公司 | 测试方法和系统 |
CN105301480A (zh) * | 2015-11-19 | 2016-02-03 | 四川和芯微电子股份有限公司 | Soc芯片的测试方法 |
CN105487982A (zh) * | 2015-12-22 | 2016-04-13 | 艾体威尔电子技术(北京)有限公司 | Api测试方法及系统 |
CN107038110A (zh) * | 2016-02-03 | 2017-08-11 | 北京京东尚科信息技术有限公司 | 白盒测试的方法和系统 |
CN106294130A (zh) * | 2016-07-28 | 2017-01-04 | 浪潮电子信息产业股份有限公司 | 一种单元测试方法及装置 |
CN108572911A (zh) * | 2017-03-14 | 2018-09-25 | 北京京东尚科信息技术有限公司 | 自动化安全测试方法、装置、电子设备和可读存储介质 |
CN110603546A (zh) * | 2017-05-09 | 2019-12-20 | 帝斯贝思数字信号处理和控制工程有限公司 | 技术系统以及尤其是自主驾驶车辆的产品成熟度确定 |
CN113360377A (zh) * | 2021-06-01 | 2021-09-07 | 北京京东振世信息技术有限公司 | 一种测试方法和装置 |
CN113360377B (zh) * | 2021-06-01 | 2023-11-07 | 北京京东振世信息技术有限公司 | 一种测试方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100451988C (zh) | 2009-01-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100451988C (zh) | 一种实现单元测试的方法及系统 | |
CN107861870A (zh) | 接口测试及测试数据生成方法、装置、终端和存储介质 | |
CN100468356C (zh) | 通过属性控制的测试实例继承 | |
US20050102572A1 (en) | Memory debugger for system-on-a-chip designs | |
CN109726105A (zh) | 测试数据构造方法、装置、设备及存储介质 | |
CN102598001B (zh) | 用于执行对逻辑设计的分析的方法和系统 | |
US11361248B2 (en) | Multi-stage machine learning-based chain diagnosis | |
US20070061641A1 (en) | Apparatus and method for generating test driver | |
CN109783346B (zh) | 基于关键字驱动的自动化测试方法、装置及终端设备 | |
US8140986B2 (en) | Generating test scenarios using reusable triggers indicating graphical user interface (GUI) elements and actions | |
CN105912460A (zh) | 一种基于qtp的软件测试方法及系统 | |
FR2921170A1 (fr) | Procede de generation automatique de programmes de test d'un logiciel de fonctionnement d'un systeme embarque a bord d'un aeronef, et dispositif de mise en oeuvre | |
CN104750606B (zh) | 一种基于反射的自动化测试方法 | |
CN103678104B (zh) | 基于数据的自动化测试方法及装置 | |
US20050229045A1 (en) | Method and device for managing software error | |
CN111428431A (zh) | 一种支持eda软件的自动化测试并记录的方法及系统 | |
CN107710166A (zh) | 利用符号快速错误检测的硅后验证和调试 | |
CN110008119A (zh) | 报表测试方法、装置、计算机设备和存储介质 | |
CN107622017B (zh) | 一种通用自动化软件测试的解析方法 | |
CN110069414A (zh) | 回归测试方法及系统 | |
Mashkoor et al. | Model‐driven engineering of safety and security software systems: A systematic mapping study and future research directions | |
CN101937395B (zh) | 一种用于漏洞检测的检测对象程序特征提取方法 | |
Cansell et al. | Refinement: A constructive approach to formal software design for a secure e-voting interface | |
CN102929614A (zh) | 一种用于漏洞检测的可调对象程序特征提取方法 | |
CN115328860A (zh) | 一种Teamcenter登录日志的分析方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090114 Termination date: 20091214 |