CN105468525A - 基于c代码模型的构件接口单元测试方法 - Google Patents
基于c代码模型的构件接口单元测试方法 Download PDFInfo
- Publication number
- CN105468525A CN105468525A CN201510843755.2A CN201510843755A CN105468525A CN 105468525 A CN105468525 A CN 105468525A CN 201510843755 A CN201510843755 A CN 201510843755A CN 105468525 A CN105468525 A CN 105468525A
- Authority
- CN
- China
- Prior art keywords
- function
- code
- test case
- test
- codes
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于C代码模型的构件接口单元测试方法,包括以下步骤:源代码扫描;配置测例;生成测试工程,其中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;代码编译;代码运行,得到运行输出结果;结果检查。本发明所述的基于C代码模型的构件接口单元测试方法,通过识别构件代码中的需要打桩的接口,在生成测试代码时自动替换桩函数,从而在不改变被测代码的情况下实现测试用例代码的自动生成,便于进行手工调试,并提供测例配置界面和准确的测试输出信息,从而降低测试工作的复杂度,减轻测试的工作量,提高效率。
Description
技术领域
本发明涉及计算机软件技术领域,具体涉及一种测试工具软件,尤其涉及一种基于C代码模型的构件接口单元测试方法。
背景技术
随着计算机技术的迅速发展和越来越广泛深入的应用于国民经济和社会生活的各个方面,随着软件系统的规模和负责性与日俱增,软件的生产成本和软件中存在的缺陷和故障造成的各类损失也大大增加,甚至会带来灾难后果。软件质量问题已成为所有使用软件和开发软件的人关注的焦点。由于软件是人脑的高度智力化的体现和产品这一特殊性,不同于其他科技和生产领域,因此软件与生俱来就有可能存在着缺陷。防止和减少这些可能存在的问题就是进行软件测试。测试是最有效的排除和防止软件缺陷与故障的手段,并由此促进了软件测试理论与技术实践的快速发展。新的测试理论,测试方法,测试技术手段在不断涌出,软件测试机构和组织也在迅速产生和发展。
软件测试方法按是否查看程序内部结构分为黑盒测试和白盒测试,白盒测试是把测试对象看作一个打开的盒子。按阶段划分可分为单元测试,集成测试,系统测试,验收测试。
由于大部分测试研究集中在应用软件方面,对系统软件的测试研究又多偏于编译程序的测试,致使不可靠的系统软件给用户带来许多麻烦。很多测试工具要求用户提供大量辅助信息,甚至严格要求测试者控制测试进程,这增加了测试者的工作量,测试工具常常输出很多信息,而其中一部分又无关紧要,这也增加了用户的负担。
发明内容
本发明的目的在于克服现有技术存在的以上问题,提供一种基于C代码模型的构件接口单元测试方法。
为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:
一种基于C代码模型的构件接口单元测试方法,包括以下步骤:
步骤一,源代码扫描,扫描所测函数的源代码,判断此函数是否出现调用外部函数,若出现调用函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,为此测例编写输入,预期输出,桩函数实现代码,使测例运行函数的某一个分支;
步骤三,生成测试工程,根据上一步骤的测例配置生成测例工程,其中包含可编译运行的测试代码,代码中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,运行编译后的程序,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,若两者相等,则此测例通过,若不相等,则此测例测试失败。
进一步的,所述步骤二的配置测例包括以下步骤:
1)指定输入值,为此测例编写输入参数的初始化值,对于每个测例,函数的输入值都会不同,不同的输入值导致函数运行不同的分支,产生不同的输出;
2)函数调用,指出此测例所测试的函数;
3)确定桩函数,若函数中出现外部调用函数,则确定此测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,指出此测例在指定输入值下预期得到的输出。
本发明的有益效果是:
本发明所述的基于C代码模型的构件接口单元测试方法,通过识别构件代码中的需要打桩的接口,在生成测试代码时自动替换桩函数,从而在不改变被测代码的情况下实现测试用例代码的自动生成,便于进行手工调试,并提供测例配置界面和准确的测试输出信息,从而降低测试工作的复杂度,减轻测试的工作量,提高效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为基于C代码模型的构件接口单元测试方法流程示意图。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
参照图1所示,一种基于C代码模型的构件接口单元测试方法,包括以下步骤:
步骤一,源代码扫描,扫描所测函数的源代码,判断此函数是否出现调用外部函数,若出现调用函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,包括以下步骤:
1)指定输入值,为此测例编写输入参数的初始化值,对于每个测例,函数的输入值都会不同,不同的输入值导致函数运行不同的分支,产生不同的输出;
2)函数调用,指出此测例所测试的函数;
3)确定桩函数,若函数中出现外部调用函数,则确定此测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,指出此测例在指定输入值下预期得到的输出;
步骤三,生成测试工程,根据上一步骤的测例配置生成测例工程,其中包含可编译运行的测试代码,其中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,调用visualstdio进行代码的运行,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,若两者相等,则此测例通过,若不相等,则此测例测试失败。
假设要测试的构件代码如下所示:
structNode;
typedefstructNode*PtrToNode
typedefPtrToNodePosition;
typedefPtrToNodeList;
intInsert(intX,ListL)
structNode
{
intElement;
PositionNext;
}
intDelete(intX,ListL)
{
PositionP,TmpCell;
P=L;
//查找前一个节点
while(P->Next!=NULL&&P->Next->Element!=X)
P=P->Next;
if(!IsLast(P,L))//判断是否是最后一个
{
TmpCell=P->Next;
P->Next=TmpCell->Next;
free(TmpCell);//释放空间
return1;
}
else
return0;
}
当要测试Delete函数时,则首先扫描Delete函数的代码,查找其中是否出现外部函数,此代码中出现了IsLast和free函数,对其做出标记。
此函数的输入参数为X,L两个参数,其功能是在链表L中找到值为X的节点,并删除.
此时要测试节点不是链表最后一个节点的分支,即进入if分支内运行,因此会运行IsLast和free函数,由于free函数是系统函数,能够保证其正确性,故不用打桩,而IsLast函数是用户自定义函数,因此IsLast函数需要被打桩,桩函数代码为:
intIsLast(PositionP,ListL)
{
returnP->next==NULL;
}
完整的测试代码为:
/*初始化*/
intresult=0;
intX=1;
L=(Node*)malloc(sizeof(Node)*2);//申请结点空间if(L==NULL)//判断是否有足够的内存空间printf("申请内存空间失败\n");L->next=NULL;
//调用插入节点函数,插入两个节点
Insert(1,L);
Insert(2,L);
/*函数调用*/
result=Delete(X,L);
/*输出*/
ASSERT_UINT8_EQUAL(result,1);//判断result的值是否为1
在函数运行时,不会调用的原IsLast函数,而是调用桩函数IsLast,以保证函数正确运行。
代码编译运行后会得到一个运行结果result,若result的值为1,则此测例运行通过,若result的值不为1,则此测例运行失败。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种基于C代码模型的构件接口单元测试方法,其特征在于,包括以下步骤:
步骤一,源代码扫描,扫描所测函数的源代码,判断此函数是否出现调用外部函数,若出现调用函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,为此测例编写输入,预期输出,桩函数实现代码,使测例运行函数的某一个分支;
步骤三,生成测试工程,在扫描到的源代码以及输入的配置参数间自动插入连接代码,从而自动生成可编译的测例工程,其中包含可编译运行的测试代码,代码中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,运行编译后的程序,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,若两者相等,则此测例通过,若不相等,则此测例测试失败。
2.根据权利要求1所述的构件接口单元测试方法,其特征在于:所述步骤二的配置测例包括以下步骤:
1)指定输入值,为此测例编写输入参数的初始化值,对于每个测例,函数的输入值都会不同,不同的输入值导致函数运行不同的分支,产生不同的输出;
2)函数调用,指出此测例所测试的函数;
3)确定桩函数,若函数中出现外部调用函数,则确定此测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,指出此测例在指定输入值下预期得到的输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510843755.2A CN105468525A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口单元测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510843755.2A CN105468525A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口单元测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105468525A true CN105468525A (zh) | 2016-04-06 |
Family
ID=55606256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510843755.2A Pending CN105468525A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口单元测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105468525A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294130A (zh) * | 2016-07-28 | 2017-01-04 | 浪潮电子信息产业股份有限公司 | 一种单元测试方法及装置 |
CN108563578A (zh) * | 2018-04-20 | 2018-09-21 | 平安科技(深圳)有限公司 | Sdk兼容性检测方法、装置、设备及可读存储介质 |
CN112527657A (zh) * | 2020-12-17 | 2021-03-19 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
US11010283B2 (en) | 2016-11-08 | 2021-05-18 | Microsoft Technology Licensing, Llc | Mock-based unit test(s) for an end-to-end test of a code snippet |
CN113656290A (zh) * | 2021-08-04 | 2021-11-16 | 支付宝(杭州)信息技术有限公司 | 一种mock点自动识别方法、装置以及设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110055A (zh) * | 2007-08-31 | 2008-01-23 | 中兴通讯股份有限公司 | 在单元测试中实现通用桩函数的装置及其实现方法 |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
US9043759B1 (en) * | 2011-01-27 | 2015-05-26 | Trimble Navigation Limited | System and method for generating software unit tests simultaneously with API documentation |
CN104657266A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于脚本的源代码插桩系统及方法 |
CN104915287A (zh) * | 2014-03-11 | 2015-09-16 | 富士施乐实业发展(中国)有限公司 | 单元测试方法及系统 |
CN104915292A (zh) * | 2015-06-12 | 2015-09-16 | 浪潮电子信息产业股份有限公司 | 一种linux内核模块动态打桩的方法 |
-
2015
- 2015-11-27 CN CN201510843755.2A patent/CN105468525A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101110055A (zh) * | 2007-08-31 | 2008-01-23 | 中兴通讯股份有限公司 | 在单元测试中实现通用桩函数的装置及其实现方法 |
US9043759B1 (en) * | 2011-01-27 | 2015-05-26 | Trimble Navigation Limited | System and method for generating software unit tests simultaneously with API documentation |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
CN104915287A (zh) * | 2014-03-11 | 2015-09-16 | 富士施乐实业发展(中国)有限公司 | 单元测试方法及系统 |
CN104657266A (zh) * | 2015-02-10 | 2015-05-27 | 上海创景计算机系统有限公司 | 基于脚本的源代码插桩系统及方法 |
CN104915292A (zh) * | 2015-06-12 | 2015-09-16 | 浪潮电子信息产业股份有限公司 | 一种linux内核模块动态打桩的方法 |
Non-Patent Citations (1)
Title |
---|
姚驰: "基于函数建模的面向路径自动打桩方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106294130A (zh) * | 2016-07-28 | 2017-01-04 | 浪潮电子信息产业股份有限公司 | 一种单元测试方法及装置 |
US11010283B2 (en) | 2016-11-08 | 2021-05-18 | Microsoft Technology Licensing, Llc | Mock-based unit test(s) for an end-to-end test of a code snippet |
CN108563578A (zh) * | 2018-04-20 | 2018-09-21 | 平安科技(深圳)有限公司 | Sdk兼容性检测方法、装置、设备及可读存储介质 |
CN108563578B (zh) * | 2018-04-20 | 2021-09-21 | 平安科技(深圳)有限公司 | Sdk兼容性检测方法、装置、设备及可读存储介质 |
CN112527657A (zh) * | 2020-12-17 | 2021-03-19 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
CN112527657B (zh) * | 2020-12-17 | 2022-08-30 | 展讯通信(上海)有限公司 | 单元测试中自动插桩的方法及设备 |
CN113656290A (zh) * | 2021-08-04 | 2021-11-16 | 支付宝(杭州)信息技术有限公司 | 一种mock点自动识别方法、装置以及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105468525A (zh) | 基于c代码模型的构件接口单元测试方法 | |
US9043759B1 (en) | System and method for generating software unit tests simultaneously with API documentation | |
US9280442B1 (en) | System and method for generating coverage reports for software unit tests | |
Chauhan et al. | Latest research and development on software testing techniques and tools | |
US9418230B2 (en) | Automated tools for building secure software programs | |
CN103970659B (zh) | 基于插桩技术的安卓应用软件自动化测试方法 | |
US20090217303A1 (en) | Test script transformation analyzer with change guide engine | |
US9304893B1 (en) | Integrated software development and test case management system | |
CN103425584A (zh) | 基于Java字节码的大型应用回归测试信息处理方法 | |
Samuel et al. | Slicing-based test case generation from UML activity diagrams | |
CN105279092A (zh) | 一种软件测试的方法及装置 | |
Wahler et al. | CAST: Automating software tests for embedded systems | |
Yoshida et al. | On refactoring support based on code clone dependency relation | |
CN104102581A (zh) | 一种实现单元测试的方法及装置 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
JP2010140408A (ja) | ソースコード変換装置 | |
Kaur et al. | Analysis of various software metrics used to detect bad smells | |
US8881126B2 (en) | Systems and methods for testing a compiler through compile-time decision feedback | |
EP2913758B1 (en) | Loop abstraction for model checking | |
CN110928760A (zh) | 一种嵌入式系统中的单元测试方法与装置 | |
CN104899042A (zh) | 一种嵌入式机器视觉检测程序开发方法及系统 | |
Zarrin et al. | An Integrated Framework to Specify Domain-Specific Modeling Languages. | |
JP2010140407A (ja) | ソースコード検査装置 | |
US20200249929A1 (en) | Automated candidate repair patch generation | |
Shahjahan et al. | Impact of refactoring on code quality by using graph theory: An empirical evaluation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160406 |
|
WD01 | Invention patent application deemed withdrawn after publication |