静态分析有助于管理Java中的风险

描述

今天的软件开发团队承受着巨大的压力;市场对高质量、安全版本的需求不断加快,而安全威胁也变得越来越复杂。考虑到产品故障和安全漏洞的高成本,在整个软件开发过程中解决这些风险比以往任何时候都更加重要。需要尽早发现潜在问题,以防止发布延迟或更糟糕的是,发布后失败。

幸运的是,有许多工具可以帮助开发人员管理这些风险,帮助在开发阶段早期识别潜在问题,此时问题的破坏性较小且更容易修复。开发人员可以轻松访问它们,并且在许多开发环境中易于使用。这适用于使用任何语言进行编程的开发人员;但是,我们在本次讨论中关注 Java。

静态分析有助于降低风险

在考虑 Java 或其他方面的静态分析工具时,了解这些工具是什么很重要。术语“静态分析”是指在不执行程序的情况下分析程序的方法。正如我们将在下一节中看到的,静态分析工具可用于生成从编码标准违规到特定错误或漏洞的任何报告。简而言之,静态分析工具分析源代码以找到对管理风险有用的信息。

静态分析的一个好处是它可以在开发周期的早期执行,通常在应用程序执行之前。它通常集成到自动构建中,因此几乎没有运行频繁分析的开销。通过将静态分析集成到内部开发循环中,用户可以最大化他们从此类工具中获得的价值。

当与精心设计的开发过程结合使用时,静态分析工具可以提供对软件状态的关键可见性。这使开发团队能够了解其代码中的风险级别以及风险所在的位置,以便他们可以采取行动来减轻或完全消除它(表 1)。单个工具通常专注于软件开发团队面临的特定问题,团队经常使用这些工具的组合来全面了解他们的开发工作。

表 1:静态分析工具通常会发现特定类型的问题,每种类型代表不同类型的风险并需要不同类型的操作。

源代码

开发人员传统上通过简单的 IDE 集成或作为独立工具使用静态分析工具。虽然这些工具为开发工作增加了重要价值,但随着开发人员花费越来越多的时间使用和维护不同的工具以及筛选越来越多的结果,工具的激增也带来了效率问题。为了明智地管理开发资源,团队必须能够有效地管理、过滤和优先考虑所有这些问题。

为了解决这些问题,开发测试平台应运而生,以便在一个地方统一和管理所有这些静态分析信息,从而简化用户体验并在更大范围内提高可见性和效率,同时提供相关的访问控制和报告。开发测试平台甚至开始通过在静态分析过程中利用早期程序运行期间生成的工件来模糊静态分析和其他类型分析之间的界限。例如,这些平台可以在静态分析期间使用来自测试运行的代码覆盖率信息来有效地自动识别缺失的测试用例。解决这个问题的传统方法需要基于简单的覆盖阈值的大量手动工作。通过利用不同来源的数据,

为 Java 选择静态分析工具

Java 最流行的免费静态分析工具可能是 Checkstyle、PMD 和 FindBugs。虽然它们都属于“静态分析”的范畴,但它们的优势是如此不同,以至于许多人认为这些工具是互补的,而不是替代品。

格纹风格

Checkstyle 被称为“一种开发工具,可帮助程序员编写符合编码标准的 Java 代码 [1]”,尽管它并不严格限制自己执行编码标准。它为用户提供了一个文档化的 API 来定义他们自己的自定义检查。典型的编码标准利用基本规则使代码更具可读性,并减少未来代码更改引入错误的可能性。标准倾向于定义有关格式(空格、括号、命名、注释等)、继承和可见性的约定。如果得到充分执行,设计良好的编码标准可以帮助开发人员降低风险。但是,执行起来可能很困难,因为编码标准会产生很多违规行为,并且可能存在忽略嘈杂规则的巨大压力。使用遗留代码,这会使执行新的编码标准变得不可行。虽然 Checkstyle 发现的大多数问题不会影响代码的正确性、健壮性或性能,但帮助开发人员快速理解其他人编写的代码具有真正的价值。如何量化这些违规所代表的风险并不总是显而易见的,直接从违规计数衡量风险是有问题的,但这些计数的变化可以作为风险变化的合理代理。

PMD

PMD 被描述为“……源代码分析器。它会发现未使用的变量、空的 catch 块、不必要的对象创建等等[2]。” 它也在不断发展,目前的检查主要集中在可能掩盖开发人员错误的语法异常上,例如过于复杂的表达式、空块、未使用的变量、参数和类成员。它还有一个流行的模块来识别重复的代码。因为它通常报告“可疑代码”而不是特定的编码错误或违反标准的情况,所以用户需要仔细选择为日常使用启用的检查。因为强制规则是由用户选择的,所以这个工具对遗留项目和新建项目都很有用,而且通常很容易将这些计数与风险相关联。很遗憾,

查找错误

FindBugs 可能是这些工具中最受欢迎的。它查找代码中的实际错误,以及可疑代码和标准违规。由于报告的问题范围广泛,因此使用包含项目最相关检查的配置非常重要。对于遗留项目尤其如此,因为从一开始就更容易保持新项目的清洁。与 PMD 一样,任何团队都可以从使用 FindBugs 中受益,并且将问题计数与风险相关联非常简单。

商业静态分析工具显示出类似的多样性,可以识别从标准违规到实际缺陷和安全漏洞的所有内容。为了说明商业工具与免费工具的比较,我使用专有的静态分析解决方案和 FindBugs 的 2.0.1 版分析了 Jenkins 作业管理系统 (www.jenkins-ci.org) 的 1.496 版,启用了所有检查。 在此代码库中,识别出 852 个独特问题——两种产品仅识别出 28 个问题。该专有解决方案发现了 197 个独特问题,其中 188 个来自影响较大的类别(安全和并发错误、资源泄漏和未处理的异常,如 null 取消引用)。FindBugs 发现了 627 个独特问题,其中 29 个来自这些高影响类别。简而言之,

开发测试——将所有内容捆绑在一起

静态分析工具是 Java 开发人员软件开发工作中的强大盟友,因为这些工具使开发人员能够深入了解整个软件开发生命周期的风险。它们通常很容易自动化,使用户能够花时间解决问题而不是运行工具。

在管理风险方面,通常信息越多越好——只要这些信息能够阐明开发人员关心的实际风险来源。在决定采用哪些工具时,请记住不仅要考虑分析工具识别的问题类型,还要考虑这些工具如何协同工作以提供额外价值。此外,请务必适当地配置它们,以免问题的数量使您的用户不堪重负。

现代开发测试平台通过将数据统一在一个地方、简化用户体验并创造机会来提供更多价值,从而将测试工具提升到另一个层次。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分