0. はじめに
アドベントカレンダーに「テスト自動化の失敗談」に関するものがありましたので、ちょっと昔話ですが 「あれは失敗だろう」というプロジェクトを思い出したので投稿させていただくことにしました。
お役に立つかわかりませんが、思い出しながら書いてみたいと思います。
1. 通達:地獄への入り口
ある日、あるプロジェクトで、このような通達がありました。
えらい人「テスト自動化ツールを導入したので、すべてのプロジェクトで使用するように」
えらい人「そうそう、 カバレッジは100% でね、そいじゃよろしく」
おいら「御意。」
2. 現実:100%の無間地獄
当時のA氏はこのように述べています。
「ツールで自動化できるんでしょ?
楽になっていいじゃない。
100%?当たり前だよね。
序盤、中盤、終盤、隙がない方針だと思うよ。」
しかし間もなく気づくのです、彼は既に地獄へと足を踏み入れていることに。
100%の無意味さと、100%の無間地獄と、100%の愛しさと切なさと心強さに。
3. 何がしんどかったのか
前置きはこれくらいにしまして・・・。
テストにおけるカバレッジというのは、テストケースの網羅性を指します。100%であればすべてのケースを網羅できていることになりますし、100%に満たない場合はケースを漏らしている(不通のケースがある)ことになります。
テストなので100%を目指すのが自然に感じるかもしれませんが、意外なことに必ずしも100%に到達するわけではないのです。例えば、あからさまにデッドロジック(例外処理でありがち、それ何を想定して入れたの?というやつ)が入っていたりします。また逆のケースとして、条件分岐のOR条件で一部のケースしか網羅できていないのにカバレッジ100%と判定されてしまったりすることもあります。
当時使用したツールは入力値を自動かつランダムに作り出す機能が組み込まれていましたが、すべてのケースを網羅するには、行き当たりばったりのランダム入力で済むわけがありません。結局のところ、そんな機能はほとんど役に立たず、入力情報を厳密かつ緻密に設計してやらなければなりません。
さらに、分岐に次ぐ分岐で、処理がふか~くなったモジュールにブチあたると地獄です。
こうなると、はっきり言って手動でテストした方が10倍早いレベルだと感じたこともありました。
※ 質の悪いプロジェクトだったので、とんでもないコードがテストに回ってくることが多々ありました。ネットに転がっているソースコードをコピペしただけ(コメントなどもそのまま)のやつが回ってきたときはさすがにシビれましたね。もちろんすぐに責任者に報告し、然るべき対応をいただきましたよ。
もっとしんどいのが、 「手動テストは原則認めない」という謎の基本方針。現場の人間は全く信用されていないことが良くわかります。下請け末端で社会の歯車を担っていた私は 「へい!」と返事をすることしかできませんでした。そして、 「どうしたものか」と途方に暮れたものです。
4. カバレッジ100%は正解?不正解?
ここまでくればお分かりかと思いますが、おもいっきり不正解です。
かの有名なソフトウェア技術者であるマーティン・ファウラー氏は次のように述べています。
思慮深くテストを実施すれば、テストカバレッジはおそらく80%台後半か90%台になるだろう。100%は信用ならない。カバレッジの数字ばっかり気にして、自分が何をやっているかわかっていない人間のいる臭いがする。
引用:https://bliki-ja.github.io/TestCoverage/
100%は信用ならない。
はい、その通りです。
自分が何をやっているかわかっていない人間のいる臭いがする。
私のことです、ごめんなさい。
当時の自分に、というより、当時の通達を出した某社上層部にタイムスリップして説教したいものです。某SIerでしたが、本当に何もわからずに方針決めて指示を出していたのでしょう。天下り系の企業でしたから、効率云々ではなく、ツールを導入することが先立つ目的だったんでしょう。
こんなことは、金輪際起こりませんように・・・。
5. おわりに
思い出話ついでに書いてしまったような記事ですが、改めてひどい現場だったなと思います。
当時は成す術がありませんでしたが、今となっては反省しかありません。
開発現場を離れて久しいですが、感覚を忘れておかしな方針を打ち出さないように、過去のこうした教訓を忘れず、注意をしていきたいと思います。