Skip to main content
QUICK REVIEW

[論文レビュー] TypeEvalPy: A Micro-benchmarking Framework for Python Type Inference Tools

Ashwin Prasad Shivarpatna Venkatesh, Samkutty Sabu|arXiv (Cornell University)|Dec 28, 2023
Software Engineering Research被引用数 4
ひとこと要約

TypeEvalPyは、Python型推論ツールを評価するための標準化されたマイクロベンチマークフレームワークであり、18のカテゴリにまたがる154のコードスニペットと845個の型注釈を備えています。ツールをコンテナ化し、出力を正規化し、正確一致率や精度などのメトリクスを用いてパフォーマンスを測定することで、ハイブリッド手法であるHiTyper-DLが純粋なML手法を上回ることを明らかにしましたが、整合性(soundness)は依然として限定的であり、最高のツールでも44%にとどまっています。

ABSTRACT

GitHub link: https://github.com/secure-software-engineering/TypeEvalPy A Micro-benchmarking Framework for Python Type Inference Tools 📌 Features: 📜 Contains 154 code snippets to test and benchmark. 🏷 Offers 845 type annotations across a diverse set of Python functionalities. 📂 Organized into 18 distinct categories targeting various Python features. 🚢 Seamlessly manages the execution of containerized tools. 🔄 Efficiently transforms inferred types into a standardized format. 📊 Automatically produces meaningful metrics for in-depth assessment and comparison. 🛠️ Supported Tools Supported ✅ In-progress 🔧 Planned 💡 HeaderGen Intellij PSI Llama 2 Jedi Pyre ChatGPT Pyright PySonar2 HiTyper Pytype Scalpel TypeT5 Type4Py 🏆 TypeEvalPy Leaderboard Below is a comparison showcasing exact matches across different tools, coupled with top_n predictions for ML-based tools. Rank 🛠️ Tool Top-n Function Return Type Function Parameter Type Local Variable Type Total 1 HeaderGen 1 186 56 322 564 2 Jedi 1 122 0 293 415 3 Pyright 1 100 8 297 405 4 HiTyper 135 163173175 273737 179225229 369435441 5 HiTyper (static) 1 141 7 102 250 6 Scalpel 1 155 32 6 193 7 Type4Py 135 39103109 193131 99167174 157301314 (Auto-generated based on the the analysis run on 20-10-23 14:51) 🐳 Running with Docker 1️⃣ Clone the repo git clone https://github.com/ashwinprasadme/TypeEvalPy.git 2️⃣ Build Docker image docker build -t typeevalpy . 3️⃣ Run TypeEvalPy 🕒 Takes about 30mins on first run to build Docker containers. 📂 Results will be generated in the results folder within the root directory of the repository. Each results folder will have a timestamp, allowing you to easily track and compare different runs. docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ./results:/app/results \ typeevalpy 🔧 Optionally, run analysis on specific tools: docker run \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ./results:/app/results \ typeevalpy --runners headergen scalpel 🛠️ Available options: headergen, pyright, scalpel, jedi, hityper, type4py, hityperdl

研究の動機と目的

  • Python型推論ツールのための統一的で再現可能な評価フレームワークの欠如に対処すること。
  • 入力、実行、出力形式を標準化することで、型推論ツール同士の直接的かつ公平な比較を可能にすること。
  • 多様なPython言語構文における最先端ツールの強みと限界を特定すること。
  • 外部の型スタブやハイブリッド手法が推論品質に与える影響を浮き彫りにすること。
  • 今後のPython型推論における整合性と完全性の向上に向けた基盤を提供すること。

提案手法

  • TypeEvalPyは、Python 3.10の18の言語機能をカバーする154のマイクロベンチマークを統合し、それぞれにターゲット型注釈を付与しています。
  • 型推論ツールをコンテナ化することで、隔離され再現可能な実行環境を確保しています。
  • 翻訳モジュールにより、ツールの出力を一貫した型フォーマットに正規化し、比較を容易にしています。
  • 正確一致率、精度、再現率、整合性といったキーメトリクスを計算することで、定量的評価を実施しています。
  • 純粋な静的解析と機械学習ベースのツールの両方をサポートしており、MLモデルのトップ-$n$予測も対応しています。
  • 具体的な推論エラーを診断できる詳細な不一致分析を可能にしています。たとえば、関数の呼び出し可能型の誤った推論がその例です。

実験結果

リサーチクエスチョン

  • RQ1さまざまなPython言語構文の包括的で標準化されたセットにおいて、異なる型推論ツールのパフォーマンスはどのようになるか?
  • RQ2外部型スタブやハイブリッド手法は、推論の正確性と完全性をどの程度向上させるのか?
  • RQ3なぜ最高性能のツールですら整合性が低く、型推論エラーの主な原因は何か?
  • RQ4静的解析と機械学習ベースのツールは、関数パラメーターやローカル変数といった複雑な構文をどのように処理するのか?
  • RQ5特に呼び出し可能型や関数参照に関して、型推論の主な失敗パターンは何か?

主な発見

  • HeaderGenは、すべての評価対象ツールの中で正確一致率、整合性、完全性の観点で最高のパフォーマンスを示しました。
  • PyrightとJediは、それぞれ2位と3位を占め、組み込み関数や外部ライブラリの処理において強く、安定した性能を発揮しました。
  • 深層学習と静的解析を組み合わせたハイブリッドモデルであるHiTyper-DLは、純粋なMLベースのType4Pyを上回りましたが、依然として44%の整合性にとどまりました。
  • HiTyper-DLの深層学習部は、154のテストケースのうちわずか15件の整合的結果を出しており、完全性が103のスニペット分低下しました。
  • JediとPyrightの両方とも、関数を引数として渡す際、呼び出し可能型を戻り値として誤って推論しており、それぞれ57件および18件の事例で繰り返し発生しました。
  • Type4Pyは、学習データに依存する性質と、見られないパターンへの一般化の不備により、特にクラスや例外の処理で性能を発揮できませんでした。

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

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

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

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