आप जानते हैं, जब आप किसी ऐसे कोडबेस पर नज़र डालते हैं जिस पर आप अभी काम करना शुरू कर रहे हैं, तो एक निश्चित चिंता उत्पन्न हो जाती है, और आपको पता चलता है कि यह एक विशाल अज्ञात जंगल है। अप्रत्याशित से बचाव के लिए एक भी परीक्षण नहीं लिखा गया है।
यह खाई के ऊपर रस्सी पर चलने जैसा है, यह जानते हुए कि एक भी गलत कदम आपके पूरे प्रोजेक्ट को अस्त-व्यस्त कर सकता है।
यदि आपने 0 परीक्षणों वाले कोडबेस पर काम किया है, तो आप जानते हैं कि पूरे कोडबेस को शुरू से ही परीक्षणों के साथ कवर करने के बारे में सोचना एक कठिन काम हो सकता है, जहां वर्तमान में कोई भी मौजूद नहीं है।
यह प्रक्रिया लगभग कठिन प्रयास की मांग करती है: आपको प्रत्येक फ़ंक्शन, विधि और घटक पर विचार करना होगा, सभी संभावित किनारे के मामलों पर विचार-मंथन करना होगा, परीक्षण सूट कोड की संरचना करनी होगी और इसे सुचारू रूप से चलाना होगा।
और यह सार्थक कवरेज तक पहुंचने में लगने वाले समय को छू भी नहीं रहा है। हम हफ़्तों, शायद महीनों तक बात कर रहे हैं, इससे पहले कि आप आराम से बैठें और कहें, "हाँ, हमने 80% या 90% कवरेज हासिल कर लिया है।"
यही कारण है कि मैं पिछले कुछ महीनों से जिस पर काम कर रहा हूं उसे साझा करने के लिए उत्साहित हूं। यह यात्रा हमें एक ऐसी जगह ले जाती है जहां स्वचालित परीक्षण का दायरा एआई की जादुई दुनिया से मिलता है। पाइथागोरा से मिलें, एक ओपन-सोर्स डेव टूल जो आपका नया सबसे अच्छा दोस्त बनने वाला है।
इस पूरे ब्लॉग पोस्ट में, मैं आपको दिखाने जा रहा हूं कि पाइथागोरा के साथ स्वचालित परीक्षण कैसे शुरू करें जो आपके संपूर्ण कोडबेस के लिए परीक्षण उत्पन्न करने के लिए एआई की शक्ति का उपयोग करता है, सभी एक ही सीएलआई कमांड के साथ , और उम्मीद है कि आपका कोडबेस 80% - 90 तक पहुंच जाएगा। एक ही दिन में % कोड कवरेज ।
हम सभी यह कहावत जानते हैं, "रोम एक दिन में नहीं बना था।" एक व्यापक, प्रभावी परीक्षण सूट के लिए भी यही कहा जा सकता है। यह एक सावधानीपूर्वक, कठिन प्रक्रिया है, लेकिन एक बार जब आप इस पथरीले रास्ते को पार कर लेते हैं, तो उपलब्धि की भावना गहरी होती है।
आइए शुरुआत से एक परीक्षण सूट बनाने और उस प्रतिष्ठित 80% - 90% कोड कवरेज तक पहुंचने के लिए आवश्यक आवश्यक कदमों के माध्यम से एक साथ यात्रा करें।
पहले चरण में, आप एक खाली कैनवास के सामने एक चित्रकार की तरह होते हैं। दुनिया संभावनाओं से भरी है, और आप एक उत्कृष्ट कृति बनाने के लिए स्वतंत्र हैं।
इस मामले में, आपकी उत्कृष्ट कृति में उन परीक्षणों के प्रकारों को चुनना शामिल है जिन्हें आप लिखना चाहते हैं, उपयोग करने के लिए सही परीक्षण ढांचे को ढूंढना और अपने विशिष्ट वातावरण के लिए उपयुक्त सर्वोत्तम प्रथाओं को अपनाना शामिल है ।
क्या आप इकाई परीक्षण, एकीकरण परीक्षण, E2E परीक्षण, या तीनों के मिश्रण पर विचार कर रहे हैं?
हालाँकि इस प्रारंभिक सेटअप को अक्सर "आसान" भाग के रूप में देखा जाता है, लेकिन इसका मतलब पार्क में टहलना नहीं है। जानकारीपूर्ण निर्णय लेने के लिए समय, शोध और शायद कुछ कप कॉफी की आवश्यकता होती है।
एक बार जब आप अपनी बुनियादी संरचना तैयार कर लेते हैं, तो अब समय आ गया है कि आप अपनी आस्तीन ऊपर चढ़ाएं और बारीकियों में गहराई से उतरें। अब, आपको अपने संपूर्ण कोडबेस, एक समय में एक फ़ंक्शन से गुजरना होगा और प्रत्येक के लिए परीक्षण लिखना होगा। यहां आपका कार्य यह सुनिश्चित करना है कि आपके परीक्षण प्रत्येक फ़ंक्शन, विधि या घटक के भीतर कोड की सभी पंक्तियों को स्पर्श करें।
यह कार्य एक जटिल भूलभुलैया की खोज के समान है। आपको हर रास्ते से गुजरना होगा, हर कोने को मोड़ना होगा और यह सुनिश्चित करना होगा कि कोई कसर न छूटे।
इन परीक्षणों को लिखना एक विस्तृत, समय-गहन कदम है। यह केवल कोड की कुछ पंक्तियाँ लिखने के बारे में नहीं है; यह फ़ंक्शन के उद्देश्य, उसके अपेक्षित आउटपुट और यह आपके एप्लिकेशन के भीतर कैसे इंटरैक्ट करता है, इसे समझने के बारे में है।
परीक्षण के शुरुआती दौर के बाद, आप राहत की सांस ले सकते हैं। हालाँकि, रुको; पहेली का एक महत्वपूर्ण भाग अभी भी बाकी है। यह किनारे के मामलों की जंगली, अप्रत्याशित दुनिया में गोता लगाने का समय है।
यह भाग आपके कोड कवरेज प्रतिशत को नहीं बढ़ा सकता है, लेकिन यह आपके कोड की मजबूती और लचीलेपन का परीक्षण करने में महत्वपूर्ण है।
ये तथाकथित नकारात्मक परीक्षण यह मूल्यांकन करने में मदद करते हैं कि आपका कोड विभिन्न इनपुटों पर कैसे प्रतिक्रिया करता है, विशेष रूप से अपेक्षित व्यवहार के किनारे पर। खाली इनपुट से लेकर आपके डेटा प्रकारों की सीमाओं को आगे बढ़ाने वाले मानों तक, ये परीक्षण वास्तविक दुनिया में उपयोगकर्ता के व्यवहार की नकल करने के लिए डिज़ाइन किए गए हैं, जहां उपयोगकर्ता अक्सर आपके कोड को उन दिशाओं में धकेलने की आदत रखते हैं जिनके बारे में आपने कभी सोचा भी नहीं था।
शुरुआत से एक परीक्षण सूट बनाना एक अत्यंत कठिन कार्य है। लेकिन निश्चिंत रहें, आपके द्वारा किया गया हर प्रयास अधिक मजबूत, विश्वसनीय और लचीला एप्लिकेशन बनाने की दिशा में एक कदम है।
और याद रखें, आप अकेले नहीं हैं। हम सब वहाँ रहे हैं, और पाइथागोरा जैसे उपकरण के साथ, यात्रा उतनी कठिन नहीं है जितनी यह लग सकती है।
दूसरी ओर, पाइथागोरा के साथ, आप जो कर सकते हैं वह है:
npx pythagora --unit-tests --path ./path/to/repo
पाइथागोरा सभी फ़ोल्डरों में सभी फ़ाइलों के माध्यम से नेविगेट करेगा, और उसके सामने आने वाले प्रत्येक फ़ंक्शन के लिए यूनिट परीक्षण तैयार करेगा। अब, आप आराम से बैठ सकते हैं या दोपहर का भोजन ले सकते हैं, और इसे कुछ देर तक चलने दे सकते हैं जब तक कि यह परीक्षण लिखना समाप्त न कर ले।
ठीक है, लेकिन रुकिए, आखिर पाइथागोरा क्या है??
मैंने हमेशा एक ऐसी दुनिया का सपना देखा है जहां मेरे लिए स्वचालित परीक्षण बनाए जा सकें। लेकिन हकीकत इतनी सरल नहीं है. कोई भी आपके कोड को आपके जैसा नहीं जानता है, जिससे किसी अन्य के लिए इसके लिए प्रभावी स्वचालित परीक्षणों का मसौदा तैयार करना चुनौतीपूर्ण हो जाता है। परिणाम अक्सर आप जो हासिल करते हैं उससे कम हो जाते हैं।
हालाँकि, जब चैटजीपीटी ने दृश्य में प्रवेश किया तो सब कुछ बदल गया। जैसे ही मैंने इस तकनीक के साथ छेड़छाड़ की, मुझे आश्चर्य हुआ, "क्या हम स्वचालित परीक्षण लिखने के लिए चैटजीपीटी की शक्ति का उपयोग कर सकते हैं?"
जिज्ञासा बढ़ी, मैं गहराई में गया, इसकी क्षमताओं के साथ प्रयोग किया, और जो मैंने पाया उसने मुझे आश्चर्यचकित कर दिया।
चैटजीपीटी ने कोड को समझने की अविश्वसनीय क्षमता का प्रदर्शन किया, जो स्वचालित परीक्षण में एक आशाजनक नए रास्ते की झलक पेश करता है।
और इस प्रकार, पाइथागोरा के लिए एक विचार का जन्म हुआ।
पाइथागोरा एक ओपन-सोर्स डेव टूल है, जिसे एक मिशन को ध्यान में रखकर तैयार किया गया है: स्वचालित परीक्षण को स्वायत्त बनाना । मैं एक ऐसी दुनिया की कल्पना करता हूं जहां आप और मेरे जैसे डेवलपर्स, परीक्षण लेखन और रखरखाव के दलदल में फंसे बिना फीचर बनाने पर ध्यान केंद्रित कर सकें।
इस दृष्टिकोण को प्राप्त करने के लिए, यह GPT-4 का उपयोग कर रहा है।
वर्तमान में, पाइथागोरा के पास इकाई और एकीकरण परीक्षण दोनों लिखने की क्षमता है। हालाँकि, इस ब्लॉग पोस्ट के प्रयोजनों के लिए, हम इकाई परीक्षण उत्पन्न करने की इसकी क्षमता पर ध्यान केंद्रित करेंगे।
पाइथागोरा को स्थापित करने के लिए, आपको बस npm i pythagora
करना होगा। इतना ही! पाइथागोरा अब आपकी सेवा में है।
एक बार पाइथागोरा स्थापित हो जाने पर, आपको इसे एपीआई कुंजी से कॉन्फ़िगर करना होगा। यह या तो OpenAI API कुंजी या पाइथागोरा API कुंजी हो सकती है।
OpenAI API कुंजी का उपयोग करने के लिए, आपको निम्नलिखित कमांड चलाना चाहिए:
npx pythagora --config --openai-api-key <OPENAI_API_KEY>
यह ध्यान रखना महत्वपूर्ण है कि, यदि आप अपनी स्वयं की OpenAI API कुंजी का उपयोग करना चुनते हैं, तो आपके पास GPT-4 तक पहुंच होनी चाहिए।
वैकल्पिक रूप से, आप इस लिंक से पाइथागोरा एपीआई कुंजी प्राप्त कर सकते हैं। एक बार आपके पास यह हो जाए, तो इसे निम्नलिखित कमांड के साथ सेट करें:
npx pythagora --config --pythagora-api-key <PYTHAGORA_API_KEY>
यदि आप किसी विशिष्ट फ़ाइल के लिए परीक्षण उत्पन्न करना पसंद करते हैं, तो इसका उपयोग करें:
npx pythagora --unit-tests --path ./path/to/file.js
और यदि आपके मन में कोई विशेष कार्य है, तो इसका उपयोग करें:
npx pythagora --unit-tests --func <FUNCTION_NAME>
आइए पर्दा हटाएँ और इंजन कक्ष में एक नज़र डालें। पाइथागोरा को क्या परेशान करता है?
इसके मूल में, पाइथागोरा एक निडर खोजकर्ता के रूप में कार्य करता है, जो आपके कोडबेस की जटिल भूलभुलैया में उतरता है। सबसे पहले, यह आपकी फ़ाइलों से निर्यात किए गए सभी फ़ंक्शंस को मैप करता है ताकि यह उन्हें परीक्षणों के भीतर से कॉल कर सके।
जाहिर है, यदि कोई फ़ंक्शन निर्यात नहीं किया गया है, तो उसे उसकी फ़ाइल के बाहर से कॉल नहीं किया जा सकता है। वैसे, कुछ बार परीक्षण उत्पन्न करने के बाद, यह आपको अपने कोडबेस के बारे में सोचने पर मजबूर कर देगा और आप इसे बेहतर तरीके से कैसे संरचित कर सकते हैं ताकि अधिक परीक्षण उत्पन्न किए जा सकें।
एक बार जब यह निर्यात किए गए कार्यों की पहचान कर लेता है, तो पाइथागोरा खरगोश के छेद में एक और कदम उठाता है: यह बदले में प्रत्येक फ़ंक्शन की जांच करता है, और भीतर बुलाए गए किसी भी अतिरिक्त फ़ंक्शन का पता लगाता है।
इसे अपने कोडबेस के पुरातत्वविद् के रूप में चित्रित करें, जो छिपे हुए कनेक्शन और निर्भरता को उजागर करने के लिए धूल की परतों को धीरे से साफ़ कर रहा है।
दूसरे शब्दों में, यह उन सभी कार्यों की तलाश करता है जिन्हें परीक्षण किए जा रहे फ़ंक्शन के भीतर से बुलाया जाता है ताकि जीपीटी को यह बेहतर समझ मिल सके कि कोई फ़ंक्शन, जिसके लिए परीक्षण लिखे जा रहे हैं, क्या करता है।
इस जानकारी से लैस, पाइथागोरा एआई की शक्ति का उपयोग करने की तैयारी करता है। यह एकत्रित कोड को पैकेज करता है और पाइथागोरा एपीआई को भेजता है। यहां, वास्तविक जादू होता है: एक संकेत सावधानीपूर्वक तैयार किया जाता है और जीपीटी मॉडल को सौंप दिया जाता है।
कोड, एपीआई और एआई मॉडल के बीच इस इंटरैक्शन के परिणामस्वरूप यूनिट परीक्षणों का एक व्यापक सेट तैयार होता है, जो तैनात करने और काम पर लगाने के लिए तैयार होता है।
एपीआई सर्वर और उपयोग किए गए संकेत दोनों ओपन-सोर्स हैं। यदि आप चाहें तो वे आपके लिए गहराई से अध्ययन करने, जांच करने और यहां तक कि योगदान देने के लिए भी उपलब्ध हैं। आप पाइथागोरा एपीआई सर्वर यहां पा सकते हैं जबकि यूनिट परीक्षणों के निर्माण में संकेत और मुख्य सामग्री इस फ़ोल्डर में रखे गए हैं।
एक बार जब पाइथागोरा सभी अनुरोधित परीक्षण लिख लेता है, तो आपके लिए इसमें शामिल होने और उनकी समीक्षा शुरू करने का समय आ गया है। यह इस प्रक्रिया में एक महत्वपूर्ण कदम है; यह जानना महत्वपूर्ण है कि क्या बनाया गया है और सुनिश्चित करें कि सब कुछ आपकी अपेक्षाओं के अनुरूप हो।
याद रखें, पाइथागोरा जेस्ट-आधारित परीक्षण बनाता है। तो, सभी जेनरेट किए गए परीक्षण चलाने के लिए, आप बस चला सकते हैं:
npx jest ./pythagora_tests/
अब, सावधानी का एक शब्द: पाइथागोरा अभी भी अपने प्रारंभिक चरण में है। जैसा कि सभी युवा परियोजनाओं के साथ होता है, इसमें कुछ रुकावटें आना स्वाभाविक है। इसलिए, आपको अपने शुरुआती दौर में असफल परीक्षणों का सामना करना पड़ सकता है।
निराश मत होइए; इसे यात्रा का एक हिस्सा मानें. आपकी समीक्षा और पाइथागोरा में निरंतर सुधार के साथ, ये असफल परीक्षण जल्द ही अतीत की बात हो जाएंगे।
और आइए उजले पक्ष को न भूलें। शुरुआती चरण की इन शुरुआती समस्याओं के साथ भी, पाइथागोरा आपको एक ऐसे स्थान पर ले जा सकता है जहां आपके कोडबेस में पर्याप्त, संभावित रूप से 90% तक, परीक्षण कवरेज है ।
समीक्षा प्रक्रिया, विशेष रूप से बड़े कोडबेस के लिए, कुछ घंटे लग सकते हैं। याद रखें, आप न केवल उन परीक्षणों को देख रहे हैं जो उत्तीर्ण हुए बल्कि उन परीक्षणों को भी देख रहे हैं जो असफल हुए। आप अपनी रिपॉजिटरी में जो भी परीक्षण कर रहे हैं उसे समझना महत्वपूर्ण है। आख़िरकार ज्ञान ही शक्ति है।
गहन समीक्षा और संभावित बदलावों के बाद, आप अपना अंतिम कदम उठाने के लिए तैयार हैं: जेनरेट किए गए परीक्षणों को अपने भंडार में जमा करना। इस अंतिम चरण के साथ, आपने अपने प्रोजेक्ट में एक मजबूत यूनिट टेस्ट सूट को सफलतापूर्वक एकीकृत कर लिया होगा।
और यह सब पाइथागोरा की शक्ति और आपके टर्मिनल में कमांड की कुछ पंक्तियों से हासिल किया जाता है।
ठीक है, अब जब मैंने आपकी रुचि जगा दी है, तो आइए वास्तविक चीज़ों पर गौर करें - पाइथागोरा की कार्रवाई के मूर्त उदाहरण। हमारे प्रदर्शन के उद्देश्य के लिए, हमने एक प्रसिद्ध ओपन-सोर्स प्रोजेक्ट, लोदाश का चयन किया।
केवल एक पाइथागोरा कमांड चलाना 1604 परीक्षणों को उत्पन्न करने के लिए पर्याप्त था, जिससे संपूर्ण लॉडैश रिपॉजिटरी का प्रभावशाली 91% कोड कवरेज प्राप्त हुआ। लेकिन केवल परीक्षणों की संख्या ही प्रभावशाली नहीं है।
इनमें से 13 परीक्षणों में लोदाश मास्टर शाखा के भीतर वास्तविक बग का पता चला ।
यदि आप इन्हें स्वयं जांचने के लिए उत्सुक हैं, तो हमने लॉडैश रिपॉजिटरी को फोर्क किया है और पाइथागोरा द्वारा उत्पन्न परीक्षणों को जोड़ा है। बेझिझक उन्हें यहां देखें।
अब, आइए उन परीक्षणों में से एक पर करीब से नज़र डालें जिसमें एक गुप्त बग पकड़ा गया था:
test(`size({ 'a': 1, 'b': 2, 'length': 9 })`, () => { expect(size({ 'a': 1, 'b': 2, 'length': 9 })).toBe(3); // test returns 9 });
इस परीक्षण में, Lodash के size
फ़ंक्शन को JSON ऑब्जेक्ट का आकार लौटाना चाहिए। लेकिन, GPT ने length
नाम की एक कुंजी जोड़ी, यह देखने के लिए एक छोटी सी ट्रिक है कि क्या Lodash ऑब्जेक्ट के वास्तविक आकार के बजाय उस कुंजी का मान लौटा सकता है।
ऐसा प्रतीत होता है कि लोदाश इस चाल में फंस गया, क्योंकि परीक्षण अपेक्षित '3' के बजाय '9' लौटाने के कारण विफल हो गया।
यह इस बात का शानदार उदाहरण है कि जीपीटी द्वारा संचालित पाइथागोरा कैसे मुश्किल किनारे वाले मामलों को उजागर करने में उत्कृष्टता प्राप्त करता है जो आसानी से रडार के नीचे फिसल सकते हैं।
बड़ी संख्या में ऐसे जटिल परीक्षण मामलों को स्वचालित रूप से उत्पन्न करके, पाइथागोरा आपका भरोसेमंद साथी हो सकता है, जो आपको उन बगों को खोजने और ठीक करने में मदद कर सकता है जिनकी आपने कभी कल्पना भी नहीं की होगी।
खैर, साथी डेवलपर्स, हमारे पास यह है। हमने आज काफी लंबी यात्रा शुरू की है, परीक्षणों से रहित पर्याप्त कोडबेस के अज्ञात क्षेत्रों से गुजरते हुए, और हमारे भरोसेमंद एआई-संचालित टूल, पाइथागोरा द्वारा तैयार किए गए परीक्षणों के एक स्वचालित सूट के साथ लौट रहे हैं।
आपने सीखा है कि कठिन, परीक्षण-रहित कोडबेस के सामने भी निराशा की कोई आवश्यकता नहीं है। परीक्षणों का एक बड़ा समूह तैयार करने का कार्य अब अधिक कठिन नहीं रह गया है।
हमने पाइथागोरा का जादू देखा है क्योंकि इसने एक प्रसिद्ध ओपन-सोर्स लाइब्रेरी, लॉडैश की जांच की और 1604 परीक्षण तैयार किए, जिन्होंने आश्चर्यजनक 91% कोडबेस को कवर किया।
हमने देखा कि पाइथागोरा न केवल मात्रा के बारे में है, बल्कि परीक्षणों की गुणवत्ता के बारे में भी है। यह केवल इसके लिए परीक्षण नहीं बना रहा है, बल्कि बुद्धिमानी से ऐसे किनारे के मामलों और बगों को ढूंढ रहा है जो अन्यथा किसी का ध्यान नहीं गए होंगे।
पाइथागोरा ने लॉडैश मास्टर शाखा में 13 वास्तविक बगों का खुलासा किया - जो सॉफ्टवेयर परीक्षण में एआई की शक्ति का एक प्रमाण है।
अब, आपको इस बात की स्पष्ट समझ होनी चाहिए कि पाइथागोरा जैसे एआई-संचालित परीक्षण उपकरण न केवल एक विलासिता हैं, बल्कि आज के तेज़ गति वाले विकास परिदृश्य में एक आवश्यकता भी हैं।
तो चाहे आप शून्य परीक्षण वाले किसी मौजूदा प्रोजेक्ट से निपट रहे हों या एक नया प्रोजेक्ट शुरू कर रहे हों और शुरू से ही एक ठोस परीक्षण ढांचा स्थापित करना चाह रहे हों, याद रखें कि आप अकेले नहीं हैं।
पाइथागोरा यहां बागडोर संभालने के लिए है, जिससे आपको आसानी से सार्थक परीक्षण तैयार करने में मदद मिलेगी, और आपका बहुमूल्य समय बचेगा जिसे बेहतरीन सुविधाओं को विकसित करने में बेहतर ढंग से खर्च किया जा सकता है।
इस यात्रा में मेरे साथ शामिल होने के लिए धन्यवाद, और मैं यह देखने के लिए इंतजार नहीं कर सकता कि आप अपनी परियोजनाओं में पाइथागोरा का उपयोग कैसे करते हैं। हैप्पी कोडिंग!
PS यदि आपको यह पोस्ट मददगार लगी, तो यह मेरे लिए बहुत मायने रखेगा यदि आपने पाइथागोरा जीथब रेपो को तारांकित किया है, और यदि आप पाइथागोरा को आज़माते हैं, तो कृपया हमें बताएं कि यह [email protected] पर कैसा रहा।