Understanding Self-Admitted Technical Debt in Test Code: An Empirical Study
यह अनुभवजन्य अध्ययन 50 रिपॉजिटरीज़ में टेस्ट कोड में स्व-स्वीकृत तकनीकी ऋण (SATD) के वितरण, प्रकारों और टेस्ट गुणवत्ता के साथ उनके संबंध की जांच करता है, जो यह प्रकट करता है कि हालांकि SATD व्यापक है और प्रोडक्शन कोड SATD से भिन्न है, यह सीधे तौर पर टेस्ट स्मेल्स (test smells) से जुड़ा नहीं है, और यह प्रदर्शित करता है कि एक CodeBERT-आधारित मॉडल बेहतर प्रबंधन के लिए इन ऋण प्रकारों को प्रभावी ढंग से वर्गीकृत करता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
सॉफ्टवेयर डेवलपमेंट को एक विशाल, जटिल घर बनाने के रूप में कल्पना करें। कभी-कभी, किसी डेडलाइन को पूरा करने या जल्दी से प्रोटोटाइप तैयार करने के लिए, निर्माता (डेवलपर्स) शॉर्टकट लेते हैं। वे शायद एक ठोस दरवाजे के बजाय एक अस्थायी दरवाजा लगा देते हैं, या किसी कमरे को अधूरा छोड़ देते हैं और दीवार पर एक स्टिकी नोट चिपका देते हैं जिस पर लिखा होता है, "इसे बाद में ठीक करें।" कोडिंग की दुनिया में, इन शॉर्टकट को टेक्निकल डेब्ट (Technical Debt) कहा जाता है, और उन स्टिकी नोट्स को सेल्फ-एडमिटेड टेक्निकल डेब्ट (SATD) कहा जाता है।
वर्षों से, शोधकर्ता इन स्टिकी नोट्स का अध्ययन कर रहे हैं, लेकिन वे ज्यादातर केवल लिविंग रूम की दीवारों (मुख्य प्रोडक्शन कोड) पर चिपके हुए नोट्स को ही देख रहे थे। उन्होंने ब्लूप्रिंट और निरीक्षण चेकलिस्ट (टेस्ट कोड) पर चिपके नोट्सों को काफी हद तक अनदेखा कर दिया। यह पेपर अंततः टूलबॉक्स को साफ करने और विशेष रूप से टेस्ट कोड में पाए जाने वाले नोट्स को देखने का निर्णय लेता है।
शोधकर्ताओं ने क्या पाया, इसे सरल भाषा में यहाँ समझाया गया है:
1. स्टिकी नोट्स हर जगह हैं (टेस्ट रूम में भी)
शोधकर्ताओं ने 50 अलग-अलग सॉफ्टवेयर प्रोजेक्ट्स (जैसे 50 अलग-अलग घरों का एक मोहल्ला) का अध्ययन किया। उन्होंने पाया कि हालांकि मुख्य कोड की तुलना में टेस्ट कोड में कम स्टिकी नोट्स हैं, फिर भी वे काफी संख्या में मौजूद हैं—उनके द्वारा पाए गए सभी नोट्स में से लगभग 15.6% टेस्ट कोड में थे।
उपमा: यदि मुख्य कोड घर का ढांचा है, तो टेस्ट कोड निरीक्षक (इंस्पेक्टर) की चेकलिस्ट है। अध्ययन में पाया गया कि निर्माता दीवारों पर नोट लिखते हैं, वैसे ही निरीक्षक भी अपनी चेकलिस्ट पर "इसे बाद में जांचें" लिखने की उतनी ही संभावना रखते हैं। यह कोई छोटा या नगण्य हिस्सा नहीं है; यह काम का एक महत्वपूर्ण हिस्सा है।
2. नोट्स "स्मेल्स" (Smells) से मेल नहीं खाते
सॉफ्टवेयर में, ऐसे ऑटोमेटेड टूल्स होते हैं जो टेस्ट कोड में "बुरे गंध" (bad smells) को सूंघ लेते हैं—जैसे कि एक टेस्ट जो बहुत लंबा, भ्रमित करने वाला या 'फ्लेकी' (कभी पास होता है, कभी फेल) है। इन्हें टेस्ट स्मेल्स (Test Smells) कहा जाता है।
शोधकर्ता यह देखना चाहते थे कि क्या स्टिकी नोट्स आमतौर पर इन बुरे गंधों के ठीक बगल में पाए जाते हैं।
- निष्कर्ष: आश्चर्यजनक रूप से, नहीं। स्टिकी नोट्स और बुरे गंध आमतौर पर अलग-अलग जगहों पर दिखाई देते हैं।
- उपमा: कल्पना कीजिए कि एक घर का निरीक्षक है। "बुरे गंध" बेसमेंट में सीलन जैसी गंध (एक संरचनात्मक समस्या जिसे मशीन पहचान लेती है) की तरह हैं। "स्टिकी नोट्स" हाथ से लिखे एक नोट की तरह हैं, जैसे "मैंने इस दीवार को पेंट करना अधूरा छोड़ दिया।" अध्ययन में पाया गया कि जहाँ सीलन की गंध थी, जरूरी नहीं कि वहीं पेंटिंग अधूरे होने के नोट्स भी हों। डेवलपर्स उन समस्याओं को चिह्नित कर रहे हैं जिन्हें ऑटोमेटेड "सूंघने वाले" टूल्स मिस कर रहे हैं।
3. नोट्स वास्तव में क्या कह रहे हैं?
टीम ने इन 506 टेस्ट-कोड स्टिकी नोट्स को समझने के लिए उन्हें हाथ से पढ़ा। उन्होंने इन्हें 20 अलग-अलग प्रकार के मुद्दों में वर्गीकृत किया, जिन्हें 5 मुख्य श्रेणियों में बांटा गया:
- प्रोडक्शन-संबंधित मुद्दे (Production-Related Issues): नोट्स जो कहते हैं, "यह टेस्ट फेल हो जाएगा यदि आप इसे विंडोज पर चलाते हैं," या "मैं यह टेस्ट पूरा नहीं कर सकता क्योंकि मुख्य कोड में एक बग है।"
- अधूरे टेस्ट (Incomplete Tests): सबसे आम नोट: "मैंने यह टेस्ट शुरू किया था, लेकिन मैंने यह जांचने वाला हिस्सा लिखना अधूरा छोड़ दिया कि परिणाम सही है या नहीं।"
- खराब डिजाइन/जुगाड़ (Bad Design/Workarounds): नोट्स जैसे, "मुझे इस टेस्ट को चलाने के लिए एक जुगाड़ का उपयोग करना पड़ा क्योंकि कोड बहुत ज्यादा लॉक डाउन है," या "यह टेस्ट बहुत ही अनाड़ी तरीके से लिखा गया है।"
- रखरखाव (Maintenance): नोट्स जैसे, "यह टेस्ट फ्लेकी (flaky) है," "हमें नए सॉफ्टवेयर वर्जन के लिए इसे अपडेट करने की आवश्यकता है," या "यह टेस्ट बेकार है, इसे डिलीट कर दें।"
- संदेह (Doubts): नोट्स जैसे, "यह टेस्ट आखिर किस लिए है?" या "क्या मुझे वास्तव में इस स्लीप टाइमर की आवश्यकता है?"
बड़ा निष्कर्ष: इनमें से अधिकांश नोट्स अधूरे काम के बारे में हैं। डेवलपर्स अक्सर एक टेस्ट लिखते हैं लेकिन अंतिम जांच जोड़ने से पहले ही रुक जाते हैं, और बाद में इसे पूरा करने के लिए एक नोट छोड़ देते हैं।
4. क्या एक रोबोट इन नोट्स को पढ़ सकता है?
शोधकर्ताओं ने कंप्यूटर को इन स्टिकी नोट्स को पढ़ने और उन्हें सही श्रेणियों में स्वचालित रूप से वर्गीकृत करने के लिए सिखाने की कोशिश की। उन्होंने कई अलग-अलग "मस्तिष्क" (एल्गोरिदम) का परीक्षण किया, जिसमें AI पर आधारित कुछ बहुत उन्नत मॉडल भी शामिल थे।
- विजेता: एक विशेष AI मॉडल जिसे CodeBERT कहा जाता है, इस काम में सबसे अच्छा था। इसने लगभग 70% बार कर्ज के प्रकार को सही ढंग से पहचाना।
- आश्चर्य: एक नया, अधिक शक्तिशाली AI (GPT-4) वास्तव में उन दुर्लभ और अजीब नोट्स को खोजने में बेहतर था जिन्हें अन्य मॉडल मिस कर गए थे, भले ही वह समग्र रूप से सबसे सुसंगत (consistent) नहीं था।
- समस्या: AI को "Failures" श्रेणी (टेस्ट फेल होने के बारे में नोट्स) में सबसे अधिक कठिनाई हुई। इसका कारण यह था कि उनके डेटा में इन नोट्स के बहुत कम उदाहरण थे, जिससे रोबोट के लिए पैटर्न सीखना कठिन हो गया।
सारांश
यह पेपर बताता है कि टेस्ट कोड का अपना एक अनूठा सेट "अधूरे काम" का है जो मुख्य कोड से अलग है। डेवलपर्स अधूरे टेस्ट, खराब डिजाइन और फ्लैकी परिणामों के बारे में नोट्स लिख रहे हैं जिन्हें ऑटोमेटेड टूल्स नहीं पकड़ पा रहे हैं। हालांकि अब हम इन नोट्स को छांटने के लिए AI का उपयोग कर सकते हैं, लेकिन इस तकनीक को अभी और अभ्यास की आवश्यकता है, विशेष रूप से दुर्लभ और पेचीदा नोट्स के मामले में।
मुख्य सबक यह है: टेस्ट चेकलिस्ट पर लिखे नोट्सों को अनदेखा न करें। वे सॉफ्टवेयर में एक अलग तरह की गड़बड़ी को उजागर करते हैं जिसके लिए सफाई के एक अलग तरीके की आवश्यकता होती है।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।