テスト自動化を導入するには
テスト自動化とはどういったものかは以前の記事(テスト自動化とは)で紹介したが、今回はテスト自動化をどのように導入すべきかをまとめた。テスト自動化について正しい理解ができていないと、せっかく導入したとしても失敗に終わってしまうだろう。そのようなことのないよう、理解を深めていただきたい。
手動テストと自動テストの使い分け
手動テストと自動テストにはそれぞれ向き不向きが存在する。これを把握せずにテスト自動化の適用範囲を決めてしまっては、余計なコストがかかるばかりか、十分なテストが実施できず品質が確保できないような事態を招きかねない。
以下に手動テストが適切な場合を記載した。
1. 主観的な検証
操作性やデザイン、動作など、人が主観的に検証する必要があるアプリケーション機能は、手動テストが唯一の選択肢となる
2. 新規機能/変更機能
開発中の新規アプリケーション機能や頻繁にバージョン・アップや変更が行われる機能の場合、自動テストの作成よりも手動テストを行うほうが早い
3. 戦略的開発
テスト実施者の特別な注意を必要とする戦略的なアプリケーション機能については、常に手動でテストを実施したほうがよい
4. 複雑な機能
特に複雑なアプリケーション機能の場合、テストの自動化には大きな課題が伴う可能性が高い(時間およびコスト面での投資が増大する)
このような場面では不可能ではないものの自動テストを用いることは難しい。このことを作業に携わるエンジニアだけでなく、マネージャー等の管理者が把握していなければ、認識の齟齬が生まれてしまう。正しい現状認識、作業予測を行うことがテスト自動化を成功させるポイントとなるだろう。
段階を踏んだテスト自動化
テスト自動化の導入の先送りは、今後のシステム開発において不利に働くということはこれまでに記載した通りである。とはいえ過度の期待は禁物であり、適切な導入を行うことが重要だ。
導入に当たって、現在のプロジェクトの状況、組織の成熟度などを考えて、できるところから段階的に導入していく必要がある。現場の状況を考えず導入を推し進めれば、現場が混乱し、開発コストの上昇やスケジュール遅延、品質の低下を招きかねない。このような事態を避けるため、自動テストと手動テストの違いやパフォーマンスを理解して、テスト自動化の効果があるテストは何かを考えるべきである。もちろん、テスト自動化に関してのスキルがなければ、実現は難しい。そのためのスキルを習得するということは、当然習熟するまでの時間とコストがかかることを見込まなければならない。
今までは手動で行っていたために、時間的、リソース的な制限からテストの網羅率を上げることができないようなテストがどのようなシステムでも必ずあるだろう。テスト自動化ができるところは任せるという視点で、既存のテストを見直すと良い判断ができるだろう。その中から、テスト自動化が可能な箇所、かつ、自分たちのスキルでもできそうなところから、優先度をつけて、段階的に導入することが最も確実な方法である。また、手動テストを直接自動テストに変換するのではなく、自動テスト向けにテストケースを組み直すことが必要になるケースもある。
「広く浅い範囲」からテスト自動化
テスト自動化をいきなり本格導入することは敷居が高く、失敗した際の損失が大きいため、推奨できない。始めは試験的に広く浅い範囲からのスモールスタート導入を進めるべきである。
安価or無料のツールを導入する
まず使用するテスト支援ツールは高価なものではなく、最初は無料か安価なツールを導入すべきである。オープンソースのツールも多くあり、後々テスト環境に合わせて改修することで使いやすくすることも可能である。コストを低くすることにより、導入に対する心理的な障壁を緩和できる。
また高価なツールよりもオープンソースのツールの方が利用者が多いこともあり、必ずしも高価なツールが便利であるとは限らない。しかし、これは試験導入段階での話であり、安価なソフトでは機能不足な場合は、迷わず高価なソフトの導入を検討すべきである。なぜなら、無料であることに固執するあまりツールの改修に時間をとられ、テストの効率化が行えないような事態に陥ってしまうからだ。
複数機能をまたがって導入する
テスト自動化する際に、テスト支援ツールの効果を発揮しやすい部分を対象に導入するほうが良い。この場合はテスト目的を簡易な動作確認に絞るべきである。
1. システム全体の機能を対象とする(ツールを「広く」導入)
テスト対象の範囲を、システムの全機能・全画面とする。また、テスト自動化を導入する対象システムを、画面UIを持つ全システムとする。テスト対象の範囲を限定しないことで、テスト自動化の対象機能や画面を選定するための、調査や計画の工数削減が行える。
2. テストの目的・観点を動作確認テストに限定する(ツールを「浅く」導入)
テスト対象の範囲を限定しない一方、テストスクリプト作成に必要な工数を最小限にするようテストの目的と観点を限定する。具体的には、画面遷移が正しく処理されることを確認する、正常系の動作確認テストのみをテスト自動化の対象とする。テストケースの設計やテストスクリプトの作り込みを必要とする、異常系テストや回帰テストなどは対象としない。統合テスト実施のための受け入れテストとして、機能結合テストや統合テスト中のバグ修正後に正常系の動作確認テストを実施することを、スモールスタートでは重視している。
テストツールを導入する際、一般的にテスト自動化を試すパイロットプロジェクトによる導入が行われることがある。これに対し、システムの規模や特性を選ばない点、事前の検討を経ずに開発プロセスに入っているプロジェクトでも導入が可能な点、テスト自動化による効果の検証よりも、「まずは使ってみる」ことに重きを置いている点で、スモールスタートはパイロットプロジェクトとは異なる。
おすすめテスト支援ツール
テスト支援ツールは数多くあり、どれを導入すれば良いのか判断が難しい。そこで、テスト自動化を検討する際に役に立つ、オープンソースの有名なテスト支援ツール及び、特徴を以下にまとめて記載した。
今回は、特にシステムテスト、受け入れテストで利用できるツールを紹介する。
【Selenium】
photo by http://www.seleniumhq.org/
- 主な対象:Webアプリケーション
- 動作環境:ブラウザ拡張、クライアントサーバーモデル
- 対象URL:http://www.seleniumhq.org/
Seleniumは、ブラウザ上で動作するWebアプリのテストを自動化するツールである。マルチブラウザ対応しており、FirefoxやChromeなど主要なブラウザに対応している。また、単純に自動化するだけではなく、テスト中に不具合が発生した場合、その時の環境や手順を再現できる(キャプチャー・リプレイ機能)も搭載されている。
「Selenium IDE」というFirefoxのアドオンを利用すると、Firefox上でユーザーが行ったクリックなどのブラウザ操作を記録してテストスクリプトを作成できる。そのため、プログラミング言語の知識があまり無いユーザーであっても簡単に利用できる。
プログラミングによって自動テストのスクリプトを書く際は、「Selenium WebDriver」というSelenium系のソフトウェアを用いる。「Selenium WebDriver」では複数の開発言語に対応しており、Java、C#、Python、Rubyと多くの言語でスクリプトの作成が可能である。
また、一つのテストスクリプトで複数のテストを併行実施するには「Selenium Grid2」というコンポーネントを用いることによって可能である。テストの時間短縮に大きな効果を発揮する。
【Apache Jmeter】
photo by http://jmeter.apache.org/
- 主な対象:Webサーバー、データベース、FTP、LDAPサーバー
- 動作環境:Javaアプリケーション(GUI)
- URL:http://jmeter.apache.org/
Apache Jmeterは負荷生成ツールとして有名なツールである。Webサーバーなどに対してのパフォーマンスの測定や、高負荷状態の負荷テストを行うことが可能である。また、パフォーマンスの測定や負荷テストだけでは無く、HTTPレスポンスの妥当性を判断できるため、機能テストの実行も可能である。さらに、テスト結果をグラフで表示、メールで通知といった機能がある。
【Jenkins】
photo by http://jenkins-ci.org/
- 主な対象:Windows、UNIX、Linux、MacOS等
- 動作環境:Webアプリケーション
- URL:http://jenkins-ci.org/
JenkinsはCI(継続的インテグレーション)ツールとして有名である。このツールを利用すると自動的にビルドが可能である。また、スケジューラー機能により定期的なテスト実行の命令も可能である。しかし、スケジューラー機能のうち実行命令のスケジューリングのみがJenkinsの機能であり、Jenkinsだけではテスト作業を自動的に行うことはできない。そこで、Jenkinsにテストを自動的に行うプラグインをひも付けることにより、テストの実行が可能となる。さらにプラグインが豊富で、静的解析ツール、ユニットテストツール、キャプチャー・リプレイツールなどを追加できる。
【Appium】
photo by http//appium.io/
- 主な対象:iOS、Androidなどのネイティブアプリ、Webアプリケーション、ハイブリッドアプリ
- 動作環境:Windows、OSX、Linuxなど
- URL:http//appium.io/
AppiumはiOS・Android上で動作する、ネイティブアプリ、Webアプリ、ハイブリッドアプリのテストを自動で実行するツールとして使われる。元アプリのソースには手を加えずにテストを実行出来ることが、特徴として挙げられる。また、一つのテストスクリプトでiOSとAndroidのそれぞれに対応することが大きなメリットである。
まとめ
テスト自動化は時間、お金、労力がかかる大変な作業である。そこがネックとなり、導入に踏み切れない企業、あるいは導入しても失敗してしまう企業が後を絶たない。しかし、あくまでテスト自動化は短期間で効果が表れるものではなく、長期間で最終的に効率化と品質向上をすることが目的なのである。目先のコストを言い訳に、効率化、そして品質を向上するための努力は怠ることのないようにしていただきたい。
テクバンの品質ソリューション事業部 特設サイトでは、「ソフトウェアテスト」や「テスト自動化」に関するサービスのご紹介をしております。
「プロダクトやサービスの品質がなかなか上がらない…」
「テスト自動化の導入/運用をしたいがどう進めたらよいか分からない…」
などのお悩みをお持ちの方は、以下のリンクからぜひお気軽にご相談ください。
また、「ソフトウェアテスト」や「テスト自動化」のお役立ち資料も掲載しておりますので、こちらも合わせてご利用ください!