霜寒の候、みなさま自動テストの導入状況はいかがでしょうか。
かつては私も自動テストの効果に懐疑的でしたが、今では未導入の開発プロジェクトに参加すると、風邪をひいてしまいそうになります。
ところでここ最近の私の周りのプロジェクトでは、自動テスト導入の効果について論じることは少なくなってきたと思います。しかしそれは自動テストをしないということではなく、既に設計、実装、検証といった開発活動の一環であり、逆に自動テストを書かない理由を問われるほどです。
今回は自動テストの「自の字」も知らないところから、後輩たちが自然と自動テストまで書き上げてプルリクを上げてくれるような開発チームになったところまで、私の歴史を振り返ってみたいと思います。
ということで私もアドカレの仲間に入れてください。
太古時代 (10年以上前)
私がまだピヨピヨだった頃です。
リポジトリへのコミットが厳しく、とても厳しく制限されていた時代がありました。この頃、テストはすべて手動で行い、テストケースはExcelで毎回作成し、計画と実施結果はそれぞれレビューを受け承認を得る必要がありました。
丁度この頃弊社では機能安全を意識した開発プロセスが始まり、またそれをターゲットとしたテストツールの開発も行われ、いわゆるガチガチのウォーターフォール開発プロセスでした。
しかしテストプロセスに関してはまだまだ未熟で、過去のテストを使い回すことなど稀でした。
古典時代 (10年くらい前)
個人的にこのやり方では限界を感じ、当時は「リリースする製品に組み込むコードじゃないから」とかかなり色々な理由を付けて、自動テストをリポジトリに追加するようになりました。しかし、この自動テストは完全に自分用であり、そもそも自動テストという考え自体、社内での認知度は高くはありませんでした。
CI環境もまだ整備されていなかったため、効果は限定的でしたが、自動テストという考え方を周囲に発信し始めた時期でもあります。
まだまだ孤軍奮闘状態です。
中世時代 (8年前)
このころ、主に弊社がターゲットとしている組み込み業界において、テスト自動化が目に見えて盛り上がり始めたように思います。私の会社もテストツールベンダーであったため、この話題で声がかかる機会が増えました。
一方で、社内では単体・結合・システムテストを厳格に分類するプロセスが足枷となり、テスト自動化の本質を見失いがちでした。自動テストツールがよく「ユニットテストツール」と呼ばれていたこともよくなかった気がします。仕様ではなくコードのカバレッジ100%を目指すことが目的化してしまい、結果として実装のマズいコード修正に伴いテストも大量に破棄したこともありました。振り返れば「アンチパターン」を学びたければここに来いと胸を張って言えるような時代でした。暗黒時代です。
ルネサンス時代 (6年前)
この時期、自動テストはコードではなく「仕様」に向かって書くものだと認識を改めました。それまでの経験を踏まえ、実用的で維持可能なテストコードを書くことを目標に切り替えていきました。すべてを自動化するのではなく、ある意味で肩の力を抜いて、手動テストの良さにも目を向け、自分たちにとって無理なくメリットのある自動テストを考え始めました。
この頃に作ったテストの多くは、現在でも稼働しており、自動テストが価値を生む基盤が築かれた時期だったと感じています。
産業時代 (5年前)
社内でのテスト自動化の文化を広げるため、地道な努力を重ねました。私が色々な開発プロジェクトに直接入り込み、テストコードやCI環境を整備し、その実行手順を簡略化したドキュメントを作成しました。テストの書き方がわからなければ、テストやテスタビリティのあるコードをペアプロ的に書いて見せたりもしていました。
さらに、レビューではテストの目的や効果について周知し、成功事例が出たときには大げさに喜ぶよう心がけました。
現代 (2年前~)
今では、開発チームのメンバーが私の指導がなくても自動テストを書いてくれるようになりました。さらには、私が見落とした不具合を後輩たちが書いたテストが発見してくれることもあります。
自動テストが特別な作業ではなく、日常の一部として定着したことを実感しています。この歴史を振り返ると、技術的な進化だけでなく、文化や意識の変化も大きな鍵だったと思います。
おわりに
私の自動テスト導入の旅路はとても泥臭く、失敗と試行錯誤の連続でした。しかし、その過程で得た経験と成果は、今の私の開発スタイルを支えています。
これから自動テストを導入する方への銀の弾丸というか効果的なプラクティスを案内することはできませんが、次のような教訓を残すことはできるかもしれません。
- 自分たちの組織やチームの規模で、無理のない自動テストの作り方を決める。
- 継続的に、開発メンバーに対してコンサル的なことを行っていく。
- 導入で満足せず、効果をメンバーや関係者に発信していく。
みなさんも自動テストを定着させる道のりを、上手く進んでいけることを願っています。