自動テストを長生きさせた戦術
ギア本の第7章では「テストメンテナンスの要素」のほか、テスト自動化の「落とし穴」と「戦略と戦術」について述べられており、そこには自動テストが長生きするためのエッセンスが隠されています。では、実際の現場ではどうやって自動化を成功に収めていたのでしょうか。最後に、私が経験した自動化の現場で、どのような戦術がとられていたのかを紹介します。
1. 実行環境を安定させる
人力とは違い、自動テストは融通が利きません。実行環境に変化が加わると、とたんに動かなくなってしまいます。緊急対応が入り計画外のリリースが発生したとき、他のテストで重大な欠陥が見つかりシステムがダウンしてしまったとき、自動テストは止まってしまいます。頻繁にビルドが行われる場合、夜間に発生した自動テストの失敗を再現できなくなる恐れがあります。そうした状況が多く発生すると、人がいなくても動くという自動テストのメリットが生かせなくなってしまいます。
自動化が特にうまくいっていた現場では、自動テストの実行に使用する専用環境を用意していました。そこで行っているテストは、リリース直前のリグレッションテストでした。手動での機能テストとデバッグが終わったビルドを専用環境に乗せ、すべてのテストを実行し終わるまでは新しいビルドを受け入れないことにしていました。こうすることで、環境起因の予期せぬ問題で失敗することを免れました。
また、その自動テストがすべて実行し終わるには丸3日かかったので、実行したテストケースと実行時のビルドバージョンを管理する手間も省くことができました。ただし、インシデントを報告する前には必ず、自動化専用環境と最新のビルドバージョンが乗っている環境とで再現を確認するようにしていました。
2. テスト以外の作業も自動化する
自動化したテストケースの数が増えれば増えるほど、テスト実行以外の作業が増え、コストもかかります。そこで、テストを自動化するように、これらの作業も少しずつ自動化していきました。環境の構築やログの退避は、バッチを1つ叩けば終わるようにしました。テスト実行の進捗管理は、すべてのテスト結果を一覧で出力してくれるツールを用いて可視化しました。
自動化したテストケースが3000ケースを超えた現場では、テストケースをメンテナンスするためのツールが必要不可欠でした。残念ながら、自動テストに影響する仕様変更や機能追加の調査は自動ではできませんでしたが、修正を加えなければならないテストケースの調査は自動で行っていました。そのツールはそのまま、テストケースを修正することもできました。
3. 定時を過ぎたらツールに任せる
私たちはツールを用いることで、時間に縛られることなくテストを実行できるようになりました。そのメリットを存分に活用しない手はありません。自動テストが安定して動き始めたら、終業時刻の30分前には深夜に実行するテストの開始時刻をセットし、成功を祈りながら[予約]ボタンを押します。あとはツールがやってくれるので、自動テスト担当者は堂々と定時で帰りました。
「ツールに任せればよい」という意識は、自動テストをうまく動かすためのに工夫を施すモチベーションにもつながりました。さらに、自動テストがうまく回り時間に余裕ができてきたら、自動化の技術を用いて、他のエンジニアの仕事を手伝いました。自動テスト担当者が持っているテストツールは、テスト以外の作業にも使うことができるからです。テスト以外の作業を自動化した経験から、簡単なツールを開発して提供することもできました。メンテナンスコストをできるだけ減らし、自動テスト担当者が活躍することで、自動テストがどんどん現場に浸透していきました。
まとめ
私が初めて自動テストに出会い、そのまま6年の時を過ごした現場の仕組みは、2004年ごろに誕生しました。それはギア本の原著『Software Test Automation』が出版された後でした。その自動テストの構築に携わったコンサルタントや担当者がこの本を参考にしたかは定かではありませんが、ギア本で紹介されているたくさんの工夫が施されていました。
システムテストの自動化は簡単なものではありませんが、うまくいっている現場は存在しています。これから自動化を進めるみなさんの傍らにはギア本があり、末永く稼働する自動テストが構築されていくことを願っています。
