Skip to main content
QUICK REVIEW

[論文レビュー] Mimicking Production Behavior with Generated Mocks

Deepika Tiwari, Martin Monperrus|arXiv (Cornell University)|Aug 2, 2022
Software Engineering Research被引用数 5
ひとこと要約

本稿では、本番実行をモニタリングすることで、モックベースのオラクルを用いて現実的なユニットテストを生成するオープンソースツール rick を提案する。対象メソッドをインストルメントし、入力、戻り値、相互作用を含む文脈データを収集し、本番環境の挙動を模倣する実行可能テストを生成する。本番環境の完全な実行文脈を52.4%の成功率で再現した。

ABSTRACT

Mocking allows testing program units in isolation. A developer who writes tests with mocks faces two challenges: design realistic interactions between a unit and its environment; and understand the expected impact of these interactions on the behavior of the unit. In this paper, we propose to monitor an application in production to generate tests that mimic realistic execution scenarios through mocks. Our approach operates in three phases. First, we instrument a set of target methods for which we want to generate tests, as well as the methods that they invoke, which we refer to as mockable method calls. Second, in production, we collect data about the context in which target methods are invoked, as well as the parameters and the returned value for each mockable method call. Third, offline, we analyze the production data to generate test cases with realistic inputs and mock interactions. The approach is automated and implemented in an open-source tool called RICK. We evaluate our approach with three real-world, open-source Java applications. RICK monitors the invocation of 128 methods in production across the three applications and captures their behavior. Based on this captured data, RICK generates test cases that include realistic initial states and test inputs, as well as mocks and stubs. All the generated test cases are executable, and 52.4% of them successfully mimic the complete execution context of the target methods observed in production. The mock-based oracles are also effective at detecting regressions within the target methods, complementing each other in their fault-finding ability. We interview 5 developers from the industry who confirm the relevance of using production observations to design mocks and stubs. Our experimental findings clearly demonstrate the feasibility and added value of generating mocks from production interactions.

研究の動機と目的

  • ユニットテストのための現実的なモックやテスト入力を生成する課題に対処すること。これらはしばしば本番システムの挙動ではなく、仮定に基づいて設計される。
  • 合成的または手動で設計されたモックの限界を克服すること。これらは実際の本番環境での相互作用を反映していない可能性がある。
  • 外部依存関係との相互作用を検証するためのオラクルを生成するために、実世界の実行データを活用し、テストの有効性を向上させること。
  • 開発者が本番環境で観察した実際の文脈と挙動を保持する、自動化された実行可能テスト生成を可能にすること。
  • 開発者に、実際の使用パターンを反映するテストケースを提供することで、レグレッション検出とテストの保守性を向上させること。

提案手法

  • 本番環境で対象メソッドおよびその依存関係(モック可能なメソッド呼び出し)をインストルメントし、実行時データ収集を実施する。
  • 本番実行中に、メソッドパラメータ、戻り値、呼び出し順序などの文脈データをモニタリングおよびログ記録する。
  • オフラインで収集されたデータを分析し、現実的な初期状態、入力、スタブ化されたモックを備えたテストケースを生成する。
  • 出力オラクル(OO)、パラメータオラクル(PO)、コール順序オラクル(CO)の3種類のモックベースのオラクルを構築し、相互作用を検証する。
  • 本番環境からの複雑なオブジェクト状態をシリアル化し、ユニットテストで現実的なテスト環境を再現する。
  • オープンソースの rick ツールを用いて、インストルメントからテスト生成に至るパイプラインを自動化する。

実験結果

リサーチクエスチョン

  • RQ1RQ1: rick は、観察された本番環境挙動を実行可能なテストケースに成功して変換できるか?
  • RQ2RQ2: 収集された本番環境データは、生成されたテストにおいて現実的な入力、モック、オラクルとしてどの程度表現可能か?
  • RQ3RQ3: 生成されたテストは、本番環境で観察された完全な実行文脈をどの程度正確に再現できるか?
  • RQ4RQ4: 3つのモックベースのオラクル(OO, PO, CO)は、レグレッション検出においてどの程度有効であり、互いに補完的か?
  • RQ5RQ5: 専門的な開発者にとって、生成されたテストおよびオラクルは関連性があり、理解しやすいと評価されるか?

主な発見

  • rick は、3つの実世界のオープンソースJavaアプリケーションにおける128の対象メソッドに対して、合計294のテストケースを生成した。
  • 生成されたテストの52.4%が、現実的な入力、モック、オラクルを含む、本番環境で観察された完全な実行文脈を成功裏に模倣した。
  • 出力(OO)、パラメータ(PO)、コール順序(CO)の3つのモックベースのオラクルは、対象メソッド内のレグレッション検出において互いに補完的であることが分かった。
  • 5名の専門的な開発者による定性的なアンケート調査で、生成されたテストは関連性があり、理解しやすいと評価された。
  • 本手法により、本番環境挙動から直接導かれる明示的なオラクルを備えた、自動生成された実行可能テストの作成が可能になった。これは、暗黙のオラクルに依存するキャプチャ&リプレイ手法とは異なり、より明確である。
  • 本研究は、本番環境データから隔離され、現実的なユニットテストを生成する可能性を示した。これにより、開発者の仮定と実際のシステム挙動の間のギャップを埋めることを可能にした。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。