makopi23のブログ

makopi23が日々の生活で感じたことを気ままに綴るブログです。

『JUnit実践入門』写経・実践会 in 横浜 #7 に参加しました

2013/6/1(土) 『JUnit実践入門』写経・実践会 in 横浜 #7 に参加してきました。

connpass
http://connpass.com/event/2248/

Togegger
http://togetter.com/li/511975

以下の書籍をターゲットとした写経会なのです。

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
(2012/11/21)
渡辺 修司

商品詳細を見る


場所はいつもの横浜、タネマキさんです。
参加者は12人くらい?でしょうか。顔見知りばかりです。

今回は以下の章がターゲットでした。
・第14章 コードカバレッジ -テスト網羅率の測定 -
・第15章 継続的テスト -すばやいフィードバックを手に入れる -

つーか、この日は6/1。もう夏なんですねー。月日が経つのは早いもんだ。。。


以下、個人メモ。


■第14章 コードカバレッジ -テスト網羅率の測定 -

■カバレージの数字は一人歩きする
 → 目標に対して低い or 高いとか、判断の基準を示さないといけない。

■カバレッジだけで評価する弊害
カバレッジだけで評価するのはダメ。
というのは、カバレッジは満たしていても、以下のような場合があるためである。

・アサーションが無い
・アサーションが正しいのかを検証していない

→ カバレージの数字とは別として管理する必要がある。

■アサーションフリー問題
・JUnitはアサーションない場合にテストしても、グリーン(成功)になる。
 → その仕様ってどうやねん!


■カバレッジを測定する目的
・カバレッジを上げるため疎結合な設計しましょう、とか、設計改善が起こればいい。
・カバレッジを上げるのが目標となるのは本末転倒。コードの改悪とかが始まる。

■djUnit
・djUnitなるものを使うと、privateメソッドまでテストできるらしい。
 http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@646A556E6974&qword=@646A556E697420446F776E6C6F6164
・ちなみにIntelliJ IDEAは標準でカバレッジツールが付いているらしい。

■リスト14.2 「再現困難な例外処理」
・文字コードを引数に指定するメソッドを作成し、try-catchの部分を抜き出せばテストは可能。
・だがそれに見合う効果は無い。


■第15章 継続的テスト -すばやいフィードバックを手に入れる -

■リスト15.4 「surefireプラグインのカテゴリ化テストの設定
この写経で少しハマッたので、質問してみました。
20130601_junit1.jpg
上記のコードで、Eclipseのコード補完を使うと<excludedGroups>になるのです。
ちなみに書籍の方は<excludeGroupds>です。
書籍の方にしないと、以下のようなエラーになってしまいます。(つまりEclipseの補完の方だとダメ)
20130601_junit2.jpg
XMLの冒頭で宣言しているスキーマがなんか違うんだろうか。
この件で質問してみたら、せとあずささんが以下のツイートをしてくださいました。


どうやら既知らしい。あざっす!

■MavenとGradle
・maven
 - カスタマイズが厳しい
 - Javaで書かないといけない

・Gradle
 - GroovyでJavaよりも短く書ける

■XML(Ant/Maven)とDSL(Gradle)
・XMLは分岐とか繰り返しが書けない。
 → 連番のファイルとか作ったりとか、繰り返しを表現するのにXMLだと厳しい。

・Gradleだと、XMLでなくDSLで書けるのがデカい。
・Maven + カスタマイズ = Gradle

■Mavenのパッケージ管理で起きた弊害例
・Mavenのpom.xmlで、最新のライブラリを取得してくるよう設定していた。
 → エンジニアによって、ライブラリのバージョンがバラバラになってしまった。。。
・回避策として、中間サーバをたてて、そこにバージョンを固定したライブラリを置いておき、そこから取得する設定に変えた。

⇒ 結論: バージョンは固定で指定しておくべき。(最新のを取得する、という設定にはしない方が良い)

■バージョン管理システムのフック機能(P.305)の弊害例
・Jenkinsは社内ネットワーク内に構築し、Subversionをグローバルネットワークに構築した。
 ⇒ JenkinsからSubversionにはアクセスできるけど、SubversionからJenkinsにはファイアウォール等の制御がかかりアクセスできない、ということがあった。
→ フックで困った。設定追加が必要。

■Jenkinsのジョブ定義画面のシェル定義
・Jenkinsのジョブ定義画面にシェルを書けるとこがあるが、なんでもできちゃう。
→ あんまりやらないほうがよい
・Jenkinsにやらせるべきなのかどうかを考える必要がある。
・Windows環境だと、バッチコマンドに空行をいれないと制御が途中で切れちゃうことがある。

■割窓理論(P.307コラム)
・割窓理論は最近、否定的な意見があるらしい。
・つまり、統制が無い状態を放置しようが改善しようが、統計的な有意差が出ない、ということらしい。
・でもソフトウェア開発の分野では、割窓理論は確かにあてはまる。
・ユニットテストの効果をみんなが共有できている状態にあるなら、自発的に赤を放置しないようになる。

■TDDの自殺
・「TDDの自殺」という話題が出た。@kyon_mm 氏のブログ。
http://d.hatena.ne.jp/kyon_mm/20121223/1358326642
・テストがまったく無いよりはマシでしょ、という意見もある。

■Hudson
・Hudson(Jenkinsの前身)はまだ別で生きているらしい。
http://hudson-ci.org/

■Windows + Git + Jenkins
・Windows + Git + Jenkinsという組み合わせだと大変らしい。
・fingerprintをとっておかないと固まるらしい。。。

■Ant1.9
・3月にAnt1.9が出て、かなり良くなっているらしい。
・標準出力がきちんと絞られて出るようになった。


14章、15章のディスカッションの次は、LTタイム。


■LT1 「PyCon APAC 2013」の告知
by @ryu22e 氏



Pythonのカンファレンスで、今年は日本だけでなくアジアまで対象を広げているそうです。
開催日はXP祭りと同日かあ。
---

■LT2 「俺の爺(Jenkins)がこんなにかわいいわけがない」
by @sue445 氏
ドリコムJenkins勉強会資料 from sue445 Sueyoshi


この日のスライドは、上記から更に修正が入っている模様。Jenkinsを使った考察がもりだくさんです。
Beer Pluginにフイたw
これは和むかもしれないっ!
---

この後は18時くらいまで各自もくもくタイムです。
@sue445 氏を講師に Travis.ciのハンズオンも希望者を対象に行われました。


★感想:
14章は、コードはほとんど出てこないんですが、なかなか熱い議題がたくさん出ました。
「カバレッジ100%問題」とか、この日もやっぱ話に出ましたね。

弊社は「拝承」とか「~していただきたく」とかで有名な(?)某メーカー企業なのですが、テスト工程の終了判定としてカバレッジの提出を求められます。
なので、C0/C1という指標も一般的に使われますし、弊社で独自開発しているカバレッジ取得ツールもあります。

ちなみにやはり、基本はカバレッジ100%が求められる状況にあります。。。
100%にならない場合は、理由書を添えて提出しなければならないッ!
ただ、カバレッジが100%にならない理由をきちんと考え理解しておくことは重要だと思うのです。

あと、弊社で独自開発しているカバレッジ取得ツール、けっこうウンコなのかな?
というのも、プロダクトコードに対し、カバレッジ取得するためのコードを埋め込む処理を行わないとカバレッジが取れないのです。。。
んでカバレッジを見てからプロダクトコードを修正するときは、またコードをリバースして戻したりとか。。。
この作業がけっこーめんどくさい。そんなの裏でやってくれ、と激しく思った。


あと15章ですが、私、Mavenを本格的に使ったのはこの章の予習が初めてでした。
今まではずっとAntです。
Mavenのライブラリを自動で引っ張ってくる機能は便利ですねー。

Ant + Subversion+ Jenkinsの組み合わせなら、ビルドやテストを通すためにライブラリまでSubversionにコミットしておかないといけないのがネックでした。
でもAntをMavenに変えることで、ライブラリはテスト実行時にとってこれるようになるので、Subversionにjarとかライブラリをにコミットしておかなくて良くなります。これは良いですね~。


あと、「レガシーコード改善ガイド」という書籍をターゲットとした勉強会も新たに始まるとのこと。


こちらも楽しみです。

最後に、主催の ‏@shinyaa31 さんはじめ、皆様ありがとうございました。
スポンサーサイト

FC2Ad