ナレッジ
【連載】なにそれ?あなたの知らないテストの言葉(第3回):メタモルフィックテスティング(Metamorphic Testing)

マンガ連載:メタモルフィックテスティング(Metamorphic Testing)とは

解説:メタモルフィックテスティング(Metamorphic Testing)とは
このマンガ連載では普段目にすることが少ない「なにそれ」という用語をピックアップして解説します。
第3回は「メタモルフィックテスティング(Metamorphic Testing)です。他の用語と併せて日本語ではメタモルフィックテストとした方がよいかもしれませんが、現状はメタモルフィックテスティングの名称が一般的です。
メタモルフィックテスティングは、期待結果が正しいのか判定する方法(テストオラクル)がない場合に有効な手法として提案されました。
通常のテストでは期待結果を用意して合否を判定します。しかしAIの出力など、期待結果を知ることが難しい場合があります。その場合に、入力に変化を加えた際の出力の変化との関係性を疑似的なテストオラクルとしてテストの合否を判定します。
具体例を挙げます。
例えば、写真に何かの動物が写っていたとします。この動物の写真をAIモデルに通すとその動物の名前Xを出力します。しかし、その名前Xが本当にその写真に写っている動物で正しいのか分かりません。この場合に先ほど使った同じ写真にノイズを加えてAIモデルに通したら何が出力されるでしょうか? 同じ写真にノイズを加えただけなので名前Xが出力されるはずです。名前Yが出力された場合、処理に問題がある、該当の動物の学習データが不足しているといったシステムの「欠陥」を発見することができます。
しかし、この例のように欠陥の発見はできますが、名前Xが本当にその写真に写る動物の名前なのかは判定できないことに注意が必要です。よってメタモルフィックテスティングは「正解を当てる」テストではなく「問題を発見する」ことにフォーカスした手法と言えます。
先ほどの例では「入力データxをシステムに通したときの出力をyとしたとき、ノイズを加えた入力データx’をシステムに通したときの出力データy’は y = y’の関係が成り立つ」ということが言えます。この関係をメタモルフィック関係と言います。
メタモルフィックテスティングのメリット
テストオラクルがなくても欠陥を見つけられる可能性がある
これが、先に述べた通りメタモルフィックテスティングの一番の特徴です。先ほどの例で言うと、動物の名前Xを知ることなくシステムの欠陥を発見できる可能性があります。
メタモルフィック関係を定義できれば、既存のテストケースから別のパターンのテストケースを作ることができる
動物の名前を出力するAIシステムで、ある画像をシステムに通したときの出力yと写真を90度回転させたときの出力y’が得られy = y’だったとします。AIの出力は同値分割の考えはできず(入力が変わると同一のニューロンを通らないため)、90度回転させたときと180度回転させたときで違う出力である場合があります。よってこのテストケースから派生させて、180度回転させたとき、270度回転させたときといったテストケースを作ることができます。
画像の回転角度 | 入力画像の例 | AIの出力(動物名) |
0度(元画像) | 🐱(正面の猫) | 動物X |
90度回転 | ↪️🐱(横向きの猫) | 動物X |
180度回転 | 🔄🐱(逆さまのXに見える) | 動物X |
270度回転 | ↩️🐱(Xのように見える) | 動物X |
メタモルフィック関係を定義できれば、テストの自動化がしやすい
動物の名前を出力するAIシステムで、10万種の動物の写真に対するテストをするとします。この際に写真にノイズを加えても同じ名前が出力されるというメタモルフィック関係があります。このメタモルフィック関係に沿って自動的に入力データを作成し、出力の比較を行うことができます。そこで23,456枚目の動物の写真でメタモルフィック関係が成り立たない結果が得られた場合、その動物の結果がロバストではないことが分かります。学習データが不足している可能性の問題を発見することもできます。また、問題があった写真群に対して別のテストを行うといったアプローチも可能となります。
比較項目 | 元画像 | ノイズを加えた画像(23,456枚目) |
入力画像 | 正常な動物の写真(例:動物A) | 少しノイズが加えられた写真 |
AIの出力 | 「動物A」 | ❗「動物B」 |
結果 | ✅ 正常 | ⚠️ 出力が変化(ロバストでない) |
メタモルフィックテスティングのデメリット
テストがPassだからといって、結果が正しい証明にはならない
メタモルフィック関係「写真を90度回転させても同じ名前が出力される」でテストをしていたとします。その写真にモモンガが写っているのに出力がリスだったとしましょう。その写真を90度回転させたときの出力もリスだったとします。この場合、回転前と回転後の出力が一致するためメタモルフィック関係を満たします。よってテスト結果はPassとなります。
このようにメタモルフィックテスティングは、結果が本当に意図した結果であるかは判定しないため注意が必要です。
メタモルフィック関係を定義すること自体が難しい
メタモルフィック関係は、入力に変化を加えたときの出力の変化に一貫性が必要です。例えば、商品のオススメで、作者Aのみの検索履歴だったときオススメは作者Aの作品ばかりだったとします。よって作者Bのみの検索履歴だった場合にオススメが作者Bの作品ばかりになるかというと、そうではない可能性があります。作者Bの作品を買うユーザーが一緒に作者Cの作品を買う場合、どちらも表示される可能性もあります。これはシステムや学習データに依存します。メタモルフィック関係を定義する際は開発者や有識者を交えて定義することをお勧めします。
新人さんからわかるソフトウェアテスト解説マンガやYouTubeチャンネルも公開中です。
よろしければこちらもご覧ください。
この記事は面白かったですか?
今後の改善の参考にさせていただきます!






















































-portrait.webp)































