使用静态分析技术找到真正的代码质量缺陷与安全漏洞

合集下载

如何进行代码的静态分析和质量检查

如何进行代码的静态分析和质量检查

如何进行代码的静态分析和质量检查?代码的静态分析和质量检查是一种评估代码质量的方法,通过分析代码的结构、可读性、可维护性等方面的指标,帮助开发团队发现并改善代码中的潜在问题。

本文将介绍静态分析的原理和流程,并讨论一些常见的静态分析工具和质量检查标准。

静态分析是指在不运行代码的情况下对源代码进行分析,以发现潜在的问题。

它可以通过检查代码结构、语法、代码风格和其他代码元素来评估代码质量。

在进行静态分析之前,需要设置一些规则和标准,以确定代码的合理性和符合性。

下面是一些常见的静态分析和质量检查的步骤:1.语法检查:静态分析的第一步是检查代码的语法是否正确。

许多编程语言都提供了内置的语法检查工具,用于检测代码中的语法错误。

这些工具可以帮助开发人员找到并解决代码中的简单语法错误。

2.代码风格检查:代码风格检查是为了保持代码的一致性和可读性。

不同的编程语言有不同的代码风格规范,如命名约定、缩进风格、代码布局等。

通过使用代码风格检查工具,可以确保代码的风格符合规范,提高代码的可读性和可维护性。

3.代码复杂性分析:代码复杂性是指代码的结构和逻辑的复杂程度。

过于复杂的代码往往难以理解和维护。

使用代码复杂性分析工具可以帮助开发团队评估和改善代码的复杂性。

这些工具可以检测代码中的长方法、深嵌套等问题,并提供相应的优化建议。

4.代码可维护性评估:代码的可维护性是指代码的易读性、易修改性和易理解性。

一个好的代码应该是易读易懂的,便于他人理解和修改。

代码可维护性评估工具可以检查代码的可维护性指标,如代码的耦合度、重复代码、注释质量等,并提供相关的建议。

5.安全性分析:安全性是现代软件开发中非常重要的一个方面。

安全性分析工具可以帮助开发人员评估代码的安全性,并发现潜在的安全漏洞。

这些工具可以检查代码中的潜在安全问题,如缓冲区溢出、SQL注入和跨站脚本攻击等,并提供相应的修复建议。

6.代码性能分析:在一些关键场景,如大数据处理、网络请求等,代码的性能是一个非常重要的考虑因素。

如何进行代码质量和安全性检查

如何进行代码质量和安全性检查

如何进行代码质量和安全性检查代码质量和安全性检查是软件开发过程中非常重要的环节,它对于保证软件系统的稳定性、安全性和可扩展性起着至关重要的作用。

在本文中,我将详细介绍代码质量和安全性检查的步骤和方法。

1. 代码质量检查1.1 代码规范检查- 代码规范是指开发团队约定好的一套代码书写风格和规则,包括缩进、命名规范、注释规范等。

通过使用代码规范检查工具,例如Checkstyle、PMD等,可以自动化地检查代码是否符合规范要求。

1.2 静态代码分析- 静态代码分析是指使用专门的工具对代码进行扫描,检测其中潜在的缺陷和问题。

常用的静态代码分析工具包括FindBugs、SonarQube等。

这些工具可以帮助开发人员发现代码中的潜在问题,例如空指针引用、未关闭的资源等。

1.3 代码复杂性分析- 代码复杂性是指代码难以理解和维护的程度。

通过使用代码复杂性分析工具,例如Cyclomatic Complexity(圈复杂度)的计算工具,可以帮助开发团队评估代码的复杂性,及时进行重构以提高代码的可读性和可维护性。

2. 安全性检查2.1 输入验证- 输入验证是指对用户输入的数据进行合法性校验,防止恶意用户通过输入非法数据来攻击系统。

开发人员应该仔细检查用户输入,并通过使用正则表达式、白名单过滤等方式对输入数据进行验证。

2.2 权限控制- 权限控制是指根据用户的身份和角色来限制其对系统资源的访问权限。

开发人员应该遵守最小权限原则,确保用户只能访问其必要的资源,并采取措施防止未经授权的访问。

2.3 安全漏洞扫描- 安全漏洞扫描是指对系统进行全面的安全漏洞扫描,寻找可能存在的安全隐患。

常用的安全漏洞扫描工具包括Nessus、OpenVAS等。

扫描结果将帮助开发人员发现并修复软件中的安全漏洞,提高系统的安全性。

2.4 代码审查- 代码审查是指由开发团队成员对彼此的代码进行审查,发现其中可能存在的安全漏洞。

通过熟悉安全编码规范和最佳实践,团队成员可以提出改进建议,从而提高软件的安全性。

C语言中的代码审计与漏洞挖掘技术

C语言中的代码审计与漏洞挖掘技术

C语言中的代码审计与漏洞挖掘技术代码审计与漏洞挖掘技术是在C语言编程中非常关键的一项技能。

在开发和维护软件过程中,代码的质量和安全性是至关重要的,而代码审计和漏洞挖掘技术则能够帮助开发者识别和修复潜在的安全漏洞,提高软件的可靠性和安全性。

一、代码审计技术代码审计是对软件的源代码进行仔细检查和分析的过程,旨在发现潜在的漏洞和安全隐患。

C语言是一种底层语言,广泛应用于系统和应用程序的开发,因此对C语言代码进行审计尤为重要。

1. 静态代码分析静态代码分析是一种通过静态分析源代码的工具和技术,来发现代码中的潜在缺陷和安全漏洞的方法。

常用的静态代码分析工具包括静态代码分析器和漏洞扫描工具。

这些工具能够分析源代码,识别代码中的漏洞和潜在问题,并给出相应的建议和修复方案。

在C语言中,一些常见的漏洞和问题包括缓冲区溢出、整数溢出、空指针解引用、格式化字符串问题等。

通过静态代码分析工具,可以辅助开发者快速检测和修复这些问题,提高代码的安全性和可靠性。

2. 动态代码审计动态代码审计是通过运行代码,并对代码的行为进行监控和分析,来发现潜在的漏洞和安全问题的方法。

动态代码审计通常使用调试和监控工具,例如调试器、动态分析器等。

对于C语言代码而言,动态代码审计可以帮助开发者检测运行时的内存访问错误、资源泄漏等问题。

通过动态代码审计,开发者可以模拟不同的运行环境和输入数据,进一步发现并修复代码中的漏洞。

二、漏洞挖掘技术漏洞挖掘技术是指通过测试和分析来发现软件中潜在的漏洞和安全隐患的过程。

在C语言中,漏洞挖掘技术可以应用于开发过程中和已经发布的软件的审计。

1. FuzzingFuzzing是一种通过自动生成大量非预期输入,并将其输入到目标程序中,以发现潜在漏洞的技术。

在C语言中,可以使用Fuzzing技术来模拟各种输入数据,并测试程序的稳定性和安全性。

通过Fuzzing,开发者可以发现和修复代码中的缓冲区溢出、拒绝服务、内存泄漏等问题。

如何进行代码的静态分析和质量检查

如何进行代码的静态分析和质量检查

如何进行代码的静态分析和质量检查静态代码分析是一种分析代码质量的方法,它可以帮助开发人员发现代码中的潜在问题和错误,并提供改进代码质量的建议。

它是软件开发中的一种重要实践,以确保代码的可读性、可维护性和可扩展性。

静态代码分析的目标是通过检查代码的结构、语法、语义和风格来发现潜在的问题。

在进行静态代码分析之前,需要先编译源代码,生成可执行文件或者中间代码。

然后,使用专门的静态代码分析工具对生成的代码进行分析。

在静态代码分析中,常常采用以下几种方法来分析代码质量:1.语法分析:检查代码的语法是否符合编程语言的规范。

这可以通过编译器本身来完成,编译器会检查代码中的拼写错误、缺少的分号、括号不匹配等语法错误。

2.代码风格检查:检查代码是否符合编程规范和最佳实践。

不同的编程语言有不同的代码规范,例如,Python代码应该使用缩进进行代码块的标识,变量名应该使用小写字母和下划线等。

通过代码风格检查可以帮助开发人员编写一致且易读的代码。

3.代码质量检查:检查代码中的潜在问题和错误。

这包括许多方面,例如代码重复、未使用的变量、不安全的操作、潜在的内存泄漏等。

代码质量检查可以帮助开发人员发现和修复代码中的缺陷和问题。

4.代码复杂度分析:分析代码的复杂度,例如函数的长度、嵌套的深度、循环的复杂度等。

代码的复杂度越高,就越难理解、维护和调试。

通过代码复杂度分析,可以帮助开发人员识别并重构复杂的代码块,以提高代码的可读性和可维护性。

5.安全性分析:检查代码是否存在安全风险,例如潜在的漏洞、缓冲区溢出等。

安全性分析可以帮助开发人员提前发现并修复代码中的安全问题,以保障系统的安全性。

为了进行静态代码分析和质量检查,可以使用一些专门的工具和框架。

以下是一些常见的静态代码分析工具:1.集成开发环境(IDE):许多开发环境都提供了静态代码分析工具,例如Eclipse、IntelliJ IDEA和Visual Studio等。

这些工具可以在代码编写过程中进行实时的代码检查,并提供相应的提示和建议。

如何使用代码静态分析工具进行安全检查(六)

如何使用代码静态分析工具进行安全检查(六)

如何使用代码静态分析工具进行安全检查代码静态分析工具是现代软件开发中不可或缺的一部分,能够帮助开发人员检测代码中的潜在安全问题。

本文将讨论如何使用这些工具进行安全检查,并提供一些具体的实例来说明其实用性和价值。

一、代码静态分析工具的介绍代码静态分析工具是一种自动化工具,能够检查代码中的潜在问题,包括但不限于安全漏洞、代码质量问题等。

这些工具通过对代码进行语法分析和控制流分析,可以发现开发人员可能会忽视的错误和漏洞。

常见的代码静态分析工具包括Coverity、FindBugs、SonarQube 等。

这些工具可以帮助开发人员及早发现并修复潜在的安全问题,提高代码的质量和安全性。

二、使用代码静态分析工具进行安全检查的步骤1. 准备阶段在使用代码静态分析工具之前,需要对工具进行配置。

首先,需要选择合适的工具,并根据具体需求和项目的编程语言进行配置。

其次,需要设置分析规则,包括安全规则、代码质量规则等。

最后,还需要确保代码库处于可分析的状态,即文件名、文件类型等满足分析工具的要求。

2. 代码分析阶段将代码导入代码静态分析工具后,工具会对代码进行分析,并在分析结果中标记出可能存在的问题和潜在的安全漏洞。

开发人员需要仔细查看这些标记,并逐一解决它们。

3. 漏洞修复阶段根据代码分析结果,开发人员需要逐个修复存在的漏洞和问题。

这些修复可以包括代码重构、逻辑修改、漏洞补丁等措施。

修复完成后,需要重新运行分析工具进行检查,确保问题得到解决。

4. 结果评估和报告在修复漏洞并重新运行分析工具后,需要对结果进行评估并生成报告。

这一步可以帮助开发人员了解整个检查过程的进展情况,并为进一步的安全改进提供参考。

三、代码静态分析工具的实用性和价值使用代码静态分析工具进行安全检查有着重要的实用性和价值。

首先,这些工具可以帮助开发人员发现并修复潜在的安全漏洞,避免因软件漏洞而导致的潜在风险和损失。

其次,这些工具可以提高代码的质量和可维护性,减少开发人员在代码审查和调试过程中的工作量。

软件测试中的静态分析技术

软件测试中的静态分析技术

软件测试中的静态分析技术随着软件的开发日益复杂化,软件质量的保证变得至关重要。

而软件测试则是确保软件质量的核心环节之一。

在软件测试中,静态分析技术是一种非常重要且有效的方法,它能够帮助测试人员在编译和执行代码之前发现潜在的问题和缺陷。

静态分析技术是一种通过对源代码进行分析来发现软件中潜在问题的方法。

它与动态测试相比,不需要执行程序,而是通过静态分析器对源代码进行静态扫描,以找出代码中的缺陷和潜在问题。

这些问题可能包括编码错误、安全漏洞、性能问题等。

静态分析技术通过对源代码进行静态扫描,可以在开发的早期阶段就发现潜在问题,从而减少软件测试阶段的重复工作和开发成本。

它可以帮助测试人员识别代码中的逻辑错误、内存泄漏、空指针引用等常见问题,并提供相应的修复建议。

在软件开发过程中,静态分析技术可以起到早期预警的作用,帮助开发人员减少代码写作中的错误,并减少代码的维护成本。

静态分析技术还可以帮助测试人员发现潜在的安全漏洞。

在当今的数字化时代,软件安全问题已成为一个严峻的挑战。

通过使用静态分析工具,测试人员可以检测源代码中的安全问题,如密码硬编码、SQL注入、跨站脚本攻击等。

这样一来,测试人员可以在软件发布之前修复这些安全漏洞,防止黑客攻击和用户隐私泄露的风险。

除了上述问题,静态分析技术还可以帮助测试人员发现性能问题。

在软件开发的过程中,性能问题往往是非常棘手的。

而通过使用静态分析技术,测试人员可以识别潜在的性能瓶颈,并提供相应的优化建议。

例如,对于大规模的数据处理软件,静态分析工具可以帮助测试人员找到计算复杂度高的代码段,并提供相关的优化建议,从而提高软件的性能和响应速度。

当然,静态分析技术也有一些限制和局限性。

它无法完全替代动态测试。

尽管在早期发现问题方面,静态分析技术具有优势,但它无法模拟软件的实际运行环境。

因此,动态测试仍然是必需的,以验证软件在实际运行时的行为。

静态分析技术的准确性也存在一定的挑战。

软件测试中的代码静态分析

软件测试中的代码静态分析

软件测试中的代码静态分析代码静态分析是软件测试中的一项重要技术,它可以通过对代码的分析和检测来发现潜在的问题和错误。

本文将介绍软件测试中的代码静态分析的概念、方法和应用。

一、概念代码静态分析是指在不运行代码的情况下,通过对代码的分析和检测,来发现代码中的问题和错误。

它主要通过对代码的结构、语法、语义等方面进行分析,以及对代码中潜在漏洞和不符合规范的地方进行检测。

二、方法在软件测试中,代码静态分析可以采用多种方法进行,常见的有:1. 语法检查:通过对代码的语法进行检查,发现代码中的语法错误和潜在的问题。

这种方法通常使用编译器或者专门的工具来进行。

2. 代码规范检查:通过对代码的格式、命名规范等进行检查,发现代码中不符合规范的地方。

这种方法可以帮助开发人员提高代码的可读性和可维护性,并减少潜在的问题。

3. 数据流分析:通过对代码中的数据流进行分析,发现代码中的潜在问题和错误。

这种方法可以帮助开发人员发现可能出现的空指针引用、数组越界等问题。

4. 控制流分析:通过对代码的控制流进行分析,发现代码中的潜在问题和错误。

这种方法可以帮助开发人员发现可能出现的死循环、条件判断错误等问题。

5. 逻辑分析:通过对代码的逻辑进行分析,发现代码中的潜在问题和错误。

这种方法可以帮助开发人员发现可能出现的逻辑错误、错误的算法等问题。

三、应用代码静态分析在软件测试中有广泛的应用。

它可以帮助开发人员在代码开发的早期就发现问题和错误,从而提高代码的质量和可靠性。

具体应用包括:1. 提前发现问题:代码静态分析可以在代码编写的早期就发现潜在的问题和错误,避免问题在后期引发严重的bug。

2. 代码质量评估:通过对代码进行静态分析,可以评估代码的质量和可维护性,帮助开发人员提高代码的质量和可读性。

3. 代码规范检查:通过静态分析,可以检查代码是否符合预定的规范和标准,帮助开发人员规范代码的编写。

4. 自动化测试:代码静态分析可以与自动化测试工具结合使用,自动检测和修复代码中的问题和错误。

sonarqube new code规则-概述说明以及解释

sonarqube new code规则-概述说明以及解释

sonarqube new code规则-概述说明以及解释1.引言1.1 概述SonarQube是一款广泛用于代码质量管理和静态代码分析的工具。

通过对代码进行分析和检测,SonarQube能够帮助开发团队发现潜在的缺陷和漏洞,并提供相应的修复建议。

在项目开发过程中,SonarQube 的重要性不可忽视,它可以有效地帮助团队提高代码质量、减少技术债务,并确保项目持续交付可靠的软件。

本文将重点介绍SonarQube的一个重要特性——New Code规则。

New Code规则是SonarQube中的一个强大功能,它可以帮助开发团队在项目中进行代码变更的管理和追踪。

通常情况下,开发人员会频繁进行代码的修改和增加,而这些新添加的代码往往是需要重点关注和验证的。

通过使用New Code规则,团队可以快速定位并优化新增代码中的潜在问题,确保其质量和可维护性。

在本文的后续部分,我们将对SonarQube New Code规则进行详细介绍,并探讨其在代码开发过程中的作用。

我们将从New Code规则的基本概念和使用方法入手,然后深入研究其在实践中的应用。

同时,我们还将对当前的New Code规则提出一些建议,并展望其未来的发展趋势。

通过深入了解和应用SonarQube的New Code规则,开发团队将能够更好地管理和优化项目代码,从而提升整体的代码质量和可维护性。

接下来,我们将开始介绍SonarQube的基本原理和New Code规则的具体用法。

让我们共同探索这项强大的工具,为项目的成功和持续发展贡献一份力量。

1.2 文章结构:本文将分为以下几个部分,详细介绍SonarQube的New Code规则。

首先,在引言部分,我们将概述本文的主题,并简要介绍文章的结构和目的。

接着,在正文部分,我们将首先对SonarQube进行简单介绍,包括其背景和基本原理。

然后,我们将重点讲解SonarQube的New Code 规则,包括其定义、应用范围和使用方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
控制流缺陷 – 在Finally模块中返回 – Switch语句中break丢失
错误处理缺陷 – 未验证的返回值
数据库操作 – 不正确的实体哈希 – Load函数返回值错误验证 – 不完全持续周期 – get()不当使用
代码可维护性缺陷 – 调用已过期方法 – 显式垃圾收集 – 非静态方法中设置静态变量 – 复制/粘贴错误 – 不可达代码
1
找到潜在Bug其实只是难题之一
•消除误报非常难 •将复杂的缺陷解释出来很难 •只找潜在的一次性缺陷是很难的
1
难题!
Control Flow Graph
1
如何简化搜索?
数据流分析
Advanced data flow
Tainted Data
C
A (Source)
B
(Escaper)
D
• 动态“fuzzing” • 基于上下文分析
locals.getText(), g.tool.errMgr); r.locals.type = AttributeDict.DictTYpe.LOCAL; r.locals.ast = returns;
}
2
C语言静态分析
• Checker描述(metal 语言) 检测代码:
XGCC系统
• 符号执行
• 不正确的delete操作 • 溢出指针读取 • 越界读取 • 返回指针至本地变量 • 负数组索引读取 • 已释放指针读/写 • 不兼容的指针转换
控制流缺陷
• 逻辑/结构死代码 • Switch语句中break遗失 • 非本地资源不当使用
C/C++ 缺陷-Part 2
程序假死
• 死循环 • 双重锁或解锁丢失 • 负循环边界值 • 线程死锁 • 持锁过程中调用sleep()
性能缺陷
• 值传递大参数 • 使用大堆栈
安全措施违反
• 缓冲区溢出 • 固定长度缓冲区写入
• 非安全函数调用 • 非安全临时文件使用 • 检查/使用时间不一致 • 用户空间指针不当使用
API错误使用
• 非安全chroot调用 • 错误的迭代器使用 • printf() 参数不匹配
安全检查
• 定义Tainted Data
• 易用性较低:基本上都是一次性的使用工具,无法与SDLC集成
– SCM集成:如SVN,CVS,Perforce,Git – Bug Tracking:如Bugzilla,Jira
改进型的静态分析方案
• 基于Meta Compilation的静态分析:
• 由斯坦福大学教授Dawson Engler提出,在深度理解代码与程序语义的基础上检测缺陷
– 低效率方法使用 – 在循环中连接字符串 – 冗余同步 逻辑错误
– 不可达代码 – 未使用变量 – 常量表达式 – 非本地资源不当使用 – 整数溢出 – 不当分号
Java 缺陷
类层次结构不一致 – 调用 super.clone() 或 supler.finalize()失败 – 父函数调用丢失 – 构造函数中使用虚函数
– 错误移位操作 – 不正确的表达式 – 表达式计算过程中溢出
检测实例-SQL Injection
Copy-paste error in real-world code
if (returns!=null) { r.retvals = ScopeParser.parseTypedArgList(returns,
1
如何分析缺陷?
•过程间分析(Intra-procedural analyses)将考
虑每一个合理的可执行路径
• 快速修剪不可行路径是一件很麻烦的事情! • 数学方案
•获取一系列的函数定义
• 资源分配 • 调用….
•过程间分析
• Bytecode 分析将创建函数定义
1
如何分析缺陷?
• 数据流分析将跟踪 所有应用中的不可信数据 • “source” • “sink” • 二者之间必须进行验证 • 某些使用智能静态分析,例如: • checked this return value for null 19 times out of 20 • accessed this field under a lock 19 times out of 20 • called base.Foo() in 19 overrides of Foo() out of 20
选项二:
• 获取所有的Java编译过程并执行分析 • Bytecode分析工作仍旧存在,但包含更多的内容
基本的工作流
• 获取所有编译过程 • 每当 “javac(或其他相关API)” 被调用后,编译获取系统
记录所有的编译器选项,操作,源代码与调用的库文件
• 面向源代码和库文件可进行全面编译后分析 • 找到的缺陷将被展示给研发人员修复
31
“瀑布式开发流程”
需求挖掘
设计
实开施发
验测证试
发布
支持
经典的瀑布式开发流程:
• 代码开发与测试之间存在延迟 • QA经常由其他部门负责,在编码阶段完成后才能开始 • 安全保护基本是在“事发之后”才由单独的安全部门提供
可疑代码
– 参数次序错误 – 格式错误
C# 缺陷 Powered by Eric Lippert
资源泄露
– 数据库连接资源泄露 – 资源泄露 – Socket & Stream 泄露 API 使用错误 – 已释放资源调用 并发数据访问异常
– 变量非原子更新 – 数据竞态条件 性能缺陷
– 低效率方法使用 – 在循环中连接字符串 – 冗余同步 程序假死
30
Freeradius缺陷检测对比
类型
内存问题
资源泄露 控制流缺陷,并发访问等
问题 重要的缺陷 代码规范,最佳实践等
Total Bugs
Coverity Coverity
7191
86 2823 118083
9 121
Clang 5 3 30 38 59 97
Shared Defects 0 0 1 1 2 3
态条件...
• 优点: • 能够检测所有的代码级别的可执行路径组合,快速,准确 • 直接面向源码,分析多种问题 • 在研发阶段开始找到并修复多种问题,节省大量时间/人力成本
• 注意:静态分析不是万能的,测试是持续的过程,非一劳永逸
现存问题
• 编译器警告: 保证类型安全
– 最初级的静态分析,检测规则简单
returns.getText(), g.tool.errMgr); r.retvals.type = AttributeDict.DictType.RET; r.retvals.ast = returns;
}
if (locals!=null) { r.locals = ScopeParser.parseTypedArgList(locals,
• 提出警告:if循环没有包含所有语句
如何进行Java代码静态分析?
Java语言被编译成JVM bytecode - 在运行时被转换成本地可执行 代码的分析
选项一
• 分析 byte-code:用户编译他们的软件,然后分析编译后的可
执行文件与调试信息,分析引擎联系找到的缺陷与源代码位 置
• 某些开源工具的实现原理
心脏出血漏洞...)
• 能够检测高达亿行级别的代码库,避免“状态爆炸” • 使用模型检验与符号执行技术,误报率降低至15%以下
• 算法已步入实际应用
• 面向企业的Coverity 软件 • 面向开源代码的Coverity SCAN
源码分析-数据流分析
• 源码分析可以探知开发者的想法: “x=1” 需要在调用 “do_something” 后继续执行。
CWE映射
77, 78, 88, 89, 90, 564, 917 259, 321, 384, 798
79, 80, 81, 82, 83, 84, 86, 87 22, 23 ,36 4, 7, 86, 650 321
425, 862, 863 352 NA 938
Java 缺陷
Web 应用安全缺陷(OWASP Top 10) – 跨站脚本攻击 – SQL 注入 – 命令行注入 – 路径遍历…
• 中间语言分析: 检测字节码( Byte Code )的缺陷,将其重新映射到真实代 码中
– 在转换与映射过程中易造成精度丢失
• 高误报率:目前静态分析产品的误报率普遍在30%以上。
• 缺陷种类较少,找到的问题级别不高:多数为代码规范或低级缺陷,非实 际Bug
– 如命名规范、类定义规范,最佳实践.....
资源泄露
– 数据库连接资源泄露 – 资源泄露 – Socket & Stream 泄露 并发数据访问异常
– 变量非原子更新 – 双重检查锁定 – 数据竞态条件 – Volatile非原子更新 – Servlet 属性无效锁定 – 单例模式竞态条件 程序假死
– 线程死锁 – 死锁
空指针引用
– Null检查后引用空指针 – 直接引用返回的空指针 – Null检查前引用空指针 API 使用错误 – 无效迭代器使用 – 不可修改的集合错误 – 已释放资源调用 性能缺陷
并发缺陷
• 死锁 • 竞态条件(Race conditions) • 阻塞调用误用
算术错误
• 负变量不当使用 • 异常符号扩展 • 整数溢出 • 除零异常
内存崩溃
• 内存访问溢出 • 字符串长度计算错误 • 缓冲区溢出 • 写指针溢出 • 负数组索引写入 • 内存错误分配 • 错误的内存释放
非法内存访问
• HeartBleed
检测实例-HeartBleed Bug
Jenkins检测对比
类型
相关文档
最新文档