多线程C/C++程序缺陷检测的静态分析方法
1. 引言
现代弹性系统对所使用的软件组件质量要求很高。软件质量不佳往往是由开发者的错误导致的缺陷引起的。相当一部分软件缺陷与违反编程语言规则、错误使用标准库和系统函数有关。C/C++程序中最常见的缺陷类型包括空指针解引用、控制流错误、内存损坏、资源泄漏、使用未初始化变量等。这些类型的缺陷不仅会出现在顺序程序中,也会出现在多线程C/C++程序里。此外,多线程程序还可能存在同步错误,如数据竞争(并发数据修改错误)、死锁和活锁。
为了自动检测软件缺陷,可以使用静态分析方法。静态分析方法能够保留用于检测多种缺陷类型的信息。目前,已经有针对顺序C/C++程序的高效静态分析算法,但多线程程序的静态分析是一个更具挑战性的问题,现有的静态分析算法和工具尚未达到工业应用水平。
本文提出了一种用于多线程C/C++程序缺陷检测的新方法。该方法的核心思想是将用于顺序程序的静态分析算法与新开发的并行执行分析算法相结合。并行执行分析算法用于确定语句块的部分执行顺序,以及程序线程与同步对象和共享变量之间的交互。所有分析算法协同工作,并共享彼此的结果,旨在获得高可靠性和足够精度的分析结果。
我们主要讨论使用POSIX线程(Pthreads)中指定的线程和同步对象的多线程程序。在本文中,我们将分析范围限制在包含互斥锁和信号量的同步对象子集上,这足以展示分析算法的所有规则,其他同步对象的分析可以以此类推。该方法已在缺陷检测工具Aegis MT中实现,该工具支持完整的C/C++语言以及部分用于操作线程、信号量和互斥锁的Pthreads函数。我们通过在一组人工和实际的多线程C/C++程序上进行评估,验证了该方法的有效性。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



