[发明专利]一种源代码覆盖率确定方法及系统在审
| 申请号: | 202210472030.7 | 申请日: | 2022-04-29 | 
| 公开(公告)号: | CN114817045A | 公开(公告)日: | 2022-07-29 | 
| 发明(设计)人: | 杨帆;陈睿;刘亚威;江云松;施兰兰;贾春鹏;车小鹏;王峥 | 申请(专利权)人: | 北京轩宇信息技术有限公司 | 
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/41 | 
| 代理公司: | 中国航天科技专利中心 11009 | 代理人: | 马全亮 | 
| 地址: | 100190 北京市海淀区科学院*** | 国省代码: | 北京;11 | 
| 权利要求书: | 查看更多 | 说明书: | 查看更多 | 
| 摘要: | |||
| 搜索关键词: | 一种 源代码 覆盖率 确定 方法 系统 | ||
1.一种高效的源代码覆盖率确定方法,其特征在于包括:
对源代码覆盖率插桩,在函数入口、出口、分支、条件和函数调用处插入探针代码,执行到探针代码时进行对应的记录操作;
在插桩时通过静态分析计算出每个判定节点的MC/DC真值表;
生成插桩后代码、插桩信息文件和函数控制流程图CFG文件;
插桩后代码中使用桩点执行记录表记录每个插桩点探针执行情况;
插桩后代码执行过程中重复执行:更新所述桩点执行记录表,当一个判定节点即将结束时根据其内部每个条件的状态找到对应真值表中覆盖组合的编号,更新map中对应的State部分;
插桩后代码执行结束后把桩点执行记录表和map输出;
根据桩点执行记录表和插桩信息文件,通过函数入口插桩点执行情况计算函数调用覆盖率;通过判定插桩点记录计算分支覆盖率;遍历map数据,根据真值表覆盖记录计算出每个判定节点的MC/DC覆盖率;
借助函数控制流程图CFG文件计算语句覆盖率:每条源码语句对应函数控制流程图CFG文件中的一般节点,判定语句对应函数控制流程图CFG文件中分支节点,根据分支覆盖情况确定语句执行情况,进而得到语句覆盖率;所述一般节点是指函数入口、出口和函数调用处;
进行数据整合得到最终结果。
2.根据权利要求1所述的一种高效的源代码覆盖率确定方法,其特征在于:所述MC/DC真值表包含满足MC/DC100%覆盖的所有可能的条件组合,还包含了条件组合之间的配对关系,然后对条件组合进行0~N编号;N为正整数。
3.根据权利要求1所述的一种高效的源代码覆盖率确定方法,其特征在于:所述在插桩时通过静态分析计算出每个判定节点的MC/DC真值表,工作原理为:把多条件判定通过控制流程图的方式等价变换为多个单条件判定的组合,然后通过遍历得到入口到出口的所有路径上条件状态序列的集合,即为真值表;其中路径上未出现的其他条件节点用X占位,表示该条件在此路径无任何作用。
4.根据权利要求1所述的一种高效的源代码覆盖率确定方法,其特征在于:插桩后代码在执行时记录插桩点是否执行,并嵌入了压缩后的MC/DC真值表用于实时计算MC/DC覆盖情况;插桩信息文件记录每个插桩点的含义以及MC/DC真值表,用于辅助计算覆盖率;函数控制流程图CFG文件用于根据分支覆盖率推算语句覆盖率。
5.根据权利要求1所述的一种高效的源代码覆盖率确定方法,其特征在于:所述桩点执行记录表采用位数组形式。
6.根据权利要求4所述的一种高效的源代码覆盖率确定方法,其特征在于:所述插桩后代码中使用桩点执行记录表记录每个插桩点探针执行情况,具体为:
函数入口、出口和函数调用处插桩点用1个bit记录状态,分支和条件处的插桩点用2个bit记录;
二进制的0b00表示未执行、0b01表示执行结果为False、0b10表示执行结果为True,0b11表示True和False都执行过;
使用map记录真值表覆盖情况,map中包括DecisionID和State两部分,map的DecisionID代表判定节点的编号,State代表已覆盖条件组合的编号集合,采用位数组类型,里面bit依次记录第0、1、……、N个编号的组合是否覆盖;多分支节点switch按照含MC/DC的判定对待。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京轩宇信息技术有限公司,未经北京轩宇信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210472030.7/1.html,转载请声明来源钻瓜专利网。





