コラム

  • 2021.05.26
  • テスト自動化
  • #テスト実行
  • #テスト自動化
  • #ノウハウ
  • #基礎知識

テスト自動化とは?9割が失敗するといわれるテスト自動化。成功に導くたった2つの鍵

新型コロナウイルスの影響でビジネスや社会生活において大きな変革が求められ、各種サービスを実現するソフトウェアへの期待はますます高まってきています。
また、ニュースで大規模システムの障害発生を目にすることが増えてきたことからもわかる通り、ソフトウェアの品質が社会に大きな影響を与え、世間からのソフトウェア品質に対する注目度、要求レベルも高くなっています。

そのような背景から、ソフトウェア開発現場では、品質保証を手厚くさせていくと同時に、効率的な品質保証を目指した、“ テスト自動化 ”の検討を加速させていく企業も多く見られます。

ただし、テスト自動化に取り組む企業すべてがテスト自動化を正しく理解し、導入に成功しているとは限りません。開発現場では「9割の自動テストが失敗する」といわれています。

なぜ、テスト自動化は失敗してしまうのでしょうか。

当コラムでは、SHIFTが品質コンサルティング活動を通して見出した、テスト自動化の導入を成功に導く2つの鍵をご紹介します。

テスト自動化が求められる背景とは

テスト自動化のイメージ

まず、テスト自動化が世間から求められる背景、ソフトウェア開発を取り巻く環境についてお話しします。

ソフトウェア開発を取り巻くビジネス環境の変化

より適切に、より計画通りに、ソフトウェア開発をすることが良い、とされていた時代は、ソフトウェア開発は一年、またはそれ以上の長い期間をかけて行ってきました。しかし、市場の移り変わりが激しい昨今では、開発している間に市場のニーズが変化し、従来のスピードでリリースする頃には誰からも求められない製品になってしまう可能性があります。
そのため、より「高速」で「効率的」なソフトウェア開発のスタイルへと移り変わってきました。

開発手法の変化

古くから多く使われてきた開発手法であるウォーターフォール型開発は、各開発フェーズにしっかりと時間をかけ段階的に進めることで、当初計画、当初要件に忠実なソフトウェア開発を実現することを目的とした開発手法です。
しかしながら、変化の激しい市場において、ウォーターフォール型開発でソフトウェアを開発していけば、前途の通り、市場に追いつくことは難しいという懸念があります。
そこで、近年、開発現場の主流がアジャイル型開発へと移り変わってきました。2019年に調査会社のガートナーから、「7割の大企業がアジャイル型開発を採用、または採用予定である」(※1) という結果が発表されていることからも、市場と一緒に開発現場も急速に変化していることがうかがえると思います。
また、ソフトウェアを取り巻くビジネス環境が激しく変化している今、開発途中であっても仕様を市場に合わせて変えるという現状も増えてきたことから、従来のウォーターフォール型開発からアジャイル型開発への取り組みが加速しているともいえるでしょう。

(※1)https://www.gartner.co.jp/ja/newsroom/press-releases/pr-20190221

テスト自動化を行っている企業規模の図

アジャイル型開発手法に関する現在および今後の方針×従業員数規模(ITデマンド・リサーチ)/調査:2018年5月

開発手法における企業の取り組み実態の図

各開発手法に関する現在および今後の方針 出典:ガートナー (ITデマンド・リサーチ)/調査:2018年5月

shiftアジャイル白書2020からの引用

弊社調査資料『アジャイル開発に関する実態調査レポート「SHIFTアジャイル開発白書2020」より抜粋

求められる新規開発と品質保証の両立

「高速」で「効率的」な開発により、市場にあったソフトウェアの提供が可能な世界に近づくにつれ、数ヶ月おきに機能をリリースし、それを数年つづけている開発現場も増えてきました。また、限られた予算の中で市場に追いついていくために、優先的に『新機能開発』にIT投資することが必然となっています。

しかし、新しい機能、新しいサービスを高速で生み出しつづけることで、システム全体も高速で成長していく裏で、過去にリリースした機能の品質も保たなければなりません。そこで限られた予算内で、短期間、低コスト、高品質なソフトウェア開発をすることが求められるようになりました。

このような時代背景から、変化に対応する手段の一つとして、テスト自動化が求められています。

テスト自動化とは

テスト自動化のイメージ

ここまでは、テスト自動化が求められる背景について説明しました。
では、ここから、テスト自動化とは何なのか、なぜ前途の環境下でテスト自動化が求められるのか、について説明します。

ソフトウェアテストには、「テストケースの設計」「テストの実施と結果の確認」「テスト進捗の管理」「レポートの作成」といった作業が含まれます。
これらの作業を全て、または一部をシステムが制御することを 『 テスト自動化 』 といいます。

テスト自動化を適切に導入することにより、さまざまな問題が解決します。ここでは3つのメリットを紹介します。

テスト自動化のメリット

問題点の早期発見が可能

より早くテストの不具合や問題点を発見することが可能です。
いつでもテストを繰り返し行うことができる自動テスト環境を構築することで、毎週、毎日実行することが容易にでき、結果として問題の早期発見が可能になります。業務の無駄を取り除くことにもつながり、時間の短縮、開発リードタイム全体の効率化が進みます。

低コストで品質のリスクヘッジが可能

ソフトウェア全体の品質保証を手動テストで行うと膨大なコストがかかるため、品質保証範囲をスリム化することはよくあることだと思います。
しかし、確認をしなかった機能が実は想定外のシステム障害につながる原因だった、という例は少なくありません。

テスト自動化環境を構築することでコスト面から軽視されがちな、ソフトウェア全体の品質保証を常に行うことが可能になります。
そのため新規開発に集中しながら、低コストで品質のリスクヘッジを行えるため、より効果的な開発プロセスが実現できます。

人為的なミスや誤りを防げる

人による作業はミスがつきものですが、テスト自動化の適用により、システムが正誤を判断するため、人為的エラーを防ぐことが可能になります。
手動テストと比較すると、正確で迅速なテストの実行ができるため、テスト自動化の導入により効率的なテストが可能になります。

これらのメリットは非常に良い例です。ただし、テスト自動化を適切に理解し、導入しなければ、大きなデメリットを生み出してしまうことも、テスト自動化の特徴です。
我々が品質保証会社としてご支援する際、すでに自社でテスト自動化に取り組んできたが、うまく運用できていないお客様をよくお見受けします。ここでは、うまくテスト自動化を運用できなかった現場でよくある例を3つ紹介します。

テスト自動化のデメリット

コスト削減のみを求め、逆にコストが肥大化する

最も多い思い込みが、「テスト自動化を適用するとコスト削減につながる」という考え方です。
誤りではないのですが、これまでご説明してきた通り、
・高速開発現場に品質保証を適合させるため
・見落としがちな領域を効率的に担保するため
に、テスト自動化は力を発揮します。
コスト削減だけを目的としてテスト自動化に取り組むと、メリットが生まれず、逆にコストの肥大化につながることも多く起こります。

テスト自動化のみで品質「向上」を狙った結果、形骸化する

テスト自動化は、開発業務、品質保証業務における手法の1つでしかありません。テスト自動化のみを適用したからといって、品質が「向上する」という考え方は間違っています。「保証」と「向上」の違いを適切に理解し、それぞれに適切な手法でアプローチすることがとても重要です。
そうしなければ、いつまでたっても目的が達成されず、定めた成果が得られないとして、現場のモチベーションも下がり、結果として形骸化してしまいます。せっかく、コストと時間をかけて構築したテスト自動化環境が、無駄になるのです。

初期構築ばかりに目が行き、運用保守体制が構築できない

テスト自動化の構築までのプロセスや体制に目を向けがちですが、もっとも重要なのが、テスト自動化の運用・保守です。
これまで説明してきた通り、テスト自動化は、成長しつづけるソフトウェアの品質保証を効率的に行う手法であるため、構築した時点で終わりではないことは理解いただけると思います。しかし実際に自分たちの環境にテスト自動化を適用する際、運用保守まで目を向けられるマネージャーやエンジニアは、多くありません。
構築後のプロセスと体制も計画的に確保しておく必要があります。

テスト自動化の注意点

ここまでは、テスト自動化のメリット、デメリットを説明しました。
テスト自動化を導入した途端、今行っているテストの工数が削減され、開発コストが軽減する、開発業務が楽になる、品質が向上する、というのは残念ながら誤った認識です。
前述の通り、
・高速開発現場に品質保証を適合させるため
・見落としがちな領域を効率的に担保するため
にテスト自動化は存在しています。自動化で削減した効果工数で、人の手で行わなければならない開発やテストに工数を効果的に配分させることが最大の目的になります。テスト自動化の適用範囲を拡大することも非常に重要です。
テスト自動化は品質保証を行うための1つの手法であり、すべてではないことを強く意識しなければなりません。

テスト自動化導入成功の鍵

テスト自動化成功のイメージ

すでにこれまでの記事を読まれた皆さんは、テスト自動化を検討するうえで気にしなければならないポイントを自然と理解いただけているのではないでしょうか。
同時に、導入におけるハードルの高さ、検討の難しさも感じられているかもしれません。

この章では、テスト自動化を成功に導くための鍵を2つご紹介します。

「求める主要な結果」の設定、啓蒙こそ重要

実際、テスト自動化導入における失敗事例は多く存在します。前述の通り、9割が失敗するとまでいわれているものです。
失敗例の多くは
・テスト自動化に対して誤った認識の下でスタートを切ってしまう
・「テスト自動化を導入する」ことのみが目的(Objective)となり、主要な結果(Key Results)が定まっていないため、導入効果が不明瞭になる
・時間とコストを試算せず、即日効果を求める

が要因であると捉えています。

では、そうならないためには何をすべきか。
失敗要因の裏返しで考えると、以下が重要であるといえるのではないでしょうか。

「何ができれば達成した、成功したといえるのか。」
「何を目的にテスト自動化の検討を始めるのか。」
「どの程度の時間とコストをかけて、いつまでに成果を出したいのか。」

これを考え、設定し、現場に啓蒙する。これこそが最初の成功の鍵です。

開発現場の取り巻く環境やカルチャーに合わせて目的・結果を定め、それらを達成することが「成功」と考えています。それは、達成までの予実を管理し、効果測定をつづけ、適切に推進していくことが重要であるともいえます。
また、即効性を求めることも危険です。結果が出るまでには、定めた目的・求めた結果に応じて、まとまった期間がどうしても必要になります。

つまり、テスト自動化が『成功』するか『失敗』するかは、ある程度の時間とコストを想定し、目的を定め、実行していくしかないのです。

導入タイミングは早ければ早いほうがよい

「テスト自動化のメリット」の②では、以下のように述べました。

テスト自動化環境を構築することでコスト面から軽視されがちな、ソフトウェア全体の品質保証を常に行うことが可能になります。
そのため新規開発に集中しながら、低コストで品質のリスクヘッジを行えるため、より効果的な開発プロセスが実現できます。

2つ目の鍵は、このメリットを最大化させるために、テスト自動化の導入を早めることです。

以下の図は、ローンチ後のソフトウェア開発・運用に必要な工数(累積)を、テスト自動化を取り入れなかった場合と取り入れた場合でシミュレーションした結果です。

ソフトウェア開発の運用に必要な工数のグラフ

図. ローンチ後のソフトウェア開発・運用に必要な工数(累積)

(1) 一時的に、テスト自動化の環境構築、準備工数がかかり、テスト自動化を取り入れない場合より、工数が上がっています。
(2) 旧機能(すでにリリース済みの機能)は成長しつづけ、QA工数はN (1.0以上) 倍で増加しつづけます。
(3) 旧機能のQAはテスト自動化環境によって担保され、工数増加が抑制。年月が経つにつれてその差(効果)は大きくなっていきます。

上記、図の(3)のとおり、年月が経つほど効果が大きくなります。

「テスト自動化における導入ハードルが高い。」

「まだまだ継続的に機能追加が見込まれている状況で、
今構築してもメンテナンスが大変になってしまうはずだ。」

など、さまざまな要因で導入検討を先延ばしにする現場も多くあると思いますが、それは、生み出される成果期待値を下げてしまっているのと同義です。

テスト自動化 費用対効果からみる推奨領域の図

図. テスト自動化 費用対効果からみる推奨領域

上の図では、もっともテスト自動化を適用するのに、コストと効果のバランスが適切であり、導入ハードルも低いのは、「スモーク」「マネーパス」であるということがわかります。

ここでいいたいことは、テスト自動化に適していると考えている「スモーク」と「マネーパス」は、ローンチからの経過年数の長短に限らず、ほとんどのシステムにおいて、大きな変更が行われていないということです。
みなさんの身の回りのシステムをイメージしてみてください。対象システムの根幹である「スモーク」「マネーパス」領域に関連する機能、例えばECサイトであれば、ログインの操作や、商品の購入操作は、ローンチ初期から頻繁に刷新されるものではありません。

よって、早い段階でテスト自動化を導入したとしても、構築・メンテナンスにかかる労力や難易度は、皆さんが想像するほど多くありません。
いち早くテスト自動化を導入し、システムの成長と並走する形で、品質のリスクヘッジを長期的に行えたほうが、より効果的であるといえます。

まとめ

テスト自動化についての説明を簡単にまとめました。

テスト自動化が求められる背景

①変化の激しいソフトウェア開発を取り巻くビジネス環境
②開発手法の変化
③求められる「新規開発」と「品質保証」の両立

テスト自動化のメリット

①問題点の早期発見が可能
②低コストで品質のリスクヘッジが可能
③人為的なミスや誤りを防げる

テスト自動化のデメリット

①コスト削減のみを求め、逆にコストが肥大化する
②テスト自動化のみで品質「向上」を狙った結果、形骸化
③初期構築ばかりに目が行き、運用保守体制が構築できない

テスト自動化導入成功の鍵

①「求める主要な結果」の設定、啓蒙こそ重要
②導入タイミングは早ければ早いほうが良い

いかがでしたでしょうか。

手法や方法論だけにとらわれず、背景や目的を理解し、テスト自動化がもっともっとソフトウェア開発現場に普及していくことを願っています。

最後に、参考情報として、テスト自動化を実現するうえで用いられるツールについても少しふれておきます。
ただし、「どのツールを使うか」より「求める主要な結果は何か」を重視してください。

求める結果が決まれば、利用するツールは自ずと決まります。目的や結果を決めず、ツール選定から入ることはしないように気をつけてください。また機会があれば、テスト自動化のツール選定のポイントについても、発信できればと思っています。

テスト自動化ツールのご紹介

テスト実行のテスト自動化ツールと種類

テスト実行(ブラウザベース)

Selenium:ブラウザの自動操作フレームワーク。さまざまなテストフレームワークのベース。

Nightwatch.js:対応するメンバーがJavaScript/Node.jsを得意としている際に利用。
Geb:対応するメンバーがJava/Groovyを得意としている際に利用。
Selenide:対応するメンバーがJavaを得意としている際に利用。

テスト実行(スマートフォンアプリケーションベース)

Appium:Android/iOS両アプリケーションにE2Eテストを自動実行する際に利用。
UI Automator:AndroidアプリケーションにE2Eテストを自動実行する際に利用。特にブラックボックステストで用いられる。
XCTest/XCUITest:iOSアプリケーションにコンポーネントテストやUIテスト、E2Eテストを自動実行する際に利用。

関連サービス