読書会(JUnit実践入門)第5回議事録
[ 戻る ]
============================================
Java読書会BOF 「JUnit実践入門」を読む会 第5回
============================================
.. csv-table:: 開催概要
   "日時", "2013年7月13日 10:00 - 17:00"
   "場所", "川崎市教育文化会館 第3会議室"
   "出席者(敬称略)", "遠藤、門脇、高久、高橋(徹)、高橋(智)、田辺、中澤、中島、根本、松永、村山、山田、吉本(書記)"
議事
====
13 Androidのテスト
------------------
13.1 GUIアプリケーションの設計
------------------------------
* 最近の若いエンジニアはコマンドを知らない。
  * Windowsしか使ったことがないから?
* ビューがモデルを参照していいのか?
  * ビューがデータ型を判断するのにモデルを見ないとならない。
  * これが本来のMVCじゃないの?
  * WebアプリケーションのMVCの場合、コントローラが肥大しやすい。
  * MMVCの考え方もある。
  * MVPというものもある。
  * モデルとはどこまでの範囲を指すのか?
    * データだけじゃないはず。
    * ビジネスロジックの行き場所はいろいろある。別レイヤにしたり。
* MacのGUIもシングルスレッドなのか?
  * Macもシングルスレッドのはず。
  * Windowsと変わらない。
  * OpenGLなどを使えばマルチスレッドに出来るかもしれない。
  * GUIのマルチスレッドは止めておいた方がいい。
  * GUIの設計が破綻する。
  * WindowsもMacもイベントにはキューを使っているので、そもそもマルチスレッドは無理だろう。
13.2 MVCパターンによるAndroidアプリケーションの作成
---------------------------------------------------
13.3 モデルのテスト
-------------------
* リスト13.7の15行目 3項演算子のtrue時の処理とfalse時の処理が逆。
  * 2刷では修正済
* モデルを独立したプロジェクトで作るというのは、どのようにやっているのか?
  * モデルが増えるとコストが高くなる。
  * 増える前に環境を作るしかない。
  * そうしないとCI(継続的インテグレーション)ができない。
  * 失敗したプロジェクトと成功したプロジェクトがある。
    * 失敗したプロジェクトがあることが分からない。
    * 失敗したプロジェクトは作ったモデルをコントロールできなくなったため。
    * モデルのテストをしなかったのがよくなかっただけでは?
  * モデルが他のプロジェクトで使えるのか?というのは、もう1歩先の問題。
  * モデルを独立させるメリットは、モデルからビューを参照出来ないようにすること。
* モデルにAndroidのGUIに関連するものが入ってきたらどうするのか?
  * ここでのMVCでは「入れるな」とういうこと。
  * POJOで作るということか。
  * runtimeに依存しないもので作る。
* リスト13.10 httpClientをパッケージプライベートでnullをセットしているのは、テストを意識しているのだろう。
* リスト13.11 下2つのモックのreturn値がJSONの形式に合っていない。
  * 文字列はダブルクォーテーションで囲まないとならない。
  * シングルクォーテーションも使えない。
  * resultとsuccessを両方囲う必要がある。
13.4 ビューとコントローラのテスト
---------------------------------
* リスト13.14 assertEqualsの引数の順番が逆。
  * 「気をつけろ」と書いていながら本人がやっちゃった。
* Androidエミュレータは遅くて使いものにならない。
  * 遅いのはわかっているが、使える部分では1つの選択肢としたい。
  * CIに組み込む際、実行速度が要求されない使い方は出来る。
  * 朝来て結果が出ているくらいでもいいものはある。
  * 一部が出来ないからといって全てを否定するのはどうかと思う。
  * 利用出来る部分だけでも使いたい。
* リスト13.15 sendKeysとassertEqualsで、文字が大文字と小文字で違うがいいのか?
  * sendKeysでは、文字列ではなく、スペース区切りでキー入力された文字として送っているのでは?
  * 小文字はどうすればいいのか?
    * キー入力として文字を送るだけなので、小文字が送られると思う。
    * 逆に、大文字の方が難しい。
13.5 GUIアプリケーションのテストにおける注意点
----------------------------------------------
* なぜいきなりSeleniumが出てくるのか。
  * 機能テスト繋がりだからだろう。
  * そもそもSeleniumはAndroidで動くのか?
    * ブラウザの種類に依存するので、分からない。
    * ChromeにはSeleniumは対応しているが・・・。
14 コードカバレッジ
-------------------
14.1 コードカバレッジとは?
---------------------------
* 3項演算子の場合、カバレッジはどうなるのか?
  * 1文だけど、C1になるのか?
    * C0だろう
  * 3項演算子だとバイナリベースでカバレッジを取らないと意味が無い。
* カバレッジが100%になったからといって、品質が上がるとは思えない。
  * ソースの書き方によって、どうとでもなる。
  * カバレッジの数字が上がっても、品質は逆に悪くなることもある。
  * catch文でExceptionだけを記述するとカバレッジ率は上がるが、テストしない例外が出てくる。
* C2カバレッジを測定出来るツールはほとんど無いとされているが?
  * C++ではある。テクマトリクスのツールが有名。
  * EclEMMAではやってそう。
  * あることはあるが・・・。
* カバレッジはあくまでもソース上の話で、仕様上のカバレッジではない。
  * ソースから抜けているものは分からない。
14.2 カバレッジツールの利用
---------------------------
14.3 EclEMMAによるカバレッジ測定
--------------------------------
* メソッドカウンタと型カウンタの違いは?
  * 型カウンタは、少なくとも1つのメソッドが実行されればカウントされる。
  * その型(クラス)が使われたかどうかだけ。
  * メソッド単位かクラス単位かの違いだと思われる。
14.4 カバレッジに関するよくある疑問
-----------------------------------
* カバレッジが80〜90%というのは本当?
  * 数字的には妥当。
  * 普通は100%を目指さないの?
    * 数字に正解はないので、説明するのは難しい。
    * 100%にすることを目的にするのは本末転倒。
    * 100%という数字に意味は無い。
15 継続的テスト
---------------
15.1 継続的テスト
-----------------
15.2 Mavenによるビルドプロセスの自動化
--------------------------------------
* JaCoCoは、バイナリに手を入れるタイプのツールか?
  * そうだと思う。
  * Androidでは動かない?
    * だと思う。
15.3 バージョン管理システムによる継続的テストの運用
---------------------------------------------------
.. note:: 次回は、p.296「バージョン管理システムへのコミット」から。
[ 戻る ]