Yabu.log

ITなどの雑記

「テスト駆動開発」読書会 〜最終回〜に参加

テスト駆動開発

テスト駆動開発

いよいよ最終回になりました。付録Cを読みました。

アジャイルテストの4象限

アジャイルのテストには2つの軸に分けられた4つの側面があり、本書に記載されたこちらの図が話題に上がりました。

ビジネス面のテスト <--> 技術面のテスト 製品を批評するテスト <--> チームを支援するテスト

  • ATDD/ATDP:BDDの外側のループ(ビジネス面/チームを支援する)
  • 探索テスト(ビジネス面 - 製品を批評する)
  • TDD:BDDの内側のループ(技術面/チームを支援する)
  • セキュリティ - パフォーマンス(技術面/製品を批評する)
  • テストと言う言葉はかなり広い意味があるため、相手がどの意味で言ったのかを確かめる必要がある。
  • テスト駆動開発、とあったが、SIerの感覚的には「動作を検証するスクリプト」程度の認識
    • だからSpecと言い方は結構納得がいく。
  • テストエンジニアはいらない、と断言してしまう人にはこの図が反論になる

Cucumber

Cucumberを使ってほぼ自然言語からテストケースが作成できる。 このテストはエンジニアではなくて、顧客が作成すると顧客の了承の元、 機能として満たされるべき動作がわかる と言う優れもの。

  • 顧客がこう言うものを作りたがらない
    • 結局エンジニアが作りざるを得ない。

本書に書かれている

顧客の参加の度合いが少ないプロジェクトではCucumberのようなのようなツールは自然言語からテストコードへの解釈のそうが必要になるため、関節そうが1つ増えてメンテナンス性が下がると言うイメージが蔓延したため(以降略)

と言う記述の部分がまさに起こっているようです。

書いてて思いましたが、日頃、日本語とコードが一対一対応しているようなドキュメントをメンテしていますが、同じような問題を感じました。

テストのスピード感

私がテストコード、と言う概念に初めて出会った本は「レガシーコード改善ガイド」です。

レガシーコード改善ガイド

レガシーコード改善ガイド

その中にはテストコードにスピードが求められる、と明確に書かれています。

単体テストは早く走る。早く走らないとしたら、それは単体テストではない。他の種類のテストが単体テストの仮面を被っていることもよくある。次に当てはまるものは単体テストではない。

  • 1.データベースとやり取りする。
  • 2.ネットワークを介した通信をする
  • 3.ファイルシステムにアクセスする
  • 4.実行する為に特別な環境設定を必要とする(環境設定ファイルの編集など)

~(中略)~ 単体テストは、そのようなテストと切りわけて、変更を行うたびに高速で実行できるように保ち続けることが重要である。

こちらの概念はTDDを実践されている方にはどう感じられるのだろう、と思い、話題にあげてみました。

  • あるスクラムの本にはテストはDB接続しては行けない。と書いてあった。
    • クラシカルなTDDはDB接続もやる。
  • 基本的にこの本はモック大賛成ではない。
    • モックを使いすぎると設計が改善されないから。
  • 実際に実務でその件で困っている。変更を入れるたびにデプロイが必要な為。
  • テストにスピード感を設ける為にアノテーションを使ってテストを細かくグルーピングしている。
  • テストが遅い場合は意味のないテストを実行している恐れがある、
    • 別の機能で検証できるのに、検証が重複して行われるものなどは不要なので除く必要がある

組織に新たに技術を導入するには

  • まず、導入したい人が成熟している必要がある。
    • これから導入しながら勉強します、だとだめ。
  • テストがなかったがゆえに起こった問題に対して「もしテストがあったら?」と言うストーリを語り、導入に導く
    • 再発防止策の作成を欲するお堅い職場では、この方法が有効な気がしてきました。
  • 前職でテストを導入した。
    • 上層への交渉など、テスト以外の部分で非常に苦労をした。

現場にテストを導入した方に比べて、私はいろんな面で力量差がありますが、 絶対に無理な話ではない、と感じました。

読書会タイプの勉強会に参加してみて

読書会ベースの勉強会はLTベースのものよりも得るものが多いと思いました。*1

感想

現場でのモノづくりは非常に孤独です。ただ動くだけでなく、本当にしっかりとしたものを作り上げたい、 でもプロジェクトには予算や期限がある、リスキーな新しい手法を導入する勇気はない。 そんな中、暗中模索の毎日です。私がやろうとしていることに「茨の道」とのお言葉をいただきましたが、 一人だけだと、本当にどうしたらいいのかわからないことが多すぎます。

私は多分、20年くらい遅れてる人間なので、テストの自動化とか想像できないのですが、 参加者のみなさんは普通に実践されている、と言う事実が励みになりました。

あとは自分が実践していくだけだと思います。 色々教えてくださった皆様、本当にありがとうございました。

*1:発表してたらまた別だけど。