满足do-178c的代码覆盖率生成方法

文档序号:9929465阅读:1258来源:国知局
满足do-178c的代码覆盖率生成方法
【技术领域】
[0001]本发明涉及机载软件开发技术领域,具体涉及一种满足D0-178C的代码覆盖率生成方法。
【背景技术】
[0002]非机载软件研制过程中,软件开发环境大多采用集成开发环境(IDEJntegratedDevelopment Environment)。集成开发环境是用于提供程序开发环境的应用程序,一般包括编辑器、编译器、链接器和加载器,是集成了代码编写功能、编译功能、链接功能以及加载功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套都可以叫集成开发环境,如微软的Visual Stud1系列,Borland的C++ Builder、Delphi系列等。
[0003]由于集成开发环境提供的默认配置、编译参数以及链接参数足以支持编译过程和链接过程,非机载软件的编译过程和链接过程极少被关注。但机载软件作为高安全性和高可靠性软件,其在开发过程中应确保源代码被正确编译和链接且没有引入错误,这要求集成开发环境在进行编译工作和链接工作时应分析编译器和链接器的输出。图1是机载软件集成开发环境的结构示意图,集成开发环境包括编辑器10、编译器11、链接器12以及加载器
13。其中,编辑器10向编译器11提供源代码和编译指南,编译器11向链接器12提供目标代码,链接器12向加载器13提供可执行代码,加载器13在加载指南的指导下将可执行代码加载到目标机上。
[0004]机载软件在集成开发过程中,根据软件等级要求的不同需要开展不同类型的工作,D0-178C规范要求C级及以上等级的机载软件需要满足代码覆盖率要求。进行测试时,代码覆盖率常常被作为衡量测试好坏的指标,甚至用代码覆盖率来考核测试任务完成情况。传统的机载软件代码覆盖率测试是通过手工在代码中插入检查点,工作量大,导致测试效率低。

【发明内容】

[0005]本发明所要解决的是机载软件代码覆盖率测试效率低的问题。
[0006]本发明通过下述技术方案实现:
一种满足D0-178C的代码覆盖率生成方法,包括:获得待测源文件的数量;根据待测源文件的数量生成覆盖率内存空间,每个待测源文件对应生成一个覆盖率内存空间;为覆盖率内存空间占据的比特位生成位置索引;在待测源文件的功能函数中插入探针函数,所述探针函数用于对所述位置索引赋值;对待测源文件进行编译和链接以在所述覆盖率内存空间中生成代码覆盖率?目息。
[0007]通过对待测源文件进行编译和链接,若待测源文件中的功能函数被执行,则插入到功能函数中的探针函数也随之被执行,从而自动为所述位置索引赋值,即自动对待测源文件对应的覆盖率内存空间写入数据,提高了机载软件代码覆盖率测试效率。通过统计覆盖率内存空间中写入数据的情况,即可以获得每个待测源文件的代码覆盖率,从而获得整个工程文件的代码覆盖率。并且,由于本发明是在待测源文件的功能函数中插入探针函数,即基于功能函数进行插粧,根据覆盖率内存空间中写入数据的情况可以列举所有功能函数的代码覆盖率情况,从而指导开发人员完成源代码的改进,指导测试人员完成测试用例的更新。
[0008]可选的,所述获得待测源文件的数量包括:导入源文件存储路径;查找所述源文件存储路径下的所有源文件;从所有源文件中选择需要进行代码覆盖率测试的源文件作为待测源文件;统计待测源文件的数量。
[0009]可选的,所述根据待测源文件的数量生成覆盖率内存空间包括:根据待测源文件的功能函数包含的代码行数确定覆盖率内存空间需要占据的比特位数量;根据覆盖率内存空间需要占据的比特位数量为待测源文件分配覆盖率内存空间;在待测源文件的主函数中插入初始化函数,所述初始化函数用于生成源文件数组,所述源文件数组中的各个元素与各个覆盖率内存空间一一对应;将所述源文件数组中的各个元素指向与各个元素对应的覆盖率内存空间的地址。通过统计待测源文件的功能函数包含的代码行数,可以确定每个待测源文件需要插入的探针函数的数量,从而确定覆盖率内存空间需要占据的比特位数量,一个探针函数对应覆盖率内存空间的一个比特位,每个比特位存储的数据用于指示其对应的探针函数是否被执行。基于比特位存储,用二进制数据表示代码是否被执行,相对于其他的类型存储,可以极大地节约存储空间。
[0010]可选的,所述在待测源文件的功能函数中插入探针函数包括:在功能函数的第一句代码前、每两句代码之间以及最后一句代码之后插入探针函数。
[0011]可选的,所述覆盖率内存空间占据的比特位初始值为二进制数据0,所述探针函数用于对所述位置索引赋值为二进制数据I。
[0012]可选的,所述覆盖率内存空间占据的比特位初始值为二进制数据I,所述探针函数用于对所述位置索引赋值为二进制数据O。
[0013]可选的,所述满足D0-178C的代码覆盖率生成方法还包括:将所述代码覆盖率信息写入空白文件以生成代码覆盖率文件。通过将所述代码覆盖率信息写入空白文件,便于用户直观地获取所述覆盖率内存空间存储的数据。
[0014]可选的,所述根据待测源文件的数量生成覆盖率内存空间还包括为待测源文件生成时间戳,所述代码覆盖率生成方法还包括将待测源文件的时间戳写入所述空白文件。所述时间戳用于指示插入探针函数时的待测源文件版本,防止用户修改代码重新插入探针函数。若写入到空白文件中的时间戳和为待测源文件生成的时间戳相同,则代表该版本的待测源文件在测试过程中没有被修改,所述代码覆盖率信息真实可信;若写入到空白文件中的时间戳和为待测源文件生成的时间戳不同,则代表该版本的待测源文件在测试过程中可能被修改过,所述代码覆盖率信息可能无效。
[0015]本发明与现有技术相比,具有如下的优点和有益效果:
本发明提供的满足D0-178C的代码覆盖率生成方法,在探针函数被执行后,通过所述位置索引自动给所述覆盖率内存空间的比特位赋值,从而标识功能函数中的代码执行情况,提高机载软件代码覆盖率测试效率。通过统计覆盖率内存空间中写入数据的情况,即可以获得每个待测源文件的代码覆盖率,从而获得整个工程文件的代码覆盖率。并且,由于本发明是在待测源文件的功能函数中插入探针函数,即基于功能函数进行插粧,根据覆盖率内存空间中写入数据的情况可以列举所有功能函数的代码覆盖率情况,从而指导开发人员完成源代码的改进,指导测试人员完成测试用例的更新。
【附图说明】
[0016]此处所说明的附图用来提供对本发明实施例的进一步理解,构成本申请的一部分,并不构成对本发明实施例的限定。在附图中:
图1是机载软件集成开发环境的结构示意图;
图2是本发明实施方式的满足D0-178C的代码覆盖率生成方法的流程示意图;
图3是本发明实施例的获得待测源文件的数量的流程示意图;
图4是本发明实施例的根据待测源文件的数量生成覆盖率内存空间的流程示意图。
【具体实施方式】
[0017]图2是本发明实施方式的满足D0-178C的代码覆盖率生成方法的流程示意图,所述满足DO-178C的代码覆盖率生成方法包括:
步骤S21,获得待测源文件的数量;
步骤S22,根据待测源文件的数量生成覆盖率内存空间,每个待测源文件对应生成一个覆盖率内存空间;
步骤S23,为覆盖率内存空间占据的比特位生成位置索引;
步骤S24,在待测源文件的功能函数中插入探针函数,所述探针函数用于对所述位置索引赋值;
步骤S25,对待测源文件进行编译和链接以在所述覆盖率内存空间中生成代码覆盖率
?目息O
[0018]通过对待测源文件进行编译和链接,若待测源文件中的功能函数被执行,则插入到功能函数中的探针函数也随之被执行,从而自动为所述位置索引赋值,即自动对待测源文件对应的覆盖率内存空间写入数据,提高机载软件代码覆盖率测试效率。通过统计覆盖率内存空间中写入数据的情况,即可以获得每个待测源文件的代码覆盖率,从而获得整个工程文件的代码覆盖率。
[0019]为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
[0020]在本实施例中,以包含五个源文件的工程文件且第一个源文件只包含一个test功能函数为例进行说明,test功能函数如下:
int test (int x,int y)
{
int a=x+l;int b=y+2;return a氺b;
}o
[0021]如步骤S21所述,获得待测源文件的数量。图3是本发明实施例的获得待测源文件的数量的流程示意图,所述获得待测源文件的数量包括:
步骤S31,导入源文件存储路径。采用编辑器完成源代码的编辑后,会将源代码以源文件的形式存储在本地磁盘或者其他存储位置。本步骤即直接选择源文件存储路径,比如c: \test ο
[0022]步骤S32,查找所述源文件存储路径下的所有源文件。具体地,根据文件名后缀(例如.c或者.cpp)在所述源文件存储路径下进行查找。在本实施例中,查找获得五个源文件。
[0023]步骤S33,从所有源文件中选择需要进行代码覆盖率测试的源文件作为待测源文件。在本实施例中,以对所有源文件进行代码覆盖率测试为例进行说明,则将查找获得的五个源文件确定为待测源文件。
[0024]步骤S34,统计待测源文件的数量。具体地,确定待测源文件的数量为五。通过统计每个待测源文件中的功能函数数量和每个功能函数中的代码行数,可以汇总得到整个工程文件的代码行数。
[0025]如步骤S22所述,根据待测源文件的数量生成覆盖率内存空间,每个待测源文件对应生成一个覆盖率内存空间。图4是本发明实施例的根据待测源文件的数量生成覆盖率内存空间的流程示意图,所述根据待测源文件的数量生成覆盖率内存空间包括:
步骤S41,根据待测源文件的功能函数包含的代码行数确定覆盖率内存空间需要占据的比特位数量。具体地,覆盖率内存空
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1