[发明专利]一种基于测试的静态分析误报消除方法有效
| 申请号: | 201310165634.8 | 申请日: | 2013-05-08 |
| 公开(公告)号: | CN103294594A | 公开(公告)日: | 2013-09-11 |
| 发明(设计)人: | 王林章;李孟宸;李宣东;陈志 | 申请(专利权)人: | 南京大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36 |
| 代理公司: | 南京瑞弘专利商标事务所(普通合伙) 32249 | 代理人: | 杨晓玲 |
| 地址: | 210093 江*** | 国省代码: | 江苏;32 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 测试 静态 分析 消除 方法 | ||
技术领域
本发明涉及利用测试方法削减静态分析结果中误报数目的技术,主要利用符号执行和具体执行相结合的动态测试技术验证静态分析的结果,实现对软件静态分析结果中误报的判断和消除,属于软件工程、软件测试、软件动静态分析相结合的技术领域。
背景技术
静态分析与动态分析技术都被用于在C/C++程序中发现程序缺陷。静态分析技术通常将不同类型的软件缺陷检测过程形式化为特定的匹配问题,即在目标分析程序中匹配某种缺陷的特征或模式。因为软件缺陷常常在特定的控制流路径上发生,大部分的静态分析技术同时也是路径敏感的,或在静态分析的结果中会给出疑似发生缺陷的路径,所以静态分析技术能在不实际运行程序的情况下发现程序中的潜在缺陷,从而避免额外的运行时开销。基于以上特性,静态分析技术在研究界和工业界中都广受重视。然而,静态分析工具可能会牺牲精确性以获得更好的扩展性,从而导致对许多重要的程序属性建模并不准确,比如堆内存单元等。另外,由于缺少运行时信息,静态分析工具常常报告出大量的未经确认的警报,而真实的内存泄漏隐藏其中。这严重限制了实际开发中静态分析工具的可用性,即使是一款成熟的商用静态分析工具,也可能在分析中等规模的程序时报告较多的警报。人工检查所有这些警报并从中找到真实的缺陷是一项艰巨、沉闷和耗时耗力的工作。
软件测试技术实际执行待测程序,可以在运行时确认软件缺陷是否发生。实际触发缺陷的一个测试用例及其执行时信息将是确认静态分析警报的有效方式。软件测试的结果可以帮助确认静态分析结果的正确性,从而消除其中的误报。软件测试需要充分和高质量的测试用例集,生成程序测试输入的方法有很多,具体执行和符号执行是其中重要的技术。
混合执行技术是符号执行和具体执行结合的技术。具体执行就是使用具体的变量值输入到程序中,驱动程序的执行。符号执行指的是使用符号变量代替具体变量,根据程序中的变量之间相互关系及控制流,得到符号表达式和符号约束条件,从而将程序执行状态符号化;其通常与约束满足问题求解方法一同使用。混合执行技术是一种对同时进行具体执行和符号执行的混合程序测试技术。
发明内容
技术问题:软件静态分析技术可以在开发早期阶段发现软件缺陷,因而被广泛使用,但由于静态分析结果中包含不同数量的误报,从而降低了静态分析在实际中的可用性。本发明的目的是提供一种基于测试的静态分析误报消除方法,根据运行时的信息确认真实的软件缺陷,并消除静态分析结果中的误报,增强软件静态分析技术的可用性,降低人工确认和检查静态分析报告的时间和人力成本。
技术方案:本发明首先读取并解析静态分析工具产生的包含缺陷信息的软件报告,从中抽取出目标缺陷的信息,包括静态分析工具报告的缺陷发生点和可能导致缺陷的程序路径;对每一条特定缺陷的静态分析警报,采用混合执行的思想对程序进行持续的具体执行、符号执行以及约束求解,在这一过程中根据不同缺陷的特征建模,收集运行时信息,直到停止条件满足时结束该过程;使用上一步获取到的运行时信息确认是否发生该缺陷,或判断该静态分析警报是否是一个误报;迭代执行以上步骤直到所有静态分析警报被处理完毕。
基于测试的静态分析误报消除方法包括以下步骤:
步骤1:读取静态分析结果报告。
从磁盘文件读取以基于可扩展标记语言的元数据交换格式保存的静态分析报告文件。
步骤2:对读入的静态分析报告进行解析,得到待验证警报列表。
分别从静态分析报告中解析出静态分析警报信息,包括疑似缺陷路径和特定缺陷发生点,形成待验证警报列表。
步骤3:程序插桩
采用程序插桩技术在程序源代码中插入标记语句,程序插桩插入的程序语句与原程序同步编译、链接为可执行程序。
所述插入标记语句的工作包括:
①将待验证警报列表中的警报信息标记于源代码中,也就是标记静态分析警报的路径片段中的分支语句和缺陷相关语句,在其前/后插入标记语句,为后续步骤中计算路径片段可达性和运行时标记路径服务。
②插桩标记符号变量和符号表达式、约束条件,为混合执行中的符号执行服务;
③根据不同的缺陷特征,插桩标记内存分配,字符串拷贝等特定缺陷的特征语句,以运行时收集信息,辅助判断缺陷是否发生。
所述程序插桩或者插桩是在保证被测程序原有逻辑完整性的基础上在程序中插入额外的标记语句(称为探针),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,获得程序的控制流和数据流信息,得到逻辑覆盖等动态信息,实现测试。
步骤4:可达性分析
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310165634.8/2.html,转载请声明来源钻瓜专利网。





