概要
TDDが提唱されて長い。が、会社では未だにすべてのテストを自動で行っている。
Excelにエビデンスを貼るのに飽きてきたため、上司に手動テストをやり続ける意味を聞いてみた。
大分前に下書きで温めていた内容だけど、今後になんか役立つカモしれないので、まとめる。
前提条件
- 単体テスト、結合テスト、総合テストを行っており、その全てを手作業で行う。
- 試験方案(試験の手順が書いてある)にチェックをつけたり、Excelにスクショを貼り付けたりする。
- 単体テストでは、ステップ実行してif分岐やswitch分岐を網羅しているかを確認し、印刷したソースコードにマーカーを引く。
- 自動テストをやろうとした動きは今までにあったらしい。
- オンプレミスで動作しているシステムが殆どのため、CD/CIは無い。
- テストはソースを書いたプログラマが行う。
上司の考え
「昔から手動だし、委託先にも同じように指示している」
弊社では少なくとも20年以上前から手動でのテストを行っていたらしい。
開発作業を外部委託することもあるが、その際にも委託先に手動テストをお願いしているとのこと。
色々な要因が作用して、自動テストの導入に至ることが無かった。
「手動で行うことで、プログラマが自分のソースに責任感を持つようになる」
軽く手動テストの概要を書くと、以下のような感じ。
もちろんこのテストに入る前にコードレビューを通しているが、テスト中にバグが発覚する事も頻繁にある。
その場合はまた修正した内容をレビューして反映してテストをやり直す。
さすがに時間がかかるので、慣れていない私は「えー」と思っていた…。
「テストコードを書くコストについて、顧客が納得しない。説明できない。」
これは何となく想像がつく。
テストコードを書く予算を見積もったとして、お客様に説明する必要がある場面。
「今まで手動でやっていたテストを自動でやりますよ。テストコード書くのでその分のお金を下さいね。」
などと説明して、お客様に納得させるのが難しいとのこと。
特に、親会社などと十数年以上の付き合いがあり、開発や保守のやり方も固定化されている場合は、こういうのが多いのかな。と感じる。
今までと違うやり方ということに対して拒否感を示すことが予想される。
「人の目で確認した方が確実で、結局は手動テストに落ち着くと思う」
この言葉を聞いた辺りから、社内で自動テストを推進するのは無理かもしれないと思った。
人による確認は限界がある。
同じテストを手動で10回ほど人にさせるのと、自動で実行するのでは、どう考えても人にさせる方が不安だと思う。何より作業者は疲れる。
「テストコードの品質はどうやって担保するのか分からない」
説明の中で、製品コードの品質をテストコードで担保することは理解して貰えたものの、テストコードの品質をどうやって担保するのか聞かれた。
正直ここは悩みどころです。おそらくコードレビューをやるしかないのでしょうが。
私はどうしたか
既存のシステムに自動テストを導入するのはあきらめた
以下の理由や上司の考えから、既存のシステムに自動テストを導入するのはやめた。
- 既存のシステムに自動テストを導入するのは上司から上記理由で拒否される可能性がある。
- 既存のコードはテストコードが書きづらい。
- 既存のコード量が膨大すぎてテストコードどころの話ではない。
- 得られる利益が無い。
新規のシステムを開発する際に自動テストを書くようにした
- 新規システムだと、顧客への説明が比較的楽になる。
- 既存テストをコネコネするよりもコストは少なくて済むから。
- あと、「手動だと今後のリリースにかかる時間が増えますよ。」と言ってしまえるから。
どうやって上司を説得するか
以下のことを適宜説明すればよいと思う。
- 作って終わりのシステムではなく、育てていくのであれば、素早く検証できるテストコードが必要であること。
- 手動テストはミスが起きる可能性が量と時間とともに増加する。
- ソフトウェアにおけるテストは、自動テストがデファクトスタンダードであること。
あとは、自動テストの導入について課題と認識している方が他にいる場合、
組織に自動テストをやる文化を根付かせるにはどうしたらいいかを一緒に考えるのが大事だと感じた。
小さい範囲でテストコードを書いてみて、結果を上長に見せて良い反応を貰えたら、少しづつ範囲を広げていくのが安全なのかなあ。