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

0df449b5b4dc06ac1520c57a2afcacaa.png

让我们从一个运动类比开始,以帮助说明这两种方法之间的差异。静态代码分析类似于练习网和投球机练习棒球挥杆。最小的惊喜。经过几次挥杆后,您每次都知道球的确切位置。这有助于处理基础知识并确保您拥有良好的形式。虽然这有助于改善你的游戏,但它只能让你到目前为止。

动态代码分析更像是练习你的挥杆与现场投手,每个球场的类型和位置的变化。它不仅测试您的基本面,还测试您对不同的意外情况作出反应的能力。在生产中完成时,就像在装载底座的情况下在第9洞的底部完善你的挥杆。我是否提到过这个分数与2个出局相关?赌注很高。

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

静态代码分析

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

这解决了什么?

这些通常会解决代码漏洞,代码异味和遵守普遍接受的编码标准。这些包括常见的开发人员错误,这些错误通常由“Code Peer Reviews”找到。

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

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

优点

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

限制

在现实生活中,对“乔”有用的东西对“简”不起作用。静态代码分析对待它们都是相同的,因为它无法看到数据。

请考虑以下伪代码:

function getFullName(firstName) { if (firstName == “Joe”) return “Joe Smith” if (firstName == “Jane”) return “Dave”//这是不正确的业务逻辑 if (firstName != “Joe or Jane”) return “Joey”  }

在上面的示例中,静态代码分析不提供对开发人员意图的理解。用户希望“Jane”的全名“Jane Doe”获得“Dave”。任何其他名称都会返回“Joey”。期望有效用户的任何下游应用程序现在都将面临运行时错误或异常。

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

最后,自动静态代码覆盖工具通常会提供错误的安全感,以确保所有内容都经过验证。事实是,报告只能与管理它们的基本规则一样好。

动态代码分析

动态代码分析是通过在程序运行期间或之后检查应用程序来进行调试的方法。由于源代码可以使用各种不同的输入运行,因此没有一套给定的规则可以涵盖这种风格。

这解决了什么?

这些解决了由于业务环境的变化而发生的运行时漏洞。例如,上面的代码片段将通过动态代码分析进行标记。像OverOps这样的工具可以更进一步。

  1. 对于每个运行时事件,OverOps会回答发生的事情,发生的时间以及发生的原因。
  2. OverOps支持对多个方面的所有运行时异常进行检测,分类和优先级排序。

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

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

  1. 对于生产,动态代码分析提供的信息可帮助快速排除生产事故。
  2. 对于预生产,动态代码分析可防止不良代码投入生产。这些可以与CI / CD工具结合使用,作为代码促销的质量门。

优点

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

限制

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

结论

就像在机器和活投手上练习挥杆一样,这些方法是相辅相成的。静态代码分析通常会在动态代码分析无法解决的未执行代码中发现问题。同时,动态代码分析涵盖了静态分析所不具备的生产方案。

整理不易,请大家多多评论转发并且关注我,您的鼓励是我最大的动力。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值