Skip to main content
QUICK REVIEW

[論文レビュー] White-Box and Black-Box Fuzzing for GraphQL APIs

Asma Belhadi, Man Zhang|arXiv (Cornell University)|Sep 13, 2022
Software Engineering Research被引用数 5
ひとこと要約

本稿では、白ボックスおよびブラックボックスのファジングを用いた、GraphQL APIの自動テストのための新規フレームワークを提示する。白ボックステストでは、コードカバレッジと障害検出を最大化するために進化型アルゴリズムを統合し、ブラックボックステストではランダムサーチを用いる。EvoMasterツールを用いて、7つのオープンソースおよび31のオンラインGraphQL APIにおいて、テストの有効性が顕著に向上することを実証した。

ABSTRACT

The Graph Query Language (GraphQL) is a powerful language for APIs manipulation in web services. It has been recently introduced as an alternative solution for addressing the limitations of RESTful APIs. This paper introduces an automated solution for GraphQL APIs testing. We present a full framework for automated APIs testing, from the schema extraction to test case generation. In addition, we consider two kinds of testing: white-box and black-box testing. The white-box testing is performed when the source code of the GraphQL API is available. Our approach is based on evolutionary search. Test cases are evolved to intelligently explore the solution space while maximizing code coverage and fault-finding criteria. The black-box testing does not require access to the source code of the GraphQL API. It is therefore of more general applicability, albeit it has worse performance. In this context, we use a random search to generate GraphQL data. The proposed framework is implemented and integrated into the open-source EvoMaster tool. With enabled white-box heuristics, i.e., white-box mode, experiments on 7 open-source GraphQL APIs show statistically significant improvement of the evolutionary approach compared to the baseline random search. In addition, experiments on 31 online GraphQL APIs reveal the ability of the black-box mode to detect real faults.

研究の動機と目的

  • GraphQL APIにおける自動テストソリューションの不足、特に白ボックスおよびブラックボックスの文脈において、その問題を解決すること。
  • スキーマの抽出とJUnitおよびJest形式の実行可能テストケースの生成を含む、フルスタックフレームワークの開発。
  • GraphQL APIにおける白ボックステストにおける進化型アルゴリズムとブラックボックステストにおけるランダムサーチの有効性の評価。
  • 実世界のオープンソースおよびオンラインGraphQL APIを対象に、障害検出およびカバレッジ向上の観点からフレームワークの有効性を検証すること。
  • EvoMasterツールに、ソースコードにアクセス可能な環境およびリモートAPIの両方を対象とした、GraphQL固有のテスト生成機能を拡張すること。

提案手法

  • フレームワークはGraphQLスキーマを抽出し、複数の遺伝子タイプを用いた遺伝的表現によるテスト可能な構造にモデル化する。
  • 白ボックステストでは、内部および構造的変異演算子を用いた進化型アルゴリズムが、コードカバレッジと障害検出を最大化するテストケースを進化させる。
  • ブラックボックステストでは、ソースコードにアクセスせずにスキーマのみに基づいて有効なGraphQLクエリをランダムサーチで生成する。
  • 本アプローチは、JUnitおよびJest形式の出力をサポートするオープンソースのEvoMasterツールへの拡張として実装されている。
  • フレームワークは、ネストされた関数呼び出しや再帰的データ構造を含む、複雑なスキーマ機能をサポートする。
  • 白ボックス評価における結果の信頼性を確保するため、統計的分析と、異なるランダムシードを用いた30回の繰り返し実行が実施された。

実験結果

リサーチクエスチョン

  • RQ1白ボックステストにおいて、進化型サーチがランダムサーチを上回るか、コードカバレッジおよび障害検出の観点で有効であるか?
  • RQ2ソースコードにアクセスできない状況でも、ブラックボックスのランダムテストが、本格的なGraphQL APIで実際の障害を効果的に発見できるか?
  • RQ3本フレームワークは、オープンソースおよびオンラインサービスを含む多様なGraphQL API実装において、どのようにスケーリングするか?
  • RQ4スキーマの分解と遺伝的演算子が、GraphQLテストにおけるテストケース生成の質に与える影響は何か?
  • RQ5EvoMasterフレームワークは、GraphQL APIにおける白ボックスおよびブラックボックステストの両方をサポートするように、どの程度拡張可能か?

主な発見

  • 白ボックステストにおいて、進化型アプローチは7つのオープンソースAPIにおいて、ランダムサーチと比較して平均ラインカバレッジを6%向上(最大26.9%まで)。
  • 白ボックスモードでは、7つのテストAPIで77件の追加障害を検出しており、優れた障害発見能力を示した。
  • ブラックボックステストでは、31のオンラインGraphQL APIにおいて、825のエンドポイントのうち最大641件でエラーを検出。
  • フレームワークはJUnitおよびJest形式の実行可能テストスイートを正常に生成し、CI/CDパイプラインへの統合を可能にした。
  • 結果は統計的に有意であり、各APIごとに30回の繰り返し実行により、ランダム初期化によるばらつきを低減し、信頼性を確保した。
  • フレームワークはEvoMasterへの拡張として公開されており、すべての実験用スクリプトとデータセットはGitHubおよびZenodoにホスティングされ、再現性が確保されている。

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

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

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

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