क्या आपका AI कोड कचरा है? (इसे ठीक करने का तरीका यहाँ है)

BBetter Stack
컴퓨터/소프트웨어경영/리더십AI/미래기술

Transcript

00:00:00आज, मैं CRAP (क्रैप) के बारे में बात करना चाहता हूँ। और नहीं, यह उस तरह का CRAP नहीं है। मैं बात कर रहा हूँ
00:00:05संक्षिप्त नाम की, जिसका मतलब है Change Risk Anti-Patterns Index (चेंज रिस्क एंटी-पैटर्न्स इंडेक्स)। और इसे डिज़ाइन किया गया है
00:00:12आपके कोड में जोखिम भरे फंक्शन्स को खोजने के लिए, जो बहुत जटिल हैं, लेकिन जिनका परीक्षण ठीक से नहीं हुआ है। यह कोई बहुत
00:00:18नई अवधारणा नहीं है, लेकिन एक ऐसी अवधारणा जिसने हाल ही में मेरा ध्यान खींचा है, एक पैकेज की बदौलत जिसे
00:00:24अलेक्जेंडर प्रोखोराेंको ने 'Cargo CRAP' नाम दिया है, जो रस्ट (Rust) कोड में इन प्रमुख फंक्शन्स की पहचान करता है।
00:00:31CRAP मेट्रिक का मूल विचार अल्बर्टो सविया और बॉब इवांस से आया है, जिन्होंने इस
00:00:37मेट्रिक का आविष्कार 2007 में किया था, जब वे स्वचालित डेवलपर परीक्षण उपकरणों के साथ प्रयोग कर रहे थे। लेकिन अलेक्जेंडर ने
00:00:44हाल ही में इस भूले-बिसरे मेट्रिक के बारे में एक व्यावहारिक ब्लॉग पोस्ट लिखकर इस पर फिर से ध्यान आकर्षित किया है,
00:00:49और कैसे आजकल जब लगभग सारा कोड AI एजेंटों द्वारा लिखा जा रहा है, तो यह पहले से कहीं अधिक महत्वपूर्ण है
00:00:55कि आप इन छिपी हुई समस्याओं के लिए अपने कोडबेस को स्कैन करें। यह एक बहुत ही शानदार अवधारणा है और हम आज के वीडियो में इसका
00:01:01विस्तार से पता लगाएंगे। तो आइए इसमें गहराई से उतरते हैं। यह क्यों मायने रखता है, इसे समझने के लिए, आइए देखते हैं
00:01:11मेरी स्क्रीन पर यह फंक्शन। यह गहराई से नेस्टेड मैच स्टेटमेंट के साथ
00:01:16डेटा ट्रांसफ़ॉर्मेशन के कई चरणों को संभालता है, कुछ लूप्स और बहुत सारे एरर हैंडलिंग पाथ्स के साथ। तो इसकी साइक्लोमैटिक जटिलता काफी अधिक है, लगभग 15।
00:01:24अब यदि आप 'साइक्लोमैटिक जटिलता' शब्द से परिचित नहीं हैं, तो यह मूल रूप से मापने का एक फैंसी तरीका है
00:01:30कि आपके कोड के माध्यम से डेटा कितने अलग-अलग रास्ते ले सकता है। हर बार जब आप एक 'if' स्टेटमेंट लिखते हैं
00:01:36या 'match' या 'while' लूप या 'catch' ब्लॉक लिखते हैं, तो आप रास्ते में एक मोड़ बना रहे होते हैं और जितने अधिक मोड़ होंगे,
00:01:43जटिलता स्कोर उतना ही बढ़ता जाएगा। और मानव मस्तिष्क के लिए फंक्शन में हर एक संभावित परिणाम का पता लगाना उतना ही कठिन होता जाएगा।
00:01:51इसलिए जब भी संभव हो, हम फंक्शन्स को छोटे कार्यों में विभाजित करने का प्रयास करते हैं।
00:01:57और मेरी स्क्रीन पर मौजूद इस फंक्शन के लिए, 15 की जटिलता का मतलब है कि 15 पूरी तरह से अलग रास्ते हैं
00:02:04जिनसे यह लॉजिक शुरू से अंत तक निष्पादित हो सकता है। अब यदि यह फंक्शन पूरी तरह से यूनिट टेस्ट द्वारा कवर किया गया है,
00:02:09तो इसका 'क्रैप' स्कोर 15 पर रहता है। यह जटिल है, लेकिन यह सुरक्षित है क्योंकि हम इसके व्यवहार को मान्य कर रहे हैं।
00:02:16और जब हम अलेक्जेंडर के टूल, CargoCrap को चलाते हैं तो हमें यही उम्मीद करनी चाहिए। और यहाँ हम देखते हैं कि स्कोर 13 है,
00:02:2315 नहीं। शायद इसलिए क्योंकि लाइब्रेरी ने एरर हैंडलर्स को ध्यान में नहीं रखा।
00:02:27पर खैर, 15 और 13 काफी करीब हैं। तो मूल रूप से यह टूल वही कर रहा है जिसकी हमें उम्मीद है।
00:02:33लेकिन आइए देखें कि क्या होता है यदि कोई उन टेस्ट्स को हटा देता है या यदि कोई AI एजेंट इस फंक्शन को
00:02:39शुरुआत से जनरेट करता है और टेस्ट्स लिखना पूरी तरह से छोड़ देता है। तो इस उदाहरण में, मैं बस अपने टेस्ट्स को कमेंट आउट करने जा रहा हूँ।
00:02:45और यदि हम CargoCrap को फिर से चलाएं, तो अचानक वह स्कोर 100 से ऊपर चला जाता है।
00:02:51तो यह जोखिम की गणना करने के लिए एक सीधा फॉर्मूला उपयोग करता है जो साइक्लोमैटिक जटिलता को संतुलित करता है,
00:02:57आपके कोड के माध्यम से रैखिक निष्पादन पथों (linear execution paths) की संख्या और टेस्ट कवरेज के बीच।
00:03:03तो यदि हम इस फंक्शन को देखें, C फंक्शन की साइक्लोमैटिक जटिलता है और COV शून्य से एक के बीच के अंश के रूप में टेस्ट कवरेज है,
00:03:10और यह गणित जटिल कोड को भारी दंडित करता है जिसमें टेस्ट्स की कमी होती है।
00:03:17इसलिए यदि आपका कवरेज सौ प्रतिशत है, तो समीकरण का पूरा पहला हिस्सा शून्य हो जाता है
00:03:23और आपका CRAPS स्कोर केवल आपकी साइक्लोमैटिक जटिलता के बराबर हो जाता है।
00:03:26लेकिन यदि आपका कवरेज गिरता है, तो बाईं ओर का घन घातांक (cubic exponent) जोखिम स्कोर को आसमान छूने के लिए मजबूर करता है।
00:03:33और 10 की जटिलता और शून्य कवरेज वाला फंक्शन 110 का CRAPS स्कोर देता है।
00:03:39और यह अच्छी बात है क्योंकि यदि आप एक ऐसा कोडबेस चाहते हैं जहाँ, उदाहरण के लिए,
00:03:43कोई भी फंक्शन पाँच की साइक्लोमैटिक जटिलता से अधिक न हो, तो यह आपका देखने वाला आधार मेट्रिक है।
00:03:49और यदि कोई फंक्शन पाँच से ऊपर जाता है, तो आप जानते हैं कि यह वह क्षेत्र है जिस पर ध्यान देने की आवश्यकता है।
00:03:55आम तौर पर आप उच्च जटिलता की अनुमति देंगे। CargoCrap में डिफॉल्ट 30 सेट है।
00:04:00लेकिन मैं बस इतना कह रहा हूँ कि आप इस मेट्रिक को अपनी इच्छानुसार सेट कर सकते हैं।
00:04:05और मूल रूप से यह ध्यान देने के लिए एक अच्छा मध्यम-मार्ग का मेट्रिक है।
00:04:09और AI द्वारा जनरेट किए गए कोड के युग में यह बहुत महत्वपूर्ण हो जाता है।
00:04:13क्योंकि AI एजेंट इन अत्यधिक जटिल, व्याकरण की दृष्टि से सही कोड ब्लॉक उगलने में अविश्वसनीय रूप से अच्छे हैं
00:04:20जो उन एज केसेस को संभालते हैं जिनके बारे में आपने सोचा भी नहीं था, लेकिन वे सार्थक, मजबूत इंटीग्रेशन टेस्ट लिखने में कुख्यात रूप से खराब हैं
00:04:25जब तक कि उन्हें स्पष्ट रूप से ऐसा करने के लिए मजबूर न किया जाए।
00:04:30तो CargoCrap जैसे टूल्स का मतलब है कि कोड की गुणवत्ता का आकलन करने के लिए सभी यूनिट टेस्ट चलाने के बाद एक दूसरे चेक के रूप में चलाया जाए।
00:04:37तो मूल रूप से यह आपके तकनीकी ऋण (technical debt) के लिए हीट मैप की तरह काम करता है,
00:04:39जो आपको सीधे उस कोड की ओर इशारा करता है जो रिफ़ैक्टर के दौरान टूटने की सबसे अधिक संभावना है।
00:04:44और यह विशेष रूप से तब सहायक होता है यदि आप अपने कोडबेस को अच्छी तरह से व्यवस्थित रखना चाहते हैं
00:04:47ताकि यदि आपको अपनी टीम में किसी नए इंजीनियर को शामिल करने की आवश्यकता हो।
00:04:52और हम वास्तविक अनुभवों से जानते हैं कि आजकल इस सभी AI जनित कोड के साथ कोडबेस कितने अव्यवस्थित हो सकते हैं
00:04:56यदि हम इस पर ध्यान नहीं देते हैं।
00:05:02और कभी-कभी इन AI एजेंटों में एक ही फंक्शन को कई फाइलों में डुप्लिकेट करने की प्रवृत्ति भी होती है।
00:05:06इसलिए मुझे लगता है कि इस तरह के टूल्स और अधिक महत्वपूर्ण बात यह है कि इस तरह की कार्यप्रणालियों के बारे में पता होना चाहिए
00:05:13और हमारे आधुनिक कोडिंग परिदृश्य में हमारे कोड की गुणवत्ता को उच्च रखने के लिए इन्हें नहीं भूलना चाहिए।
00:05:19जिन लेखकों ने इस कार्यप्रणाली का विचार दिया था, उन्होंने Java के लिए भी एक क्रैप मेट्रिक टूल जारी किया।
00:05:24और ईमानदारी से कहूँ तो, हाल ही में अलेक्जेंडर की ब्लॉग पोस्ट पढ़ने तक, मुझे इस मेट्रिक के बारे में पता भी नहीं था।
00:05:30इसलिए मैं आभारी हूँ कि उनके टूल ने मुझे इस लंबे समय से भूले हुए इंजीनियरिंग अभ्यास को नोटिस करने पर मजबूर किया।
00:05:34और मुझे यकीन है कि अन्य प्रोग्रामिंग भाषाएँ भी ऐसे टूल से लाभान्वित होंगी।
00:05:40तो यदि आप अपने खाली समय में बनाने के लिए किसी मज़ेदार प्रोजेक्ट के बारे में सोच रहे हैं,
00:05:44तो अल्बर्टो सविया की मूल पोस्ट पढ़ें और किसी दूसरी कोडिंग भाषा के लिए एक टूल बनाएं
00:05:48क्योंकि यह बहुत सारे डेवलपर्स के लिए एक बहुत ही उपयोगी उपयोगिता हो सकती है।
00:05:53तो यह लीजिए, दोस्तों।
00:05:57संक्षेप में यह क्रैप (CRAP) है।
00:05:58वह थोड़ा अजीब लगा।
00:06:01खैर, कुछ और लंबे समय से भूले हुए इंजीनियरिंग अभ्यास या मेट्रिक्स क्या हैं जो आप जानते हैं
00:06:02जिन पर हमें एजेंटिक कोडिंग के इस नए युग में अधिक ध्यान देना चाहिए?
00:06:08हमें नीचे कमेंट सेक्शन में बताएं।
00:06:13और दोस्तों, यदि आपको ये तकनीकी विश्लेषण पसंद हैं,
00:06:15तो कृपया वीडियो के नीचे लाइक बटन को स्मैश करके मुझे बताएं।
00:06:18और हमारे चैनल को सब्सक्राइब करना न भूलें।
00:06:21यह BetterStack से एंड्रस रहा है और मैं आपको अगले वीडियो में देखूँगा।
00:06:24मैं आपको अगले वीडियो में देखूँगा।
00:06:28मैं आपको अगले वीडियो में देखूँगा।

Key Takeaway

CargoCrap जैसे टूल का उपयोग करके 30 से अधिक के CRAP स्कोर वाले फंक्शन्स की पहचान करना AI-जनित कोड के युग में तकनीकी ऋण और रिफ़ैक्टरिंग जोखिम को नियंत्रित करने का एक प्रभावी तरीका है।

Highlights

  • CRAP (Change Risk Anti-Patterns) इंडेक्स का उपयोग कोडबेस में जटिल और बिना टेस्ट किए गए फंक्शन्स की पहचान करने के लिए किया जाता है।

  • साइक्लोमैटिक जटिलता (Cyclomatic Complexity) यह मापती है कि कोड के माध्यम से डेटा के कितने अलग-अलग रास्ते हो सकते हैं।

  • CargoCrap टूल रस्ट (Rust) कोडबेस में 30 से अधिक के CRAP स्कोर वाले फंक्शन्स को रिफ़ैक्टरिंग के लिए चिह्नित करता है।

  • बिना टेस्ट कवरेज वाला 10 की साइक्लोमैटिक जटिलता वाला फंक्शन 110 का CRAP स्कोर उत्पन्न करता है।

  • AI एजेंटों द्वारा लिखा गया कोड जटिल और कार्यात्मक हो सकता है, लेकिन अक्सर इसमें मजबूत इंटीग्रेशन टेस्ट की कमी होती है।

Timeline

CRAP मेट्रिक की अवधारणा और उद्देश्य

  • CRAP का मतलब चेंज रिस्क एंटी-पैटर्न्स इंडेक्स है।
  • यह मेट्रिक 2007 में अल्बर्टो सविया और बॉब इवांस द्वारा विकसित किया गया था।
  • अलेक्जेंडर प्रोखोराेंको द्वारा रस्ट के लिए CargoCrap टूल के माध्यम से इसे फिर से प्रचलित किया गया है।

CRAP मेट्रिक का मुख्य उद्देश्य कोड के उन हिस्सों को ढूंढना है जो बहुत जटिल हैं और जिनका परीक्षण सही ढंग से नहीं हुआ है। यह AI एजेंटों द्वारा लिखे गए कोड की गुणवत्ता को ट्रैक करने के लिए एक आवश्यक साधन है, क्योंकि ये एजेंट अक्सर बिना उचित परीक्षण के जटिल कोड तैयार करते हैं।

साइक्लोमैटिक जटिलता और जोखिम की गणना

  • साइक्लोमैटिक जटिलता कोड में 'if', 'match', 'while' और 'catch' जैसे रास्तों की संख्या मापती है।
  • CRAP स्कोर साइक्लोमैटिक जटिलता और यूनिट टेस्ट कवरेज के बीच संतुलन को दर्शाता है।
  • उच्च जटिलता और शून्य कवरेज होने पर CRAP स्कोर में तेजी से वृद्धि होती है।

15 की साइक्लोमैटिक जटिलता का मतलब है कि फंक्शन के निष्पादन के 15 अलग-अलग रास्ते हैं। यदि टेस्ट कवरेज 100% है, तो CRAP स्कोर केवल साइक्लोमैटिक जटिलता के बराबर होता है, लेकिन कम कवरेज के साथ गणितीय घन घातांक जोखिम स्कोर को 100 से ऊपर ले जा सकता है।

आधुनिक कोडिंग में व्यावहारिक अनुप्रयोग

  • CargoCrap को यूनिट टेस्ट के बाद कोड गुणवत्ता के दूसरे चेक के रूप में उपयोग करना चाहिए।
  • यह टूल तकनीकी ऋण के लिए हीट मैप की तरह कार्य करता है।
  • AI जनित कोड में डुप्लिकेट फंक्शन और खराब टेस्ट कवरेज को नियंत्रित करना आवश्यक है।

CargoCrap जैसे टूल्स रिफ़ैक्टरिंग के दौरान टूटने की सबसे अधिक संभावना वाले कोड को दर्शाते हैं। यह अभ्यास टीम में नए इंजीनियरों को शामिल करने और कोडबेस को व्यवस्थित रखने में मदद करता है। डेवलपर्स अन्य भाषाओं के लिए भी ऐसे मेट्रिक टूल्स विकसित कर सकते हैं ताकि इंजीनियरिंग गुणवत्ता मानकों को ऊंचा रखा जा सके।

Community Posts

No posts yet. Be the first to write about this video!

Write about this video