सामग्री पर जाएं
यह लेख जापानी से एआई का उपयोग करके अनुवादित किया गया है
जापानी में पढ़ें
यह लेख सार्वजनिक डोमेन (CC0) में है। इसे स्वतंत्र रूप से उपयोग करने के लिए स्वतंत्र महसूस करें। CC0 1.0 Universal

विकासात्मक विकास और रीफैक्टरिंग-संचालित परीक्षण

विकास कुछ नया और उपयोगी बनाने की एक पुनरावृति प्रक्रिया है।

जब हम विकास के बारे में सोचते हैं, तो अक्सर नए उत्पाद का विकास दिमाग में आता है। यह विनिर्माण से अलग है, जो व्यक्तिगत उत्पादों का उत्पादन करता है; इसके बजाय, इसमें उत्पादों के लिए डिज़ाइन विनिर्देश या साँचे बनाना शामिल है।

इस प्रकार, नए उत्पाद विकास के माध्यम से बनाए गए ब्लूप्रिंट या साँचे का कारखानों में बार-बार उपयोग करके कई समान उत्पाद बनाए जाते हैं।

व्यक्तिगत क्षमताओं के विकास या समाज और राष्ट्रों के विकास जैसे उपयोग भी हैं। इनका अर्थ केवल किसी के पास जो कुछ है उसमें वृद्धि करना नहीं है, बल्कि विकसित क्षमताओं का बार-बार उपयोग करने और उनसे लाभ उठाने की क्षमता है।

जबकि व्यक्तियों और समाजों की आर्थिक शक्ति आर्थिक परिस्थितियों के कारण घट-बढ़ सकती है, विकसित क्षमताएं मूल रूप से स्थायी होती हैं।

भले ही वे घटती हों, इसे आर्थिक समृद्धि के उतार-चढ़ाव के बजाय गिरावट माना जाता है।

इनसे परे, प्रौद्योगिकी और ज्ञान का विकास भी है। व्यक्तियों या विशिष्ट समाजों की क्षमताओं के विपरीत, इनमें आसानी से साझा किए जाने की विशेषता होती है।

और इन विकासों के परिणामों में से कुछ उत्पाद, क्षमताएं, ज्ञान और प्रौद्योगिकियां बाद के विकास में योगदान कर सकती हैं।

ऐसे उपयोगी आउटपुट विकसित करके, विकास का दायरा बढ़ता है, और दक्षता व गुणवत्ता में सुधार होता है।

AI-संचालित सॉफ्टवेयर विकास

आम तौर पर, विकास में काफी समय और प्रयास लगता है। विशेष रूप से जैसे-जैसे समाज आगे बढ़ता है और विभिन्न चीजें अधिक परिष्कृत होती जाती हैं, नई चीजें बनाना और भी मुश्किल हो जाता है।

हालांकि, जेनरेटिव एआई के आगमन के साथ, यह स्थिति बदल रही है। वर्तमान में, जेनरेटिव एआई की उच्च प्रोग्रामिंग क्षमताओं के कारण सॉफ्टवेयर विकास में नाटकीय परिवर्तन हो रहे हैं।

इस परिदृश्य में, एक भविष्य की परिकल्पना जहां जेनरेटिव एआई पर आधारित स्वायत्त एजेंट सॉफ्टवेयर इंजीनियरों के रूप में सॉफ्टवेयर विकास के केंद्र में आ जाएंगे, वह पहले से ही एक वास्तविकता बन रही है।

हम वर्तमान में एक संक्रमणकालीन दौर में हैं। जबकि हम पूरी तरह से विकास को जेनरेटिव एआई को नहीं सौंप सकते, जेनरेटिव एआई का कुशलतापूर्वक उपयोग सॉफ्टवेयर विकास को शक्तिशाली रूप से आगे बढ़ा सकता है।

इसे एआई-संचालित सॉफ्टवेयर विकास के रूप में जाना जाता है।

विकासात्मक विकास

जब जनरेटिव एआई सॉफ्टवेयर विकास को अधिक कुशल बनाता है, तो यह न केवल अंतिम लक्ष्य सॉफ्टवेयर के विकास को सुव्यवस्थित कर सकता है, बल्कि ऐसे सॉफ्टवेयर के विकास को भी सुव्यवस्थित कर सकता है जो स्वयं विकास में सहायता करता है।

जैसा कि पहले उल्लेख किया गया है, जो आउटपुट विकास को सुविधाजनक बनाते हैं, वे इसके दायरे को बढ़ाते हैं, और दक्षता और गुणवत्ता में सुधार करने में मदद करते हैं। इसके अलावा, यदि उन्हें प्रभावी ढंग से बनाया जाता है, तो उन्हें अन्य विकास परियोजनाओं में भी पुन: उपयोग किया जा सकता है।

इसलिए, सॉफ्टवेयर विकास प्रक्रिया के दौरान विकास में सहायता करने वाले सॉफ्टवेयर को विकसित करके, समग्र दक्षता बढ़ाई जा सकती है, और इन संपत्तियों का भविष्य के विकास के लिए लाभ उठाया जा सकता है।

परंपरागत रूप से, ऐसे सहायक सॉफ्टवेयर का विकास एक सामान्य अभ्यास था, लेकिन इसमें अपने स्वयं के विकास का समय और प्रयास लगता था, जिसके लिए सावधानीपूर्वक विचार और केंद्रित निष्पादन की आवश्यकता होती थी।

जनरेटिव एआई का उपयोग करके, कोई भी आसानी से दिमाग में आने वाले छोटे-मोटे कार्यों को स्वचालित करने के लिए सरल सॉफ्टवेयर बना सकता है। यदि कार्य में स्पष्ट प्रसंस्करण शामिल है, तो जनरेटिव एआई लगभग बिना किसी त्रुटि के सटीक रूप से प्रोग्राम उत्पन्न कर सकता है।

परिणामस्वरूप, सॉफ्टवेयर विकास प्रक्रिया के दौरान विकास में सहायता करने वाले सॉफ्टवेयर का विकास पहले की तुलना में आसान हो गया है।

और, इस पर गहराई से विचार करके, एक विकास शैली उभरती है जहां विकास के लिए उपयोगी उपकरण प्रक्रिया के दौरान लगातार बनाए जाते हैं, जिससे विकास पद्धति स्वयं बदल जाती है।

हम इसे "विकासात्मक विकास" कहेंगे।

विकासात्मक विकास का अभ्यास करने के लिए, किसी को अपने स्वयं के सॉफ्टवेयर विकास को वस्तुनिष्ठ रूप से देखने की आदत चाहिए, यह विचार करते हुए कि कौन से हिस्से सॉफ्टवेयर द्वारा संभाले जा सकते हैं और कौन से हिस्से केवल मनुष्यों द्वारा, साथ ही ऐसे सहायक सॉफ्टवेयर विकसित करने का कौशल भी चाहिए।

इसके अलावा, जनरेटिव एआई को इन सॉफ्टवेयर उपकरणों में शामिल किया जा सकता है। इसे सॉफ्टवेयर के भीतर एम्बेड करके, जनरेटिव एआई एजेंटों के विपरीत, प्रसंस्करण के दायरे को कुछ हद तक सीमित किया जा सकता है, और मार्ग परिभाषित किए जा सकते हैं।

जबकि एआई एजेंट प्रॉम्प्ट के माध्यम से समान परिणाम प्राप्त कर सकते हैं, एम्बेडेड जनरेटिव एआई वाला सॉफ्टवेयर प्रोग्राम और प्रॉम्प्ट दोनों को मिलाकर अधिक आसानी से सटीकता बढ़ा सकता है।

यदि ऐसे विकासात्मक विकास का अभ्यास किया जा सकता है, तो दूसरी परियोजना पहले की तुलना में गुणवत्ता और लागत दोनों में सुधार दिखाएगी। इसके अलावा, प्रत्येक बाद की परियोजना—तीसरी, चौथी, और इसी तरह—सुधारों का संचय जारी रहेगा।

यह केवल सॉफ्टवेयर विकसित करने के लिए जनरेटिव एआई का उपयोग करने से पूरी तरह से अलग है। जेनरेटिव एआई उपकरणों में महारत हासिल करने वाली टीमों और विकासात्मक विकास का अभ्यास करने वाली टीमों के बीच समय के साथ एक महत्वपूर्ण अंतर उभर कर आएगा।

रिफैक्टरिंग-संचालित परीक्षण

एक अवधारणा है जिसे टेस्ट-ड्रिवन डेवलपमेंट (टीडीडी) कहा जाता है, जहां विनिर्देशों के आधार पर पहले टेस्ट डिज़ाइन किए जाते हैं, और फिर उन टेस्ट्स को पास करने के लिए सॉफ्टवेयर विकसित किया जाता है।

शुरुआत में, मैंने भी सोचा था कि जेनरेटिव एआई का लाभ उठाकर, स्वचालित परीक्षण के लिए टेस्ट प्रोग्राम विकसित करना आसान होगा, जिससे टीडीडी संभव हो जाएगा।

हालांकि, जैसे ही मैंने विकासात्मक विकास का अभ्यास करना शुरू किया, मुझे विश्वास हो गया कि कार्यान्वयन से पहले टेस्ट के बारे में सोचना हमेशा सबसे उपयुक्त तरीका नहीं होता है।

विशेष रूप से वेब एप्लिकेशन जैसे सॉफ्टवेयर के लिए, जिसमें उपयोगिता और विज़ुअल डिज़ाइन जैसे व्यक्तिपरक पहलू शामिल होते हैं, जिनके साथ सीधे इंटरैक्ट किया जाता है, मैंने महसूस किया कि विस्तृत टेस्ट की तुलना में वास्तव में सॉफ्टवेयर को चलाना और उसके साथ इंटरैक्ट करना प्राथमिकता लेता है।

ऐसा इसलिए है क्योंकि यदि UI/UX स्तर पर इंटरैक्ट करने के बाद महत्वपूर्ण असंतोष होता है, तो फ्रेमवर्क, मूल आर्किटेक्चर, डेटा मॉडल या यूज़ केस जैसे मूलभूत हिस्सों को बदलने की संभावना होती है।

मेरे वर्तमान व्यक्तिगत सॉफ्टवेयर विकास प्रोजेक्ट में, मैंने फीचर लचीलेपन और प्रदर्शन के साथ समस्याओं पर ध्यान दिया और अंततः दो फ्रेमवर्क को अलग-अलग में बदल दिया।

मुझे कुछ क्षेत्रों में अक्षम मेमोरी उपयोग के कारण प्रोसेसिंग की पूरी तरह से समीक्षा भी करनी पड़ी।

रिफैक्टरिंग के इन्हीं क्षणों में, परीक्षण पहली बार एक सचेत विचार बन जाता है।

यदि यह विकास के शुरुआती चरण में है, या यदि कार्य और विनिर्देश वैसे भी काफी बदलने वाले हैं, तो टेस्ट अनावश्यक हो सकते हैं।

हालांकि, यदि विकास पहले से ही काफी उन्नत है और जांचने के लिए कई आइटम हैं, तो यह पुष्टि करने के लिए टेस्ट आवश्यक होंगे कि रिफैक्टरिंग ने कार्यात्मक दोष या चूक पेश नहीं की है।

इसलिए, जब विकास एक निश्चित सीमा तक आगे बढ़ गया हो और रिफैक्टरिंग आवश्यक हो जाए, तो टेस्ट प्रोग्राम बनाने का तरीका बुरा विचार नहीं है।

इस बिंदु पर, कुंजी सभी कोड के लिए टेस्ट बनाना नहीं है, बल्कि उन परिपक्व हिस्सों का परीक्षण करने पर ध्यान केंद्रित करना है जिनके भविष्य में बहुत अधिक बदलने की संभावना नहीं है, जबकि तरल हिस्सों को स्वचालित टेस्ट के बिना छोड़ देना है।

इसे रिफैक्टरिंग-ड्रिवन टेस्टिंग कहा जा सकता है।

निष्कर्ष

जनरेटिव एआई सॉफ्टवेयर विकास को नाटकीय रूप से बदल रहा है।

एक पिछले लेख में, मैंने "सर्व-दिशात्मक इंजीनियर" बनने के लक्ष्य के महत्व के बारे में लिखा था, जो पारंपरिक फुल-स्टैक इंजीनियर से आगे बढ़कर विभिन्न डोमेन, इन्फ्रास्ट्रक्चर और निष्पादन वातावरण को संयोजित करने वाले सिस्टम विकसित करने में सक्षम हो।

मैंने एक लेख यह सुझाव देते हुए भी लिखा था कि हम "अनुभव और व्यवहार-केंद्रित विकास" के युग में प्रवेश कर रहे हैं, जहां ध्यान विशिष्टताओं को कार्यान्वयन के साथ संरेखित करने पर नहीं, बल्कि सॉफ्टवेयर व्यवहार के माध्यम से उपयोगकर्ता अनुभव को बेहतर बनाने पर है।

विकासात्मक विकास और रिफैक्टरिंग-संचालित परीक्षण ठीक वही हैं जो सॉफ्टवेयर विकास में इन नए क्षितिजों की ओर ले जाते हैं।