LIFULL Creators Blog

LIFULL Creators Blogとは、株式会社LIFULLの社員が記事を共有するブログです。自分の役立つ経験や知識を広めることで世界をもっとFULLにしていきます。

自動テストの効果測定に使われるEMTEとは?

こんにちは! LIFULLのSETエンジニアのRueyです!

今年の3月にISTQBの自動化エンジニア資格 CTAL-TAE(Advanced Level Test Automation Engineer)を取得しました。TAEの勉強で自動テストの効果を測るメトリクスが幾つかあることが分かりました。その中で工数を測るメトリクスをEMTE(Equivalent Manual Test Effort)単位で表現することが推奨されています。しかし、その時は説明を見てもこれに換算すれば何か嬉しいか分かりませんでした。

ちょうどある開発グループで自動テストを導入する案件がありましたので、実際のプロジェクトでメトリクスを計測し検証してみました。様々な知見が得られたので、今回はこの単位の紹介と使用例を紹介したいと思います。

目次

はじめに

SETチームはLIFULLにある他の開発チームの自動テスト導入支援を行っています。

支援メニューは以下のとおりです:

  • テストフレームワークの使い方紹介
  • テストケース作成のサポート
  • 自動テスト環境構築のサポート
  • 自動テスト実装のサポート
  • CI/CD構築のサポート
  • 自動テスト運用支援
  • 自動化関するその他の疑問の相談

今回は依頼案件で構築した自動テストを使って、メトリクスを実際に測定して検証してみたいと思います。

自動テストのメトリクス

ISTQB CTAL-TAEのシラバスでは、自動テストのモニタリング、効率、効果を測るためのメトリクスとして以下が紹介されています。(細かい説明はシラバスを参照してください)

  • External TAS metrics
    • Automation benefits
    • Effort to build automated tests ⬅︎ 今回使うメトリクス
    • Effort to analyze automated test incidents ⬅︎ 今回使うメトリクス
    • Effort to maintain automated tests ⬅︎ 今回使うメトリクス
    • Ratio of failures to defects
    • Time to execute automated tests
    • Number of automated test cases
    • Number of pass and fail results
    • Number of false-fail and false-pass results
    • Code coverage
  • Internal TAS metrics
    • Tool scripting metrics
    • Automation code defect density
    • Speed and efficiency of TAS components

補足: TAS(Test Automation Solution)は本文で「自動テスト」を表現しています。

数は多いので、今回は特定のメトリクスのみ取ってみます。

EMTEとは

EMTEはEquivalent Manual Test Effortの略で、 いわゆる自動テスト全ケースを全て手動で行う場合の工数です。工数を測るメトリクスの単位として推奨されています。

EMTEは時間の単位として扱います。

例:
自動テスト実行時間→30分
全ケースを手動で行った場合→180分
であったとすると、180分が1EMTEになります。

自動テスト実行時間をEMTEで表すと0.16 EMTEになります。

EMTEを使って表すことができるメトリクス

EMTEは工数関連のメトリクスに使われており、下記の三つになります

  • 自動テストの構築工数(Effort to build automated tests):
    自動テスト実行する環境構築、テストケース設計、テストケース実装などの初期コスト

  • 自動テストの結果分析工数 (Effort to analyze automated test incidents):
    自動テスト実行後の結果確認。Flakyのテストの再実行やデグレーションが発生しているとかの確認と分析などの運用コスト

  • 自動テストのメンテナンス工数 (Effort to maintain automated tests):
    自動テストのテストケースの修正やテストデータの整備などの運用コスト

これから支援案件で構築した自動テストについてこの三つのメトリクスを計測して、検証と分析したいと思います。

支援案件

概要

まだ自動テストがないTチームに自動システムテストフレームワークBuckyを使ったE2Eテストシステムの構築を提案し、テストケースの選定戦略やテストケースの作成などの支援、またはメンバーにE2Eテストの知識やメンテナンスの方法を教えていきます。最終目標はSETチームの支援なしで自動システムテストが運用・保守される状態を目指します。

自動テストの導入目的

テスト作業の効率化と工数の削減

テストを自動実行できれば手動で行っていたテスト工数を大幅削減できる。複雑なシナリオや準備に時間がかかってしまうテストも何度でも繰り返して実行することができます。

テスト作業におけるヒューマンエラーの排除

テスト作業の漏れや見落としを防ぎます。

品質の維持

障害になるとビジネスに多大な影響を及ぼす機能について継続的に自動回帰テストを実行することでソフトウェア(サイト)の品質を維持させます。
リリース前にデグレを発見することで、素早く、絶えずソフトウェア(サイト)を改善を行えます。

支援方法と内容

  1. 週定例を開催:
    ・定期的に相談できる窓口を作る
    ・構築状況の共有
    ・自動テスト知識の教育
    ・ペアプロでテストケース作成と実装

  2. システム構築:
    ・自動システムテストフレームワークBuckyの実行環境構築
    ・構成や実行方法などを教える
    ・CIとの連携設定

結果検証と分析

支援内容が無事に完了し、テストケースが自動で実行されています。 リリースフローにも自動システムテスト結果の確認する工程を組み込むことで必ずチェックされる仕組みになりました。

実行時間について:

  • 自動テスト実行時間は531s
  • 全ケースを手動で行う時間は5650s (1 EMTE = 5650s)

EMTEを使って表すことができるメトリクスを使って分析します:

メトリクス時間
自動テストの構築工数349200s
自動テストの結果分析工数1800s
自動テストのメンテナンス工数1800s

工数は時間を出しましたが、時間のみだと実際の効果が分かり辛い状態でした。

EMTEに換算する

1 EMTE = 5650s

実行時間を換算する

  • 自動テスト実行時間は0.094 EMTE
    計算式【 531 ÷ 5650 ≒ 0.094 】
  • 全ケースを手動で行う時間はもちろん1 EMTE

EMTEに変換したら、手動で実行する時の工数と相対的に比較できます。すぐに分かったことは二つあります。

  1. 自動テスト実行時間は0.094 EMTE、手動テストの0.094倍の時間となりかなり効果がある

  2. 一回の自動テスト実行は手動より0.906 EMTEの時間が節約ができる。

    計算式【 1- 0.094 = 0.906 】

節約された時間を他の開発やテストに充てられるので、自動テスト還元効果になります。

メトリクスを換算する

メトリクス計算式EMTE
自動テストの構築工数349200s (構築工数) ÷ 5650s (1EMTE)61.81
自動テストの結果分析工数1800s (結果分析工数) ÷ 5650s (1EMTE)0.32
自動テストのメンテナンス工数1800s (メンテナンス工数) ÷ 5650s (1EMTE)0.32

メトリクスから分かったことは、初期コストの自動テストの構築工数は一見自動テストを全て手動で行う場合の61倍大きい数字ですが、これは節約された時間で割ると68回の自動テストが運用されれば、構築工数が還元されることが分かります。毎日実行で考えたら、二ヶ月くらいの運用でプラス効果になると思います。

計算式:
【 自動テストの構築工数 ÷ 一度の自動テスト実行で節約できる工数 = 何回の自動テストで還元できるか 】
【 61.81 ÷ 0.906 ≒ 68.22 】

さらに運用コストも考慮した場合、自動テストの結果分析工数と自動テストのメンテナンス工数が毎回発生するとは限りませんが、仮に毎回両方発生しても節約時間を超えていないので、自動テストはマイナス効果が出ないと思います。

判定式:
【 一度の自動テスト実行で節約できる工数は結果分析工数とメンテナンス工数の和より大きいのか 】
【 0.906 > (0.32 + 0.32) → True 】

EMTE使う際の注意点

自動テストは実行すればするほど節約された時間として還元されますが、通常の運用以外の実行では還元されません。 例えば開発フローにおいて1リリースに対して1回自動テストを実行する運用(通常の運用)なら、この1回の実行が節約された時間として還元ができます。それ以外の再実行などは最初のテスト結果と同じなので、テスト自体の効果はなく節約された時間として還元できません。

参考記事: Automation benefit measured by EMTE - good or bad?

工数と節約の費用対効果

先の節約時間と還元を図にすると、費用対効果がより分かりやすく表示できます。

(仮で毎回発生)運用コスト + 初期コスト と 削減工数
f:id:LIFULL-rueyjye:20201007152427p:plain:w550
初期コストと運用コストを計算すると自動テストが233回運用されれば、工数が還元されます
初期コスト と 削減工数
f:id:LIFULL-rueyjye:20201007152446p:plain:w550
初期コストのみ計算すると自動テストが68回運用されれば、工数が還元されます

最後に

EMTEを実際に使ってみたら、自動テストの効果が分かりやすく伝えられることがわかりました。

自動テストはよく初期導入コスト、学習コスト、運用コスト、メンテナスコストが高いから導入しないことが多いですが、どのくらい高いのかはあまり具体に表現できないケースが多いです。それは普段の工数は時間で表現していますので、長いか短いのかが分からないためです。EMTEで換算すれば手動で実行する場合と相対的に比較できるので、実際に自動テストは消費した工数より、プラス効果になるのかがすぐ分かります。

もしくは何回分の実行で初期コストの還元の目標を立てて、自動テストの実行時間を逆算し、導入したい自動テストが目標時間に満たせるかの判断材料としても使えるかなと思います。

みなさんも是非EMTEをご活用していただければと思います。