前回は「コーディングの自動化」について説明しましたが、ソフトウェア開発自動化の第3回は「テスト自動化」について説明します。

テストの工数や工期はソフトウェア開発の全体の約4割を占めるという調査結果があります。実感ではもっと多く感じる方もいるかもしれません。効率的なテストを行うことはソフトウェア開発全体の高生産性を実現することに繋がります。

第1回で述べた通り、近年のシステム開発はコード化の潮流があり、従来の開発に比べてコーディング範囲が拡大されています。コーディングの範囲が広がるということは、機械で処理できる範囲が広がったということでもあり、従来は手動で実行していたソフトウェアのテスト領域においても自動化できる要素が増えてきたと言えます。

今回はテスト自動化の概要を説明した後、近年のシステム開発の変化を踏まえたテスト自動化の基本的な内容について解説していきます。

4つの自動化領域

No 対象領域 内容
1 コーディングの自動化 複雑・多様なロジックの自動生成
2 テストの自動化 試験項目の自動生成と自動実行
3 ビルド・リリースの自動化 ビルドやテスト環境へのリリースの自動化
4 システム基盤構築の自動化 システム基盤の自動インストール・設定

テスト自動化とは?

ソフトウェアテスト技術振興協会の「テストツールまるわかりガイド」によるとテスト領域における主な作業は「テスト分析」、「テスト設計」、「テスト実装」、「コード解析」、「テスト実行」、「テストウェア管理」、「テスト結果管理」、「インシデント管理」の8種類の作業に分類されています。テスト自動化とはテスト領域の各種作業に対してツールを導入することを指します。

「テスト実行」を例にとってみると、次図のように人手でテストケースを選んで一つ一つ実行していた作業を、テストツールを使うことでテストケースの読み込みから実行までの一連の流れを自動化することができます。

テスト実行の自動化の例

テスト自動化のメリット

テストを自動化すると主に以下の3つメリットが得られます。

1.実行が高速になる

単純な加算演算のよう計算であればともかく、桁の多い数や加減乗除を複数組み合わせる場合、手計算よりも電卓の方が速いでしょう。テストも同様で、人手よりもツールを使った方が短時間で終えられます。

2.繰り返しに強くなる

一般的なシステム開発では、システムの一部に変更を加えた場合、他の機能に影響が無いかを検証するためにリグレッションテスト(回帰テスト)を実施します。

数回程度であれば、大した作業ではありませんが、変更回数が多くなり変更の影響箇所が多くなると作業量が膨大になります。こうした場合に繰り返し行うテストを自動化することで、2回目以降のテストの実行を効率化できます。

3.ミスを減らせる

テストツールを活用するとテストを行う際に人の手が介在しにくくなります。

その結果、テストの手順誤り、テストの実施漏れ、テスト結果の判断誤りなど、人の手によるミスを減らすことができます。

テスト自動化で気をつけるべきこと

テスト自動化のメリットについては上述の通りですが、いくつか気を付けるべきことも存在しています。テスト開発自動化研究会ではテスト自動化に取り組む前に留意しておくべきことがらを「テスト自動化の8原則」としてまとめています。

  1. 手動テストはなくならない
  2. 手動でおこなって効果のないテストを自動化しても無駄である
  3. 自動テストは書いたことしかテストしない
  4. テスト自動化の効用はコスト削減だけではない
  5. 自動テストシステムの開発は継続的におこなうものである
  6. 自動化検討はプロジェクト初期から
  7. 自動テストで新種のバグが見つかることは稀である
  8. テスト結果分析という新たなタスクが生まれる


「1.手動テストはなくならない」という原則を例にとってみると、以下のような気を付けるべき点が挙げられます。

  • ユーザビリティテストなど、テスト自動化できないタイプのテストが存在している
  • テスト回数が少なく(1回しか実行しないテスト)、テスト自動化ツールの導入コストに対して自動化のメリットが少ないテストがある

テストを自動化したからといって必ずしもメリットが得られるわけではなく、テスト自動化の原則を理解しつつ、効果が見込める部分に対してテスト自動化の技術やツールを上手に活用していくことが重要となります。

代表的なテスト自動化ツールについて

上述の通り主なテスト領域の作業は8つあり、それぞれの作業によって数多くのテストツールが存在しています。本連載では主なテスト領域の作業の中でも「テスト実行」に位置付けられるテストツールの一部を紹介します。

「テスト実行」の代表的なテストツール一覧

No 種別 主な目的 検証対象(例) 代表的なテストツール
1 コード解析 ソースコードが定められたルールで記述されているか検証する ■Javaの場合
・メモリリークを起こさないような実装になっているか
・脆弱性を含んだ実装になっていないか
CheckStyle,
FindBugs,
SonarQube,
IBM Security AppScan Standard
2 単体テスト プログラムを構成する比較的小さい単位の要素が正しく機能を果たしているかを検証する ■Javaの場合
・あるクラス内の1メソッド
・複数のメソッドを実装したクラス
JUnit,
Jasmine
3 機能テスト ユーザから要求された機能をシステムが満足しているか検証する ■ホテル予約システムの場合
画面から操作して目的のホテルが予約できるか
Selenium,
SilkTest,
Selenide,
Katalon
4 パフォーマンステスト ユーザからの非機能面での要求を満たしているか検証する ■あるWebシステムの場合
・目標時間内にページが表示されるか
・アクセス数が多くなっても問題なく動作するか
Apache JMeter,
LOAD IMPACT
5 サーバテスト サーバの設定、インストールパッケージなどが要求を満たしているか検証する サーバにインストールされているJavaのバージョンが正しいかどうか
外部からデータベースに問題なく接続できるかどうか
Serverspec,
Infrataster

テスト自動化の適応領域の変化

冒頭でも説明しましたが近年のソフトウェア開発のコード化の影響で、テスト自動化の適応領域がシステムサイクル全体に広がっています。JUnitコードのコーディングによる単体テストはもちろん、Seleniumコードによる機能テストの自動化にもコーディング領域は広がっています。

テスト自動化の適応領域

またビルドツールであるMavenは「テスト」、「ビルド」、「リリース」などのライフサイクルを統合しコード化しています。これによりテストの領域がリリースまで拡大し、CI/CD(継続的インテグレーション・継続的デリバリー)まで適応範囲を広げています。

他にも、業務自動化を目的としたRPA(Robotics Process Automation)が近年注目を集めています。RPAはツールとしてPCの操作を自動化することができるため、テスト実行の自動化ツールとしても活用が可能です。

上述したテストツールと比較すると、お絵かきのような直感的な操作でテストシナリオの作成と実行の自動化ができることが特徴です。そのため、従来よりもテストのシナリオを作成する敷居が下がり、エンジニアのような開発スキルを持たない人材でもテストを自動化することができ、適応領域の拡大が期待されています。

*  *  *

今回は「テスト自動化」について、簡単な概要の説明、自動化するメリット、気を付けるべき点、代表的な自動化ツール、適応領域の変化について説明しました。

またAI技術の発展により、一歩進んだテスト自動化ツールが登場してきています。Facebookでは、「SapFix」と呼ばれるAI技術を用いたバグ自動修正ツールを実際のAndroidアプリ開発で運用しており、一定の効果を出ています。今後、新たな技術の登場によるテスト自動化の進歩に注目です。

著者紹介


高見諭史(Takami Satoshi) - NTTデータ 主任

2013年から「フレームワーク」や「ソフトウェア開発の自動化」など、ソフトウェア開発を工学的に取り扱う担当で技術の普及展開を行う業務に従事。

2016年から2年間中国で、ソフトウェア開発の自動化技術普及展開の業務に従事する。中国での業務経験をきっかけに、最近はグローバルな視点での技術動向に興味がある。

ハード・ソフト、Web・モバイル問わず新しい技術を利用したモノづくりが趣味。関連した記事執筆、講演活動も行う。