エキPy読書会 14 (2011/7/5)

日時:2011/7/5 19:30 - 22:00
範囲:第11章(p295~): テスト駆動開発

エキスパートPythonプログラミングの読書会14回目。

テスト駆動開発について。原則とテストの種類、スタブ、モック、ドキュメント駆動開発などについて。

相変わらず本を読まない読書会、どころか、話があちこちに派生したため本とかもうどうで(ry 次回はモックとかのあたりから続きです。

会場の様子

今回は会議室いっぱいに集まりました。

../../../_images/14-1.jpg ../../../_images/14-2.jpg

質疑応答(覚えてる範囲)

  • Q: テスト自身のバグとかってどう防止するのー? テストしやすい切り出し方をして人間の目で判断するのー? 複雑な入力と出力のテスト対象だと、勘違いすることもあるのでは?

    • Web だと、モデルのテストはがんばるけど、ビューのテストは適当に流すとか。
    • domain specific な部分にバグがあると意味がない。
    • コアの単体テストのテストをしっかりする。
    • ストラテジ/テンプレートパターン的な、きれいな構成だとテストしやすい。
    • 複雑な機能を複雑なままテストするのは不可能じゃないかな。
  • Q: テストのリファクタリングはどうするの? 可読性をあげる、カバレッジをあげる、そんなときにリファクタリングするの?

    • A: 同じようなパターンが増えたら、ループに置き換えるとか、 テストそのものを生成するようにリファクタリングしたりする by tk0miya
    • A: リファクタリングはしません、データフィクスチャは使わず、 setUpではなくtest内でデータを作りテスト終了後に破棄する by aodag
    • A: テストに必要な最小のデータフィクスチャ書く
    • テストファイルの先頭にユーティリティ関数を作って、 パターンを渡すとテストを自動生成するようなものも作る
    • デコレータを利用して、テスト実行前にデータを生成するのもやる by shimizukawa
    • A: テストのリファクタリングは、まだ一般化していない感じに見える by shimizukawa
  • Q: テストデータの生成って、どうやって、どのぐらいやってる?

  • Q: TDD で開発している人は本当にいるの?どうやってるの?

    • A: TDD は三角測量のようなもの、入力に対して期待する出力を試す。 3パターンぐらい書くと、実装の仕様が明確になってくる
    • TDDで作られるテストケースに境界値テストを入れてることが少ない。
    • ある関数の使い方のリファレンスを作るつもりで作成する
    • TDDがテストという言葉で誤解されるためBDD(Behavior)という概念で再定義している集団もある
  • Q: TDD やって、実装して、その後でちゃんとしたテストを書くの? また TDD のときに書いたテストのリファクタリングって本当にやるの?

    • A: 現場で実際にやっている人がいないから何とも分からない
    • ただ、TDD は QA のテストではないので品質を保証するものではない
    • テストは、後になって無駄なテストも出てくる
    • それはリファクタリングする必要がある
    • テストを書き始めるときと、出来上がったテストをメンテするのと、 2段階のフェーズでテストを捉えないといけない
  • TDD とかテストファーストとか本当に流行ってるの?

    • A: キャズムは超えたと思う
    • 開発部長が用語を知っていればキャズムは超えてる
  • Django のテストはどうやってる?

    • 自分が作ったライブラリ、他の人が作ったもの、依存してるものなど、 何をテストするかを切り分ける必要がある
    • 顧客の意見を聞きながらテストのさじ加減を決めるのは難しい
    • テストのやるやらないを切り分けする人が必要
  • Q: nose のテストを探す正規表現 ((?:^|[b_.-])[Tt]est) の b は何で?

    • A: \b の誤植、そもそも nose のドキュメントが間違ってる
  • Q: どんなテストを書けばよく分からない人はどうしたら良いの?

    • ハンズオンやペアプロのような方式で実践して覚えるのがよい
    • QuickCheck のようなテストジェネレーターを使おう
  • Q: 実装した後テストを書いていると意味ないなーと思いつつやっていますが、 どういう運用がいいのでしょうか?

    • A: 実装後であっても、その後になって仕様変更や機能拡張などで 後々にテストが役立つときもくるので意味なくはありません。
    • テストは、ないよりあった方が良いの考え方で、 できる範囲から対応していく形が良いと思います。
  • Q: TDDを含めた開発サイクル・環境に興味があります(Pythonとズレてますが)。 Pythonistaの方々は、テスティングフレームワーク、VCS, CIは何を使われて いるのかなぁ?と。

    • A: 私(t2y)は nose, Pikzie, minimock, mercurial を主に使っています。
    • Python のテストツールの用途や機能を体系的にまとめた情報が ほしいと私も思っています。
  • Q: nose と py.test の比較なんかも知りたいです。

    • A: エキPyにポイントが書かれています。 py.testのテスト失敗時の表示は一見の価値あり。
  • Q: Python ソースコードを静的解析して、型情報を得たり、例外発生条件を 見つけ出すようなライブラリってありますか? (ややテストとはズレた。)