6

カバレッジの目的(定義-変数の使用など)のためにJavaアプリケーションをインストルメント化する必要があるプロジェクトを開始しています。トレースステートメントといくつかのロジックをアプリケーションに追加し、場合によってはステートメントを削除する必要があります。

私はJavaコードをインストルメントする方法を探しましたが、私がいつも見つけているのはバイトコードインストルメンテーションに関するものです。

私の質問は、Javaアプリケーションをインストルメント化する唯一の方法ですか?それを行う他の方法はありますか?他のものに対するバイトコードインストルメンテーションの利点は何ですか?

私はおそらくバイトコードソリューションを使用しますが、正確に決定するために他のアプローチ(もしあれば)の問題は何かを知りたいです。

ありがとう!

4

3 に答える 3

3

バイトコードの変更に近いもう1つの方法は、AOP(アスペクト指向プログラミング)を使用することです。メインライブラリはAspectJであり、これも主にエリアを定義します。

(プログラムを始めたばかりなので)興味深い3番目のオプションは、Springを使用することです。つまり、IOC(制御の反転)について少し学ぶ必要がありますが、基本的には、オブジェクトを自分で作成する代わりに、Springに任せることを意味します。また、Springが作成を担当する場合は、オブジェクトを作成できるという利点があります。作成プロセスにあらゆる種類のものを追加します。aspectjですべてを自分で宣言する必要はありません。

複雑さの観点から、私はおそらくそれを評価します:

  • 春(最も簡単)
  • アスペクトj
  • バイトコードインストルメンテーション(最も難しい)

しかし、機能(パワー)について話すときは、まったく逆です。たとえば、コードを差し引くようなことをすることは、最後のものを使用することによってのみ可能です(私は思う)

于 2012-07-24T20:47:24.340 に答える
2

あなたは間違いなくAspectJをチェックする必要があります

あなたが説明することから、あなたはそれであなたが望むことをすることができるでしょう。

バイトコードインストルメンテーションを自分で行うことは絶対に可能ですが、それははるかに複雑です。

最初にAsepctJをチェックして、最後の手段としてバイトコードインストルメンテーションを自分で行う必要があると思います。

于 2012-07-24T20:41:14.297 に答える
0

プログラム変換エンジンを使用したカバレッジツールの構築に関する私の論文を参照してください。 このアプローチには、任意のプログラミング言語で使用できるという利点があります。さらに、コンパイルされたバイトコードとしてではなく、プログラマーが見ているようにソースコードを認識します(ジェネリックスがより複雑になり、より細かいバイトコードに分解されると、バイトコードを検査してそのソースコードを理解するのが難しくなります)。

プログラム変換がアスペクト指向プログラミングを一般化することは、おそらく注目に値します。

于 2012-07-24T20:48:34.480 に答える