JavaScript静的分析ツールはありますか?[閉まっている]


110

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

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


1
今日のtypescriptはあなたの友達です-それはjavascriptの暗黙的な型チェックをサポートし、100%行きたいならjsdoc3またはgoogleクロージャーアノテーションを書くことができ、そこから型を推測します。:vscodeや外箱のwebstormサポートそれを好むエディタgithub.com/Microsoft/TypeScript/wiki/...
cancerbero

回答:


49

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

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

(もう1つの、さらにあいまいなMacのみのバグ、今回はJSLintのKonfabulatorウィジェットの場合:BBEditドキュメントアイコンをウィジェットにドラッグすると、ドキュメントがゴミ箱に移動します。開発者のDouglas Crockfordは、Macでウィジェットを試していませんでした。)

2009年8月10日:今日の静的分析シンポジウムで、Simon Holm JensenがAndersMøllerとPeter Thiemannが執筆したTAJS:Type Analyzer for JavaScriptに関する論文を発表しました。論文では上記のツールについては触れられていませんが、ジェンセンはそれらのいくつかを見て感心しなかったと私に言った。TAJSのコードは、この夏のいつか利用可能になるはずです。


2
@UpTheCreek:JSLintはGitHubで入手できます。
Dave Swersky

@デイブああ、それは素晴らしいです:)
UpTheCreek

5
TAJSのソースコードが利用可能になりました。
Rich Dougherty 2012

57

2017年更新の回答:はい。ESLintを使用します。http://eslint.org


加えて、JSLint(既に述べたフラッシュシェリダンの答え)と閉鎖コンパイラ(以前に述べたawhyteの答え)私はまた、実行されているから、利益の多くを得ているしているJSHintPHP CodeSnifferを。2012年現在、4つのツールはすべて無料のオープンソースであり、その背後には大規模でアクティブな開発者コミュニティがあります。それらは、実行するチェックの種類がそれぞれ少しずつ異なります(そして私は補完的だと思います)。

JSLintは、Douglas Crockfordのパーソナルリンティングツールであるように設計されています。これにはすばらしいデフォルトのルールセットが同梱れています-JavaScriptとその落とし穴について学び続けるにつれて常に更新されているCrockfordのものです。JSLintは非常に意見高く、これは一般的に良いことだと考えられています。したがって、個々のルールを構成または無効にするために(意図的に)実行できる制限された量があります。しかし、これはJSLintをレガシーコードに適用することを困難にする可能性があります。

JSHintJSLintに非常に似ています(実際はJSLintフォークとして開始されました)が、コマンドラインオプションまたはファイルを使用してJSLintのすべてのチェックを構成または無効化するのが簡単/可能.jshintrcです

特に何百ものエラーがあったとしても、ファイル内のすべてのエラーを報告するようにJSHintに指示できることを特に気に入っています。対照的に、JSLintにはmaxerr構成オプションがありますが、エラーが多数含まれているファイルを処理しようとすると、JSLintは通常、比較的早期にベイルアウトします。

閉鎖コンパイラは、コードがあれば、その中に極めて有用であるではないでしょう閉鎖でコンパイル、あなたは非常に特定の感じることができるコードが言われている深く、いくつかの基本的な方法ではまずいです。クロージャのコンパイルは、JSの世界に存在する「インタプリタ」構文チェックに最も近いものphp -lか、ruby -c

クロージャーはまた、パラメーターの欠落や未宣言または再定義された変数などの潜在的な問題について警告します。予期した警告が表示されない場合は、オプションを指定してClosureを呼び出し、警告レベルを上げてみてください--warning_level VERBOSE

PHP CodeSniffer は、JavaScriptおよびPHPとCSSを解析できます。CodeSnifferにphpcs -iは、インラインコントロール構造余分な空白に対するチェックなど、JavaScriptコードの多くの便利なスニフが含まれているいくつかの異なるコーディング標準が付属しています(たとえば、それらを参照してください)。

以下は、バージョン1.3.6の時点でPHP CodeSnifferで使用可能なJavaScriptスニフのリストであり、これらを一度にすべて実行できるようにするカスタムルールセットです。 カスタムルールセットを使用すると、適用するルールを簡単に選択できます。また、そのままではサポートされていない特定の「ハウススタイル」を適用したい場合は、独自のスニフを作成することもできます。Afaik CodeSnifferは、ここで説明した4つのツールのうち、新しい静的分析ルールのカスタマイズと作成をサポートする唯一のツールです。ただし、1つの注意点があります。CodeSnifferは、前述のツールの実行速度が最も遅いものでもあります。


2
JavaScriptコードのコピーと貼り付けの検出がCPD経由で利用できるようになりました。私の知る限り、これはJavaScript向けの最初の堅牢なオープンソースコード複製ツールです。pmd.sourceforge.netおよび「JavaScript用のCPDのようなツールはありますか?」という質問も参照してください。stackoverflow.com/a/13745190/55478
Noah Sussman

20

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

YUIの「Compressor」ツールも警告を生成する可能性がありますが、まだ試していません。

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

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


11

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

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


7

このWikiには、JavaScript静的コード分析のためのいくつかのツールがあります。

Wikiのツールですが、この投稿では触れていませんが、DeepScanです。その焦点は、リンターのコーディング規約ではなく、ランタイムエラーと品質の問題を見つけることです。TypeScript、React、Vue.jsについても説明します。

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



4

汎用リストよりもセキュリティに重点を置いたものは、Mozilla WikiのSecurity / B2G / JavaScriptコード分析にあります。

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

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

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

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

4

商用領域では、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:(安定したリンク) (最新リビジョン)




2

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

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

http://jsanalyse.codeplex.com/


1

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

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

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


誰かがこれをまだ試しましたか?ダウンロードボタンや注文ボタンが見つかりませんでした...
Sven Hecht、2010

... 2011年1月以降、JavaScript(または他の多くの言語)用のCloneDRのevalコピーを入手するために使用できるダウンロードリンクがあります。
Ira Baxter 2011

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.