現場体験をお話しします
『システムテスト自動化 標準ガイド』(通称『ギア本』)で第7章「保守性の高いテストを構築する」の翻訳を担当した、テスト自動化研究会の浦山さつきと申します。
私はこれまで、システムテストレベルでの自動テスト担当者として、自動テストの保守・運用に携わってきました。翻訳しながら「あのとき、こんなことがあったな」「こうしたからうまくいったのか」と思い返すことがたくさんありました。一方で、残念なことに、第7章には原著者が現場で体験した話(体験談)は書かれていません。そこで本記事では、この章に関係する私の体験談を紹介したいと思います。第7章のテーマである「テストのメンテナンス」から飛躍した話もありますが、テスト自動化の現場で実際に起きたことということで、みなさんが自動テスト構築をされるときの参考にしていただけたら幸いです。
テストのメンテナンスに影響を与える要素
ギア本の第7章では、テストのメンテナンスに影響を与える10個の要素を、「良い考え?」「問題」「解決策」という3段階で説明しています。ここでは、第7章で説明しているテストのメンテナンスに影響を与える10個の要素の中から4個を選んで、それぞれに関係する私の体験談を紹介します[1]。
[1]: 要素の詳細はギア本をご覧ください。
テストケースの実行時間(ギア本7.2.4項)に関係する体験談
テストのセットアップや後片付けが何度も発生すると、時間がかかってしまいます。だからといって、複数の短いテストケースをつなげて長いテストケースにまとめてしまうと、別の問題が発生します。テストの途中で欠陥が見つかった場合、それが修正されるまで、後続の欠陥を見つけることができないのです。ギア本ではこれを「『入れ子型欠陥』シンドローム」として紹介しています。
「入れ子型欠陥」シンドロームは、保守以外のシーンでも現れます。次に紹介する体験談は、私がそうした保守以外のシーンで「入れ子型欠陥」シンドロームに遭遇したケースです。
その現場では、実行に10分かかるテストを自動化する作業に60分必要だった。それは、過去に何度も作成した経験から明らかだった。
ある日、実行に30分かかるテストの実装を頼まれた。実行時間が3倍なので、自動化にかかる時間も3倍であると考え、依頼主に180分かかると伝えた。しかし、予定した時間になっても、自動テストは半分しか完成していなかった。完成したのは、着手し始めて280分後であった。
新しく作成した自動テストは、完璧に動作するとは限りません。むしろ、ほとんどの場合、何かしらの欠陥が含まれています。そのため、自動テストもテストをしなければなりません。実行時間が10分のテストを自動化するときには、私は次のような手順で作業を行っていました。
まず、20分かけてテストを実装しました。できあがったテストを試すため、テストを実行しました。すると、5分実行したところでテストに欠陥が見つかりました。そこで15分かけて修正を行い、再度テストを実行しました。しかし、もう一息というところでまた失敗してしまいました。15分かけて修正を行い、再度テストをしたところ、ようやく正常にテストが完了し、自動化作業も終わりました。
しかし、実行時間が長くなると、実装するコードが長くなるだけではなく、自動テストをテストする時間も長くなってしまいます。実行時間が3倍でも、完成までの時間が3倍を超えてしまうのはそのせいです。完成までの時間を見積もる際には、自動テストのテストを実行する時間も考慮に入れましょう。
余談ですが、初めてテストを自動化するときには多くの欠陥が入り込みやすくなり、実行時間10分の自動テストを完成させるまでに、数十回の再実行をしなければならないこともあります。まずは短いテストケースを自動化していきながら、システムの癖や自動化のテクニックを習得しましょう。自動テストに紛れ込む欠陥を減らすことができるようになってから長いテストケースに挑むことで、完成までの時間を短縮することも可能です。