SACS: A Code Smell Dataset using Semi-automatic Generation Approach
यह शोध पत्र SACS को प्रस्तुत करता है, जो एक बड़े पैमाने का, ओपन-सोर्स कोड स्मेल डेटासेट है जिसमें लॉन्ग मेथड (Long Method), लार्ज क्लास (Large Class) और फीचर एनवी (Feature Envy) शामिल हैं, जिसे एक अर्ध-स्वचालित पीढ़ी दृष्टिकोण का उपयोग करके बनाया गया है जो डेटा स्केलेबिलिटी और लेबल विश्वसनीयता के बीच के समझौते को दूर करने के लिए स्वचालित नियम-आधारित सैंपलिंग को लक्षित मैनुअल समीक्षा के साथ जोड़ता है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक मास्टर शेफ हैं जो एक रोबोट को उत्तम भोजन बनाना सिखाने की कोशिश कर रहे हैं। इसे करने के लिए, आपको रेसिपी कार्डों का एक विशाल पुस्तकालय चाहिए: जिनमें से कुछ उत्तम व्यंजन दिखाते हैं और कुछ रसोई की भयानक गलतियाँ (जैसे टोस्ट जला देना या नमक डालना भूल जाना) दिखाते हैं।
सॉफ्टवेयर की दुनिया में, इन "गलतियों" को कोड स्मेल (Code Smells) कहा जाता है। ये वे बग्स नहीं हैं जो प्रोग्राम को क्रैश कर देते हैं, बल्कि ये कोड लिखने के अस्त-व्यस्त, भ्रमित करने वाले या अक्षम तरीके हैं जो बाद में इसे ठीक करना या अपडेट करना कठिन बना देते हैं। उदाहरण के लिए, एक बहुत लंबा फंक्शन (एक "Long Method"), एक क्लास जो बहुत सारे काम करने की कोशिश करती है (एक "Large Class"), या कोड का एक टुकड़ा जो अपने स्वयं के औजारों का उपयोग करने के बजाय लगातार अपने पड़ोसी से औजार उधार लेता रहता है (एक "Feature Envy")।
समस्या क्या है? इन स्मells को पहचानने के लिए एक रोबोट (या AI) को सिखाने के लिए हजारों उदाहरणों की आवश्यकता होती है। लेकिन इन उदाहरणों को खोजना एक दुस्वप्न है।
समस्या: "इंसान बनाम रोबोट" की दुविधा
यह पेपर उदाहरणों का यह पुस्तकालय बनाने के दो तरीकों के बीच संघर्ष का वर्णन करता है:
- "मानव शेफ" दृष्टिकोण (मैनुअल): आप विशेषज्ञ शेफ (सीनियर डेवलपर्स) को किराए पर लेते हैं जो हर एक रेसिपी कार्ड को पढ़ते हैं और गलतियों को लेबल करते हैं।
- फायदे: लेबल बहुत सटीक होते हैं।
- नुकसान: इसमें बहुत समय लगता है और बहुत पैसा खर्च होता है। आप लाइब्रेरी को इतना बड़ा नहीं बना सकते जिससे एक स्मार्ट AI सीख सके।
- "रोबोट शेफ" दृष्टिकोण (स्वचालित): आप एक स्क्रिप्ट का उपयोग करते हैं जो अच्छी रेसिपी को बेतरतीब ढंग से बिगाड़ देती है ताकि गलतियाँ पैदा की जा सकें।
- फायदे: आप सेकंडों में लाखों उदाहरण बना सकते हैं।
- नुकसान: रोबोट अनाड़ी है। वह ऐसी "नकली" गलतियाँ पैदा कर सकता है जो वास्तविक मानवीय त्रुटियों जैसी नहीं दिखतीं, या वह वास्तविक गलतियों को मिस कर सकता है। गुणवत्ता कम होती है।
समाधान: "अर्ध-स्वचालित" रसोई
लेखकों ने, हान्यू झांग और किशी टोमोजी ने, दोनों दुनियाओं के सर्वश्रेष्ठ को मिलाने का निर्णय लिया। उन्होंने एक अर्ध-स्वचालित (Semi-Automatic) दृष्टिकोण बनाया, जिसे वे SACS कहते हैं।
इसे एक उच्च-तकनीकी असेंबली लाइन और गुणवत्ता नियंत्रण निरीक्षक की तरह समझें:
चरण 1: रोबोट गंदगी फैलाता है (स्वचालित पीढ़ी)
सबसे पहले, वे एक कंप्यूटर प्रोग्राम का उपयोग करते हैं जो जानबूझकर अच्छे कोड को "बिगाड़" देता है।
- Long Method: रोबोट दो छोटे, साफ फंक्शन्स को लेता है और उन्हें एक साथ जोड़कर एक विशाल, भ्रमित करने वाला ब्लॉक बना देता है।
- Large Class: यह एक छोटे, केंद्रित क्लास को लेता है और उसमें कई असंबंधित फीचर्स डाल देता है, जिससे वह भारी हो जाती है।
- Feature Envy: यह एक फंक्शन को जो एक कमरे का है, दूसरे कमरे में ले जाता है जहाँ उसे लगातार उन औजारों के लिए पूछना पड़ता है जो उसके अपने नहीं हैं।
चरण 2: स्मार्ट फ़िल्टर (ग्रुपिंग)
अब, रोबोट के पास "गंदे" कोड का ढेर है। लेकिन उसे यह नहीं पता कि कौन सा कोड स्पष्ट रूप से गंदा है और कौन सा शायद गंदा है।
- सिस्टम सरल गणित (मेट्रिक्स जैसे लाइन्स ऑफ कोड) के आधार पर एक ट्रैफिक लाइट सिस्टम का उपयोग करता है।
- ग्रीन लाइट (A_Group): कोड इतना गंदा है (जैसे, 100+ लाइनें) कि एक नौसिखिया भी जानता है कि यह एक स्मेल है। रोबोट इसे "निश्चित रूप से एक गलती" के रूप में लेबल करता है और इसे लाइब्रेरी में रखता है। किसी इंसान की जरूरत नहीं!
- रेड लाइट (M_Group): कोड इतना साफ है कि यह निश्चित रूप से गलती नहीं है। रोबोट इसे "निश्चित रूप से साफ" के रूप में लेबल करता है।
- येलो लाइट (M_Group): कोड "ग्रे एरिया" में है। यह स्पष्ट रूप से गंदा नहीं है, लेकिन यह स्पष्ट रूप से साफ भी नहीं है। यहीं पर रोबोट भ्रमित हो जाता है।
चरण 3: मानव निरीक्षक (मैनुअल समीक्षा)
यही असली जादू है: इंसान केवल "येलो लाइट" (अस्पष्ट) मामलों को देखते हैं।
- क्योंकि रोबोट ने स्पष्ट "ग्रीन" और "रेड" मामलों को संभाल लिया है, इसलिए विशेषज्ञ अपना समय केवल कठिन, भ्रमित करने वाले उदाहरणों पर खर्च करते हैं।
- लेखकों ने इन विशेषज्ञों को कठिन मामलों को जल्दी और लगातार लेबल करने में मदद करने के लिए एक विशेष IDE प्लगइन (कोडिंग सॉफ्टवेयर के अंदर एक स्मार्ट हाइलाइटर की तरह) भी बनाया है।
परिणाम: SACS डेटासेट
इस "रोबोट आसान काम करता है, इंसान कठिन काम करता है" रणनीति का उपयोग करके, उन्होंने SACS (सेमी-ऑटोमैटिक कोड स्मेल डेटासेट) बनाया।
- पैमाना (Scale): यह बहुत बड़ा है। इसमें तीन मुख्य प्रकार के स्मल्स (Long Method, Large Class, Feature Envy) के लिए 10,000 से अधिक लेबल किए गए उदाहरण शामिल हैं।
- गुणवत्ता: क्योंकि इंसानों ने जटिल हिस्सों को सत्यापित किया है, इसलिए डेटा उन्नत AI मॉडल को प्रशिक्षित करने के लिए पर्याप्त विश्वसनीय है।
- ओपन सोर्स: उन्होंने इसे जनता के लिए जारी किया है ताकि अन्य शोधकर्ता बेहतर सॉफ्टवेयर क्लीन-अप टूल्स बनाने के लिए इसका उपयोग कर सकें।
यह क्यों महत्वपूर्ण है
इससे पहले, शोधकर्ता छोटे, महंगे डेटासेट्स के साथ फंसे हुए थे जो आधुनिक AI को प्रशिक्षित करने के लिए पर्याप्त नहीं थे। या उनके पास बहुत बड़े डेटासेट्स थे जो कचरे से भरे थे।
यह पेपर डेटा निर्माण के लिए एक हाइब्रिड कार बनाने जैसा है। यह वॉल्यूम (मात्रा) उत्पन्न करने के लिए मशीन की गति और गुणवत्ता सुनिश्चित करने के लिए मानव के विवेक का उपयोग करता है। अब, AI शोधकर्ताओं के पास कोड की गलतियों का एक विशाल, उच्च-गुणवत्ता वाला "पाठ्यपुस्तक" है, जिससे उन्हें भविष्य में अव्यवस्त सॉफ्टवेयर को स्वचालित रूप से ठीक करने वाले बेहतर टूल्स बनाने में मदद मिलेगी।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।