一、准备工作
1. BugDetective的原理
BugDetective 是一类新的静态分析技术,该技术使用了几种分析技巧,包括模拟应用程序执行路径,以识别可能触发运行时缺陷的路径。检测到的缺陷包括,使用未初始化的内存、引用空指针、除数为零、内存和资源泄漏。
由于该分析涉及到识别和跟踪复杂路径,它会暴露通常可逃避编码规则静态分析和单元测试的错误,这些错误难以通过手动测试或检查找到。对于那些具有遗留代码库和嵌入式代码(这些情况下,此类错误的运行时检测效果较差或根本不可能)的用户而言,BugDetective 可在不执行代码的情况下显露错误的功能,就特别重要。
BugDetective 独特的静态分析通过搜索代码中的“可疑点”,开始分析正在测试的源码。可疑点是潜在的错误点。这些可疑点在BugDetective 规则中被定义。只要识别了可疑点,BugDetective 就调查导致该可疑点的可能执行路径,并检查是否有任何确实违反BugDetective规则的路径存在。如果找到了这样的路径,就报告一个违例。
例如,检测可能的“除数为零”情形的规则就规定,任何使用了"/" 或"%" 运算符的点都是可疑的。然后它检查分母中的变量,在导致它为零的任何可能执行路径的点中,是否能保持零值。如果是的话,则会报告一条错误。
对于每个发现的错误,分层结构流路径数据都会详细准确地列出导致被识别错误的完整执行路径,并以显现出错误的那一代码行作为结束。为减少每个被发现问题的诊断和纠正所需要的时间和工作量,流路径详细信息还会补充扩展注释(例如,一条关于“避免引用空指针”违例的描述就包含这样的注释,描述哪些变量、在流路径的哪一点包含null 值)。
为使分析过程更灵活、更适合于项目的独特要求,可以参数化某些规则。因此,BugDetective 甚至可以用来检测与特定的API 使用相关的违例。
1. BugDetective的原理
BugDetective 是一类新的静态分析技术,该技术使用了几种分析技巧,包括模拟应用程序执行路径,以识别可能触发运行时缺陷的路径。检测到的缺陷包括,使用未初始化的内存、引用空指针、除数为零、内存和资源泄漏。
由于该分析涉及到识别和跟踪复杂路径,它会暴露通常可逃避编码规则静态分析和单元测试的错误,这些错误难以通过手动测试或检查找到。对于那些具有遗留代码库和嵌入式代码(这些情况下,此类错误的运行时检测效果较差或根本不可能)的用户而言,BugDetective 可在不执行代码的情况下显露错误的功能,就特别重要。
BugDetective 独特的静态分析通过搜索代码中的“可疑点”,开始分析正在测试的源码。可疑点是潜在的错误点。这些可疑点在BugDetective 规则中被定义。只要识别了可疑点,BugDetective 就调查导致该可疑点的可能执行路径,并检查是否有任何确实违反BugDetective规则的路径存在。如果找到了这样的路径,就报告一个违例。
例如,检测可能的“除数为零”情形的规则就规定,任何使用了"/" 或"%" 运算符的点都是可疑的。然后它检查分母中的变量,在导致它为零的任何可能执行路径的点中,是否能保持零值。如果是的话,则会报告一条错误。
对于每个发现的错误,分层结构流路径数据都会详细准确地列出导致被识别错误的完整执行路径,并以显现出错误的那一代码行作为结束。为减少每个被发现问题的诊断和纠正所需要的时间和工作量,流路径详细信息还会补充扩展注释(例如,一条关于“避免引用空指针”违例的描述就包含这样的注释,描述哪些变量、在流路径的哪一点包含null 值)。
为使分析过程更灵活、更适合于项目的独特要求,可以参数化某些规则。因此,BugDetective 甚至可以用来检测与特定的API 使用相关的违例。


