Paling pisau bedah adalah kerangka analisis statis Python. Ini menyediakan fungsi analisis program yang penting untuk memfasilitasi implementasi aplikasi klien yang berfokus pada penyelesaian masalah khusus secara statis.
Pasang pisau bedah menggunakan PIP dengan perintah berikut
pip install python-scalpelKami akan sangat menghargainya jika Anda dapat berkontribusi pada proyek ini. Jangan ragu untuk melakukannya dengan mengirimkan laporan masalah atau secara langsung menambahkan permintaan tarik. Kami berharap mendapatkan bantuan untuk:
Panduan pengguna terperinci dapat ditemukan di Python-scalpel.readthedocs.io.
Kami bertujuan untuk menyediakan pisau bedah sebagai kerangka analisis statis python generik yang mencakup sebanyak mungkin fungsi (misalnya, untuk dengan mudah membangun grafik aliran kontrol antar fungsi, untuk menafsirkan hubungan impor dari berbagai modul python, dll.) Menuju pengembang untuk mengimplementasikan penganalisa statis yang berfokus pada masalah mereka. Gambar berikut menggambarkan arsitektur desainnya saat ini.

Dokumentasi API Scalpel tersedia di Python-Scalpel.readthedocs.io.
Kami merilis kode sumber pisau bedah dengan harapan memberi manfaat bagi orang lain. Anda diminta untuk mengakui penggunaan alat dengan mengutip artikel berikut:
@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 diundang untuk dipresentasikan di Europython 2022. Europython adalah konferensi pemrograman Python yang dipimpin sukarelawan dan terpanjang di planet ini!

Proyek ini telah terinspirasi oleh banyak karya yang ada. Jika Anda berpikir pekerjaan Anda muncul dalam proyek ini tetapi belum disebutkan, beri tahu kami dengan cara apa pun.
Fungsi 1: Kode Penulis ulang. Modul Kode Penulisan ulang dirancang sebagai fungsi mendasar untuk mendukung perubahan sistematis dalam program Python yang ada. Dua penggunaan awal dari fungsi ini adalah untuk (1) menyederhanakan program untuk analisis statis yang lebih baik dan (2) mengoptimalkan atau memperbaiki program bermasalah. Untuk mendukung penggunaan pertama, kami mengintegrasikan ke dalam kerangka kerja database termasuk serangkaian aturan yang menunjukkan bagaimana cuplikan kode yang cocok harus diubah. Basis data ini harus terus diperluas untuk memenuhi persyaratan penyederhanaan yang rumit untuk mencapai analisis statis yang efektif dari program Python. Untuk mendukung penggunaan kedua, terinspirasi oleh mekanisme optimasi yang disediakan oleh Soot (salah satu kerangka analisis program Java statis paling terkenal), kami juga mengatur proses transformasi dengan metode panggilan balik khusus untuk ditulis ulang oleh pengguna untuk mengoptimalkan kode python berdasarkan kebutuhan yang disesuaikan.
Fungsi 2: Konstruksi grafik kontrol-aliran. Modul konstruksi grafik aliran (CFG) menghasilkan CFG intra-prosedural, yang merupakan komponen penting dalam analisis aliran statis dengan aplikasi seperti optimasi program dan analisis noda. CFG mewakili semua jalur yang mungkin dilalui melalui program selama pelaksanaannya. CFG dari proyek Python dapat dikombinasikan dengan grafik panggilan untuk menghasilkan CFG antar-prosedural dari proyek.
Fungsi 3: Representasi penugasan tunggal statis (SSA). Modul penugasan tunggal statis menyediakan representasi menengah tingkat kompiler (IR) untuk analisis kode. Ini tidak hanya dapat digunakan untuk eksekusi simbolik tetapi juga untuk perambatan yang konstan. Dengan mengganti nama setiap penugasan variabel dengan nama yang berbeda, kami dapat memperoleh rantai penggunaan-def eksplisit, oleh karena itu secara tepat melacak bagaimana aliran data dalam program.
Fungsi 4: Analisis alias. Karena variabel dapat menunjuk ke lokasi memori yang sama atau nilai yang identik, fungsi analisis ALIAS dirancang untuk memodelkan penggunaan tersebut. Fungsi ini bisa sangat penting untuk penyebaran konstan yang terdengar. Selain itu, analisis alias juga akan menguntungkan pemeriksaan jenis serta kualifikasi nama API.
Fungsi 5: Perambatan Konstan. Modul propagasi konstan akan mengevaluasi nilai aktual untuk variabel pada titik program tertentu dalam jalur eksekusi yang berbeda sebelum runtime. Dengan nilai -nilai aktual yang diketahui sebelumnya, kami dapat mengoptimalkan kode dan mendeteksi bug. Perambatan konstan akan memanfaatkan representasi dari modul SSA untuk menjaga nilai perekaman dari setiap penugasan untuk satu variabel.
Fungsi 6: Konstruksi Grafik Impor. Dalam Python, aliran impor dan hubungan telah ditunjukkan sebagai penting untuk pemetaan API, dan analisis ketergantungan. Konstruksi grafik impor kami bertujuan untuk menyediakan struktur data untuk mewakili hubungan impor ini di seluruh file modul Python dalam proyek yang sama. Grafik impor beberapa proyek Python dapat digabungkan untuk melakukan analisis dataflow antar-perpustakaan.
Fungsi 7: NAMA PENGHATIAN PENGHATIAN SEPENUHNYA. Python API atau nama fungsi dapat dipanggil dengan cara yang berbeda tergantung pada bagaimana mereka diimpor. Namun, ini menghasilkan ketidaknyamanan untuk analisis penggunaan API. Dalam modul ini, kami akan mengonversi semua nama panggilan fungsi ke nama mereka yang sepenuhnya memenuhi syarat yang merupakan string bertitik yang dapat mewakili jalur dari modul tingkat atas ke objek itu sendiri. Berbagai tugas dapat diuntungkan dari fungsi ini seperti memahami penggunaan API yang sudah usang, penguraian ketergantungan serta membangun grafik panggilan suara.
Fungsi 8: Konstruksi Grafik Panggilan. Grafik panggilan menggambarkan hubungan panggilan antara metode dalam program perangkat lunak. Ini adalah komponen mendasar dalam analisis aliran statis dan dapat dimanfaatkan dalam tugas -tugas seperti profil, propagasi kerentanan, dan refactoring. Modul ini membahas tantangan yang dibawa oleh fitur rumit yang diadopsi dalam Python, seperti fungsi tingkat tinggi dan definisi fungsi bersarang, untuk membangun grafik panggilan yang tepat untuk proyek Python yang diberikan.
Fungsi 9: Ketik inferensi. Python, sebagai bahasa yang diketik secara dinamis, menghadapi masalah sulit memanfaatkan kekuatan penuh analisis statis tradisional. Modul ini menyimpulkan informasi tipe semua variabel termasuk nilai pengembalian fungsi dan parameter fungsi dalam program Python, membuat analisis statis yang lebih canggih mungkin untuk Python. Kami menggunakan analisis aliran data mundur dan seperangkat aturan heuristik untuk mencapai presisi tinggi.