Dead Code Finder: Realiti Sukar Analisis Statik
Saya membina satu alat untuk hackathon bagi mencari kod mati. Matlamatnya mudah. Cari kod yang tidak dipanggil oleh apa-apa pun.
Saya tidak mahu tahu apa yang akan rosak jika anda memadam kod. Saya hanya mahu tahu sama ada ada apa-apa yang memanggil bahagian kod tertentu atau tidak.
Saya menamakannya Dead Code Finder. Ia menggunakan graf pengetahuan (knowledge graph) untuk mencari panggilan dan import. Ia mengasingkan setiap penemuan kepada tiga kategori:
• Yakin: Sifar pinggir masuk (incoming edges) dan bukan titik masuk (entry point). • Tidak Pasti: Kes seperti pewarisan (inheritance) di mana analisis statik tidak mencukupi. • Dilangkau: Perkara seperti dekorator atau rangka kerja ujian (test frameworks) yang tidak dapat diselesaikan oleh alat tersebut.
Saya mematuhi satu peraturan ketat. Jangan sesekali katakan kod itu selamat untuk dipadam. Laporan tersebut hanya menyatakan bahawa tiada rujukan ditemui dalam graf.
Projek ini lebih sukar daripada yang saya jangkakan. Saya menghadapi dua masalah utama dengan platform tersebut:
- Alat Hilang: Alat graf hilang semasa masa larian (runtime) walaupun ia ada dalam konfigurasi.
- Suntikan Tidak Boleh Dipercayai: Sistem kadangkala gagal menyediakan logik penuh untuk ejen tersebut.
Saya membaiki perkara ini dengan membina mod sandaran (fallback mode). Jika alat graf hilang, alat tersebut akan membaca fail sebenar dalam repositori. Ia menggunakan carian fail untuk mencari rujukan. Jika ia menggunakan kaedah ini, ia akan menandakan penemuan sebagai inferred.
Saya juga perlu membaiki ralat logik untuk kes-kes tertentu:
- Kaedah dunder: Kaedah seperti
__init__sering menunjukkan sifar pinggir masuk kerana graf menghubungkan panggilan tersebut kepada kelas dan bukannya kaedah. Saya membaiki ini dengan menyemak kelas yang menyelubunginya. - Dekorator: Fungsi yang dipanggil melalui carian rentetan (string lookups) dalam kamus (dictionary) kelihatan mati bagi graf statik. Saya memindahkan ini ke dalam kategori Dilangkau.
- Ujian: Rangka kerja ujian mencari kaedah melalui refleksi (reflection). Ini juga dimasukkan ke dalam kategori Dilangkau.
Keputusannya boleh dipercayai. Mod sandaran saya mengenal pasti kod mati dengan betul dan sepadan dengan data graf sebenar. Ia juga melabelkan kes tidak pasti seperti pewarisan dengan betul.
Pengajaran yang diperoleh:
- Sahkan alat yang tersedia sebelum menulis logik yang bergantung kepadanya.
- Laporan yang mengatakan "Saya tidak tahu" adalah lebih baik daripada laporan yang salah secara yakin.
- Melabel ketidakpastian menjadikan penemuan yakin anda berbaloi untuk diambil tindakan.
Optional learning community: https://t.me/GyaanSetuAi
