COLUMN
コラム
Column 27

自動化テストの向き不向き

自動化テストには得意不得意がある

アジャイル開発がメジャーとなり、スピードが重視され、品質が置き去りとなってしまった結果、スピードと品質を両取りするためにはどうしたらよいかの結論として、テストの自動化が注目を浴びています。
「スピードが速く、人的コストも低い」そんな万能のような自動化テストですが、その特性を把握していないと導入したところで効果が発揮できず、無駄にコストをかけた上に失敗という結果だけが残ってしまう事態になりかねません。

1.自動化が得意な点

V字モデル上でテストレベルを分類すると、単体テスト、結合テスト、システムテスト、受入テストといくつかの分類が存在します。
また、テスト技法や手法も数多く存在します。
その中でも自動化すると効果が高いテストや低いテスト、自動化を導入すると効果が高いと言われている箇所について解説します。

①リグレッションテスト

リグレッションテストとは、プログラムをアップデートする際、修正したことで既存の機能に不具合が発生していないかを確認するテストとなります。
つまり、テストのアップデートを行うたびに既存機能について同じことを実行し、成功という同じ結果を求めるためのテストになります。
そうなると、テストケースは同じものを基本的には使用することになり、実行手順も同じ工程を行うこととなります。

こういった「同じ工程を行わざるを得ない」テストを自動化は得意とします。
人間的な創意工夫はあまり入る余地がなく、機械的に再テストをしなくてはならないリグレッションテストにおいて絶大な効果を持つのです。

②繰り返しテスト

2つ目に得意なテストとしては、繰り返しテストがあります。
再現性が低い事象であったり、特定のタイミングでしか起こらないものであったり、試行回数が多く必要なテストを人間が行うのは大変です。
また、こういった同じことを繰り返すテストは人間の脳を疲弊させ、人的ミスを呼び起こしやすいテストと言われています。

こうした人的ミスが多発するような繰り返しテストにおいても自動化は効果が高いと言われています。

機械は疲弊によるパフォーマンスの低下はなく、決められた動作を設定さえできれば、何度でも何時でも何回でも高速で繰り返すことができます。
このため、試行回数が多いテストにおいては人間を凌駕する結果を挙げることができます。

2.自動化が不得意な点

自動化はとても便利で、勘違いや人的ミスも起こらないため、使いこなせれば頼りになる存在ではありますが、使うべき箇所を間違えて導入してしまうと、思うように性能を発揮できず、自動化に失敗したという結果だけ残ってしまうことになります。

 

自動化が向いていない箇所も知ることにより、より有意義に使うことができるでしょう。  

①低頻度なテスト

重要度は割と高く、絶対に行わなくてはならないテストですが、正常であることを確認することが主目的で何度も繰り返す必要がないテストを指します。

これらを自動化しようとすると、自動化の仕組みを確立するのに難易度が高いため時間がかかってしまう上に、その後も使う見通しがないと、使い道のないものに時間とお金を使うということになってしまいます。

自動化はどうしてもスタートダッシュが遅くなりがちなので、インスタントなテストには向いていないというのが現状です。

②アドホックテスト

再現性が低く、特定条件下でしか起こらないようなバグを探索するテストにも自動化は難しいとされています。
これらはテスターの経験から、「もしかして」という自問自答の元導き出されるもので、ある種の想像や創作性が求められます。

自動化は機械であるため、同じことの繰り返しは得意ですが、突飛な発想を行うことは苦手です。
そのため、こうしたらこうなるかもしれないという重箱の隅を突くようなテストは不得意分野だと言えるでしょう。

3. まとめ

現時点の自動化テストと呼ばれている仕組みは下流のテストに向いていると言えます。
例えば単体テストや結合テストのテストレベルがそれに当たります。

単純でありますが物量が多く、何度も繰り返し確認することが容易な小さい単位でのテストです。
これらをリグレッションテストで、修正の度に確認を行うため自動化することは、工数の削減に於いて大きな効果を発揮するでしょう。
(ただし、導入直後から自動化の仕組みの確立までの動きは鈍化します)

一方、大きなシナリオを辿るユースケーステストや、奇特性の高いバグを発見するようなシステムテスト、受け入れテストの段階では、効果を発揮することがなかなか難しいかもしれません。
最終的に単体レベルの動作や結合レベルの動作を再度担保したいという意味合いで、最低限の簡易テストを回す等の明確な意図があると良いかもしれません。

簡単にまとめるとすれば、テスト自動化は、「以前と同じ状態であるということを示す」ことは得意で、「新しい仕組みそのものについて調査を行う」ことは苦手である。
とおおよそ特徴づけることができるかと思います。

つまり、テスト自動化とは「品質劣化の確認作業」のために行うものであって、「品質向上のための発見作業」には向いていないということになります。
メンテナンスを実施する必要があまりなく、変更頻度は少ないがテストを何度か繰り返す必要がある。
そういった箇所に適用することで、高い効果を発揮すると考えられています。

使いこなせれば非常に強力な自動化テスト。
導入すべきタイミングや目的をはっきりと定めることにより、導入して失敗してしまうのではという懸念を減らすことができれば幸いです。

関連資料・関連リンク

ページトップへ戻る