[发明专利]一种软件缺陷检测方法与装置有效
申请号: | 202110095728.7 | 申请日: | 2021-01-25 |
公开(公告)号: | CN112860545B | 公开(公告)日: | 2022-11-11 |
发明(设计)人: | 王召;俞俊;许明杰;李东辉;吴小志;张昕 | 申请(专利权)人: | 国电南瑞科技股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京苏高专利商标事务所(普通合伙) 32204 | 代理人: | 李淑静 |
地址: | 211106 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 软件 缺陷 检测 方法 装置 | ||
1.一种软件缺陷检测方法,其特征在于,所述方法包括以下步骤:
构建待检测软件的依赖软件兼容版本树,包括:查找待检测软件的所有依赖软件,以待检测软件作为根节点,以依赖软件及相应的版本为叶子节点,建立待测软件依赖关系树;对所述待测软件依赖关系树的叶子节点进行遍历,查找该依赖软件的依赖,记为当前节点的子节点,重复此步骤,找出所有节点及子节点的软件依赖,直至叶子节点不再依赖其他软件,得到一棵完整的以待测软件为根节点的软件依赖关系树;根据所述完整的以待测软件为根节点的软件依赖关系树,从根节点进行遍历,查找依赖软件及版本相兼容的所有软件版本,以待检测软件作为根节点,以依赖软件及其兼容版本作为子节点,形成一棵新的软件依赖关系及兼容版本树,作为依赖软件兼容版本树;
基于依赖软件兼容版本树,对软件进行源码分析,找出函数调用链,建立函数调用追踪图,包括:基于依赖软件兼容版本树,以待检测软件执行为起点,对源码中调用依赖软件的函数进行追踪分析,形成一条以待测软件为起点,沿调用依赖方向伸展的调用链路,链路上的每一点代表满足依赖关系的一个依赖软件的相应版本;由于依赖软件兼容版本树上的每一个依赖软件均存在多个满足依赖关系的版本,所以从待检测软件的一个函数调用为起点,分析追踪后,会形成一个以待检测软件函数为起点的,含有多个分支的调用链;依次对待测软件的所有函数调用进行追踪分析,最终形成一张以待检测软件为起点,包含上述各个函数调用关系链的函数调用追踪图;
依据函数调用追踪图,分析函数调用的数据依赖关系,将源码中的数值运算转化为代数表达式;
求解代数表达式的最大值与最小值,得到其取值区间,包括:对源码中的变量定义语句、赋值语句及其数学计算语句进行分析,根据上下文信息以及软件的配置信息得到变量的运算结果,代入到代数表达式中,得到相应语句的以区间表示的取值范围;遍历函数调用追踪图,对待检测软件的每一个数学计算及赋值语句进行上述分析,得到软件依赖的所有兼容版本的可能取值范围;
依据软件运行过程中的限制、规则及约束检测所得取值区间的合法性,当所得取值区间超出合法区间边界时,判定软件存在缺陷。
2.根据权利要求1所述的软件缺陷检测方法,其特征在于,所述将源码中的数值运算转化为代数表达式具体包括:分析源码中的数据赋值及计算语句,以待检测软件为起点,沿所述函数调用追踪图进行调用及功能分析,获取调用关系、功能及计算逻辑,将源码中的数据计算转化为数学计算的代数表达式。
3.根据权利要求1所述的软件缺陷检测方法,其特征在于,所述依据软件运行过程中的限制、规则及约束检测所得取值区间的合法性具体包括:根据软件上下文信息通过语义分析获得表达式语句合法的取值范围,根据软件配置信息分析获得资源使用限制,根据软件运行环境分析获得对资源的使用限定,根据软件语句定义得到其合法的值界限,超出界限则意味着软件存在缺陷。
4.一种软件缺陷检测装置,其特征在于,包括:
依赖软件兼容版本树构建模块,用于构建待检测软件的依赖软件兼容版本树,追踪待检测软件的依赖软件所有兼容版本及其依赖关系;
函数调用追踪图构建模块,用于根据依赖软件兼容版本树,对软件进行源码分析,找出函数调用链,建立函数调用追踪图;
数值运算转化模块,用于根据函数调用追踪图,分析函数调用的数据依赖关系,将源码中的数值运算转化为代数表达式;
取值区间确定模块,用于求解代数表达式的最大值与最小值,得到其取值区间;
缺陷检测模块,用于依据软件运行过程中的限制、规则及约束检测所得取值区间的合法性,当所得取值区间超出合法区间边界时,判定软件存在缺陷;
其中所述依赖软件兼容版本树构建模块包括:
依赖关系树第一建立单元,用于查找待检测软件的所有依赖软件,以待检测软件作为根节点,以依赖软件及相应的版本为叶子节点,建立待测软件依赖关系树;
依赖关系树第二建立单元,用于继续对所述待测软件依赖关系树的叶子节点进行遍历,查找该依赖软件的依赖,记为当前节点的子节点,重复此步骤,找出所有节点及子节点的软件依赖,直至叶子节点不再依赖其他软件,得到一棵完整的以待测软件为根节点的软件依赖关系树;
依赖关系及兼容版本树建立单元,用于根据所述完整的以待测软件为根节点的软件依赖关系树,从根节点进行遍历,查找依赖软件及版本相兼容的所有软件版本,以待检测软件作为根节点,以依赖软件及其兼容版本作为子节点,形成一棵新的软件依赖关系及兼容版本树,作为依赖软件兼容版本树;
所述函数调用追踪图构建模块包括:
调用链路建立单元,用于根据依赖软件兼容版本树,以待检测软件执行为起点,对源码中调用依赖软件的函数进行追踪分析,形成一条以待测软件为起点,沿调用依赖方向伸展的调用链路,链路上的每一点代表满足依赖关系的一个依赖软件的相应版本;由于依赖软件兼容版本树上的每一个依赖软件均存在多个满足依赖关系的版本,所以从待检测软件的一个函数调用为起点,分析追踪后,会形成一个以待检测软件函数为起点的,含有多个分支的调用链;
有向无环图建立单元,用于根据调用链路建立单元的处理逻辑,依次对待测软件的所有函数调用进行追踪分析,最终形成一张以待检测软件为起点,包含各个函数调用关系链的函数调用追踪图;
所述取值区间确定模块包括:
第一处理单元,用于对源码中的变量定义语句、赋值语句及其数学计算语句进行分析,根据上下文信息以及软件的配置信息得到变量的运算结果,代入到代数表达式中,得到相应语句的以区间表示的取值范围;
第二处理单元,用于遍历函数调用追踪图,对待检测软件的每一个数学计算及赋值语句进行上述分析,得到软件依赖的所有兼容版本的可能取值范围。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于国电南瑞科技股份有限公司,未经国电南瑞科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110095728.7/1.html,转载请声明来源钻瓜专利网。