CN105607996A - 基于c代码模型的构件接口组装测试方法 - Google Patents
基于c代码模型的构件接口组装测试方法 Download PDFInfo
- Publication number
- CN105607996A CN105607996A CN201510843598.5A CN201510843598A CN105607996A CN 105607996 A CN105607996 A CN 105607996A CN 201510843598 A CN201510843598 A CN 201510843598A CN 105607996 A CN105607996 A CN 105607996A
- Authority
- CN
- China
- Prior art keywords
- function
- test
- code
- test case
- assembling
- 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
Abstract
本发明公开了一种基于C代码模型的构件接口组装测试方法,包括以下步骤:源代码扫描,扫描所测的几个需要组装的函数的源代码;配置测例,组装测试针对多个接口的调用序列进行测例的配置;生成测试工程;代码编译;代码运行;结果检查。本发明所述的基于C代码模型的构件接口组装测试方法,通过识别构件代码中的需要打桩的接口,在生成测试代码时自动替换桩函数,从而在不改变被测代码的情况下实现测试用例代码的自动生成,便于进行手工调试,并提供测例配置界面和准确的测试输出信息,从而降低测试工作的复杂度,减轻测试的工作量,提高效率。
Description
技术领域
本发明涉及计算机软件技术领域,具体涉及一种测试工具软件,尤其涉及一种基于C代码模型的构件接口组装测试方法。
背景技术
随着计算机技术的迅速发展和越来越广泛深入的应用于国民经济和社会生活的各个方面,随着软件系统的规模和负责性与日俱增,软件的生产成本和软件中存在的缺陷和故障造成的各类损失也大大增加,甚至会带来灾难后果。软件质量问题已成为所有使用软件和开发软件的人关注的焦点。由于软件是人脑的高度智力化的体现和产品这一特殊性,不同于其他科技和生产领域,因此软件与生俱来就有可能存在着缺陷。防止和减少这些可能存在的问题就是进行软件测试。测试是最有效的排除和防止软件缺陷与故障的手段,并由此促进了软件测试理论与技术实践的快速发展。新的测试理论,测试方法,测试技术手段在不断涌出,软件测试机构和组织也在迅速产生和发展。
软件测试方法按是否查看程序内部结构分为黑盒测试和白盒测试,白盒测试是把测试对象看作一个打开的盒子。按阶段划分可分为单元测试,集成测试,系统测试,验收测试。
由于大部分测试研究集中在应用软件方面,对系统软件的测试研究又多偏于编译程序的测试,致使不可靠的系统软件给用户带来许多麻烦。很多测试工具要求用户提供大量辅助信息,甚至严格要求测试者控制测试进程,这增加了测试者的工作量,测试工具常常输出很多信息,而其中一部分又无关紧要,这也增加了用户的负担。
发明内容
本发明的目的在于克服现有技术存在的以上问题,提供一种基于C代码模型的构件接口组装测试方法。
为实现上述技术目的,达到上述技术效果,本发明通过以下技术方案实现:
一种基于C代码模型的构件接口组装测试方法,包括以下步骤:
步骤一,源代码扫描,扫描所测的几个需要组装的函数的源代码,判断这些函数是否出现调用外部构件的函数,若出现调用外部构件函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,组装测试针对多个接口的调用序列进行测例的配置;
步骤三,生成测试工程,根据上一步骤的测例配置与组装测试序列的先后顺序将所有函数代码进行组合,并生成数据流的转接代码,得到测例工程,其中包含可编译运行的测试代码,代码中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,运行编译后的程序,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,此预期输出包括函数最后的输出和函数运行中的输出,若两者相等,则此测例通过,若不相等,则此测例测试失败。
进一步的,所述步骤二的配置测例包括以下步骤:
1)指定输入值,先为组装测例的第一个函数的输入指定输入值,对于后面几个函数,若其某个输入参数不是来自本次组装序列的上一个函数的输出参数,也应为该参数制定输入值;
2)函数调用,指出本次组装测试所要测试的几个函数;
3)确定桩函数,若所有需要测试的函数中出现了外部调用函数,则确定本测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,根据输入值对组装序列的每一个函数的输出做出预测。
本发明的有益效果是:
本发明所述的基于C代码模型的构件接口组装测试方法,通过识别构件代码中的需要打桩的接口,在生成测试代码时自动替换桩函数,从而在不改变被测代码的情况下实现测试用例代码的自动生成,便于进行手工调试,并提供测例配置界面和准确的测试输出信息,从而降低测试工作的复杂度,减轻测试的工作量,提高效率。不仅便于检查组装测试运行的最终结果,而且通过对接口调用序列的中间结果与期望结果进行比对,从而判断错误所在的位置。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。本发明的具体实施方式由以下实施例及其附图详细给出。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为基于C代码模型的构件接口组装测试方法流程示意图。
具体实施方式
下面将参考附图并结合实施例,来详细说明本发明。
参照图1所示,一种基于C代码模型的构件接口组装测试方法,包括以下步骤:
步骤一,源代码扫描,扫描所测的几个需要组装的函数的源代码,判断这些函数是否出现调用外部构件的函数,若出现调用外部构件函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,组装测试针对多个接口的调用序列进行测例的配置,包括以下步骤:
1)指定输入值,先为组装测例的第一个函数的输入指定输入值,对于后面几个函数,若其某个输入参数不是来自本次组装序列的上一个函数的输出参数,也应为该参数制定输入值;
2)函数调用,指出本次组装测试所要测试的几个函数;
3)确定桩函数,若所有需要测试的函数中出现了外部调用函数,则确定本测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,根据输入值对组装序列的每一个函数的输出做出预测。
步骤三,生成测试工程,根据上一步骤的测例配置与组装测试序列的先后顺序将所有函数代码进行组合,并生成数据流的转接代码,得到测例工程,其中包含可编译运行的测试代码,代码中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,运行编译后的程序,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,此预期输出包括函数最后的输出和函数运行中的输出,若两者相等,则此测例通过,若不相等,则此测例测试失败。
假设要测试的构件代码如下所示:
structNode;
typedefstructNode*PtrToNode
typedefPtrToNodePosition;
typedefPtrToNodeList;
intInsert(intX,ListL);
intDelete(intX,ListL);
structNode
{
intElement;
PositionNext;
}
ListInit()
{
intX=1;
intY=1;
ListL=(Node*)malloc(sizeof(Node)*2);//申请结点空间
if(L==NULL)//判断是否有足够的内存空间
printf("申请内存空间失败\n");
L->next=NULL;
returnL;
}
intInsert(intX,ListL)
{
PositionTmpCell;
TmpCell=malloc(sizeof(structNode));//申请结点空间
if(TmpCell==NULL)//判断是否有足够的内存空间
return0;
TmpCell->Element=X;
TmpCell->Next=L->Next;
L->Next=TmpCell;
return1;
}
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;
}
当要测试Init函数,Insert函数和Delete函数组装时,则首先扫描Init函数,Insert函数和Delete函数的代码,查找其中是否出现外部函数,此代码中出现了malloc,IsLast,free函数,对其做出标记。
Init函数对链表进行初始化,Insert函数的输入参数为X,L两个参数,其功能是在链表L的头部插入一个值为X的节点,对其进行初始化赋值;Delete函数的输入参数为X,L两个参数,其功能是在链表L中找到值为X的节点并删除。
此时要使三个函数的组装正确进行至结束,由于malloc,free函数是系统自带函数,为了让其正确运行,不进行打桩,而IsLast函数不是此构件函数,因此需要打桩,桩函数代码为:
intIsLast(PositionP,ListL)
{
returnP->Next==NULL;
}
完整的测试代码为:
/*初始化*/
intlast_result=0;
intmid_result=0;
/*函数调用*/
ListL=Init();
Insert(X,L)
mid_result=Insert(X+1,L);
last_result=Delete(Y,L);
/*输出*/
ASSERT_UINT8_EQUAL(mid_result,1);
ASSERT_UINT8_EQUAL(last_result,1);
在函数运行时,调用桩函数IsLast,以保证函数运行正确。
代码编译运行后会得到一个运行结果mid_result,last_result,若mid_result,last_result的值都为1,则此测例运行通过,否则,此测例运行失败。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (2)
1.一种基于C代码模型的构件接口组装测试方法,其特征在于,包括以下步骤:
步骤一,源代码扫描,扫描所测的几个需要组装的函数的源代码,判断这些函数是否出现调用外部构件的函数,若出现调用外部构件函数,则将代码中所调用的外部函数全部做上标记;
步骤二,配置测例,组装测试针对多个接口的调用序列进行测例的配置;
步骤三,生成测试工程,根据上一步骤的测例配置与组装测试序列的先后顺序将所有函数代码进行组合,并生成数据流的转接代码,得到测例工程,其中包含可编译运行的测试代码,代码中被标记的外部调用函数若被确定为桩函数,则其代码用桩函数代码替换,若函数不被打桩,则其代码还是使用其原函数代码;
步骤四,代码编译,调用visualstdio进行代码的编译;
步骤五,代码运行,运行编译后的程序,得到运行输出结果;
步骤六,结果检查,检查预期输出和实际输出是否相等,此预期输出包括函数最后的输出和函数运行中的输出,若两者相等,则此测例通过,若不相等,则此测例测试失败。
2.根据权利要求1所述的构件接口组装测试方法,其特征在于:所述步骤二的配置测例包括以下步骤:
1)指定输入值,先为组装测例的第一个函数的输入指定输入值,对于后面几个函数,若其某个输入参数不是来自本次组装序列的上一个函数的输出参数,也应为该参数制定输入值;
2)函数调用,指出本次组装测试所要测试的几个函数;
3)确定桩函数,若所有需要测试的函数中出现了外部调用函数,则确定本测例中所需要的桩函数,并编写桩函数代码;
4)判断输出,根据输入值对组装序列的每一个函数的输出做出预测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510843598.5A CN105607996A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口组装测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510843598.5A CN105607996A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口组装测试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105607996A true CN105607996A (zh) | 2016-05-25 |
Family
ID=55987948
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510843598.5A Pending CN105607996A (zh) | 2015-11-27 | 2015-11-27 | 基于c代码模型的构件接口组装测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105607996A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020066077A1 (en) * | 2000-05-19 | 2002-05-30 | Leung Wu-Hon Francis | Methods and apparatus for preventing software modifications from invalidating previously passed integration tests |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101212759A (zh) * | 2006-12-26 | 2008-07-02 | 中兴通讯股份有限公司 | 一种手机软件集成测试方法 |
CN101334753A (zh) * | 2007-06-26 | 2008-12-31 | 中兴通讯股份有限公司 | 一种单元测试方法及其装置 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
-
2015
- 2015-11-27 CN CN201510843598.5A patent/CN105607996A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020066077A1 (en) * | 2000-05-19 | 2002-05-30 | Leung Wu-Hon Francis | Methods and apparatus for preventing software modifications from invalidating previously passed integration tests |
CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
CN101212759A (zh) * | 2006-12-26 | 2008-07-02 | 中兴通讯股份有限公司 | 一种手机软件集成测试方法 |
CN101334753A (zh) * | 2007-06-26 | 2008-12-31 | 中兴通讯股份有限公司 | 一种单元测试方法及其装置 |
CN101706753A (zh) * | 2009-12-11 | 2010-05-12 | 武汉虹信通信技术有限责任公司 | 一种基于Perl的单元测试框架及方法 |
CN102955740A (zh) * | 2012-12-13 | 2013-03-06 | 中国航空无线电电子研究所 | 一种基于Perl的驱动函数和桩函数生成方法 |
Non-Patent Citations (2)
Title |
---|
姚驰: "基于函数建模的面向路径自动打桩方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
陈承欢: "《软件工程项目驱动式教程》", 31 January 2015, 北京:清华大学出版社 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chillarege et al. | Orthogonal defect classification-a concept for in-process measurements | |
Chow | Testing software design modeled by finite-state machines | |
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
US8402438B1 (en) | Method and system for generating verification information and tests for software | |
US9239773B1 (en) | Method and system for debugging a program that includes declarative code and procedural code | |
Liu et al. | A decompositional approach to automatic test case generation based on formal specifications | |
EP2960799A1 (en) | Defect localization in software integration tests | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
CN103530228A (zh) | 一种基于模型的软件测试方法 | |
Debbarma et al. | A review and analysis of software complexity metrics in structural testing | |
US6449750B1 (en) | Design verification device, method and memory media for integrated circuits | |
CN105468508A (zh) | 代码检测方法及装置 | |
CN105468525A (zh) | 基于c代码模型的构件接口单元测试方法 | |
CN108897678B (zh) | 静态代码检测方法和静态代码检测系统、存储设备 | |
Givens et al. | Exploring the internal state of user interfaces by combining computer vision techniques with grammatical inference | |
Qusef | Test-to-code traceability: Why and how? | |
CN105607996A (zh) | 基于c代码模型的构件接口组装测试方法 | |
CN110347576A (zh) | 伪代码调试方法及装置 | |
CN111966665B (zh) | 数据迁移测试方法及装置 | |
JP6037976B2 (ja) | ソースコード生成装置 | |
Liu et al. | Efficient testing based on logical architecture | |
Xavier et al. | Type checking Circus specifications | |
CN114756217B (zh) | 基于插件的脚本生成系统 | |
CN114385271B (zh) | 基于插件的命令执行系统 | |
Molnar | Live visualization of GUI application code coverage with GUITracer |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160525 |