Yabu.log

ITなどの雑記

「テスト駆動開発」読書会 Vol.5 に参加

読書・議論した箇所は第二部の最初である18章から23章まで

第2部ではTDDをしながらテストフレームワークを作る、ということをPythonで行っているが 作成しているテストツールの比較例としてJUnitが話題に上がることが多かったです

参加した理由・今まで参加しなかった理由

この勉強会自体は以前から注目していたのですが、少人数の勉強会は参加したことがなかったので若干抵抗があり、 また初回などは一瞬で枠が埋まってしまっていたため、競争率がたかそう、という先入観がありました。 そのため今まで参加していませんでした。第5回は空きがあったので思い切って参加してみました。

テストを実践している人の生の声を聞くのが初めてだったので刺激的な1.5hでした。

18章

  • WasRunクラスはテストツールの部分なのか、それともテスト内容なのか?
    • まだ明確に別れていない
    • テストツールだと思う。
    • テストツールに対するテストとして紛らわしいものは現実にもあり、例えばJUnitのテストはJUnitで書かれている。
  • PythonのPluggable Selectorパターンを利用している箇所はJUnitだとリフレクションで呼び出している。
  • パイソンのIDEは何が良い?
    • デフォルトのPycharm派
    • Eclipseにpluginを入れて使う派

19章

  • setUpをWasRunからTestCaseクラスに引き上げたのはチートくさい。(普通は思いつかない)
  • そもそもPythonには組み込みでAssertionがあるのに、このテストツールを作る意義は?
    • 3AはデフォルトのAssertionではできない。
    • 後々レポート部分なども作ることとなるが、そこまで高機能なものはデフォルトで搭載されていない
  • この章はテストツールを作る、ということを体験してもらい自動テストに必要な要素が学べるという重要な側面がある。

20章

  • 失敗してもtearDownを呼び出す、というTODOに関して
  • このTODOは普通この時点では思いつかないかと。発想が飛躍しすぎ。
  • kent beckJunitを作ったと思うけど、その知見がベースになっているのでは?*1*2

    • 確かJUnitの引数の順番は私のせいだ(他のxUnitと統一性がない)、という趣旨の懺悔を見たことがある
  • ちなみにxUnitというのは具体的なソフトウェアの名前ではなく、様々なプラットフォームに置ける単体テストツールの総称であってるか?

    • あってる。ちなみに起源はSmalltalkのsUnit。
  • Pythonのバージョンが2だと動かない。そのことに気付くのに時間がかかった

    • 検索したところ後書きに書いてある
    • やや不親切。前書きにも書くべきでは?
    • もはやPythonは2と3で全く違う言語ですね。

21章

  • jUnitだとrunnerとレポーターは疎結合になっている。代償としてasertionのないテストが成功になってしまう。
    • rubyだと中身が書かれていない(空の)テストメソッドは失敗扱いになる。
  • TestResultクラスがrunCountを持っているのに違和感がある。
    • またTestResultという名前も微妙。
      • そういえば、第一部の最初から名前の変更を一切やっていないが、*3リファクタリングとしてリネームはあまり行わないものなのか?
        • リネームは実際の仕事中でも一番やってると思う。
        • リネーム時テストは行いますか?
          • リネームは動的言語だと危険なのでスモークテストからテストするべき。
          • Javaだといらないかも・・・

22章

  • テストをコメントアウトしている箇所があるが、これってあり?

    • 短期的ならたまにやる。
    • 数ヶ月解決に時間がかかるような問題なら@skipや@ignoreで明示すべき。*4
  • コメントアウトしたことを忘れてマージしてしまわない?

    • 確認するのでありえない
      • カバレッジなどで確認するのか?
      • そういえばカバレッジは100%の縛りはあるのか?
      • 100%にしてる方がおかしい
      • そこまで行くとgetterやsetterなどに対する無意味なテストを書いてしまている気がする
      • それはSIer的な発想だと思う。

余談

私にとって今まで絵空事だったTDDは今や現実のものとなりつつある 今の職場ではvbを使っているがちょうど本日、TDDの環境が準備できたので明日から実践しようと思う。

1章を5分で読む、というのは最初早すぎるように感じたが、 読書は一人でできるので各自が自宅で時間を欠けて、当日は見直すくらいであまり時間をかける必要はないと思ったので ちょうど良い時間だと思った。

*1:と言いかけたところ、JUnitの作者の話題で盛り上がり流れてしまった。。。

*2:ちなみにJUnitの作者がKent Beck、というのはレガシーコード改善ガイドで知りました

*3:本日再写経を行ったところ、21章でリネームを行っていた「〜さらにtestSetUpの名前を変えよう」

*4:@ignoreなどのアノテーションをつければログに残る