Dead Code Finder: Static Analysis की कठिन वास्तविकता
मैंने एक हैकथॉन के लिए डेड कोड (dead code) खोजने के लिए एक टूल बनाया। लक्ष्य सरल था: ऐसा कोड ढूँढना जिसे कोई भी कॉल न करता हो।
मैं यह नहीं जानना चाहता था कि कोड हटाने पर क्या टूट जाएगा। मैं यह जानना चाहता था कि क्या कोई विशिष्ट कोड वास्तव में कॉल किया जाता है या नहीं।
मैंने इसे Dead Code Finder नाम दिया। यह कॉल्स (calls) और इम्पोर्ट्स (imports) को खोजने के लिए एक नॉलेज ग्राफ (knowledge graph) का उपयोग करता है। यह हर खोज को तीन श्रेणियों में विभाजित करता है:
• Confident: शून्य इनकमिंग एडजेस (incoming edges) और कोई एंट्री पॉइंट नहीं। • Uncertain: इनहेरिटेंस (inheritance) जैसे मामले जहाँ स्टैटिक एनालिसिस पर्याप्त नहीं है। • Skipped: डेकोरेटर्स (decorators) या टेस्ट फ्रेमवर्क जैसी चीज़ें जिन्हें टूल हल नहीं कर सकता।
मैंने एक सख्त नियम का पालन किया। कभी यह न कहें कि कोड हटाना सुरक्षित है। रिपोर्ट केवल यह बताती है कि ग्राफ में कोई रेफरेंस नहीं मिला।
यह प्रोजेक्ट मेरी उम्मीद से कहीं अधिक कठिन था। मुझे प्लेटफॉर्म के साथ दो मुख्य समस्याओं का सामना करना पड़ा:
- Missing Tools: कॉन्फ़िगरेशन में होने के बावजूद रनटाइम के दौरान ग्राफ टूल्स गायब थे।
- Unreliable Injection: सिस्टम कभी-कभी एजेंट के लिए पूरी लॉजिक प्रदान करने में विफल रहा।
मैंने एक फ़ॉलबैक मोड (fallback mode) बनाकर इसे ठीक किया। यदि ग्राफ टूल्स गायब हैं, तो टूल रिपॉजिटरी में वास्तविक फ़ाइलों को पढ़ता है। यह रेफरेंस खोजने के लिए फ़ाइल सर्च का उपयोग करता है। यदि यह इस पद्धति का उपयोग करता है, तो यह खोजों को 'inferred' के रूप में चिह्नित करता है।
मुझे विशिष्ट मामलों के लिए लॉजिक एरर्स (logic errors) को भी ठीक करना पड़ा:
- Dunder methods:
__init__जैसे मेथड्स अक्सर शून्य इनकमिंग एडजेस दिखाते हैं क्योंकि ग्राफ कॉल को मेथड के बजाय क्लास से जोड़ता है। मैंने एनक्लोजिंग क्लास (enclosing class) की जाँच करके इसे ठीक किया। - Decorators: डिक्शनरी में स्ट्रिंग लुकअप के माध्यम से कॉल किए जाने वाले फंक्शन एक स्टैटिक ग्राफ के लिए 'डेड' लगते हैं। मैंने इन्हें Skipped बकेट में डाल दिया।
- Tests: टेस्ट फ्रेमवर्क रिफ्लेक्शन (reflection) के माध्यम से मेथड्स को ढूँढते हैं। ये भी Skipped बकेट में चले जाते हैं।
परिणाम विश्वसनीय थे। मेरे फ़ॉलबैक मोड ने सही ढंग से डेड कोड की पहचान की और वास्तविक ग्राफ डेटा से मिलान किया। इसने इनहेरिटेंस जैसे अनिश्चित मामलों को भी सही ढंग से लेबल किया।
सीखे गए सबक:
- उन टूल्स की उपलब्धता की पुष्टि करें जिन पर निर्भर लॉजिक आप लिख रहे हैं।
- एक रिपोर्ट जो कहती है "मुझे नहीं पता" वह उस रिपोर्ट से बेहतर है जो आत्मविश्वास के साथ गलत हो।
- अनिश्चितता को लेबल करने से आपके 'confident' निष्कर्ष कार्रवाई करने योग्य बन जाते हैं।
Optional learning community: https://t.me/GyaanSetuAi
