静态和动态代码分析之间有什么区别,您如何知道使用哪个?

让我们从体育类比开始,以帮助说明这两种方法之间的区别。静态代码分析类似于使用练习网和投球机练习棒球挥杆。几乎没有什么惊喜。经过几次挥杆后,您确切地知道每次球都在哪里。这有助于基础知识的工作,并确保您具有良好的状态。虽然这有助于改善您的游戏,但它只能使您步入正轨。

动态代码分析更像是在带电投手的情况下练习挥杆动作,每个投球的类型和位置都会发生变化。它不仅测试您的基础知识,还测试您对不同的意外情况做出反应的能力。在生产中完成后,就好比在第9根底部装满底座的时候完善挥杆动作。我是否提到分数与2局并列?赌注很高。

现在,让我们从技术角度比较和对比这两种不同的样式。

静态代码分析

静态代码分析是一种调试方法,通过在运行程序之前检查应用程序的源代码来完成。这通常是通过对照给定的一组规则或编码标准来分析代码来完成的。

这个地址是什么?

这些通常可以解决代码漏洞,代码气味和遵守公认的编码标准。这些包括常见的开发人员错误,这些错误通常在“代码同行评论”中发现。 

在SDLC(软件开发生命周期)的哪个阶段可以使用静态代码分析?

这些通常在“代码开发”阶段之后和“单元/组件/集成”测试阶段之前的任何阶段合并。在某些情况下,CI / CD管道将静态分析报告纳入代码提升的质量门。

好处

除其他好处外,识别代码弱点和遵守严格的开发标准的能力还有助于减少潜在的生产问题。这些还提供了“测试覆盖率”报告,这些报告描述了代码执行的程度。

局限性

在现实生活中,对“乔”有效的方法对“简”无效。静态代码分析将两者视为相同,因为它看不到数据。

考虑以下伪代码: 

function getFullName(firstName) {  
  if (firstName == “Joe”)
  return “Joe Smith”
  if (firstName == “Jane”)
  return “Dave” // This is incorrect business logic
  if (firstName != “Joe or Jane”)
  return “Joey”
  }

 

在上面的示例中,静态代码分析无法理解开发人员的意图。预期“简氏”全名为“简氏”的用户将获得“戴夫”。其他任何名称都将返回“ Joey”。任何期望有效用户的下游应用程序现在都将遇到运行时错误或异常。

这样的问题很容易通过“静态代码分析规则”,JUnits甚至“代码覆盖率”报告。生产是“狂野的西部”,通常包含多种商业风味。“生产方案”不遵循任何给定的规则集。

最后,自动化的静态代码覆盖工具通常会提供一种错误的安全感,即正在验证所有内容。事实是,这些报告仅与管理它们的基本规则一样好。

动态代码分析

动态代码分析是通过在程序运行期间或之后检查应用程序进行调试的方法。由于源代码可以通过各种不同的输入运行,因此没有一组适用于此样式的规则。

这个地址是什么?

这些解决了由于业务环境变化而导致的运行时漏洞。例如,上面的代码片段将通过动态代码分析进行标记。诸如OverOps之类的工具将进一步采取这一步骤。 

  1. 对于每个运行时事件,OverOps都会回答发生的情况,发生的时间以及发生的原因。

  2. OverOps可以在多个方面对所有运行时异常进行检测,分类和优先级排序。

在SDLC(软件开发生命周期)的哪个阶段可以使用动态代码分析?

这些可以在多个地方使用。 

  1. 对于生产,动态代码分析可提供信息以帮助快速排除生产事件。 

  2. 对于预生产,动态代码分析可防止不良代码进入生产。这些可以与CI / CD工具结合使用,作为代码提升的质量门。

好处

在生产中,动态代码分析有助于提供对应用程序问题的可见性,从而减少生产事件的MTTI。Overops甚至更深了–用变量值确定源代码的确切违规行。

局限性

如果代码没有运行,则不会被分析。此外,动态代码分析不能执行静态代码分析工具的功能,最好与它们结合使用。

结论

就像在机器和实地投手上练习挥杆一样,这些方法是相辅相成的。静态代码分析通常会在未经执行的代码中发现动态代码分析无法发现的问题。同时,动态代码分析涵盖了静态分析所没有的生产场景。

OverOps提供了一种非常独特的动态代码分析方法–它在运行时分析应用程序代码,并且可以将具有完整上下文的每个问题检测到True Root Cause中。借助OverOps平台,DevOps团队能够根据实际代码情况实时观察和监视应用程序的可靠性。

 

精彩文章来源微信公众号     java微技术

你可能感兴趣的:(java)