テスト自動化とは

品質向上のために欠かせないテストだが、これはなかなか大変な作業だ。単純な作業が多いため人が行うには時間がかかり、見落としなどミスがどうしても生まれてしまう。例えばアカウントを1,000個登録する、といったテスト項目をひとつひとつ手作業で行うのは難しいだろう。
そうした単純作業を含むテスト作業を効率化するために、テスト支援ツールを用いて作業の一部を肩代わりすることをテスト自動化と呼ばれ、注目されている。そしてこのテスト自動化は、テストの効率化にとどまらない可能性を秘めているのだ。

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

空

ソフトウェア産業は移り変わりが激しく、日々刻々と変化を遂げている。その中でテスト自動化の必要性を感じている企業は多い。理由として下記のような背景がある。

  1. 大規模、複雑、短納期のプロジェクトの増加

    ソフトウェア開発の遅れはビジネスチャンスを逃すことにつながる。しかし年々、大規模かつ複雑なプロジェクトが増えており、それに伴ってテストも膨大な量となってる。納期を短くするための方策としてテスト自動化が求められている。

  2. 低予算

    プロジェクトの規模が大きくなったとしても、開発予算は簡単には増やすことはできない。人員が増えることによるコスト圧迫は開発プロジェクトの悩みの種である。

  3. 開発手法の変化

    スマートフォンやタブレットなど多様なデバイスの登場により開発環境は大きく変化している。開発手法もそれらに対応するために従来のウォーターフォール型からアジャイルなど新たな手法を取り入れる企業も多い。

  4. 高い品質を要求される

    求められる品質の基準は年々高まっている。大規模化かつ複雑なプロジェクトでは小さなバグが大問題へと発展することもある。企業戦略の一環としてソフトウェア品質に対する意識が高まっている。

このように、厳しいビジネス競争を勝ち抜くためにテスト自動化の導入を推奨するマネージャが多い。人材を大量投入するのではなく、テスト支援ツールによって上に挙げたような問題を解消しようとしているのだ。

テスト自動化すべき理由

影

日本のソフトウェア産業において、テスト自動化は一般化されてないのが現状だ。2012年の調査ではIT部門全体の8.5%しか導入されていないという結果も出ている(注1)。無論、全ての問題を解決するものではなく、課題等はあるものの、ソフトウェア開発に十分な利益をもたらすことは想像につきやすい。
導入のメリットとしては、具体的にはどのようなものがあるのか。

  1. テストを行うのが早い

    マウスやキーボードを操作するよりも早く、プログラムによって決められた操作をすることができる。テストをプログラムに任せ、メンバーは別の作業に取り組むことができるため効果が大きい。

  2. 手動では不可能なテストができる

    先に述べたような大量にアカウントを作成して操作するなど、手動で行うのでは途方もない時間のかかる作業もプログラムになら任せることができる。これにより、所要時間や実施者を減らすことができるため、人件費を抑えられる。

  3. 信頼性が高い

    プログラムが実行するテストは人のように見落としや勘違いは発生しない。手動テストでは難しいテストも自動化により可能になるためソフトの信頼性もより高まる。ただしプログラムは正しく記述されていなければならない。

テスト自動化は作業効率の向上はもちろん、手動で行えないより多くのテストが実施できるようになるため品質向上につながる。単純作業はプログラムに任せ、逆にプログラムでは実施できない手順が複雑なものだったり、非機能要件に関するテスト等を今までよりも丁寧に行うことができるだろう。

(注1)テスト自動化ツールの導入状況(キーマンズネット)

テスト自動化で可能になること

テスト支援ツールは有償無償を問わず様々なものが出ているが、当然テストの全てを肩代わりするほどの能力はない。また自動化できるとしてもコストパフォーマンスが悪ければ採用されることはない。テスト自動化がどのようなテストに向いているのか以下に記載した。

  • スモークテスト
    開発、追加、修正を終えたソフトウェアが動作する状態か確認する簡易テスト
  • 静的テスト
    プログラムを実行せずにドキュメントやソースコードの誤りを検出するテスト
  • データ駆動型テスト
    同一機能に対して多数の入力や大規模なデータセット(ログイン、検索など)を使用して行うテスト
  • 負荷テスト
    短い時間に大量のデータを送るなど、高い負荷を与えた状態で正常に機能するか調べるテスト
  • 回帰テスト
    プログラムを変更した際に、予想外の影響がないか調べるテスト

これらのテスト「に共通しているのは「単純作業である」、「複数回行う」という二点だ。

「単純作業である」という点はデータ駆動型テストや負荷テストに顕著で、同じ手順を繰り返す作業が多い。手動で行うのであれば時間が大きくとられてしまう作業を夜間に動かして、翌朝にチェックするということができる。
「複数回行う」とは同じ内容のテストを定期的に行っているということだ。業務ソフト開発は一度完成しても、不具合修正や機能改善のため継続してサポートを続けることが多い。その場合ほぼ同じような内容のテストを複数回行うのであればテスト自動化は有効だろう。

テスト自動化の目的

テスト自動化を行うにあたって整理しておかなければならないのが、目的である。効率を上げるために行ったにもかかわらず、以前よりも時間やコストがかかってしまった、という例は意外にも多い。そのような事態に陥らぬためにここで一度テスト自動化の目的を整理しよう。

  1. 工数削減

    ・繰り返し作業の効率化
    同じテストの繰り返し実行を容易にし、高頻度にでのテスト実施を可能にする。

    複雑な作業の簡略化
    人手のかかる作業を自動化でサポートする

    ・テストデータの簡略化
    自動生成することで、テストデータの簡略化を実現する

    ・テスト設計の簡略化
    テストケースを自動生成することで設計作業を簡略化する

  2. 曖昧さを排除

    ・再現性の確保
    テストの実行手順、結果をいつでも再現することができる。またテスト実行時の内部情報を後から追跡可能である

    ・人為的なミスの防止
    ミスが発生しやすい作業の自動化やミス検出のチェック作業の自動化を行える

    ・属人的な判断を排除
    個人によって判断が変わることなく、プログラムによる正確な判断が行える

  3. テスト網羅率(カバレッジ)向上

    ・テスト量、範囲の増加
    手動では行えないテスト量、範囲によって高い網羅率を実現する

    ・定期的なテスト実施が可能
    プログラムによって一定期間ごとに実施するテストを設定することができる

  4. テスト結果進捗把握など管理工数を削減

    ・テスト結果の自動収集
    正確なテスト結果を自動収集することが可能となる

  5. 時間、環境による制約を排除

    ・時間による制約を排除
    人手のない夜間のテスト実行を実現する。またテストの並列実行も可能である。

    ・テスト環境の制約を排除
    専用のテスト環境を容易に使えるように設定し、開発環境とテスト環境を分離して開発を効率化する。また数の限られたテスト環境を複数人で共有可能となる

    ・リソースの共有を効率化
    テスト環境のリソース割り当て管理、変更管理、結果の共有などを効率化し、テスト環境の共有をより容易にする

テスト自動化を活用する範囲は、現場によって様々であり上記全てを当てはめることはできない。しかし、テスト自動化の適用できる範囲を事前に把握することで、問題解決や改善の糸口を見つけることができるだろう。

テスト自動化の課題

ここまでテスト自動化を夢の技術であるかのように紹介したが、本当にそうだとしたら日本のソフトウェア産業の多くがすでに導入しているはずである。しかし、メリットが多いのは理解していても、以下のようなデメリットを意識して多くの企業が未だ導入に踏み切れずにいる。

  1. 高い導入コスト

    テストツールには高価な製品も多い。もし導入したにも関わらず、利用頻度が低ければコストパフォーマンスは著しく悪くなるだろう。オープンソースのテストツールもあるが、当然機能や性能は有料の製品には劣る。またオープンソースのテストツールでだと製品サポートが受けられないというデメリットがある。

  2. テスト自動化のノウハウを持ったエンジニアが少ない

    テストツールを使いこなせるエンジニアは少ない。なぜなら参考となるような資料が少なく、ほぼ独学でテストツールの使い方を学ばなければならないからだ。習得やテストプログラムの作成にかかる時間を考えると、手動で行ったほうが早いということも多い。

  3. テストツールのメンテナンスに工数がかかる

    テスト対象であるプログラムの修正があれば、それに合わせてテストツールにも修正を加えなければならない。頻繁に修正が行われるようなプログラムであれば、テスト自動化に向いていないだろう。

  4. テストツールのプログラムにバグが発生した場合のリスク

    テストツール自体にバグが発生した場合、修正には時間を要する。テストが実行された後に気づいた場合には大きな手戻りが発生してしまう。

  5. 自動化できるかできないかの判断が難しい

    テスト支援ツールを導入したものの、活用できる範囲が少なく失敗してしまったということも起こりうる。またUIオブジェクトが認識できず、自動テストが行えなかったという事例もある。

このようにテスト自動化には課題が多く、導入を見送る企業は多い。また導入を決めた企業であっても、テスト自動化に対する理解が足りず、必要な人員・時間を用意することができないということもあるようだ。高い導入コストに見合った劇的な改善を見込んだところで、現実との乖離を生んでしまうのが現実だろう。

まとめ

テスト自動化が必要であるとわかっていながら、多くの企業が導入に踏み切れていないというのが現状である。しかし、手動でのテストのみを続ける企業と、テスト自動化を導入した企業の差は開くばかりだろう。ツールの導入と扱うエンジニアの育成を初期投資と捉えて、まずはスモールスタートからテスト支援ツールをぜひ導入していただきたい。

免責事項

情報の掲載には注意を払っておりますが、掲載された情報の内容の正確性については一切保証しません。また、当サイトに掲載された情報を利用・使用(閲覧、投稿、外部での再利用など全てを含む)するなどの行為に関連して生じたあらゆる損害等につきましても、理由の如何に関わらず自己責任で行う必要があります。