ソフトウェア開発におけるテスト自動化の基本 ~自動化導入の真の価値とは?~

ソフトウェアの重要性は年々増加し、多様化、複雑化も進んでいます。それに伴い近年は、IT予算におけるソフトウェアテストが占める割合※も上昇傾向にあり、コスト削減、品質担保、競争力向上のためのリードタイム短縮などの課題解決が求められています。そのような背景から、ソフトウェア開発へのテスト自動化の導入が進んでいます。
本コラムでは、E2E(End to End)テストの自動化の基本と、その効果について紹介します。

※2018年度ソフトウェア業売上高15.5兆円、およびソフトウェア開発業務の全工程のうちテスト業務は約36%、をもとに算出すると、日本国内におけるソフトウェア開発テスト市場は5.5兆円規模と推定されます。
経済産業省「2019年情報通信業基本調査-2018年度実績-」
https://www.meti.go.jp/statistics/tyo/joho/result-1.html
独立行政法人情報処理機構(IPA) 「ソフトウェア開発データ白書2018-2019」
https://www.ipa.go.jp/files/000069381.pdf

テスト自動化とは

ソフトウェアテストは、市場にソフトウェアの不具合を出すリスクを低減するために実施する作業です。テスト自動化とは、テスト支援ツールを使うことにより、ソフトウェアテストを行うための作業を自動化することをいいます。E2Eテスト自動化ツールでは、一般的にキーボードやマウス等による画面での操作を自動化し、画面の文字や画像を取得して判定することが基本となりますので、これを実行するためのテストコード作成が必要となります。

テスト自動化は「銀の弾丸」か「魔法の杖」か

テストを自動化することでコストが激減し品質も劇的に向上する、というのは大きな間違いです。テスト自動化は、銀の弾丸※でも魔法の杖でもありません。また、「全てのテストを自動化する」のも間違いで、自動テストに取り組んでいる企業の多くは、効果のある範囲に導入を留め、テスト全体の30%程度しか自動化していないのが実状です。そもそもユーザビリティテストなど、人間が実施すべきテストも存在します。

※『銀の弾などない? ソフトウェアエンジニアリングの本質と偶有的事項』
1986年 フレデリック・ブルックス
http://worrydream.com/refs/Brooks-NoSilverBullet.pdf

自動テストと手動テスト

テスト自動化の恩恵を十分に享受するには、自動テストと手動テストの得意分野をよく理解して、テストを計画、設計しなければなりません。まず着目すべき点は、自動テストはテストコード作成に工数を要するだけでなく、仕様変更の都度、メンテナンス工数が発生することも考慮しなければならないということです。また、自動テストが不安定な場合(サーバの状態やネットワークの状態などの原因も含む)は、運用時に想定外の調査や対応に工数が掛かります。手動テストとは異なり、テスト対象自体に不具合が発生した場合にも、不具合発生時の状態や実施手順など事象調査に工数を要することも考慮しておく必要があります。その上で、費用対効果の観点も含めテストの自動化を成功させるためには、プロジェクト初期段階から自動化を前提とした計画策定・テスト設計をしておくことが最も重要となります。

ここからは、自動テストと手動テストの得意分野、強みをよく理解した上で自動テストを導入し、効果を生み出すためのポイントを解説します。

① デグレの確認に効果

手動テストでは、テスト自体が初めてのソフトウェアの確認になりますのでそこで不具合を発見することになります。自動テストの多くは、テストコード作成の過程でテスト対象のUI操作と結果の確認を行うため、不具合があれば、まずそこで発見することになります。また、人間のテストでは指示がなくても、だれでも気づくような暗黙的な確認も行いますが、自動テストでは、テストコードで命令したところしか確認しないため、問題があっても発見できません。このため、自動テストの実施で新たな不具合を検出することは稀です。すなわち、不具合の発見を目的にした意地悪テストをたくさん作成しても、繰り返し実施する必要がなければ、テストコードの作成工数と以降のメンテナンス工数を要するだけで、品質向上にはほとんど効果がありません。

しかし自動テストは、テストコードを作成してしまえば、あまり工数を掛けずに何度でも繰り返し確認することが可能です。そのため、「何度も繰り返し実施する必要のある(意味のある)優先度の高いテスト」を厳選した上で、回帰テストでデグレしていないかを確認するにはとても有用です。一見、周囲に影響がないように思える修正でも、見えないところで影響を受けてデグレを起こしてしまうこともあります。このようなデグレ確認を手動で実施するのは非効率ですが、デグレのリスクを潜在化させないためには必要な作業です。つまり、自動回帰テストによるセーフティーネットをプロセスに組み込むことで、デグレによる不具合の市場流出の低減効果、および早期発見による開発者の対応工数低減(デグレ原因の特定範囲狭小)が期待できます。
昨今、主流になりつつあり、開発サイクルを何度も繰り返すアジャイル開発においても、サイクル単位で実施する機能テストや不具合修正時のデグレ確認テスト、またはビルド・展開前に実施するスモークテストなどに活用できます。

尚、これらの用途の目的は、単なるコスト削減ではないため、回帰テストを実施していないプロジェクトとのコスト比較には意味がありません。開発プロセスの迅速化と品質を確認するためのサービス導入ともいえます。

② 単純な繰り返し作業を長時間必要とするテストに効果

膨大なテストデータ、データパターンにおける単純な繰り返しテストを人間が手動テストで実施することは非効率で、多くの工数が掛かります。テストのコスト削減のため、適切に抽出したテストパターンを間引くことになった場合は、本来実施すべきテストが網羅できなくなり、不具合リスクが潜在してしまいます。また、長時間の単調な作業では人間は疲れを生じるため、ヒューマンエラーが発生する可能性があります。
また、自動テストは、テストコード作成の過程でも、あらゆるデータを使った確認は実施しないため、人間が行う手動テストと同等の品質向上の効果も期待できます。

このように、自動テストは単なる手動テストの単純な置き換えではなく、それぞれの得意分野、強みを活かして導入すべきです。

品質向上に取り組む

自動テストは、そのほとんどが品質向上を目的としたものではありません。しかし、自動化によって工数削減が可能なので、その工数を人間にしかできないテストに充てることができます。つまり、自動テストの導入により創出した時間で、品質向上に取り組むことができます。

定量効果、定性効果

ここまでは主に工数削減、コスト削減などの数値的価値、定量効果について述べてきましたが、テスト自動化では業務の品質向上、ストレス軽減などの質的価値、定性効果にも期待ができます。

例えば、業務の現場では、以下のような解決すべき様々な課題があります

  • 競合との競争激化により、市場リリースのリードタイムを短縮し、顧客満足度を高めることが急務。夜中・土日でも自動テストを稼働させることによるリードタイム短縮したい。
  • 働き方改革として従業員の残業時間の削減、各種労働関連の規制強化に伴い、働き方を変えたい。また、労働環境を改善し、離職リスクを低下させたい。
  • 仕様の複雑化・多様化によってテストが属人化しているため、 これらの脱属人化が必要である。人の流動性が高い中でも、テストの品質を一定に保つことが求められている。
  • 単純作業を自動で行うことで、時間を創出し、従業員はより付加価値の高い業務へのシフト、品質向上につながる活動に費やす時間を増加させたい。
  • 単純作業から従業員を解放し、モチベーションをアップさせたい。
  • 開発スキルの獲得により、従業員の市場価値を向上させたい。
  • ミスが許されないテスト業務遂行時のストレスを軽減させたい。
  • ヒューマンエラーを解消したい。
  • 従業員がリモートワークでもテストを継続させたい。
  • ピーク時に発生するテスト量の増加を解消したい。

テスト自動化ツールの選定

今回は、ソフトウェア開発におけるテスト自動化の基本とその効果について解説しました。テスト自動化も、RPAを活用して実現できる業務の自動化の一つです。無料で提供されているテストツールもありますが、無料ツールは、技術習得や環境構築に多くの工数を要する場合が多く、サポートも期待できないため、想定外のコストが掛かってしまうかもしれません。有料のツールでも、提示されている価格は全体コストの中の一部でしかなく、やはり一番コストが掛かるのは人件費です。無料だからと飛びついて購入すると、結局コスト高になってしまうこともあり、注意が必要です。
次回は、「テスト自動化でテストツールに求めるものとは?」と題し、UiPath社のテストの自動化を実現する製品群「UiPath Test Suite」のアプリケーションテスト機能を紹介します。

※ UiPathは、UiPath社の米国およびその他の国における登録商標または商標です。

富士ソフト RPAソリューションのご案内




塩見 潤塩見 潤(Jun Shiomi)

エリア事業本部
西日本支社 インテグレーション&ソリューション部
第2技術グループ
課長 / エキスパート

この記事を読んだ人はこちらの記事も読んでいます。