有没有JavaScript静态分析工具?

时间:2009-02-10 22:47:29

标签: javascript static-analysis

我习惯让我的编译器抱怨当我做一些愚蠢的事情就像变量名称上的拼写错误但是JavaScript有习惯让它通过。

是否有适用于JavaScript的静态分析工具?

11 个答案:

答案 0 :(得分:47)

我同意JSLint是最好的起点。请注意,JavaScript LintJSLint不同。我还建议查看JSure,这在我的有限测试中比其中任何一个都好,虽然在实现中有一些粗略的边缘 - 英特尔Mac版本在启动时崩溃了,虽然PowerPC版本运行良好甚至在英特尔上,Linux版也运行良好。 (开发人员Berke Durak说,如果修复了这个问题,他会回复我,但我没有收到他的消息。)

不要期望从一个好的C检查器获得的JavaScript静态分析。正如Durak告诉我的那样,“由于Javascript的动态特性,任何非平凡的分析都非常困难。”

(另一个,更加模糊的Mac-only bug,这次使用JSLint的Konfabulator小部件:将BBEdit文档图标拖到窗口小部件上会将文档移动到垃圾桶。开发人员Douglas Crockford没有尝试过小部件。 Mac。)

2009年8月10日:今天Static Analysis Symposium,Simon Holm Jensen与AndersMøller和Peter Thiemann一起撰写了一篇关于TAJS: Type Analyzer for JavaScript的论文。本文没有提到上述工具,但Jensen告诉我他看了一些并没有留下深刻的印象。 TAJS的代码应该在今年夏天的某个时候提供。

答案 1 :(得分:20)

Google's "Closure" JS compiler在编译时生成可配置的警告和错误。它肯定会发现拼写错误的变量和方法,以及arity错误。如果你愿意用闭包方式编写JsDoc,它也可以用类型信息做很多事情。

YUI“Compressor”工具也会产生警告,但还没有尝试过。

我对使用Eclipse构建的Aptana IDE没有太多运气,但其他人喜欢它。请参阅JS IDE的Stack Overflow讨论。

IntelliJ IDE,我最后检查过的并不是免费的,它有很好的JS支持。它会在您键入时检测并突出显示拼写错误的变量和方法等。它也有自动完成功能。

答案 2 :(得分:11)

总之,JSLint,JSHint,Plato,ESLint,Google Closure-Linter是可用的工具。 我在试用Google Closure-Linter for Windows时遇到了安装问题。但是,它确实在网页上提到它对Windows的支持是实验性的。 我发现并尝试了另一种效果很好的工具。这是它的链接: http://esprima.org/

此外,这是工具Esprima的github链接: https://github.com/ariya/esprima

答案 3 :(得分:7)

您可以在此Wiki中看到一些用于JavaScript静态代码分析的工具。

Wiki中的一个工具是DeepScan,但在本文中未提及。 它的重点是找到运行时错误和质量问题,而不是编码简约的编程惯例。它还包括TypeScript,React和Vue.js。

您可以尝试使用GitHub项目。

答案 4 :(得分:6)

我尝试了ESlint并发现它很好..你也可以在那里添加自定义规则..这里是github repo:https://github.com/nzakas/eslint,这里是它的介绍:http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

答案 5 :(得分:4)

Security/B2G/JavaScript code analysis

的Mozilla Wiki上可以找到比通用列表更多的安全性
  

本文档的目的是收集JavaScript代码分析   适合包含在即将到来的Mozilla项目中的工具   内部使用。

此外,至少有一种商业产品可以进行安全性分析:Burp gets new JavaScript analysis capabilities

  

最新版本的Burp包含一个用于JavaScript代码静态分析的新引擎。这使Burp Scanner能够报告一系列新漏洞,包括:

     
      
  • 基于DOM的XSS
  •   
  • JavaScript注入
  •   
  • 客户端SQL注入
  •   
  • WebSocket劫持
  •   
  • 本地文件路径操作
  •   
  • 基于DOM的开放重定向
  •   
  • Cookie操作
  •   
  • Ajax请求标头操作
  •   
  • 基于DOM的拒绝服务
  •   
  • 网络消息操作
  •   
  • HTML5存储操作
  •   

答案 6 :(得分:4)

在商业领域,Coverity Static Analysis支持从7.7版(2015年中)开始对JavaScript进行分析。关于您对拼写错误的具体询问,我的宠物项目出现在最新版本(8.0,2016年初)确实在程序元素的名称中找到拼写错误

作为该项目的主要开发人员,请接受我无耻的插件:虽然尚未像venerated C/C++ analysis那样成熟,但Coverity的JavaScript分析共享大部分相同的引擎,同样专注于寻找高价值的缺陷误报率低的假阳性报告。除了查找常规编程错误外,我们还越来越关注在JavaScript(和其他语言)中查找安全缺陷。

现在,这里发现了一些拼写错误(作为读者练习的错误拼写错误,强调这些错误很容易被忽略):

merge.js:(stable link) (latest revision)

commands-packages-query.js:(stable link) (latest revision)

series-pie-tests.js:(stable link) (latest revision)

outline_case.js:(stable link) (latest revision)

答案 7 :(得分:3)

我喜欢Jslint这类事情......

答案 8 :(得分:2)

JSAnalyse刚刚在codeplex上发布。 它是一个分析javascript文件之间依赖关系的工具。您甚至可以定义允许的依赖项,JSAnalysis检查是否满足定义的规则。这样即使在大型项目中也可以跟踪javascript依赖关系并拥有一个干净的架构。

JSAnalyse可以作为命令行工具执行,也可以通过Visual Studio Layer Diagramm进行配置。它也很容易集成到构建中。使用gated check-ins,您可以控制依赖项。

http://jsanalyse.codeplex.com/

答案 9 :(得分:1)

我们的SD ECMAScript CloneDR是一个工具,用于在大型JavaScript源代码库中查找重复代码的精确复写和接近错过的副本。

它使用语言语法来指导检测,因此它会在格式更改,插入/删除注释,重命名变量甚至一些插入/删除语句的情况下找到克隆。

该网站在Google的Closure库上运行了一个示例CloneDR。

答案 10 :(得分:0)

完全披露,我支持这个:http://www.toptensoftware.com/minime进行缩小,混淆和一套合理的lint样式检查。