スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java][Eclipse]EclEmmaのJaCoCoが気になる(C1カバレッジの巻)

前のエントリーの続きです。
JaCoCoについて、もう少し掘り下げ。

■C0に加えてC1の計測が可能

EMMAはC1が計測できませんので、これは非常にありがたい。
カバレッジは通れば良いって物ではないので、ラインカバレッジだけでは、テストの妥当性を検証するには不十分ですよね。

具体例です。例えば下記のような酷く単純なコード

boolean conditionA = true;
if(conditionA)
{
  System.out.println("done!");
}


JaCoCo(EclEmma2.1.2)で実行すると以下のような結果になります。JaCoCoレポートで出しても同じ。

c1_new.png

ちなみにEMMA(EclEmma1.5.3)だとこうなります。JaCoCoとEMMAの黄色ラインは意味合いが異なってますね。
emma.png

で、黄色のラインにカーソルを合わせると、「1 of 2 branches missed.」と言われます。
条件がfalseのelse分岐(コード上にないけど)が実行されていないからですね。

と、ここで注意。
ドキュメントでも言及されていますが、JaCoCoはバイトコードに対して計測するため、コンパイラによって生成されたバイトコードが、ソースと大きく異なっている場合に、ぱっと見で分かりづらい結果になる可能性があります。
たとえば

boolean conditionA = true;
boolean conditionB = false;
conditionA = !conditionB;


を実行すると、このようになります。
JaCoCoカバレッジ②
「1 of 2 branches missed.」!!

あれ?っと思い、JaCoCoのOpen Discussionで質問してみたところ、「バイトコードに対して計測するのでそうなります」との回答。お手数おかけいたしました(^^;)
てことで自分でも調べてみたところ、Jadで逆コンパイルしてみるとバイトコードでは


0:iconst_1    true(1)をスタックに入れる
1:istore_1     true取り出してローカル変数1に入れる
2:iconst_0     false(0)をスタックに入れる
3:istore_2     false取り出してローカル変数2に入れる
4:iload_1      ローカル変数1をスタックに入れる
5:ifeq   18   ローカル変数1がfalse(0)なら、18へ→return
8:iload_2      ローカル変数2をスタックに入れる
9:ifeq   16    ローカル変数2がfalse(0)なら、16へ
12:iconst_0      falseをスタックに入れる
13:goto    17   17へ
16:iconst_1     true(1)をスタックに入れる
17:istore_1     スタックから結果(trueかfalse)を取り出してローカル変数1に入れる
18:return      終了


となっていました。(言葉はつたない自分翻訳)
条件文が二つに分かれている…、コンパイルするとこうなるなんて知りませんでした。。

大まかにコードにするとこんな感じみたい。

boolean conditionA = true;
boolean conditionB = false;

if(conditionB) // 2branches
{
   conditionA = false
}

てなわけで、こういったこともあるので気をつけましょう。
て、みんな知ってるのかな…
よくよく見たらEMMAもそうみたいですね。C1ではないけど。

more...

スポンサーサイト

theme : ソフトウェア
genre : コンピュータ

XNA

自分は仕事でJavaを使っているのですが、Windowsアプリの実装経験がまったくありません。
IDEはもっぱらEclipseですが、個人的な興味からVisual Studioでの開発もやってみたいなぁと思っているところです。

で見つけたのが、こちら。無料なのがうれしい。
XNA Game Studio 3.1(日本語版)

インストールにはVisual C# 2008 Express Edition(無償)と.NET Framework 3.5が必要です。

C#と.NET Frameworkベースで、簡単にWindows(XBOX360)ゲームが作れる環境のようです。
Javaやってるだけに、MS版Javaなんて言われるC#のコードは見ていて直感的にわかりやすい。
ラムダ式とか見ると、かなり違うと思うのですが。。。関数型言語みたいな?

開発者コミュニティもあります。最近日本語に対応したそうです。
XNA クリエーターズ クラブ オンライン

.Net FrameworkやC#の仕様なんかも知らないことだらけですし、これは勉強がてらにやってみようかと思います。
何つくろうかしら・・・エロ○とか(笑)?
自己紹介

煩悩即菩提

Name:煩悩即菩提


三流SEです。
開発は基本Javaです。
Androidアプリ作り隊。。

お絵かきを少々しとります。
こちらもぱっととしないのが悩みです。

bonnosokubodaiをフォローしてください

Pixivアカウント

カレンダー   
Recomend


ビデオニュース・ドットコム
検索フォーム
最新記事
最新コメント
月別アーカイブ
カテゴリ
最新トラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。