web-dev-qa-db-ja.com

JavaScriptの静的分析ツールはありますか?

変数名にタイプミスのような愚かなことをするとコンパイラーに文句を言うのに慣れていますが、JavaScriptにはこのパスを許可する習慣があります。

JavaScript用の静的分析ツールはありますか?

106
Mat

JSLintを開始するのに最適な場所であることに同意します。 JavaScript LintJSLint とは異なることに注意してください。 JSure もチェックアウトすることをお勧めします。これは、制限されたテストではどちらかよりも優れていましたが、実装に多少の荒れがありました。IntelMacバージョンは起動時にクラッシュしましたが、PowerPC Intelでもバージョンは問題なく動作し、Linuxバージョンも正常に動作しました。 (開発者のBerke Durakは、これが修正されたら私に戻ってくると言っていましたが、私は彼から聞いていません。)

JavaScriptの静的分析からは、優れたCチェッカーから得られるものほど期待しないでください。 Durakが私に言ったように、「Javascriptの動的な性質のために、重要な分析は非常に困難です。」

(今回はJSLintのKonfabulatorウィジェットを使用した、さらにわかりにくいMac専用のバグ:BBEditドキュメントアイコンをウィジェットにドラッグすると、ドキュメントがゴミ箱に移動します。開発者のDouglas Crockfordは、Macでウィジェットを試していません。)

2009年8月10日:今日 Static Analysis Symposium で、Simon Holm Jensenが TAJS:JavaScriptのタイプアナライザー に関する論文を発表しました。AndersMøllerとPeter Thiemannによって書かれました。論文では上記のツールについては言及していませんが、ジェンセンは、それらのいくつかを見て、感銘を受けなかったと私に言った。 TAJSのコードは、この夏のいつか利用可能になるはずです。

48
Flash Sheridan

Googleの「Closure」JSコンパイラ は、コンパイル時に構成可能な警告とエラーを生成します。ミススペルされた変数とメソッド、およびアリティの間違いを確実に検出します。 JsDocをClosureの方法で記述したい場合は、型情報でも多くのことができます。

YUI「Compressor」ツールも警告を生成できますが、まだ試していません。

Eclipseで構築されたAptana IDEにはあまり運がありませんでしたが、他の人は気に入っています。 JS IDEのスタックオーバーフローの説明を参照してください。

最後にチェックした無料ではないIntelliJ IDEには、優れたJSサポートがあります。入力時にスペルミスのある変数やメソッドなどを検出して強調表示します。オートコンプリートもあります。

20
awhyte

要約すると、JSLint、JSHint、Plato、ESLint、Google Closure-Linterは利用可能なツールです。 Windows用のGoogle Closure-Linterを試しているときに、インストールの問題に直面しました。ただし、Webページでは、Windowsのサポートは実験的であると記載されています。うまく機能する別のツールを見つけて試しました。リンクは次のとおりです。 http://esprima.org/

また、これはEsprimaツールのgithubリンクです。 https://github.com/ariya/esprima

11
user_19

JavaScriptの静的コード分析用のツールは、この Wiki で見ることができます。

Wikiのツールですが、この投稿では言及されていませんが、 DeepScan です。その焦点は、リンターのコーディング規則ではなく、ランタイムエラーと品質の問題を見つけることです。 TypeScript、ReactおよびVue.jsもカバーしています。

GitHubプロジェクトで試してみることができます。

7
Kangho Kim

ESlintを試してみましたが、そこにカスタムルールを追加することもできます。githubリポジトリは次のとおりです。 https://github.com/nzakas/eslint そして、それの紹介です: http://www.nczonline.net/blog/2013/07/16/introducing-eslint/

6
learner_19

商用の領域では、 Coverity Static Analysis はバージョン7.7(2015年半ば)でJavaScriptの分析をサポートします。タイプミスに関する具体的な質問については、最新のリリース(8.0、2016年初頭)に表示される私のペットプロジェクトは、プログラム要素の名前にタイプミスを見つけます。

プロジェクトの重要な開発者として、恥知らずなプラグインを受け入れてください: 崇高なC/C++分析 ほど成熟していませんが、CoverityのJavaScript分析は同じエンジンをほとんど共有しており、発見に焦点を当てています偽陽性の欠陥レポートの割合が低い、価値の高い欠陥。一般的なプログラミングエラーの発見に加えて、JavaScript(およびその他の言語)のセキュリティ上の欠陥を発見することに重点を置いています。

さて、ここで見つけたいくつかのタイプミスを紹介します(これらは簡単に見落とされる可能性があることを強調するために、読者の演習として残された正確なタイプミスです)。

merge.js: (安定したリンク)(最新のリビジョン)

commands-packages-query.js: (安定したリンク)(最新リビジョン)

series-pie-tests.js: (安定したリンク)(最新リビジョン)

outline_case.js: (安定したリンク)(最新リビジョン)

4
Peter Dillinger

汎用のリストよりもセキュリティに焦点を当てたものは、Mozilla Wikiの Security/B2G/JavaScript code analysis にあります。

このドキュメントの目的は、今後のMozillaプロジェクトへの組み込みや内部使用に適したJavaScriptコード分析ツールを収集することです。

また、セキュリティ分析を行う少なくとも1つの商用製品があります。 Burpは新しいJavaScript分析機能を取得します

Burpの最新リリースには、JavaScriptコードの静的分析用の新しいエンジンが含まれています。これにより、Burp Scannerは以下を含むさまざまな新しい脆弱性を報告できます。

  • DOMベースのXSS
  • JavaScriptインジェクション
  • クライアント側のSQLインジェクション
  • WebSocketハイジャック
  • ローカルファイルパス操作
  • DOMベースのオープンリダイレクト
  • クッキー操作
  • Ajaxリクエストヘッダーの操作
  • DOMベースのサービス拒否
  • Webメッセージ操作
  • HTML5ストレージ操作
4
Kevin Hakanson

私は Jslint が好きです。

3
Ishmael

Flow は、注釈付きおよび注釈なしで静的分析を行います。

注釈が必要な場合、構文は TypeScript と互換性があります。

package をインストールします:

npm install --global flow-bin

いくつかのツールもあります。 gulp-flowtype およびおそらく SublimeLinter-flow をご覧ください

3
Richard Ayotte

JSAnalyseがcodeplexで公開されました。これは、javascriptファイル間の依存関係を分析するツールです。許可される依存関係を定義することもでき、JSAnalysisは定義されたルールが満たされているかどうかをチェックします。これにより、大きなプロジェクトでもjavascriptの依存関係を追跡でき、クリーンなアーキテクチャを実現できます。

JSAnalyseは、コマンドラインツールとして実行するか、Visual Studio Layer Diagrammを使用して構成できます。また、ビルドに簡単に統合できます。ゲートチェックインを使用すると、依存関係を制御できます。

http://jsanalyse.codeplex.com/

2
tstune

SD ECMAScript CloneDR は、大規模なJavaScriptソースコードベースで重複コードの正確でニアミスなコピーを見つけるためのツールです。

言語構文を使用して検出をガイドするため、フォーマットの変更、挿入/削除されたコメント、名前変更された変数、および挿入/削除されたステートメントにも関わらずクローンを検出します。

このサイトには、Googleのクロージャーライブラリで実行されるサンプルCloneDRがあります。

1
Ira Baxter

完全な開示、私はこの背後にいます: http://www.toptensoftware.com/minime これは、縮小、難読化、および適切な一連のリントスタイルチェックを行います。

0
Brad Robinson