Skalpell ist ein statisches Python -Rahmen. Es bietet wesentliche Programmanalysefunktionen für die Erleichterung der Implementierung von Kundenanwendungen, die sich auf die statisch gelöste Behebung dedizierter Probleme konzentrieren.
Installieren Sie Skalpell mit PIP mit dem folgenden Befehl
pip install python-scalpelWir werden es sehr schätzen, wenn Sie zu diesem Projekt beitragen können. Bitte zögern Sie nicht, indem Sie Ausgabenberichte einreichen oder direkt Pull -Anfragen hinzufügen. Wir hoffen, Hilfe für:
Detaillierte Benutzerführer finden Sie unter python-scalpel.readthedocs.io.
Wir wollen Skalpell als generisches statisches Python-Framework zur Verfügung stellen, das so viele Funktionen wie möglich (z. B. zum Aufbau von Kontroll-Flow-Diagramme zwischen Funktionen, um die Importbeziehung verschiedener Python-Module usw. zu interpretieren, um Entwickler zu interpretieren, um ihre dedizierten problemorientierten statischen Analyseer zu implementieren. Die folgende Abbildung zeigt die aktuelle Architektur ihres Designs.

Die API-Dokumentation des Skalpels ist unter python-scalpel.readthedocs.io verfügbar.
Wir veröffentlichen den Skalpell -Quellcode in der Hoffnung, anderen zugute kommen. Sie werden freundlicherweise gebeten, die Verwendung des Tools zu bestätigen, indem Sie den folgenden Artikel zitieren:
@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}
}
Das Skalpell ist eingeladen, bei Europython 2022 präsentiert zu werden. Europython ist die älteste und am längsten laufende, von Python-Programmierkonferenzen auf dem Planeten geführte Python-Programmkonferenz!

Dieses Projekt wurde von vielen bestehenden Werken inspiriert. Wenn Sie der Meinung sind, dass Ihre Arbeit in diesem Projekt angezeigt wird, aber noch nicht erwähnt wurde, teilen Sie uns dies bitte mit irgendeiner Weise mit.
Funktion 1: Code -Rewriter. Das Code -Rewriter -Modul ist als grundlegende Funktion für die Unterstützung systematischer Änderungen in vorhandenen Python -Programmen konzipiert. Zwei vorläufige Verwendungen dieser Funktion bestehen darin, (1) die Programme für eine bessere statische Analyse zu vereinfachen und problematische Programme zu optimieren oder zu reparieren. Für die Unterstützung der ersten Nutzung integrieren wir eine Datenbank in das Framework, einschließlich einer Reihe von Regeln, in denen angegeben ist, wie übereinstimmende Code -Snippets transformiert werden sollten. Diese Datenbank sollte kontinuierlich erweitert werden, um die komplizierten Vereinfachungsanforderungen für eine effektive statische Analyse von Python -Programmen zu erfüllen. Um die zweite Verwendung zu unterstützen, inspiriert von dem von Soot bereitgestellten Optimierungsmechanismus (eines der bekanntesten statischen Java -Programmanalyse -Frameworks), richten wir auch einen Transformationsprozess mit dedizierten Rückrufmethoden ein, die von Benutzern umgeschrieben werden sollen, um den Python -Code basierend auf ihren individuellen Anforderungen zu optimieren.
Funktion 2: Control-Flow Graph Construction. Das Konstruktionsmodul (Control-Flow Graph) erzeugt intra-procedurale CFGs, eine wesentliche Komponente in der statischen Durchflussanalyse mit Anwendungen wie Programmoptimierung und Meldeanalyse. Ein CFG repräsentiert alle Pfade, die während seiner Ausführung durch ein Programm durchquert werden könnten. Die CFGs eines Python-Projekts können mit dem Anrufdiagramm kombiniert werden, um ein interprozedurales CFG des Projekts zu generieren.
Funktion 3: SSA -Darstellung der statischen Einzelzuweisung. Das statische Einzelzuweisungsmodul bietet Intermediate-Darstellungen auf Compiler-Ebene (IR) für die Codeanalyse. Es kann nicht nur für die symbolische Ausführung, sondern auch für die konstante Ausbreitung verwendet werden. Durch die Umbenennung jeder variablen Zuordnung mit unterschiedlichen Namen können wir explizite Anwendungsketten erhalten und so genau verfolgen, wie der Daten im Programm fließt.
Funktion 4: Alias -Analyse. Da Variablen auf denselben Speicherort oder identischen Werten hinweisen können, ist die Alias -Analysefunktion so ausgelegt, dass sie solche Verwendungen modellieren. Diese Funktion kann für die konstante Ausbreitung von Schallwesen von entscheidender Bedeutung sein. Darüber hinaus wird die Alias -Analyse auch die Überprüfung des Typs sowie die Qualifikation von API -Namen zugute kommen.
Funktion 5: Konstante Ausbreitung. Das konstante Ausbreitungsmodul bewertet die tatsächlichen Werte für Variablen an bestimmten Programmpunkten in verschiedenen Ausführungspfaden vor der Laufzeit. Mit den zuvor bekannten tatsächlichen Werten können wir Code optimieren und Fehler erkennen. Die konstante Ausbreitung nutzt die Darstellung aus dem SSA -Modul, um die Aufzeichnung von Werten von jeder Zuordnung für eine einzelne Variable zu erhalten.
Funktion 6: Importieren Sie die Grafikkonstruktion. In Python wurde festgestellt, dass Importströmungen und -beziehungen für die API -Zuordnung und die Abhängigkeitsanalyse wichtig sind. Unsere Importgrafikkonstruktion zielt darauf ab, eine Datenstruktur bereitzustellen, um diese Importbeziehungen in den Python -Moduldateien im selben Projekt darzustellen. Die Importdiagramme mehrerer Python-Projekte können kombiniert werden, um eine Datenflussanalyse zwischen den Libraryen durchzuführen.
Funktion 7: Voll qualifizierter Name inferrer. Python -APIs oder Funktionsnamen können je nachdem, wie sie importiert werden, auf unterschiedliche Weise aufgerufen werden. Dies führt jedoch zu Unannehmlichkeiten zur API -Nutzungsanalyse. In diesem Modul werden wir alle Funktionsaufrufnamen in ihre vollqualifizierten Namen umwandeln, bei denen es sich um gepunktete Zeichenfolgen handelt, die den Pfad vom obersten Modul zum Objekt selbst darstellen können. Verschiedene Aufgaben können von dieser Funktionalität profitieren, z. B. das Verständnis der veralteten API -Verwendung, die Analyse von Abhängigkeiten sowie das Erstellen von Schallaufrufdiagrammen.
Funktion 8: Aufrufen der Graph Construction. Eine Anrufgrafik zeigt, dass aufgerufene Beziehungen zwischen Methoden in einem Softwareprogramm aufgerufen werden. Es ist eine grundlegende Komponente in der statischen Flussanalyse und kann bei Aufgaben wie Profilerstellung, Verläufen von Verletzlichkeit und Refactoring genutzt werden. Dieses Modul befasst sich mit den Herausforderungen, die durch komplizierte Funktionen, die in Python angewendet wurden, wie Funktionen höherer Ordnung und verschachtelte Funktionsdefinitionen, um präzise Anrufdiagramme für bestimmte Python-Projekte zu erstellen.
Funktion 9: Geben Sie Inferenz ein. Python ist als dynamisch typisierte Sprache vor dem Problem, die volle Kraft traditioneller statischer Analyse zu nutzen. Dieses Modul färbt die Typinformationen aller Variablen, einschließlich Funktionsrückgabewerte und Funktionsparametern in einem Python -Programm, wodurch eine ausgefeilte statische Analyse für Python möglich ist. Wir verwenden die Rückwärtsdatenflussanalyse und eine Reihe heuristischer Regeln, um eine hohe Genauigkeit zu erreichen.