静态代码分析和代码审查有什么区别?


9

我只是想知道静态代码分析和代码审查之间的区别。这两个分别如何完成?更具体地说,今天有哪些工具可用于PHP的代码审查/静态分析?我还想知道用于任何语言的代码审查的好的工具。


代码检查通常是一个手动过程,其他程序员可以通过该过程查看您的代码。这是发现很少的错误或与编码约定等偏差的方法,也是提高整体代码质量的好方法。静态代码分析是您可以使用的工具,尽管我自己从未做过。有兴趣看看别人有什么答案

9
用两个字?“一个大脑”。
MSalters 2012年

Answers:


19

代码审查是人们要做的事情,静态分析是机器要做的事情。有(有时很好)静态分析工具。代码审查是指同事/导师/教授/朋友检查您的代码并给您有建设性的批评。

另一方面,静态分析是一种自动化过程,其中,机器会根据对所分析语言的了解(通常从类型系统中获悉)来分析程序,并尝试找出可能不正确的内容,效率低下,风格不佳或其他效果不理想。


2
我一直给人的印象是,代码审查是一种静态分析,因为它是一种无需执行软件即可衡量软件运行状况的方法。
Buhb 2012年

4
@Buhb:它至关重要地增加了上下文的知识。代码审阅者应了解代码是否正在执行预期的工作。静态工具将(如果语言允许通过某种修饰/断言/合同允许)(最好),以检查形式上一切正常...因此,您可以换一种说法:静态分析是一种代码检查,可以执行算法上。
Francesco'Mar

补充一下,Lint(静态分析师):伙计,这是不需要的!!同事(审稿人):您也可以这样做!
Kushal 2013年

11

静态分析是在不执行软件的情况下对其进行分析的过程。这是非常好的建议,但您必须记住

  1. 不同的静态分析工具对正在研究的代码有不同的理解,因此它们可以发出(或不发出)不同的问题。一种工具可以提供清晰的报告,而另一种则可以抱怨一百万件事。
  2. 动态工具(举个例子,例如valgrind)可以发现许多其他问题,但代价是对资源消耗(时间,内存使用)的沉重负担。之所以如此,是因为您通常正在运行该软件的检测版本。请注意,通过某种方式进行检测(将malloc替换为调试的malloc),它与您的软件并不完全相同(从执行时间可以看出)

这两种方法都缺少上下文:它们不知道sw应该实现的目标。

代码检查是由另一个编码器完成的,他应该知道并且可以检查

  1. 如果代码正确
  2. 如果软件在语义上正确。

它昂贵得多,并且具有不同程度的可重复性,但有很大帮助。

与往常一样,没有一个能够解决所有错误并避免所有问题的灵丹妙药。建议应用-尽可能给出位置,代码,时间,三种检查形式(静态,动态,更多的眼睛(和大脑)实际查看代码),建议使用。

ps:我必须指出,通常从头开始应用工具要好得多。由于误报,转换旧版系统的体验要差得多。如果您从头开始,并且始终致力于保持分析工具的清洁,则可能会避免很多问题。

pps:至于工具,取决于语言。在C和C ++世界中,您可以先查看Visual Studio本身,它包含一个内置的静态分析工具。相对完整的列表可以在Wikipedia上找到。

ppps:静态分析更适合静态语言,例如C或C ++。对于Python,由于其动态属性,很难说一个指向某个列表的名称是否指向该程序其余部分的列表。这并不意味着什么也不能做,就像PyPy所示的JIT一样。


2

代码审查是指高级或专门机构检查您的代码,您的编码方式,代码中遵循的标准以及代码的逻辑级别的情况

就静态分析而言,它是在没有实际执行由该软件构建的程序的情况下执行的计算机软件分析(对执行程序执行的分析称为动态分析)。

根据技术的工具列表在下面的链接中给出

静态分析工具清单

因此,代码审查和静态分析是完全不同的术语。


7
OM的答案本质上是正确的,除了我对“高级或专用机构检查您的代码...”一词有疑问。确实,有些功能失调的商店以这种父母/孩子的方式进行代码检查,许多(甚至更好)的商店都具有点对点代码检查系统,该系统与教师对家庭作业问题的评分不一样。在我工作的地方,大三学生复习大四学生的工作也很普遍。我们的目标是有一个第二对眼睛看看所有的代码是在检查之前。
吉姆在得克萨斯州

2
@JimInTexas,在我们的商店里也一样。我要说的是,代码审查的最重要的(长期的)结果是在团队中传播知识,统一实践和架构/设计愿景。在这方面,大三审查大人的代码在最坏的情况下是学习本地最佳实践的好方法-但是谁说大三人从来不会犯错误,大三则永远也不会发现这些错误?
彼得Török

1

代码审查是更定性的评估,静态代码分析是更定量的评估。

嘿,男孩,这种方法可以写得更好

vs,fe

性能下降。使用'wcslen(str)> 0'构造来识别空字符串效率不高。一种更有效的方法是检查:str [0]!='\ 0'。

性能下降。strlen(MyStr.c_str())类型的表达式可以重写为MyStr.length()

性能下降。如果“ Order”是迭代器,则使用前缀形式的增量更有效。用++ iterator替换iterator ++。

虽然实际错误可能(显然)存在并且可以被SCA检测到

格式错误。考虑检查“ Foo”函数的N个实际参数

表达式用括号括起来两次:((expression))。不需要一对括号或存在打印错误

调用“ memset”函数将导致缓冲区“ dest.lfFaceName”下溢。


不好意思侮辱你。就我(消失的?)评论要说的是什么-您是否知道人类为什么不能提供您提供的与静态代码分析输出示例相同的评论的任何原因?
sq33G 2012年

@ sq33G:否。任何拥有办公用品的人(实际上是无限量的纸张)都可以模拟任意图灵机。然而,这是无聊且耗时的。(可能不是给定的,而是说C中未定义的行为)。
Maciej Piechotka 2013年

啊。因此,对OP问题的真正答案是图灵机不是人类完整的。
sq33G 2013年

0

静态分析是在不执行工件的情况下进行分析的时间。尽管它可以应用于任何工件,但通常应用于源代码或目标代码,指的是使用特定工具来分析和获取有关这些工作产品的信息。这些工具生成的报告由工程师解释,以用于确定正在构建的系统的质量,并作为规划开发和维护的指南。Wikipedia包含用于静态分析的工具列表,该工具按语言进行组织,并简要说明其功能。

评论是对某些工作产品的人工评估,可以是代码。也可以对设计或其他文档进行审查。这个想法是,除了开发人员以外,熟悉工作产品的人们都在查看它,以发现错误,从安全问题到违反编码标准。

从技术上讲,代码检查可以视为静态分析的一种形式,因为在检查过程中实际上并未执行代码。但是,在通用术语中,“静态分析”通常是指对源文件或目标文件进行机器解析,而“审阅”则表示人员是进行分析的人。


-2

代码审查是一种非常有用的技术,可以在早期阶段发现源代码中的问题。作为此练习的一部分,许多问题(如性能,可伸缩性和编码标准)已确定并得到纠正。这将提高代码质量。

静态分析用于分析代码质量指标,例如循环复杂度,可维护性指标,继承深度和类耦合。市场上可以使用各种工具来分析代码质量。C#开发人员使用Microsoft Visual Studio生成度量标准报告。


-3

静态代码分析由自动化工具执行,在提交代码之前,需要与他人进行代码审查。

代码审查工具:

1.超越

2.版本控制软件的差异

这些工具始终用于在旧版本和新版本之间产生差异。


2
1)不必在提交代码之前就已经完成-代码审核是由人们完成的; 2)我发现diff工具的描述是“有趣的”代码审核工具,当然,它们是用于标识要审核的代码的工具,但是如果我被问到有关代码审查工具的信息,我可能会指出那些有助于管理过程的工具(例如,我使用过Kiln和Crucible)。
墨菲
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.