15

Spring Roo によって生成された Maven プロジェクトがあり、いくつかのツール (checkstyle、pmd など) を使用してプロジェクトに関する情報を収集しています。(つまり、これにはcodehausのソナーを使用しています)

Roo は AspectJ Inter Type Declarations (ITD)を多用して、永続性、javabeans-getter/setter などの懸念事項を分離します。

これらの ITD はコンパイル時に組み込まれるため、checkstyle や pmd (ソース レベルで動作する) などのツールには多くの誤検知があります。

私が現在見ている唯一の解決策は、ITD を使用するクラスのチェックを無効にすることです。

より良いアイデアはありますか?

4

5 に答える 5

2

この回答は今のところ役に立ちませんが、近い将来の問題の解決策が約束されているため、興味があることを願っています. あなたが IntelliJ IDEA - JetBrains の Java IDE を知っているかどうかはわかりませんが、この方向での作業は既に行われています。 .net/issue/IDEA-26959 . ウォッチを設定するだけで、機能が実装されたときに通知を受け取ることができます。IntelliJ IDEA は非常に強力な SCA を提供します。したがって、ITD サポートも高品質である必要があります。

于 2010-02-25T18:04:14.843 に答える
1

アスペクトがコードに織り込まれた後でソース コードについて推論したい場合は、バイナリ コードではなく、ソース コードにアスペクトを織り込む必要があります。

多くのアスペクト ウィーバーは、コンパイラ フロント エンドによって生成される情報 (シンボル テーブル、名前、型、式の型など) にアクセスできないため、バイナリ コード ウィービングを行います。したがって、ハックは、コンパイラによって生成された仮想マシン コードを使用することです (このスタントは基本的に、.net IL や Java クラス コードなどの VM 命令セットに対してのみ機能します)。シンボル テーブル情報。

しかし、そのようなウィービング プロセスのバイナリ結果について推論できない場合は、織り込まれたプログラムにバグがないことを確認できません。これは、OP の最初の質問のポイントです。「SCA ツールを実行するにはどうすればよいですか? (有効な) 織られた情報源について?".

これは、次の 2 つの方法で修正できます。

  • ソースではなくバイト コードを処理する SCA ツールをコミュニティに作成してもらいます。ソース コードにはコンパイル プロセスで失われた情報が含まれている可能性があるため、これは難しい場合があります。
  • より良いアイデア:アスペクト コミュニティに、ソース コードを操作するアスペクト ウィーバーを作成してもらい、ソース コードを生成してもらいます。完全な言語フロント エンドを取得するのは難しいため、これは難しいかもしれません。

コミュニティに選択させることはできません。

コミュニティが 2 番目の方法であるDMS Software Reengineering Toolkitを選択するのを支援することを強くお勧めします。これは、「これを見たら、それで置き換えてください」という形式のディレクティブを実行するプログラム変換システムですが、完全な言語フロントによって生成されたコンパイラ データ構造にそのような変更を実際に適用することにより、言語の構文とセマンティクスを尊重します。終了します。(これは、数学における等式代入のソフトウェア工学バージョンです)。変更されたデータ構造は、コメント付きのコンパイル可能なソース テキストとして再エクスポートできます。

変換で一般的に何ができるかを理解していれば、アスペクト ウィーバーはプログラム変換システムの特殊なケースであることがわかります。したがって、DMS を使用してアスペクト ウィーバーを実装するのは簡単で、結果はソース コードです。つまり、ソース コード分析ツールを適用できます。

これが Roo によって生成されたコードを短期間で分析するという OP の問題を実際に解決するとは思えません :-{

于 2010-02-23T02:24:08.550 に答える
1

それがずっと長い間「ニッチな問題」であるとは思えません:-) ツールベンダーが必要な機能強化を検討することを願っています.

于 2010-02-18T16:10:49.337 に答える
1

FindBugs と Cobertura はどちらもソース レベルではなく、バイトコード レベルで機能します。そのため、ロード時ではなくコンパイル時 (例: Maven の AspectJ プラグインを使用) にアスペクトを静的に (アプリケーションの起動時間も改善します) ウェーブし、結果のバイトコードに対して静的分析ツールを実行する必要があります。

于 2010-02-26T22:08:25.990 に答える
0

誤検知を抑制するために、ツール固有の注釈/コメントをJavaコードに追加できますか?たとえば、FindBugsには独自の@SuppressWarningsアノテーションがあります。

于 2010-02-17T23:19:58.863 に答える