Scalpelは、Python静的分析フレームワークです。専用問題の静的な解決に焦点を当てたクライアントアプリケーションの実装を促進するための必須のプログラム分析機能を提供します。
次のコマンドでPIPを使用してScalpelをインストールします
pip install python-scalpelあなたがこのプロジェクトに貢献できるならば、私たちはそれを高く評価します。発行レポートを送信するか、プルリクエストを直接追加して、お気軽にお気軽にお問い合わせください。私たちは次のように助けを得たいと思っています:
詳細なユーザーガイドは、python-scalpel.readthedocs.ioで見つけることができます。
Scalpelを、できるだけ多くの機能を含む一般的なPython静的分析フレームワークとして提供することを目指しています(例えば、機能間コントロールフローグラフを簡単に構築し、さまざまなPythonモジュールのインポート関係を解釈するなど)、開発者が専用の問題に焦点を当てた静的分析装置を実装するために促進します。次の図は、そのデザインの現在のアーキテクチャを示しています。

ScalpelのAPIドキュメントは、python-scalpel.readthedocs.ioで入手できます。
他の人に利益をもたらすことを期待して、Scalpelソースコードをリリースします。次の記事を引用して、ツールの使用法を認めるように頼まれます。
@article{li2022scalpel,
title={Scalpel: The Python Static Analysis Framework},
author={Li, Li and Wang, Jiawei and Quan, Haowei},
journal={arXiv preprint arXiv:2202.11840},
year={2022}
}
ScalpelはEuropython 2022で招待されます。Europythonは、地球上で最も古く、最も長く続いているボランティア主導のPythonプログラミング会議です。

このプロジェクトは、多くの既存の作品に触発されています。あなたの仕事がこのプロジェクトに登場しているが、まだ言及されていないと思われる場合は、いつでもお知らせください。
関数1:コードライター。コードライターモジュールは、既存のPythonプログラムの体系的な変更をサポートするための基本機能として設計されています。この機能の2つの予備的な使用法は、(1)より良い静的分析のためにプログラムを簡素化し、(2)問題のあるプログラムを最適化または修復することです。最初の使用法をサポートするために、一致したコードスニペットをどのように変換するかを示す一連のルールを含むデータベースをフレームワークに統合します。このデータベースは、Pythonプログラムの効果的な静的分析を達成するための複雑な簡素化要件を満たすために継続的に拡張する必要があります。 Soot(最も有名な静的Javaプログラム分析フレームワークの1つ)が提供する最適化メカニズムに触発された2番目の使用法をサポートするために、カスタマイズされたニーズに基づいてPythonコードを最適化するためにユーザーが書き直す専用のコールバックメソッドを備えた変換プロセスも設定します。
機能2:コントロールフローグラフ構造。コントロールフローグラフ(CFG)構造モジュールは、プログラムの最適化や汚染分析などのアプリケーションを使用した静的フロー分析に不可欠なコンポーネントである操縦内CFGを生成します。 CFGは、実行中にプログラムを通過する可能性のあるすべてのパスを表します。 PythonプロジェクトのCFGSをコールグラフと組み合わせて、プロジェクトの断続的なCFGを生成できます。
関数3:静的シングル割り当て(SSA)表現。静的な単一の割り当てモジュールは、コード分析のためにコンパイラレベルの中間表現(IR)を提供します。象徴的な実行だけでなく、一定の伝播にも使用できます。異なる名前で各変数割り当てを名前に変更することにより、明示的な使用法を取得することができます。したがって、プログラムのデータフローを正確に追跡できます。
関数4:エイリアス分析。変数は同じメモリの位置または同一の値を指すことができるため、エイリアス分析関数はそのような使用法をモデル化するように設計されています。この機能は、一定の伝播を聞くために不可欠です。さらに、エイリアス分析は、タイプチェックとAPI名の資格にもメリットがあります。
関数5:一定の伝播。一定の伝播モジュールは、ランタイム前に異なる実行パスで特定のプログラムポイントで変数の実際の値を評価します。実際の値が事前に知られているため、コードを最適化してバグを検出できます。一定の伝播は、SSAモジュールからの表現を利用して、単一の変数の各割り当てから値を記録することを維持します。
機能6:グラフ構造をインポートします。 Pythonでは、APIマッピングと依存関係分析にとって重要であると指摘されています。インポートグラフの構築は、同じプロジェクトのPythonモジュールファイル全体でこれらのインポート関係を表すデータ構造を提供することを目的としています。複数のPythonプロジェクトのインポートグラフを組み合わせて、ライブラリ間データフロー分析を実行できます。
関数7:完全に資格のある名前Inferrer。 Python APIまたは関数名は、インポート方法に応じてさまざまな方法で呼び出すことができます。ただし、これにより、API使用分析が不便になります。このモジュールでは、すべての関数呼び出し名を完全に資格のある名前に変換します。これは、トップレベルモジュールからオブジェクト自体までのパスを表すことができる点線の文字列です。非推奨API使用量の理解、依存関係の解析、サウンドコールグラフの構築など、さまざまなタスクがこの機能から恩恵を受けることができます。
機能8:グラフ構造を通話します。コールグラフは、ソフトウェアプログラムのメソッド間の関係を呼び出すことを示しています。これは、静的フロー分析の基本的なコンポーネントであり、プロファイリング、脆弱性の伝播、リファクタリングなどのタスクで活用できます。このモジュールは、指定されたPythonプロジェクトの正確なコールグラフを構築するために、高次関数やネストされた関数定義など、Pythonで採用された複雑な機能によってもたらされる課題に対処します。
関数9:推論を入力します。 Pythonは、動的にタイプされた言語として、従来の静的分析の全力を利用するのが難しいという問題に直面しています。このモジュールは、Pythonプログラム内の関数返信値と関数パラメーターを含むすべての変数のタイプ情報を使用して、Pythonでより洗練された静的分析を可能にします。高精度を達成するために、後方データフロー分析と一連のヒューリスティックルールを利用します。