इकाई 4 / 12

कोड समीक्षा, रीफैक्टरिंग, और तकनीकी ऋण

लाभ:

  • पठनीयता, तर्क और सुरक्षा के लिए कोड समीक्षा में एआई को दूसरी आंख के रूप में उपयोग करने की क्षमता
  • जटिल कोड व्यवहार को बाधित किए बिना एआई समर्थन के साथ रीफैक्टरिंग चरणों की योजना बनाने की क्षमता
  • परीक्षण और संस्करण नियंत्रण तुलना के साथ एआई की समीक्षा को सत्यापित करने और सिफारिशों को संपादित करने की क्षमता

सॉफ्टवेयर इंजीनियरिंग में, कोड जितना लिखा जाता है उससे कहीं अधिक पढ़ा जाता है। कोड की एक पंक्ति एक बार लिखी जाती है, लेकिन महीनों के दौरान दर्जनों बार पढ़ी, संशोधित और निर्मित की जाती है। इसीलिए कोड समीक्षा (तर्क, पठनीयता और सुरक्षा के लिए किसी और के या अपने कोड की समीक्षा करना) और रीफैक्टरिंग (कोड के व्यवहार को बदले बिना उसकी संरचना में सुधार करना) इंजीनियरिंग के केंद्र में हैं। एआई इन दो कार्यों के लिए एक शक्तिशाली "दूसरी आंख" बन जाता है: यह शीघ्रता से पठनीयता का सुझाव देता है, नजरअंदाज किए गए तर्क और सुरक्षा मुद्दों को इंगित करता है, और एक बड़े रिफैक्टरिंग को छोटे सुरक्षित चरणों में तोड़ देता है। लेकिन एक महत्वपूर्ण नियम है: रिफैक्टरिंग से व्यवहार नहीं बदलना चाहिए, और एकमात्र चीज जो इसकी गारंटी देती है वह है परीक्षण।

इस इकाई में, हम देखेंगे कि कोड समीक्षा के लिए संरचित तरीके से एआई का उपयोग कैसे करें, जटिल कोड को उसके व्यवहार को तोड़े बिना कैसे ठीक करें, और तकनीकी ऋण (त्वरित लेकिन महंगे कोड निर्णय) का प्रबंधन कैसे करें।

अवधारणाएँ: तकनीकी ऋण: गति के लिए आज किए गए कोड निर्णय जो भविष्य में रखरखाव को कठिन बनाते हैं। कोड गंध: पैटर्न जो स्वयं त्रुटियां नहीं हैं लेकिन समस्याओं का संकेत देते हैं (बहुत लंबे फ़ंक्शन, दोहराव वाले कोड)। प्रतिगमन: जब कोई परिवर्तन किसी ऐसी चीज़ को तोड़ देता है जो पहले काम कर रही थी।

संरचित कोड समीक्षा में AI का उपयोग करना

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

  1. गुंजाइश दीजिए. कौन सा कोड, क्या करना है, किस संदर्भ में काम करता है।
  2. प्राथमिकता अक्ष निर्दिष्ट करें. सटीकता और सुरक्षा पहले, पठनीयता बाद में।
  3. ठोस सुधार के लिए पूछें. प्रत्येक खोज के लिए "समस्या क्यों है" और "अनुशंसित समाधान"।
  4. आप निष्कर्षों का सत्यापन करें. एआई झूठी सकारात्मकता भी उत्पन्न करता है; कोड और परीक्षण के विरुद्ध प्रत्येक निष्कर्ष को सत्यापित करें।

संरचित समीक्षा संकेत: "एक वरिष्ठ इंजीनियर की तरह निम्नलिखित फ़ंक्शन की जांच करें। महत्व के क्रम में निष्कर्षों को सूचीबद्ध करें और उन्हें इन टैगों के साथ चिह्नित करें: [महत्वपूर्ण] तर्क/सुरक्षा, [मध्यम] एज केस/प्रदर्शन, [कम] पठनीयता/नाम। प्रत्येक खोज के लिए: क्यों पूछें, ठोस समाधान सुझाव। फ़ॉर्मेटिंग/इंडेंटेशन मुद्दों को न छोड़ें, स्वचालित टूल इसे संभाल लेगा। कोड: [कोड]"

सुरक्षा-केंद्रित समीक्षा संकेत: "केवल सुरक्षा उद्देश्यों के लिए इस कोड की समीक्षा करें: इनपुट सत्यापन की कमी, इंजेक्शन का जोखिम, प्राधिकरण नियंत्रण की कमी, गोपनीय जानकारी का रिसाव, असुरक्षित डिफ़ॉल्ट। प्रत्येक खोज में एक उदाहरण हमले परिदृश्य जोड़ें। यदि कोई सुरक्षा समस्या नहीं है, तो स्पष्ट रूप से बताएं 'मुझे कोई गंभीर सुरक्षा समस्या नहीं मिली'। कोड: [कोड]"

सावधानी: सिर्फ इसलिए कि एआई कहता है "कोई समस्या नहीं" इसका प्रमाण नहीं है कि कोई समस्या नहीं है। एआई गलत नकारात्मक परिणाम उत्पन्न कर सकता है; वास्तविक सुरक्षा समस्या को दरकिनार कर सकता है। एआई समीक्षा पूरक, प्रतिस्थापन नहीं, मानव समीक्षा और सुरक्षा परीक्षण। सुरक्षा-महत्वपूर्ण कोड में, सक्षम इंजीनियर का अंतिम निर्णय होता है।

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

रीफैक्टरिंग का सुनहरा नियम: पहले परीक्षण करें, बाद में बदलाव करें। कोड को ठीक करने से पहले, ऐसे परीक्षण होने चाहिए जो वर्तमान व्यवहार को लॉक कर दें ताकि आपको तुरंत पता चल जाए कि परिवर्तन से कुछ टूटता है या नहीं। एआई रीफैक्टरिंग करते समय ऑर्डर न तोड़ें।

  1. वर्तमान व्यवहार का परीक्षण करें. अन्यथा, एआई को एक "लक्षणीकरण परीक्षण" (परीक्षण जो वर्तमान व्यवहार को वैसे ही पकड़ लेता है) तैयार करने को कहें।
  2. इसे छोटे-छोटे चरणों में ठीक करें. परीक्षण हर कदम पर हरित रहना चाहिए।
  3. प्रत्येक चरण के बाद इसे चलाएँ. प्रतिगमन को जल्दी पकड़ें।

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

कमजोर संकेत/मजबूत संकेत

कमजोर: "इस कोड को बेहतर बनाएं।" (परिणाम: स्पष्ट नहीं है कि क्या सुधार करना है; एआई मनमाने ढंग से परिवर्तन करता है, व्यवहार को चुपचाप बदल सकता है।) मजबूत: "पठनीयता के लिए इस भुगतान गणना फ़ंक्शन को पुन: सक्रिय करें। बाधा: व्यवहार बिल्कुल वही रहना चाहिए, रिटर्न मान नहीं बदलना चाहिए। लंबे फ़ंक्शन को सार्थक उपयोगिता कार्यों में विभाजित करें, जादुई संख्याओं को नामित स्थिरांक में बढ़ाएं। प्रत्येक आइटम में परिवर्तन की सूची बनाएं और बताएं कि प्रत्येक आइटम व्यवहार क्यों नहीं बदलता है। कोड: [कोड]"

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

तकनीकी ऋण का प्रबंधन

दृष्टिकोण

अल्पावधि में

लंबे समय में

कर्ज की अनदेखी

तेजी से प्रगति

रखरखाव पक्षाघात, टीम धीमी हो रही है

सब कुछ फिर से लिखें

स्थायी सुविधा विकास

अनिश्चित रिटर्न, उच्च जोखिम

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

मामूली मंदी

सतत गति

सबसे स्वास्थ्यप्रद तरीका तीसरा है: ऋण को दृश्यमान बनाएं (इसे एक सूची में ट्रैक करें), वहां से शुरू करें जहां यह सबसे अधिक नुकसान पहुंचाता है, और प्रत्येक सुधार का परीक्षण करें। एआई ऋण मदों की पहचान करने और प्राथमिकता देने में एक अच्छी मदद है, लेकिन कौन सा ऋण चुकाना है यह एक व्यावसायिक निर्णय है।

मिनी मामले

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

केस 2 - उपयोगी दूसरी आँख। एक कोड समीक्षा में, एआई को पता चलता है कि उपयोगकर्ता प्राधिकरण की जाँच केवल इंटरफ़ेस में की जाती है, सर्वर पर नहीं। यह एक अनधिकृत पहुंच भेद्यता है. इंजीनियर सर्वर-साइड प्राधिकरण जाँच जोड़ता है; एआई निरीक्षण वास्तविक सुरक्षा घटना को रोकता है।

केस 3 - गलत सकारात्मक। एआई कहता है "इस वेरिएबल का कभी उपयोग नहीं किया जाता है, इसे हटा दें"; हालाँकि, इसका उपयोग परोक्ष रूप से एक परिवर्तनीय प्रतिबिंब तंत्र के माध्यम से किया जाता है। यदि इंजीनियर ने परीक्षण के विरुद्ध सुझाव को सत्यापित नहीं किया, तो इसे हटा दिया जाएगा और रनटाइम त्रुटि उत्पन्न होगी। कार्यान्वयन से पहले प्रत्येक एआई निष्कर्ष की पुष्टि की जानी चाहिए।

सामान्य गलतियाँ

  • बिना परीक्षण के रिफैक्टरिंग। यह सुनिश्चित करने के लिए कुछ भी नहीं बचा है कि व्यवहार संरक्षित रहे।
  • एआई निष्कर्षों को मान्य किए बिना लागू करना। झूठी सकारात्मकता और झूठी नकारात्मकता दोनों होती हैं।
  • प्रारूप संबंधी समस्याओं पर मानव समय बर्बाद करना। स्वचालित उपकरणों द्वारा हल किए जा सकने वाले कार्यों पर ध्यान केंद्रित करने से वास्तविक जोखिम कम हो जाते हैं।
  • उत्तर "कोई समस्या नहीं" को गारंटी के रूप में लेना। एआई भेद्यता को दरकिनार कर सकता है; मानवीय समीक्षा आवश्यक है.
  • एक ही बार में पूरा कर्ज चुकाने की कोशिश की जा रही है. प्रमुख पुनर्लेखन जोखिम भरा है; परीक्षण द्वारा मापे और संरक्षित किए गए कदमों को प्राथमिकता दी जाती है।

सारांश

कोड समीक्षा और रीफैक्टरिंग कोड की लंबी उम्र निर्धारित करती है। एआई एक शक्तिशाली दूसरी आंख और योजना जनरेटर है: प्राथमिकता वाले निष्कर्ष, सुरक्षा परिदृश्य और छोटे-चरण वाली रीफैक्टरिंग योजनाएं प्रदान करता है। लेकिन रीफैक्टरिंग से व्यवहार नहीं बदलना चाहिए और केवल परीक्षण ही इसकी गारंटी देता है। कोड और परीक्षण के विरुद्ध प्रत्येक एआई खोज को मान्य करें; "कोई समस्या नहीं" उत्तर को साक्ष्य के रूप में न लें। तकनीकी ऋण को दृश्यमान बनाएं और इसे मापे गए, परीक्षण-संरक्षित चरणों में चुकाएं।

आवेदन कार्य

एक 40-70 पंक्ति लें, कुछ हद तक जटिल कार्य जो आपके पास है (या एआई उत्पन्न करता है)। पहले संरचित समीक्षा संकेत का पालन करें और निष्कर्षों को [महत्वपूर्ण]/[मध्यम]/[निम्न] के रूप में क्रमबद्ध करें; कोड के विरुद्ध कम से कम एक निष्कर्ष को मैन्युअल रूप से सत्यापित करें। फिर, सुरक्षित रिफैक्टरिंग योजना प्रॉम्प्ट के साथ, पहले लक्षण वर्णन परीक्षण उत्पन्न करें और चलाएं, फिर छोटे चरणों में रिफैक्टरिंग लागू करें और सत्यापित करें कि परीक्षण प्रत्येक चरण पर हरे रहें।

चेकलिस्ट

  • [ ] मैंने समीक्षा को प्राथमिकता टैग (महत्वपूर्ण/मध्यम/निम्न) के साथ संरचित किया।
  • [ ] मैंने कोड/परीक्षण के विरुद्ध कम से कम एक एआई खोज को सत्यापित किया है।
  • [ ] मैंने रीफैक्टरिंग से पहले वर्तमान व्यवहार का परीक्षण किया।
  • [ ] मैंने छोटे-छोटे चरणों में बदलाव किए और प्रत्येक चरण पर परीक्षण चलाए।
  • [ ] मैंने प्रॉम्प्ट में "व्यवहार समान रहना चाहिए" बाधा निर्दिष्ट की है।
  • [ ] मैंने पुष्टि की है कि सुरक्षा निष्कर्षों के लिए मानवीय पुष्टि की आवश्यकता है।