TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest
यह शोध पत्र TestMigrationsInPy को प्रस्तुत करता है, जो कि unittest से pytest में 923 वास्तविक दुनिया के टेस्ट माइग्रेशन का एक सार्वजनिक रूप से उपलब्ध डेटासेट है, जिसे पायथन इकोसिस्टम में माइग्रेशन प्रक्रिया को सुगम बनाने वाले स्वचालित उपकरणों को विकसित करने और सत्यापित करने के लिए एक ग्राउंड ट्रुथ (ground truth) के रूप में डिज़ाइन किया गया है।
मूल पेपर CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखकों ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
कल्पना कीजिए कि आप एक शेफ हैं जो वर्षों से रसोई के बहुत पुराने, कठोर उपकरणों के साथ खाना बना रहे हैं। ये उपकरण ठीक काम करते हैं, लेकिन वे भारी हैं, उन्हें एक विशिष्ट रेसिपी फॉर्मेट की आवश्यकता होती है, और थोड़े बोझिल हैं। अचानक, बाजार में नए, हल्के और लचीले आधुनिक उपकरण आ जाते हैं। हर कोई सहमत है कि नए उपकरण खाना बनाना तेज़ और अधिक स्वादिष्ट बनाते हैं, लेकिन स्विच करना एक बुरा सपना है। आप पुराने उपकरणों को बस फेंक नहीं सकते; आपको अपनी अब तक लिखी गई हर एक रेसिपी को नए उपकरणों के अनुसार सावधानी से बदलना होगा।
यह बिल्कुल वही स्थिति है जिसका सामना पायथन प्रोग्रामर्स अपने टेस्टिंग टूल्स के साथ करते हैं।
समस्या: दो रसोईघर, एक रेसिपी बुक
पायथन प्रोग्रामिंग की दुनिया में, "टेस्ट रेसिपी" (सॉफ्टवेयर सही ढंग से काम कर रहा है या नहीं, इसकी जांच करने वाला कोड) लिखने के दो मुख्य तरीके हैं:
unittest: यह पुराना टूल है। यह स्टैंडर्ड किचन किट का हिस्सा है। यह सख्त है; आपको अपने टेस्ट विशेष "क्लासेस" के अंदर लिखने होते हैं (जैसे हर रेसिपी को एक विशिष्ट बाइंडर में रखना) और चीजों को सही ढंग से जांचने के लिए लंबे, विशिष्ट कमांड का उपयोग करना पड़ता है।pytest: यह आधुनिक, लोकप्रिय टूल है। यह हल्का और अधिक लचीला है। आप टेस्ट को सरल फंक्शन्स (जैसे ढीले रेसिपी कार्ड) के रूप में लिख सकते हैं, और यह छोटे, साफ कमांड का उपयोग करता है।
क्योंकि pytest उपयोग करने में बहुत बेहतर है, इसलिए कई सॉफ्टवेयर प्रोजेक्ट्स unittest से pytest पर स्विच करना चाहते हैं। हालांकि, इसे मैन्युअल रूप से करना एक पूरी लाइब्रेरी की कुकबुक्स को हाथ से अनुवाद करने जैसा है। इसमें बहुत समय लगता है, और गलतियाँ होने की संभावना अधिक होती है।
समाधान: एक "माइग्रेशन कुकबुक"
इस पेपर के लेखक, अल्टिनो अल्वेस और आंद्रे होरा ने महसूस किया कि इस अनुवाद को स्वचालित रूप से करने के लिए एक रोबोट (या एक AI) बनाने के लिए, उन्हें पहले उदाहरणों के एक विशाल पुस्तकालय की आवश्यकता थी जो दिखाते हों कि इंसानों ने वास्तव में इसे कैसे किया।
उन्होंने TestMigrationsInPy बनाया।
इस डेटासेट को एक विशाल, एनोटेटेड कुकबुक के रूप में समझें जिसमें डेवलपर्स द्वारा सफलतापूर्वक अपने टेस्ट रेसिपी को पुराने स्टाइल से नए स्टाइल में बदलने के 923 वास्तविक जीवन के उदाहरण शामिल हैं।
उन्होंने कुकबुक कैसे बनाई
उन्होंने केवल अनुमान नहीं लगाया; वे एक डिजिटल खोज अभियान पर निकले:
- डिटेक्टर (The Detector): उन्होंने 100 सबसे लोकप्रिय पायथन प्रोजेक्ट्स (जैसे प्रसिद्ध लाइब्रेरीज़ Pandas और Flask) के इतिहास को स्कैन करने के लिए एक स्मार्ट टूल का उपयोग किया। उन्होंने उन विशिष्ट "कमिट" संदेशों को देखा जहाँ डेवलपर्स ने स्पष्ट रूप से कहा, "मैं इस टेस्ट को
unittestसेpytestमें बदल रहा हूँ।" - फ़िल्टर (The Filter): कभी-कभी, जब डेवलपर्स कोड अपडेट करते हैं, तो वे टूल्स को बदलते समय बग्स को ठीक करते हैं या नई सुविधाएँ जोड़ते हैं। यह "उलझे हुए" बदलाव पैदा करता है जो अध्ययन करने के लिए भ्रमित करने वाले होते हैं। लेखकों ने इन बदलावों को मैन्युअल रूप से देखा और केवल "शुद्ध" माइग्रेशन को चुना—ऐसे मामले जहाँ डेवलपर ने केवल टेस्टिंग स्टाइल बदला था और इसके अलावा कुछ भी नहीं किया था।
- परिणाम (The Result): उनके पास इन बदलावों के 923 साफ और अलग-थलग उदाहरण बचे।
कुकबुक के अंदर क्या है?
डेटासेट एक डिजिटल आर्काइव की तरह व्यवस्थित है। प्रत्येक उदाहरण के लिए, आपको मिलता है:
- "पहले" की तस्वीर (The "Before" Picture): पुराने
unittestस्टाइल में लिखा गया टेस्ट कोड। - "बाद" की तस्वीर (The "After" Picture): उसी टेस्ट कोड को नए
pytestस्टाइल में फिर से लिखा गया है। - "टाइप" लेबल (The "Type" Label): एक टैग जो बताता है कि किस प्रकार का बदलाव हुआ।
लेखकों ने दो मुख्य प्रकार के बदलाव पाए, जिनकी तुलना वे कठिनाई के विभिन्न स्तरों से करते हैं:
- सरल बदलाव (The "Assertion" Migration): यह "कप्स" को "ग्राम" में बदलने जैसा है। यह सीधा है। उदाहरण के लिए, एक लंबे कमांड जैसे
self.assertEqual(a, b)को एक सरलassert a == bमें बदलना। - जटिल पुनर्गठन (The "Fixture" Migration): यह महसूस करने जैसा है कि आपकी पुरानी रेसिपी के लिए एक विशिष्ट ओवन प्री-हीटिंग स्टेप की आवश्यकता थी, लेकिन नया ओवन अलग तरह से काम करता है। आपको सामग्री तैयार करने के तरीके को पूरी तरह से पुनर्गठित करना होगा।
unittestमें, आपके पास एकsetupमेथड हो सकता है जो हर टेस्ट से पहले चलता है।pytestमें, इसे एक "फिक्स्चर" (fixture) में बदल दिया जाता है—एक पुन: प्रयोज्य हेल्पर फंक्शन। कभी-कभी, एक पुरानेsetupमेथड को चार अलग-अलग नए फिक्स्चर में विभाजित करना पड़ता है। यह ऑटोमेट करना बहुत कठिन है।
यह क्यों मायने रखता है?
पेपर का तर्क है कि यह डेटासेट एक "ग्राउंड ट्रुथ" (एक सटीक संदर्भ मैनुअल) है।
कल्पना कीजिए कि आप एक AI असिस्टेंट (जैसे एक सुपर-स्मार्ट रोबोट शेफ) बनाने की कोशिश कर रहे हैं जो डेवलपर्स को टूल्स बदलने में मदद करे। आप रोबोट को केवल यह नहीं कह सकते, "जाओ और इन टेस्ट्स को बदलो।" आपको उसे उदाहरण दिखाने होंगे।
- उपयोग 1: शोधकर्ता इस डेटासेट का उपयोग AI मॉडल्स (जैसे Large Language Models) को प्रशिक्षित करने के लिए कर सकते हैं ताकि वे कोड को स्वचालित रूप से अनुवाद करना सीख सकें।
- उपयोग 2: वे यह परीक्षण कर सकते हैं कि क्या उनका नया AI "सरल बदलावों" बनाम "जटिल पुनर्गठन" में कितना अच्छा है।
लेखकों ने खुद एक शक्तिशाली AI मॉडल (GPT-4o) के साथ इसे आज़माया। उन्होंने पाया कि AI सरल बदलावों के लिए काफी अच्छा था लेकिन जटिल फिक्स्चर बदलावों के लिए उसे कभी-कभी मानवीय मदद की आवश्यकता होती है, जो यह साबित करता है कि हालांकि AI गति दे सकता है, लेकिन यह अभी भी पूर्ण नहीं है।
निचोड़ (The Bottom Line)
यह पेपर यह दावा नहीं करता है कि इसने आज आपके लिए माइग्रेशन करने वाला एक आदर्श रोबोट बना लिया है। इसके बजाय, इसने प्रशिक्षण मैनुअल (डेटासेट) बनाया है जो शोधकर्ताओं को वह रोबोट बनाने की अनुमति देता है। यह 923 वास्तविक दुनिया के उदाहरणों का एक स्पष्ट, सत्यापित संग्रह प्रदान करता है कि कैसे पुराने, बोझिल टेस्टिंग स्टाइल से नए, सुव्यवस्थित स्टाइल में जाया जाए, जिससे भविष्य में सॉफ्टवेयर समुदाय के लिए इस उबाऊ प्रक्रिया को स्वचालित करना आसान हो सके।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।