テスト自動化の導入理由や効果測定をROIという観点で説明できるように、テスト自動化のROIの概念から実際の計算式までを解説する連載。今回は、ROI試算式の詳細を解説し、実際に、この試算式でスモークテストとGUIテストを自動化する際のROIを求め結果を考察します。
本連載では、読者の皆さまがテスト自動化の導入理由や効果の測定をROI(return on investment、投資利益率、投資収益率、投資回収率)という観点で説明できるように、テスト自動化のROIの概念から実際の計算式まで解説してきました。
連載第1回の「テスト自動化の3つの目的とROIの必要性、定義」では、テスト自動化のROIは下記のようにして求められることを解説しました。
ROI(t) = (手動テストを続けた場合の運用コスト(t) - 自動テストの運用コスト(t)) / (自動テストの初期開発コスト + 自動テストの運用コスト(t))
前回の「テスト自動化ROI試算式の構成要素と5つの例。そしてCBAとは何か」で『Cost Benefits Analysis of Test Automation』(Software Quality Methods, LLC./PDF/以下『CBAoTA』)にある下記の試算式を紹介しました。
ROI(t) = Δ手動テストに対するテスト自動化の利益 / Δ手動テスト対するテスト自動化のコスト = ΔB(t) / ΔC(t) ΔB(t) = Σ(自動テストによる固定費の削減分)(t) + Σ(n2回手動テストを実施した場合の変動費)(t) - Σ(n1回自動テストを実施した場合の変動費)(t) ΔC(t) = Σ(自動テストによる固定費の増加分)(t) + Σ(自動テストの開発費) - Σ(手動テストの開発費) + Σ(自動テストのメンテナンスコスト) (n1/N) n1 = 自動テストの実行回数 n2 = 手動テストの実行回数 N = メンテナンスが必要になるまでの自動テストの平均実行回数
今回は、この各要素を順に見ていきましょう。
「自動テストによる固定費の削減分」から説明します。まず、この「固定費」とは、「テスト計画」「テスト設計」など、「テストの実行回数に依存せず、なおかつ手動テストと自動テストの両方に発生する作業の固定費」という意味です。つまり「自動テストによる固定費の削減分」とは、この固定費が発生する作業を自動化することで得られた、固定費の削減分となります。
ただし、自動化によって必ず固定費を削減できるわけではありません。自動テストを行うために「テスト設計」を精緻化する必要があるなど、追加コストが必要になる場合もあります。その場合は、当然マイナスになります。
前回解説したように自動テストの場合、「テスト計画」「テスト設計」は手動テストより精緻化する必要があるため、自動化に移行する際に一時的にはコストは上昇します。しかしこのコスト上昇は、精緻化することによって発生する「プロセス改善効果」でコストを削減することで長期的には相殺されることが多いため、最初の試算では期間「t」内で合算して0にする場合が多いです。
手動テストと自動テストで実行回数を「n2」と「n1」で分けている理由は、通常、自動テストを実行する方が1回当たりのコストが少なく、かかる実行時間が短く、実行頻度が高まるためです。手動テストの場合、実行コストが高いため、テスト対象アプリケーションをビルドするごとにテストを実行するのは難しいですが、自動テストの場合、実行コストが低いため、頻度を上げて素早く、障害を検出できます。
注意しなければならないのは「N」のテストスクリプトの変更など「メンテナンスが必要になるまでの自動テストの平均実行回数」です。
自動テストのテストレベルやテストタイプにもよりますが、対象アプリケーションの画面要素やロジックが変化することでテストスクリプトの修正が必要になるため、最悪「N = 1」に、つまり「自動テストを実行するごとにメンテナンスコストが発生する」場合があります。
画面要素の変更に対して、Nの数値を上げるための技術としては、物理的な画面要素を論理名にマッピングする「オブジェクトマップ」があります。使うテストツールにも依存しますが、「オブジェクトマップ」では単純に物理要素を論理名にマッピングするだけではなく、物理要素の指定方法を複数の指定方法(HTMLであれば、idやname、classなど)で重み付けすることによって、画面要素に多少の変更があってもテストスクリプトはもちろんのこと、オブジェクトマップの変更も不要になります。
一方、「N」ごとのメンテナンスコストを下げるための技術としては、「ページオブジェクト」をはじめとする「テストスクリプトの構造化」「データ駆動化」「キーワード駆動テスト」などがあります(ROIがテーマなので、それぞれについてここでは詳しく解説しません)。
「自動テストによる固定費の増加分」は、テストツールのライセンスやサポートなど手動テストでは発生しない、自動テストを導入した場合のみのコストです。ライセンス期間やアップグレードのコストがあるため、時間「t」の関数になります。
「手動テストの開発費」は手動テストを続けた場合に掛かっていたであろうコストで、これをマイナスすることにより、手動テストに対する自動テストの相対的な初期投資を算出しています。
前回解説したように、固定費と変動費はさらに詳細な要素に分解することもできますが、「詳細に分解しない合算値からでも、ある程度妥当性があるものが出せる」と『CBAoTA』では述べています。筆者としても「まずは手動テストの単価計算に基づいた概算でもよいので、算出できる要素からROIを試算し、複数の施策を比較検討する」ことをお勧めします。
「スモークテスト」とは、ビルド後に実行する、テストを開始すべきかどうか判断するためのテストです。極力短い時間で重要な機能をテストするようにテスト範囲が絞り込まれています。
冒頭で紹介した式を使って、下記のような仮定でスモークテスト自動化のROIを求めてみましょう。
※以降の試算では、エンジニアのコストに関しては1カ月は20日、1日8時間労働としています。
■利益
ΔB(t) = Σ(自動テストによる固定費の削減分)(t) + Σ(n2回手動テストを実施した場合の変動費)(t) - Σ(n1回自動テストを実施した場合の変動費)(t)
Σ(自動テストによる固定費の削減分)(t) = なし Σ(n2回手動テストを実施した場合の変動費)(t) = 1時間当たりのエンジニア単価 * 手動テストの1日の実行時間 * 日数 Σ(n1回自動テストを実施した場合の変動費)(t) = 自動テストの実行コスト * 日数
具体的な値を代入すると、下記のようになります。
ΔB(6カ月) = 0 + (5,000 * 1 * 125) - (0 * 125) = 5,000 * 125 = 625,000(円) ΔB(18カ月) = 0 + (5,000 * 1 * 375) - (0 * 375) = 5,000 * 375 = 1,875,000(円)円
■コスト
ΔC(t) = Σ(自動テストによる固定費の増加分)(t) + Σ(自動テストの開発費) - Σ(手動テストの開発費) + Σ(自動テストのメンテナンスコスト) (n1/N)
Σ(自動テストによる固定費の増加分)(t) = 3年間のハードウェアのコスト * (経過年数 / 3) = 3年間のハードウェアのコスト * (経過月数 / 36) Σ(自動テストの開発費) = 自動テストの設計と実装の日数 * 1日当たりのエンジニア単価 Σ(手動テストの開発費) = 手動テストの設計と実装の日数 * 1日当たりのエンジニア単価 Σ(自動テストのメンテナンスコスト) = 1日当たりのエンジニア単価 * 自動テストの実行日数 / メンテナンスが必要になるまでの自動テストの平均実行回数
具体的な値を代入すると、下記のようになります。
ΔC(6カ月) = 100,000 * (6/36) + 15 * 40,000 - (5 * 40,000) + 40,000 * (125/25) = 616,666(円) ΔC(18カ月) = 100,000 * (18/36) + 15 * 40,000 - (5 * 40,000) + 40,000 * (375/25) = 1,050,000(円)
■ROI
ROI(t) = ΔB(t) / ΔC(t)
ROI(6カ月) = 625,000 / 616,666 = 1.013(→損益分岐点) ROI(18カ月) = 1,875,000 / 1,050,000 = 1.786(→80%リターン)
「手動テストの実行を外注している」と仮定し、下記のように条件を変更して再度ROIを求めてみましょう。
■利益
ΔB(6カ月) = 0 + (2,500 * 1 * 125) - (0 * 125) = 2,500 * 125 = 312,500(円) ΔB(18カ月) = 0 + (2,500 * 1 * 375) - (0 * 375) = 2,500 * 375 = 937,500円(円) ΔB(36カ月) = 0 + (2,500 * 1 * 750) - (0 * 375) = 2,500 * 750 = 1,875,500円(円)
■コスト
ΔC(6カ月) = 100,000 * (6/36) + 15 * 40,000 - (5 * 40,000) + 40,000 * (125/25) = 616,666 (円) ΔC(18カ月) = 100,000 * (18/36) + 15 * 40,000 - (5 * 40,000) + 40,000 * (375/25) = 1,050,000 (円) ΔC(36カ月) = 100,000 * (36/36) + 15 * 40,000 - (5 * 40,000) + 40,000 * (750/25) = 1,700,000 (円)
■ROI
ROI(6カ月) = 312,500 / 616,666 = 0.507(→投資期間) ROI(18カ月) = 937,500 / 1,050,000 = 0.89(→損益分岐点に達しない) ROI(36カ月) = 1,875,500 / 1,700,000 = 1.103(→11%リターン)
手動テストの実行コストが低い場合、自動化をしても、3年でようやく10%リターンとなります。
日本でなかなかテスト自動化が進まない理由は、「自動テストが適用可能な領域が限られている」ことが理由として挙げられることが多いです。
上記の結果から、「エンジニア単価の観点から、オフショアやニアショアなど他のコスト低減策と比べて、テスト自動化はROIが良くない場合がある」ことも、日本でなかなかテスト自動化が進まない理由の一つになることが分かります。
一方でエンジニア単価が高い米国では、「手動テスト、自動テストの区別にかかわらず、実行コストを下げるために、オフショアと自動テストのROI投資効率を比較して、結果として国内でのテスト自動化が選ばれる」と考えられます。
前回解説した「Risk Reduction ROI Method」のように欠陥対応コストを盛り込めば、ROIの試算値は向上しますが、実測値と大きく乖離(かいり)する場合があるので注意しましょう。
Copyright © ITmedia, Inc. All Rights Reserved.