1 第2回「じどうかの窓口。」セミナー ソフトウェアテスト自動化のROI 株式会社SHIFT コンサルタント 太田 健一郎
Jul 07, 2015
1
第2回「じどうかの窓口。」セミナー
ソフトウェアテスト自動化のROI
株式会社SHIFT コンサルタント 太田 健一郎
2
アジェンダ
• テスト自動化とROI
• テスト自動化のROIの構成要素
• ROIの試算式のバリエーション
• ROIの試算式の詳細と実際
3
対象とする方
• テスト自動化を推進する方
• テスト自動化の定性的な効果は理解しているが、定量的な説明がうまくできない方
4
本日お持ち帰り頂けること
• テスト自動化のROIを試算する際に検討すべき構成要素を列挙できるようになります
• プロジェクトや目的に応じて複数のROIの試算式を検討できるようになります
• 実際に自分のプロジェクトでもROIを試算できるようになります
5
本日お話しないこと
• ROIの試算とは直接関係ないテスト自動化のアンチパターンやベストプラクティス
• 特定のテストレベルやテストタイプに依存するROIの話題
• ROIを試算した後にテスト自動化を成功裏に導入するノウハウ
6
テスト自動化とROI
7
テスト自動化におけるROIの必要性
• テスト自動化における問題点
– https://sites.google.com/site/testautomationresearch/in
fo/testautomation_problem_DorothyGrahams_survey
– Q4. リソース不足• 自動化を計画できる時間が全く無い、あるいはかなり少ない 63%
• 自動化のトレーニングが計画されない 37%
• 自動化に掛かるコストが予算化されない 35%
– Q7. 自動テストシステム自体の品質が低い• 期待したROIに届かない 34%
8
テスト自動化におけるROIの必要性
• 世にある定性的な説明
– 変更毎にすぐに障害を検知できる
– 夜間にコストほぼゼロで無人実行できる
• もしくはツールベンダーの主張
– 三回実行すれば元が取れる
• →提案や予算を取るには説得力に欠ける
• →短期のリターンを求められ、炎上の可能性も高い
9
テスト自動化におけるROIの必要性
• いつリターンが得られるのか?
• どれほどのコストを掛けたらどれほどの利益が得られるのか?
• 他にもっと投資効率の良い代替策はないか?
• →ROIを試算して、複数の施策を比較検討する
10
テスト自動化の3つの目的とROIの関係 from TABOK
• コストの削減
– 繰り返し実行可能で再利用できる自動テストや、従業員の工数削減、欠陥の早期の発見と修正、再作業の削減によって長期間のコスト削減となる
• 効率の向上
– テスト実行時間とスケジュールの短縮によって、テストの効率を向上させる
• ソフトウェア品質の向上
– 対象のソフトウェアとハードウェアのテスト実行カバレッジを増加させることにより、リリース前の潜在欠陥のリスクとコストを低減する
11
テスト自動化の3つの目的とROIの関係 from TABOK
• 効率の向上 → コストの削減
• ソフトウェア品質の向上 → コスト削減
• 最終的に「コスト」の削減に還元できる
• →コストベースの定量評価に換算できる
• →ROIで評価できる
TABOK (Test Automation Body of Knowledge)テスト自動化の知識体系http://www.automatedtestinginstitute.com/home/index.php?option=com_content&view=article&id=1352&Itemid=189
12
テスト自動化におけるROIの定義
• 会計学上の定義– ROI = (当期営業利益 + 減価償却費) / (株主資本 + 有利子負債) * 100
• 抽象化した定義– ROI = 利益 / 投資額 * 100
• テスト自動化における定義
– ROI(t) = 利益(t) / 投資額(t) * 100
– 利益(t) = 手動テストを続けた場合の運用コスト(t) - 自動テストの運用コスト(t)
– 投資額(t) = 自動テストの初期開発コスト + 自動テストの運用コスト(t)
13
テスト自動化のROIの構成要素
14
テスト自動化の構成要素
自動テスト固有・共通 固定・変動
自動テスト固有のコスト テストの実行回数に非依存なコスト
テストの実行回数に比例するコスト
自動・手動テスト共通のコスト 両方で発生するが顕著な違いはないコスト
両方で発生するが違いがあるコスト
15
テストの実行回数に非依存なコスト (ただし、時間tには依存)
• ハードウェア (追加及びアップグレードも含む)
• 自動テストで使用するソフトウェア(テストウェア)のライセンス
• テストウェアのサポートコスト
• テストウェアの接続ライセンス
• 自動テスト環境の設計と実装
• 自動化環境のメンテナンス
• 自動化スクリプト作成ツール
• 自動テストツールと自動テスト環境のライセンス
• ツールのトレーニング
• ツールの導入とアップデート
16
テストの実行回数に比例するコスト
• 自動テストのためのテスト設計
• 自動テストのテストケースの実装
• 自動テストのメンテナンス
• テストオラクルの作成
• 自動テストの実行
• テスト結果の分析
• 障害報告
• テスト実行の報告
17
手動・自動テストの両方で発生するが顕著な違いがないコスト
• テスト対象の分析
• テスト計画
• 基本テスト設計
• 手動テストも含めた障害報告
• テスト結果のマネジメント向け報告
18
手動・自動テストの両方で発生するが違いがあるコスト
• テスト環境のメンテナンス
– 自動化によってトータルコストが上昇する場合もある
• テスト実行
• テスト結果の分析
• 障害報告
• テスト結果の報告
• テストデータの生成
19
実際の試算では
• テストの実行回数に非依存なコスト
– ハードウェア、ソフトウェア・ライセンスなど明確に価格が分かるものはコストとして積み上げる
• テストの実行回数に比例するコスト
– 厳密にタスク分解してコストが積み上げられるならば、タスク毎にコストを積み上げる
– 厳密なタスク分解とコスト割り当てが難しければ、概算であれば人月単価から始めても問題ない• 同じ構成要素と基準で施策を比較検討する方が重要
20
ROIの試算式のバリエーション
21
TABOKの3つの試算式
22
TABOKの3つの試算式
• Simple ROI Method
• Efficiency ROI Method
• Risk Reduction ROI Method
23
Simple ROI Method
– 式• ROI(t) = (手動テストを続けた場合の運用コスト(t) - 自動テストの初期開発コスト - 自動テストの運用コスト(t)) / (自動テストの初期開発コスト +
自動テストの運用コスト(t))
– メリット• 金額ベースで積み上げていくためにROIの試算の内訳についてマネジメント層とコミュニケーションが取りやすい
– デメリット• テストエンジニアの単価が明確ではない場合、適用出来ない
• 余りに計算を単純化しすぎている
• テスト自動化によりプロジェクトの予算を圧縮できるように見える
24
Efficiency ROI Method
• 式
– ROI(t) = (手動テストを続けた場合の運用工数(t) - 自動テストの初期開発工数 - 自動テストの運用工数(t)) / (自動テストの初期開発工数 + 自動テストの運用工数(t))
• メリット
– 金額の削減のみに注力することを避けられる
– テストエンジニアの単価が明確でなくても、適用出来る
• デメリット
– 金額とテストエンジニアの単価の問題以外は Simple ROI
Method と同様の問題を抱える
25
Risk Reduction ROI Method
• 式– ROI(t) = (欠陥コストの差分(t) + 手動テストを続けた場合の運用コスト(t) -
自動テストの初期開発コスト - 自動テストの運用コスト(t)) / (自動テストの初期開発コスト + 自動テストの運用コスト(t))
• メリット– 手動テストと自動テストの単純なコスト比較ではないテスト自動化の効果を
ROIに盛り込める
• デメリット– 欠陥コストの低減を正確に見積もるのは難しい
– テストカバレッジやテストタイプの増加は手動テストのままでも実施できるため、テスト自動化をROI向上の理由として訴求しにくくなる
26
ROIとCBA
• 外部性
– どこまでを内部とするか?• プロジェクト、部門、会社、取引先
• 変動要素
– メンバーの成熟度と入れ替わり、ツールの変更
– メンバーの生産性が上記により変動
• CBA (Cost Benefit Analysis, 費用便益分析)
– 事業の社会貢献度を分析する手法• 主として公共公益事業で用いられている
• 公害対策など企業単独のROIを追求した場合の問題に対応
• 外部性と変動要素を考慮
27
Cost Benefits Analysis of Test Automationの試算式
28
Cost Benefits Analysis of Test Automationの試算式
• 式– ROI(t) = Δ手動テストに対するテスト自動化の利益 / Δ手動テストに対するテスト自動化のコスト = ΔB(t) / ΔC(t)
– ΔB(t) = Σ(自動テストによる固定費の改善)(t) + Σ(n2回手動テストを実施した場合の変動費)(t) - Σ(n1回自動テストを実施した場合の変動費)(t)
– ΔC(t) = Σ(自動テストによる固定費の増加)(t) + Σ(自動テストの開発費) - Σ(
手動テストの開発費) + Σ(自動テストのメンテナンスコスト) (n1/N)
• n1 = 自動テストの実行回数
• n2 = 手動テストの実行回数
• N = メンテナンスが必要になるまでの自動テストの平均実行回数
29
ROIの試算式の詳細と実際
30
各要素の解説
• 自動テストによる固定費の改善
– テストの実行回数に依存しないテスト計画やテスト設計など、手動テストと自動テストで共通に発生するコストで改善された差分
– 通常は大きな変動がない、もしくは、一時的なコスト上昇が改善効果で相殺されるために、0になることが多い
• n1 = 自動テストの実行回数
• n2 = 手動テストの実行回数
– 実行頻度とそれに伴い発生する各コストを考慮
– 従量課金の環境で自動テストを実施する場合、自動テストでも実行の変動費がかかる
31
各要素の解説
• N = メンテナンスが必要になるまでの自動テストの平均実行回数– スクリプトのメンテナンスコストに影響を与える
– オブジェクトマップなどの技術によって頻度を下げることができる
– スクリプトの構造化、データ駆動などは頻度毎のメンテナンスコストを下げる
• 自動テストによる固定費の増加
– テストツールのライセンスなど自動テスト固有のもの
• 手動テストの開発費
– 手動テストに対する自動テストの相対的な初期投資を算出するために、マイナスする
32
スモークテストの自動化でのROIの試算
33
状況設定
• 1日に1回ビルドを実施し、テストを実行 (週に5回)
• 手動テストでは設計に5日、実行に2時間かかる
• 手動テストは半分のみを1日1時間で実行し、残り半分を次の日に1時間実行する(ビルド毎には半分しか実行しない)
• 自動テストは設計と実装に15日かかり、実行はオンプレミスの自動であるため、コストゼロとする
• 自動テストには10万円の追加ハードウェアが必要で、減価償却期間は3年とする
• 自動テストは25回の実行に1回、1日のメンテナンスが必要となる
• 試算対象期間tとしては6ヶ月(125日)と18ヶ月(375日)を選ぶ
• 手動テスト、自動テストのいずれのエンジニアの単価も80万円/月、960万円/年、4万円/日、5,000円/時とする
34
ROIの試算
• ΔB(t) = Σ(自動テストによる固定費の改善)(t) + Σ(n2回手動テストを実施した場合の変動費)(t) - Σ(n1回自動テストを実施した場合の変動費)(t)
– ΔB(6ヶ月) = 0 + (1時間 * 125) - (0 * 125) = 5,000 * 125 = 625,000 (円)
– ΔB(18ヶ月) = 0 + (1時間 * 375) - (0 * 375) = 5,000 * 375 = 1,875,000円 (円)
• ΔC(t) = Σ(自動テストによる固定費の増加)(t) + Σ(自動テストの開発費) - Σ(手動テストの開発費) + Σ(自動テストのメンテナンスコスト) (n1/N)
– Δ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(6ヶ月) = 625,000 / 616,666 = 1.013 (損益分岐点)
• ROI(18ヶ月) = 1,875,000 / 1,050,000 = 1.786 (80%リターン)
35
状況設定を変更
• 現在スモークテストの手動テストは外部ベンダーに外注している
– 手動テストの設計と自動テスト設計・実装のエンジニアの単価は80万円/月、960万円/年、4万円/日、5,000円/時のままとする
– 手動テストの実行エンジニアの単価を40万円/月、480万円/年、2万円/日、2,500円/時に変更する
– 試算対象期間tとしては36ヶ月(750日)を追加する
36
再度ROI試算
• ΔB(6ヶ月) = 0 + (1時間 * 125) - (0 * 125) = 2,500 * 125 = 312,500 (円)
• ΔB(18ヶ月) = 0 + (1時間 * 375) - (0 * 375) = 2,500 * 375 = 937,500円 (円)
• ΔB(36ヶ月) = 0 + (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(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 (10%リターン)
37
GUIテストの自動化でのROIの試算
38
状況設定
• 新規のソフトウェアでテストも一から作成する
• 手動テストの開発には5人/年、自動テストの開発には15人/年かかる
• 自動テストでは1年後に1人/年のメンテナンスが発生する
• 手動テストの実行では10人/年のフルタイムのメンバーが、自動テストでは1人/年のメンバーが必要となる
• 自動テストには900万円の固定費が減価償却3年で必要となる
• 試算対象期間tとしては12ヶ月(250日)と24ヶ月(500日)を選ぶ
• 手動テスト、自動テストのいずれのエンジニアの単価も80万円/月、960万円/年、4万円/日、5,000円/時とする
39
ROIの試算
• ΔB(t) = Σ(自動テストによる固定費の改善)(t) + Σ(n2回手動テストを実施した場合の変動費)(t) - Σ(n1回自動テストを実施した場合の変動費)(t)– ΔB(12ヶ月) = 0 + (10人 * 9,600,000) - (1人 * 9,600,000) = 86,400,000 (円)
– ΔB(24ヶ月) = 0 + (10人 * 9,600,000 * 2) - (1人 * 9,600,000 * 2) = 172,800,000 (円)
• ΔC(t) = Σ(自動テストによる固定費の増加)(t) + Σ(自動テストの開発費) - Σ(手動テストの開発費) + Σ(自動テストのメンテナンスコスト) (n1/N)– ΔC(12ヶ月) = (9,000,000 * (1/3)) + (15 * 9,600,000) - (5 * 9,600,000) + 0 = 99,000,000 (円)
– ΔC(24ヶ月) = (9,000,000 * (2/3)) + (15 * 9,600,000) - (5 * 9,600,000) + 9,600,000 = 111,600,000 (円)
• ROI(12ヶ月) = 86,400,000 / 99,000,000 = 0.873 (損益分岐点に達しない)
• ROI(24ヶ月) = 172,800,000 / 111,600,000 = 1.548 (55%リターン)
40
状況設定を変更
• 手動テストの設計のエンジニアの単価は80万円/月、960万円/年、4万円/日、5,000円/
時のままとする
• スモークテストの時よりも自動テストの設計・実装に高いスキルが必要になると仮定し、自動テストのエンジニアの単価は100万円/月、1200万円/年、5万円/日、6250円/時に変更する
• スモークテストの時よりも手動テストの実行と分析、報告に高いスキルが必要になると仮定し、手動テストの実行エンジニアの単価を60万円/月、720万円/年、3万円/日、3750円/時に変更する
• 自動テストではオープンソースの無料ツールを使い、ソフトウェアのコストはかからないように変更する。ただし、商用ツールと同等の機能を一部作り込む必要があり、そのコスト上昇分は自動テストのエンジニアの単価上昇に含まれている
• 自動テストには実行ハードウェア分の90万円の固定費が減価償却3年で必要となる
• 試算対象期間 t としては36ヶ月(750日)を追加する
41
再度ROI試算
• ΔB(12ヶ月) = 0 + (10人 * 7,200,000) - (1人 * 9,600,000) = 62,400,000 (円)
• ΔB(24ヶ月) = 0 + (10人 * 7,200,000 * 2) - (1人 * 9,600,000 * 2) = 124,800,000 (円)
• ΔB(36ヶ月) = 0 + (10人 * 7,200,000 * 3) - (1人 * 9,600,000 * 3) = 187,200,000 (円)
• ΔC(12ヶ月) = (900,000 * (1/3)) + (15 * 120,000,000) - (5 * 9,600,000) + 0 =
132,300,000 (円)
• ΔC(24ヶ月) = (900,000 * (2/3)) + (15 * 120,000,000) - (5 * 9,600,000) + 9,600,000 =
142,200,000 (円)
• ΔC(36ヶ月) = (900,000 * (3/3)) + (15 * 120,000,000) - (5 * 9,600,000) + 9,600,000 =
142,500,000 (円)
• ROI(12ヶ月) = 62,400,000 / 132300,000 = 0.472 (投資期間)
• ROI(24ヶ月) = 124,800,000 / 142,200,000 = 0.878 (損益分岐点に達しない)
• ROI(36ヶ月) = 187,200,000 / 142,500,000 = 1.317 (32%リターン)
42
ROIの試算からのフィードバック
• テスト自動化以外の別の施策もROI分析してみる
– 手動テストでの改善• ニアショア化
• オフショア化
• 既存オペレーションの改善
– テスト自動化内でも施策を変更• 自動化対象のテストレベル・テストタイプを変更
• 商用ツールからOSS
• オンプレミスからクラウド
– 一度、試算式を確立できれば比較検討は容易
43
まとめ
• テスト自動化のROIの試算に必要な構成要素をお話しました
– 厳密に要素分解できない場合、例のように人月単価から始めても問題ありません
• 複数の試算式をお話しました
– 状況と目的に応じて使い分けますが、施策を比較検討する場合には同一の試算式を使うようにします
• 試算の例を紹介しました
– 皆様のテスト自動化の検討でも是非使ってみて下さい
44
さらに詳しく
• @IT テスト自動化のROIを計算してみよう
– 全三回の連載
– 第1回• http://www.atmarkit.co.jp/ait/articles/1406/03/news152.html
– 本日のお話をより詳しく、順を追って解説する連載です
45
参考文献
• テスト自動化における問題点– https://sites.google.com/site/testautomationresearch/info/testaut
omation_problem_DorothyGrahams_survey
• TABOK (Test Automation Body of Knowledge)
– http://www.automatedtestinginstitute.com/home/index.php?optio
n=com_content&view=article&id=1352&Itemid=189
• The Return on Investment (ROI) of Test Automation
– http://www.arcondis.com/assets/files/pdf/publikationen/ROI%20o
f%20Test%20Automation.pdf
• Cost Benefits Analysis of Test Automation
– http://www.softwarequalitymethods.com/papers/star99%20model%
20paper.pdf