第八讲静态代码质量分析技术
如何进行代码的静态分析和质量评估

如何进行代码的静态分析和质量评估?代码的静态分析和质量评估是软件开发过程中非常重要的环节,可以帮助开发者发现潜在的问题和提高代码的质量。
本文将介绍静态分析的基本概念、常用的静态分析工具以及质量评估的指标和方法。
一、静态分析的概念和目的静态分析是一种在不运行程序的情况下对源代码进行扫描分析的方法,目的是检测源代码中的潜在问题,例如潜在的错误、漏洞、性能问题等。
与动态分析相比,静态分析主要关注代码本身的结构和语法,并通过各种规则和技术对代码进行检测和评估。
静态分析的目的有以下几个方面:1.发现潜在的错误:静态分析可以检测代码中的语法错误、类型错误、逻辑错误等,帮助开发者在编写代码的过程中及时发现和修复问题。
2.提高代码的可读性:静态分析可以检查代码的结构和格式,帮助开发者编写出易于理解和维护的代码。
3.提高代码的性能:静态分析可以识别出代码中的性能问题,例如循环过多、重复计算等,帮助开发者优化代码。
4.检测安全问题:静态分析可以检测代码中的安全漏洞和风险,帮助开发者提高软件的安全性。
二、常用的静态分析工具现在有许多静态分析工具可供选择,下面介绍几个常用的工具:1. Pylint:是一个用于Python代码的静态分析工具,可以检查源代码中的潜在问题并提供修复建议。
它支持检测语法错误、命名规范、代码复杂度等。
2. FindBugs:是一个用于Java代码的静态分析工具,可以检测源代码中的潜在问题,包括空指针异常、资源未关闭、代码重复等。
它可以与主流的Java开发工具集成,并提供详细的报告和修复建议。
3. ESLint:是一个用于JavaScript代码的静态分析工具,可以检测源代码中的语法错误、代码规范、潜在的逻辑错误等。
它支持配置灵活,并可以与多个开发工具集成。
4. SonarQube:是一个用于多种编程语言的静态分析工具,包括Java、C++、JavaScript等。
它不仅可以检测代码中的潜在问题,还可以评估代码的复杂度、安全性等方面的质量。
代码质量管理静态分析和测试覆盖率

代码质量管理静态分析和测试覆盖率代码质量管理在软件开发中具有重要的作用,它能够帮助开发团队在开发过程中发现并解决潜在的问题,确保代码的可读性、可维护性和可测试性。
静态分析和测试覆盖率是常用的代码质量管理技术,本文将深入探讨这两者的概念、方法和应用。
一、静态分析静态分析是一种以源代码为基础的代码质量管理方法,它通过对代码的结构、语法和语义进行检查,发现潜在的错误、不良编码实践和安全漏洞。
静态分析主要包括静态代码分析和代码规范检查两个方面。
1. 静态代码分析静态代码分析是通过解析代码的语法结构,检查代码中的错误和问题。
静态代码分析工具通常能够检测到常见的编码错误、潜在的内存泄漏、不一致的命名规范等。
通过对代码进行静态代码分析,开发团队可以及时发现并修复这些问题,提高代码的质量。
2. 代码规范检查代码规范检查是通过定义一系列编程规范,对代码进行检查并发现不符合规范的问题。
代码规范通常包括命名规范、缩进规范、注释规范等。
代码规范检查工具能够帮助开发团队保持一致的编码风格,提高代码的可读性和可维护性。
二、测试覆盖率测试覆盖率是一种衡量测试的完整性和质量的指标,它能够评估测试用例是否覆盖了代码中的各个分支和路径。
测试覆盖率通常分为语句覆盖率、分支覆盖率、条件覆盖率和路径覆盖率等。
1. 语句覆盖率语句覆盖率是指测试用例是否覆盖了代码中的每一条语句。
通过检查语句覆盖率,开发团队可以确定是否有未执行的代码,从而提高测试用例的完整性。
2. 分支覆盖率分支覆盖率是指测试用例是否覆盖了代码中的各个分支。
通过检查分支覆盖率,开发团队可以确定是否有未覆盖的分支,从而提高测试用例的质量。
3. 条件覆盖率条件覆盖率是指测试用例是否覆盖了代码中的各个条件。
通过检查条件覆盖率,开发团队可以确定是否有未覆盖的条件,从而提高测试用例的可靠性。
4. 路径覆盖率路径覆盖率是指测试用例是否覆盖了代码中的所有可能路径。
通过检查路径覆盖率,开发团队可以确定是否有未覆盖的路径,从而提高测试用例的全面性。
如何进行代码的静态分析和质量检查

如何进行代码的静态分析和质量检查静态代码分析是一种分析代码质量的方法,它可以帮助开发人员发现代码中的潜在问题和错误,并提供改进代码质量的建议。
它是软件开发中的一种重要实践,以确保代码的可读性、可维护性和可扩展性。
静态代码分析的目标是通过检查代码的结构、语法、语义和风格来发现潜在的问题。
在进行静态代码分析之前,需要先编译源代码,生成可执行文件或者中间代码。
然后,使用专门的静态代码分析工具对生成的代码进行分析。
在静态代码分析中,常常采用以下几种方法来分析代码质量:1.语法分析:检查代码的语法是否符合编程语言的规范。
这可以通过编译器本身来完成,编译器会检查代码中的拼写错误、缺少的分号、括号不匹配等语法错误。
2.代码风格检查:检查代码是否符合编程规范和最佳实践。
不同的编程语言有不同的代码规范,例如,Python代码应该使用缩进进行代码块的标识,变量名应该使用小写字母和下划线等。
通过代码风格检查可以帮助开发人员编写一致且易读的代码。
3.代码质量检查:检查代码中的潜在问题和错误。
这包括许多方面,例如代码重复、未使用的变量、不安全的操作、潜在的内存泄漏等。
代码质量检查可以帮助开发人员发现和修复代码中的缺陷和问题。
4.代码复杂度分析:分析代码的复杂度,例如函数的长度、嵌套的深度、循环的复杂度等。
代码的复杂度越高,就越难理解、维护和调试。
通过代码复杂度分析,可以帮助开发人员识别并重构复杂的代码块,以提高代码的可读性和可维护性。
5.安全性分析:检查代码是否存在安全风险,例如潜在的漏洞、缓冲区溢出等。
安全性分析可以帮助开发人员提前发现并修复代码中的安全问题,以保障系统的安全性。
为了进行静态代码分析和质量检查,可以使用一些专门的工具和框架。
以下是一些常见的静态代码分析工具:1.集成开发环境(IDE):许多开发环境都提供了静态代码分析工具,例如Eclipse、IntelliJ IDEA和Visual Studio等。
这些工具可以在代码编写过程中进行实时的代码检查,并提供相应的提示和建议。
编程中的代码静态分析和质量度量

编程中的代码静态分析和质量度量代码静态分析是指通过对代码进行分析来提取代码的结构信息和行为信息,检测代码中的潜在问题、错误和漏洞,并提供适当的建议和改进措施,以提高代码的质量和可靠性。
代码质量度量是对代码进行量化评估,从不同的角度衡量代码的质量,以便开发人员和团队能够更好地了解和改进代码。
代码静态分析是通过对代码进行静态扫描,识别代码中的问题和潜在的错误,不需要执行代码,只需要对代码进行语法和结构分析即可。
静态分析可以帮助开发人员在代码编写期间尽早发现潜在的问题,减少代码的错误率,提高代码的可维护性和可读性。
静态分析可以对代码进行各种检查,包括但不限于以下几个方面:1.语法检查:检查代码是否符合编程语言的语法规范,包括括号的匹配、分号的使用等。
2.类型检查:检查代码中的变量类型,避免类型不匹配的错误。
3.未使用变量和未使用函数检查:检查代码中是否有未使用的变量和未使用的函数,以减少冗余代码。
4.空指针引用和空引用检查:检查代码中是否存在可能引发空指针异常的情况。
5.代码复杂度检查:检查代码复杂度,包括函数的行数、嵌套层数、圈复杂度等,用于评估代码的易读性和可维护性。
6.安全漏洞检查:检查代码中是否存在潜在的安全漏洞,例如密码明文存储、SQL注入等。
代码质量度量是对代码进行量化评估,从不同的角度衡量代码的质量。
代码质量度量可以通过以下几个方面来评估代码的质量:1.代码复杂度:通过度量代码的复杂度,如函数的行数、嵌套层数、圈复杂度等,来评估代码的可读性和可维护性。
通常情况下,代码的复杂度越低,越容易理解和修改。
2.代码重复:度量代码中的重复代码行数和重复代码的比例,重复代码往往是冗余和低效的,可以通过重构来提高代码的质量。
3.单元测试覆盖率:度量代码中被单元测试覆盖到的代码比例,高覆盖率的代码往往具有较高的可靠性和稳定性。
4.代码规范遵循度:度量代码是否符合团队或者行业的编码规范,如命名规范、注释规范等。
如何进行代码静态分析提高代码质量

如何进行代码静态分析提高代码质量代码静态分析是一种优化软件开发过程中的重要方法,它可以帮助开发者发现潜在的代码缺陷和安全漏洞,从而提高代码质量。
本文将介绍代码静态分析的概念、常用的静态分析工具以及如何进行代码静态分析来提高代码质量。
一、代码静态分析的概念代码静态分析是一种在不执行程序的情况下对代码进行分析的方法。
通过对代码的语法、结构、数据流等方面的分析,可以找出潜在的问题和错误。
与动态分析相比,静态分析具有以下优势:1. 提前发现问题:静态分析可以在代码被执行之前找出问题,从而减少后期修复的成本。
2. 覆盖全面:静态分析可以对整个代码库进行分析,而不仅仅是测试用例涉及到的部分。
3. 自动化:静态分析工具可以自动进行分析,减少人工检查的工作量。
二、常用的静态分析工具1. SonarQube:SonarQube是一个开源的静态代码质量管理平台,支持多种编程语言和常见的静态分析规则。
2. FindBugs:FindBugs是一个针对Java代码的静态分析工具,可以发现代码中的潜在错误和常见问题。
3. PMD:PMD是一个可扩展的静态代码分析工具,支持多种编程语言,可以检测代码中的潜在问题和规范违规。
4. Checkstyle:Checkstyle是一个用于检查Java代码风格和编码规范的工具,可以帮助开发团队保持代码的一致性和可读性。
5. ESLint:ESLint是一个用于检测JavaScript代码问题的工具,支持可配置的规则和插件,可以帮助开发者编写更规范的代码。
三、代码静态分析的步骤1. 选择适合的静态分析工具:根据项目的编程语言和需求,选择合适的静态分析工具。
2. 配置分析规则:根据项目的特点和要求,配置静态分析工具的规则,以便检测到特定类型的问题。
3. 运行静态分析工具:将静态分析工具应用到代码库中,运行分析工具以进行代码分析。
4. 分析结果的处理:对分析结果进行分类和整理,筛选出真正需要关注的问题。
软件测试中的代码质量与静态分析

软件测试中的代码质量与静态分析在软件开发过程中,代码质量是一个至关重要的方面。
一份高质量的代码能够降低软件系统的风险,提高系统的稳定性、可靠性和可维护性。
而静态分析作为一种常用的代码质量评估方法,可以有效地检测代码中的潜在问题,提前预防和发现可能引发严重错误的代码。
本文将围绕软件测试中的代码质量与静态分析展开讨论。
一、代码质量的重要性一个软件系统的代码质量直接影响着系统的稳定性和可靠性。
一份高质量的代码具有以下几个方面的优势:1.可维护性:高质量的代码易于理解和修改,这对于软件系统的可维护性至关重要。
代码的可维护性直接影响着后续的系统升级、功能扩展和错误修复等工作。
2.可读性:代码应该具备良好的可读性,使得开发人员可以迅速理解代码的逻辑结构和实现方式。
高可读性的代码降低了开发人员的学习成本,并且能够减少可能出现的错误。
3.健壮性:高质量的代码能够有效地处理各种异常情况,避免可能的系统崩溃和数据丢失。
健壮的代码能够提高系统的容错能力。
4.性能优化:优质的代码能够遵循性能最佳实践,减少资源的消耗,并提高系统的性能表现。
优化后的代码能够更好地满足用户的需求。
二、静态分析的概念与作用静态分析是一种在不需要实际运行代码的情况下对代码进行分析的方法。
它可以从源代码层面发现代码中的潜在问题,判断代码的质量,并提供改进建议。
静态分析主要包括以下几个方面的内容:1.错误检测:静态分析可以检测出代码中的语法错误、逻辑错误和类型错误等问题,帮助开发人员及早发现和纠正这些潜在的错误。
2.代码质量评估:静态分析可以根据一系列代码质量指标对代码进行评估,如代码复杂度、耦合度、代码重复等,帮助开发人员了解代码的可维护性和可读性。
3.安全性评估:静态分析也可以用于评估代码的安全性,检测出潜在的安全漏洞和风险,帮助开发人员提高代码的安全性水平。
4.性能分析:部分静态分析工具还可以对代码进行性能分析,发现代码中的性能瓶颈,并给出针对性的优化建议。
代码质量保证:静态分析与重构技巧

代码质量保证:静态分析与重构技巧标题:学会静态分析与重构技巧,提升代码质量导语:在软件开发领域,代码质量是保证项目高效运行和可维护性的关键。
静态分析和重构技巧是提高代码质量的重要手段。
本文将详细介绍学习和应用静态分析与重构技巧的步骤和方法,帮助读者提升代码质量。
一、了解静态分析与重构的概念1. 静态分析:指通过对程序源代码进行分析,发现隐藏在代码中的问题,并提供相应的解决建议,以提高代码的质量和性能。
2. 重构:是指对代码的结构和设计进行优化和改进,以提高可读性、可维护性和性能。
二、学习静态分析技巧1. 静态分析工具介绍:了解主流的静态分析工具,如Pylint、Checkstyle等,它们可以自动检测代码中的问题,包括代码风格错误、潜在的运行时错误等。
2. 学习静态分析规则:不同的静态分析工具有各自的规则集,了解和学习这些规则,可以帮助我们更好地理解如何改进代码。
3. 应用静态分析工具:将所学的静态分析技巧应用到实际项目中,通过分析工具的检测结果,优化代码质量。
三、学习重构技巧1. 了解常用的重构手法:学习和掌握常见的重构手法,如提取方法、合并方法、合并重复代码等,以及它们的适用场景和实际效果。
2. 遵循重构原则:重构需要遵循一些基本原则,如保持代码功能不变、分步进行、确保有良好的测试覆盖等。
学习和应用这些原则可以保证重构的安全性和可行性。
3. 实践重构技巧:选择一个项目或代码模块,应用所学的重构技巧进行改进。
通过实践,加深对重构技巧的理解和掌握。
四、结合静态分析和重构1. 通过静态分析工具发现问题:运用静态分析工具检测代码中存在的问题,如潜在的错误、代码重复等。
2. 使用重构技巧改进代码:根据静态分析工具的结果,应用相应的重构技巧进行代码改进,消除问题并提高代码质量。
3. 迭代优化:不断地进行静态分析和重构,逐步优化代码,使其更加简洁、易读、可维护。
五、注意事项和挑战1. 小步骤优化:在进行静态分析和重构时,应该采用小步骤的方式,每次只改动一小部分代码,并及时进行测试,以保证代码的正常运行。
软件测试中的代码静态分析和代码质量

软件测试中的代码静态分析和代码质量在软件测试中,代码静态分析和代码质量是非常重要的概念。
通过对代码进行静态分析,可以帮助开发人员检测出潜在的问题,并提高代码的质量。
本文将探讨代码静态分析的概念和方法,以及它对代码质量的影响。
一、代码静态分析的概念与方法代码静态分析是一种在编译过程之前或之后对源代码进行分析的方法。
它不需要实际运行代码,通过检查代码的语法、结构和规范是否符合一定的标准来找出潜在的问题。
代码静态分析可以帮助开发人员在开发过程中及早发现并解决代码中的问题,如潜在的错误、漏洞、性能问题等。
要进行代码静态分析,有多种方法和工具可以使用。
其中一种常见的方法是静态代码分析器。
静态代码分析器可以通过扫描源代码,检查代码中的错误、未使用的变量、死代码等问题。
另外,一些集成开发环境(IDE)也提供了代码静态分析的功能,可以在开发过程中实时检查代码的质量。
二、代码质量与代码静态分析的关系代码质量是衡量软件开发质量的重要指标之一。
良好的代码质量可以提高软件的可维护性、可扩展性和可重用性,减少问题的出现和修复的成本。
而代码静态分析可以帮助开发人员找出代码中的问题,提高代码的质量。
首先,代码静态分析可以帮助开发人员发现潜在的错误。
通过对代码进行扫描和检查,可以找出一些常见的错误,如空指针引用、数组越界等。
及早发现这些错误可以避免它们在运行时导致严重的问题。
其次,代码静态分析可以帮助开发人员发现潜在的安全漏洞。
在软件开发中,安全漏洞是非常严重的问题,可能导致数据泄露、系统崩溃等后果。
通过静态分析,可以找出一些潜在的安全隐患,并及时修复,提高软件的安全性。
另外,代码静态分析还可以帮助开发人员找出一些代码质量问题,如代码复杂度过高、重复代码较多等。
高复杂度和重复代码可能导致代码难以理解和维护,降低软件的可维护性。
通过静态分析,可以发现并重构这些问题代码,提高代码的质量和可维护性。
总的来说,代码静态分析对于提高代码质量是至关重要的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本分类
– 黑盒 – 白盒
许多缺陷靠运行很难暴露:死琐等
高级软件工程
静态代码质量分析技术 8/45
静态缺陷查找
不运行程序(广义测试包含这类活动) 静态分析可以涉及更多的路径组合
– 测试一次只能有一个执行轨迹
可以分析多种属性
– 死琐?安全漏洞?性能属性?
源码?目标码?
高级软件工程
静态代码质量分析技术 9/45
缺陷知识哪里来
– 程序自带
– 工具提供
基本方法
– 基于形式化
– 基于缺陷模式
高级软件工程
静态代码质量分析技术 26/45
基于形式化方法的主要工具
JPF 模型检测 模型检测(Model Checking) Bandera Slam, BLAST, CMC ESC/Java 定理证明(Theorem Proving)
高级软件工程
静态代码质量分析技术 36/45
3、不动点(Fixed-Points)
一个函数 f : L → L 是单调的 (monotone), 当: ∀x, y ∈ S : x ⊑ y ⇒ f(x) ⊑ f(y)
单调函数不一定是递增的: 常量函数也是单调的 多个单调函数的复合仍然是单调函数 如果将 ⊔ 与 ⊓ 看作函数,则它们都是单调的
高级软件工程
静态代码质量分析技术 32/45
假设 X ⊆ S. y ∈ S 是X的上界(upper bound), 记作 X ⊑ y, 如果: ∀x ∈ X : x ⊑ y 类似地: y ∈ S 是 X 的下界(lower bound), 记作 y ⊑ X, 如果: ∀x ∈ X : y ⊑ x 定义最小上界(least upper bound) ⊔X: X ⊑ ⊔X ∧ (∀y ∈ S : X ⊑ y ⇒ ⊔X ⊑ y) 定义最大下界 (greatest lower bound) ⊓X: ⊓X ⊑ X ∧ (∀y ∈ S : y ⊑ X ⇒ y ⊑ ⊓X)
– 尤其是对循环、递归等
Байду номын сангаас
主要思想是对代码进行“近似”,将不可判 定问题进行模拟
高级软件工程
静态代码质量分析技术 22/45
定理证明(Theorem Proving)
演绎方法(Deductive Methods) 基于Floyd/Hoare 逻辑 用如下形式表示程序的状态
{P} C {Q} C: 可执行代码 P: Pre-condition,执行前的状态属性 Q: Post-condition,执行后的状态属性 利用推理/证明机制解决 语句复合问题
高级软件工程
静态代码质量分析技术 37/45
对于一个高度有限的格 L 每个单调函数 f 有唯一的一个最小不动点: fix (f) =
i ( ⊥) f ⊔
i0
那么: f (fix (f)) = fix (f) 证明:
1) ⊥ ⊑ f (⊥) 2) f (⊥) ⊑ f 2 (⊥) 3) ⊥ ⊑ f (⊥) ⊑ f 2 (⊥) ⊑ …… 4) L 高度有限, 因此对于某个 k: f k (⊥) = f k+1 (⊥) 5) ……
Developing Process
Analyzing
Designing
Coding
Compiling
Deploying Maintaining
高级软件工程
静态代码质量分析技术 7/45
动态测试
离线运行程序 应用最广泛的缺陷查找技术
– 对功能性最有效 – 工作量大:微软(半数的测试人员?) – 自动程度难以提高
例如:能否判定如下变量 x 的值?
x = 17; if (TM(j)) x = 18; 第 j 个图灵机的停机问题是不可判定的
高级软件工程
静态代码质量分析技术 16/45
在完备、准确解难以求得的情况下 只能追求部分、近似解 这 是现实的道路 也是十分有用的道路
主要途径包括:
•类型检验 •形式化方法 •缺陷模式匹配
高级软件工程
静态代码质量分析技术 20/45
模型检测
基于“有限状态自动机”理论 从代码中抽取有限状态转换系统模型, 用来表示目标系统的行为 适合检验“并发”等时序方面的特性 对于值域等类型的分析比较困难
– 状态爆炸
高级软件工程
静态代码质量分析技术 21/45
抽象解释
一种基于“格”理论的框架 许多形式化分析方法都可以被涵盖其中 主要适合 数据流分析(Data Flow Analysis)
高级软件工程
静态代码质量分析技术 23/45
符号执行
通过使用抽象的符号表示程序中变量的 值来模拟程序的执行,克服了变量的值 难以确定的问题 跟踪各路径上变量的可能取值,有可能 发现细微的逻辑错误 程序较大时,可能的路径数目增长会很 快。可以选取重要的路径进行分析
高级软件工程
静态代码质量分析技术 24/45
高级软件工程
静态代码质量分析技术 19/45
3、形式化的软件分析方法
形式化软件分析是一种基于数学的“自动化”技术: 给出一个特定行为的精确描述,该技术可以“准 确地”对软件的语义进行推理
主要的形式化方法包括: 模型检测(Model Checking) 抽象解释(Abstract Interpretation) 定理证明(Theorem Proving) 符号执行(Symbolic Execution)
内
容
一、静态代码缺陷查找的角色 二、静态代码缺陷基本类别 三、静态代码缺陷查找的主要方法 四、静态代码缺陷查找的常见工具 五、理论基础:不动点
高级软件工程
静态代码质量分析技术 6/45
一、静态代码缺陷查找的角色
V&V
Product (Artifact)
Review!
模型检测
静态分析
动态测试
在线监测
高级软件工程
静态代码质量分析技术 17/45
2、编译过程中的代码缺陷查找
最基本的代码分析 词法分析
语法分析
– 抽象语法树 (AST)
类型检验
– 语义分析? – 变量赋值、调用操作、类型变换 等
高级软件工程
静态代码质量分析技术 18/45
程序设计语言中的类型
某些具有相同/相似特性实例的集合
– 值的集合?操作的集合?
基本类型
– 整数、实数、枚举、字符、布尔
自定义
– 结构、抽象数据、面向对象 – 为什么要引入?便于理解?帮助人们发现错误!
静态类型化语言
– 每个表达式在静态程序分析时都是确定的
强类型化语言
– 所有表达式的类型是一致的(可以在运行时检验)
实际编写代码时,这是被编译器检查出来的一类常见错误!
与具体应用相关
– 类型定义:
应用设计人员 – 类型约束: 应用设计人员、编程人员 – 需求相关: 用户
高级软件工程
静态代码质量分析技术 12/45
三、静态代码缺陷查找的主要方法
1、静态代码分析 2、编译过程中的代码缺陷查找 3、形式化分析方法 4、缺陷模式匹配
高级软件工程
静态代码质量分析技术 13/45
高级软件工程
静态代码质量分析技术 33/45
2、格(Lattice)
一个格是一个偏序集 S,且满足: 对于所有的子集 X ⊆ S, ⊔X 与 ⊓X 都存在 一个格一定有: 唯一的一个最大元素 ⊤ (top) :⊤ = ⊔S 为什么? 唯一的一个最小元素⊥(bottom):⊥ = ⊓S.
由于最小上界和最大下界的唯一性,可以将求 x 和 y 的 最小上界和最大下界定义为 x 和 y 的二元运算: 最小上界: x ⊔ y 最大下界: x ⊓ y
ASTREE PREfix
抽象解释(Abstract Interpretation) 符号执行(Symbolic Execution)
高级软件工程
静态代码质量分析技术 27/45
基于缺陷模式的主要工具
主要采用数据流分析技术,速度快 没有误报 FindBugs 内置较多的缺陷模式 有较好的应用(google) PMD 格式为主,可以灵活增加新缺陷模式 以抽象语法树为基础建立 Coverify 主要针对操作系统 …… CODA 正在开发中……
高级软件工程
静态代码质量分析技术 34/45
哪些是格?
高级软件工程
静态代码质量分析技术 35/45
对于任何一个有限集合 A,可以定义一个格 (2A,⊆), 其 中, ⊥ = ∅, ⊤ = A, x ⊔ y = x ∪ y, x ⊓ y = x ∩ y
格的高度是从⊥ 到 ⊤ 的最长路径。 例如:上面幂集格的高度是4。 一般地:格 (2A,⊆) 的高度是 |A|.
在线检测
当系统正在为用户提供服务时,一般不能 进行测试:输入受限 但可以进行检测,获取各种状态、事件 进行分析,并可能据此调整目标系统 尽量减少对系统的应用 与静态分析结合?
高级软件工程
静态代码质量分析技术 10/45
二、静态代码缺陷类别
与具体应用“无关”
– 词法或者语法 – 共性特性(死锁、空指针、内存泄露、数组越界) – 公共库用法(顺序、参数、接口实现,容错,安全)
与具体应用“相关”
– 类型定义(操作格式,不含其它信息(信息隐藏)) – 类型约束(调用的顺序、参数值,接口实现) – 需求相关(正确)
高级软件工程
静态代码质量分析技术 11/45
如何得到这些知识?
与具体应用无关
– 词法或者语法:语言设计人员 – 共性特性: