2009-10-21 15 views
46

Scalaコードの静的解析を実行するためのツールはありますか?FindBugsやPMD for JavaやC/C++のSplintに似ていますか?私はFindBugsがJavaをコンパイルすることによって生成されるバイトコードで動作することを知っているので、Scalaでどのように動作するのか不思議です。Scalaコードの静的解析を実行するツールはありますか?

Google検索(2009年10月27日現在)はごくわずかです。

Google検索(2010年2月1日現在)はこの質問を明らかにしています。

+1

どのようなプロジェクト? –

+1

本当に - 私は簡単に見つけることができるコンパイラは何ですか?私が探しているのは "デッドコード"、不必要な初期化変数などです。もっと静的な分析をするには、http://findbugs.sourceforge.net/をご覧ください。 –

+1

FindBugsのような種類のアナライザー多くの仕事を表し、Scalaはまだ若い言語であるかもしれません。 –

答えて

20

FindBugsは、それらを生成したツールに関係なく、JVMバイトコードを分析します。 Scalaで生成された.classファイルを確認するためにFindBugsを使用してみました。残念なことに、FindBugsは簡単なScalaプログラムでも多くの警告を出しました。

+1

Java SDK固有のものに焦点を当てているため、Scalaにはあまり適していませんが、大量の偽陽性(IMOではすべて)がありますが、 – monkjack

-2

私はScalaについてよく分かりませんが、Java互換であればKlocworkのSolo製品が動作する可能性があります。ここで見つけることができますKlocwork Solo

+2

これはなぜ受け入れられる答えですか?あなたがFindbugsを実行している問題をKlocworkが解決したという証拠は見つかりません...? – p3t0r

7

バイトコードベースのFindbugsやその他のツールは、コード内で不具合が見つかるという意味で機能します。残念なことに、バイトコードベースのアプローチは、javacコンパイラの出力に対して調整されています。つまり、Scalaはjavacコンパイラとは異なるイディオムを生成するため、誤認率が非常に高く、基本的な問題が発生する可能性があります。

17

Scalastyleは、CheckstyleがJavaに対して行うジョブです。これにはフォーマットチェックだけでなく、hashCode()を実装しているが等しくないクラスなど、既知のバグのソースのチェックも含まれます。

現在、約40個の小切手がありますが、それらは常に追加されています。

詳細については、www.scalastyle.orgを参照してください。

8

目的としたか、スカラ座でうまく動作していること、いくつかのために2014年8月のように更新答えです。

個人的に私は、JVMやJavaのものは、あまりにも多くの誤検出や、Javaの特定のクラスを主な対象とした検査をしていると思います。たとえば、ScalaではJava Collectionsを使用する傾向がないため、すべてのfindbugsコレクションに基づく検査は必要ありません。もう一つの例は、Scalaでは無関係な静的フィールドの使用に関する検査です。

1

ScalaはASTに基づいて、ペースト検出器をコピーします。コピーペーストされたサブツリー/ ASTを探し、それについて通知します。

これはsbt用のプラグインです。

https://github.com/ajtkulov/scala-cpd

関連する問題