एकाइ 8 / 12

रिफ्याक्टरिङ र प्राविधिक ऋण व्यवस्थापन

लाभ:

  • परीक्षण सुरक्षा नेट सेट अप गर्ने क्षमता जसले रिफ्याक्टर गर्नु अघि हालको व्यवहार क्याप्चर गर्दछ
  • सानो, एक-चरण, व्यवहार-संरक्षण परिवर्तनहरूको लागि AI सोध्ने क्षमता र प्रत्येक चरण मान्य
  • व्यावसायिक सन्दर्भ भित्र प्राविधिक ऋण पहिचान गर्न र प्राथमिकता दिने क्षमता

Refactoring भनेको बाह्य व्यवहार परिवर्तन नगरिकन कोडको आन्तरिक संरचनामा सुधार गर्नु हो: यसलाई अझ पढ्न योग्य, सरल, थप मर्मतयोग्य बनाउने। अर्कोतर्फ, प्राविधिक ऋण, द्रुत समाधानको लागि गरिएको डिजाइन सम्झौता हो र समयको साथमा "ब्याज सहित" फिर्ता तिर्नु हो — तपाईंले आज काटेको प्रत्येक कुना भोलि मन्दी वा बगको रूपमा फिर्ता आउनेछ। आर्टिफिसियल इन्टेलिजेन्स एक शक्तिशाली सहायक हो जसले दोहोरिने र मेकानिकल रिफ्याक्टरिङ कार्यहरूलाई गति दिन्छ; तर रिफ्याक्टरिङको एउटा सुनौलो नियम छ, र एआई एक्लैले यसको ग्यारेन्टी दिन सक्दैन: व्यवहार परिवर्तन हुनु हुँदैन।

यस इकाईमा, हामी AI मार्फत सुरक्षित रिफ्याक्टरिङ कसरी गर्ने: साना र उल्टाउन मिल्ने चरणहरू, परीक्षणहरूद्वारा सुरक्षा गर्ने, कोडको गन्ध पत्ता लगाउने र प्राविधिक ऋणलाई प्राथमिकता दिने तरिकाहरू सिक्छौं। महत्वपूर्ण बिन्दु यो हो: यो AI को शब्द होइन, पारित परीक्षण हो, जसले व्यवहार संरक्षित छ भनेर प्रमाणित गर्दछ।

Refactoring को सुनौलो नियम: व्यवहार स्थिर रहन्छ

रिफ्याक्टरिङलाई खतरनाक बनाउने कुराले "म सुधार गर्दैछु" भनी जानीजानी व्यवहार परिवर्तन गर्नु हो। सर्तलाई सरल बनाउँदा एज केस छोड्ने, लूप परिवर्तन गर्दा अर्डर तोड्ने, प्रकार्य विभाजन गर्दा साइड इफेक्ट हराइरहेको—सबैले "स्वच्छ-देखाउने" तर टुटेको कोड उत्पादन गर्छ।

त्यसकारण परीक्षण रिफ्याक्टरिङको लागि एक पूर्व शर्त हो: परिवर्तन गर्नु अघि, तपाइँसँग अवस्थित व्यवहार क्याप्चर गर्ने परीक्षणहरू हुनुपर्छ। यी परीक्षणहरू "सुरक्षा जाल" हुन्; यदि तपाईंले संयोगवश रिफ्याक्टरिंगको क्रममा केहि तोड्नु भयो भने, तिनीहरूले तोडेर तपाईंलाई चेतावनी दिनेछन्। यदि तपाईंसँग परीक्षणहरू छैनन् भने, पहिले अवस्थित व्यवहारलाई ठीक गर्ने परीक्षणहरू लेख्नुहोस् (जस्तै हामीले एकाइ 5 मा सिकेका छौं) — यहाँ AI ले जम्प स्टार्ट प्राप्त गर्दछ।

सावधानी: टेस्टनेट बिना एआई-सहयोगित रिफ्याक्टरिंग बगहरूको सबैभन्दा कपटी स्रोतहरू मध्ये एक हो। "मैले व्यवहार जोगाएको छु" भन्न सजिलो छ; प्रमाण यो हो कि एउटै परीक्षा परिवर्तन अघि र पछि पास हुन्छ।

चरण-दर-चरण: सुरक्षित रिफ्याक्टरिंग प्रवाह

  1. सुरक्षा जाल सेट अप गर्नुहोस्। तपाईंले रिफ्याक्टर गर्ने कोडको हालको व्यवहारलाई क्याप्चर गर्ने परीक्षणहरू हुन दिनुहोस्; यदि होइन भने, तिनीहरूलाई पहिले लेख्नुहोस् (र तिनीहरूलाई जान हेर्नुहोस्)।
  2. गन्धको नाम दिनुहोस्। तपाईं के सुधार गर्दै हुनुहुन्छ र किन? "यस प्रकार्यले ३ कुरा गर्छ", "एउटै तर्क ४ ठाउँमा दोहोरिन्छ", "नामहरू भ्रामक छन्"।
  3. सानो, एक-चरण चरणहरूको लागि सोध्नुहोस्। एआई लाई एकल रूपान्तरणको लागि सोध्नुहोस् (जस्तै "यस प्रकार्यलाई आधामा विभाजित गर्नुहोस्"), सम्पूर्ण फाइल पुन: लेख्नको लागि होइन।
  4. परीक्षणहरू चलाउनुहोस्। हरेक कदम पछि। यदि यो हरियो छ भने, जारी राख्नुहोस्, यदि यो रातो छ भने, यसलाई फिर्ता लिनुहोस्।
  5. फरक पढ्नुहोस्। पङ्क्तिद्वारा लाइन पुष्टि गर्नुहोस् कि परिवर्तन वास्तवमा व्यवहार-संरक्षण हो; एआई "केवल संरचना" हो भन्दा त्यहाँ तर्क फिसलिएको हुन सक्छ।
  6. साना टुक्राहरूमा मिलाउनुहोस्। ठूला एक पटकको रिफ्याक्टरिङ PR हरू जोखिमपूर्ण र अपरिहार्य दुवै हुन्छन्।

तीन मिनी केसहरू

केस 1 - 220-लाइन प्रकार्य सुरक्षित रूपमा विभाजित। एउटा टोलीसँग 220-लाइन अर्डर प्रशोधन कार्य थियो। पहिलो 14 परीक्षणहरू लेखिएका थिए (AI को मद्दतले) जसले हालको व्यवहारलाई कब्जा गर्यो, तिनीहरू सबै उत्तीर्ण भए। त्यसपछि प्रकार्यलाई एआई द्वारा चरणबद्ध 5 साना प्रकार्यहरूमा विभाजित गरिएको थियो; प्रत्येक चरण पछि परीक्षणहरू चलाइएको थियो। एक चरणमा दुई परीक्षणहरू भत्किएका थिए - एआईले किनाराको अवस्थामा फर्काउन छुटेको थियो। परीक्षणहरूले यसलाई तुरुन्तै समात्यो र यसलाई ठीक गर्यो। नेटवर्क बिना, त्रुटि उत्पादन को लागी सबै बाटो जान सक्छ।

केस 2 - टेस्टनेट बिना आपदा। अर्को विकासकर्ताले AI सँग कुनै परीक्षण नभएको मिति गणना मोड्युललाई "सफा" गर्यो। कोड राम्रो देखिन्थ्यो, तर यसले गलत तरिकाले लीप वर्ष गणना गरिरहेको थियो; बग दुई हप्ता पछि ग्राहक गुनासो संग बाहिर आयो। रिफ्याक्टरिङबाट बचाइएको समयभन्दा घाटा धेरै थियो। पाठ: परीक्षण बिना रिफ्याक्टरिंग एक जुवा हो।

केस ३ - प्राविधिक ऋण प्राथमिकता। एउटा टोलीले AI लाई 30 वा सो भन्दा बढी "सुधारयोग्य" अंकहरूको ब्याकलग दियो र प्रत्येकलाई "परिवर्तन आवृत्ति × जोखिम × प्रयास" अक्षमा स्कोर गरेको थियो। नतिजा तालिकामा, एक बदसूरत मोड्युल जुन विरलै छोइयो वास्तवमा कम प्राथमिकता थियो, जबकि एक मध्यम-जटिलता मोड्युल जुन बारम्बार परिवर्तन भएको थियो उच्च प्राथमिकता थियो। टोलीले आफ्नो ऊर्जा सही ठाउँमा निर्देशित गर्यो।

चार प्रतिलिपि गर्न मिल्ने टेम्प्लेटहरू

कोड गन्ध पत्ता लगाउने र प्राथमिकता:

यस कोडमा रिफ्याक्टरिङ उम्मेद्वार "गन्ध" लाई सूचीबद्ध गर्नुहोस्: लामो प्रकार्य, दोहोर्याउनुहोस् (DRYViolation), भ्रामक नाम, गहिरो नेस्टेड अवस्था, लुकेको साइड इफेक्ट, जादुई नम्बर। प्रत्येकको लागि: स्थान, किन समस्या, सुझाव गरिएको सानो कदम, अनुमानित जोखिम (कम/मध्यम/उच्च)। अझै कोड परिवर्तन नगर्नुहोस्, योजना बनाउनुहोस्।{{code}}

एक-चरण, व्यवहार-संरक्षण परिवर्तन:

यो मात्र गर्नुहोस्: {{एकल रूपान्तरण, उदाहरण यस प्रकार्यलाई 3 साना नाम गरिएका प्रकार्यहरूमा विभाजन गर्नुहोस्}}। देखिने व्यवहार, हस्ताक्षर र फिर्ता मानहरू परिवर्तन गर्नुहोस्। १ वाक्यमा लेख्नुहोस् किन तपाईंले परिवर्तन गर्नुभएको सबै कुराले व्यवहारलाई सुरक्षित राख्छ।{{code}}

रिफ्याक्टर अघि सुरक्षा नेट (क्यारेक्टराइजेशन परीक्षण):

यस प्रकार्यको हालको व्यवहार (सही वा होइन) क्याप्चर गर्ने परीक्षणहरू लेख्नुहोस्; लक्ष्य भनेको रिफ्याक्टरिंगको क्रममा व्यवहार परिवर्तन भएमा समात्नु हो। सामान्य + किनारा प्रविष्टिहरू समावेश गर्नुहोस्। प्रकार्यको हालको आउटपुटमा आधारित अपेक्षाहरू लेख्नुहोस्।{{function}}

प्राविधिक ऋण अभिलेख (ब्याकलग) उत्पादन:

गन्धहरूको निम्न सूचीलाई प्राथमिकता तालिकामा हाल्नुहोस्: पदार्थ, प्रभावित क्षेत्र, परिवर्तनको आवृत्ति (मेरो ज्ञान: {{...}}), जोखिम, अनुमानित प्रयास, सिफारिस गरिएको प्राथमिकता। उच्च प्रभाव + कम प्रयासलाई शीर्षमा राख्नुहोस्। {{smell_list}}

कमजोर प्रम्प्ट / बलियो प्रम्प्ट

कमजोर: "यो कोड सफा गर्नुहोस् र यसलाई राम्रो बनाउनुहोस्।"
बलियो: "यस 90-लाइन प्रकार्यलाई एकल जिम्मेवारीको साथ 3 साना प्रकार्यहरूमा विभाजित गर्नुहोस्, यसको बाह्य व्यवहार र हस्ताक्षर परिवर्तन नगरी। साइड इफेक्टहरू (DB लेख्छन्) हालको क्रममा राख्नुहोस्। मसँग परीक्षणहरू छन्, व्यवहार उस्तै रहनुपर्छ। भिन्नता दिनुहोस् र प्रत्येक विभाजन किन व्यवहार-संरक्षण हो। [कोड]"

शक्तिशाली संस्करण; यसलाई एकल विशिष्ट रूपान्तरण चाहिन्छ, स्पष्ट रूपमा व्यवहार र हस्ताक्षर बाधा थोपर्छ, र औचित्यको माग गर्दछ। "राम्रो गर्न" जस्ता अस्पष्ट अनुरोधहरूले अनियन्त्रित र जोखिमपूर्ण परिवर्तनहरू निम्त्याउँछ।

रिफ्याक्टरिंग प्रकार

AI विश्वसनीयता

पूर्व शर्त

नाम परिवर्तन गर्नुहोस्

उच्च

दायरा सही छ?

कार्य विभाजन

मध्यम-उच्च

Testnet अनिवार्य छ

पुनरावृत्ति साझा गर्दै

मध्यम

व्यवहार भिन्नता लुकेको हुन सक्छ

एल्गोरिथ्म / संरचना परिवर्तन

कम

व्यापक परीक्षण + मानव प्रमाणीकरण

वास्तुकला पुनर्संरचना

कम

मानव नेतृत्व, एआई समर्थित

प्राविधिक ऋण प्रबन्ध गर्नुहोस्, यसलाई रिसेट गर्दैन

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

सुझाव: आफ्नो रिफ्याक्टरिङ PR लाई व्यवहार परिवर्तन समावेश गर्ने PRs बाट अलग राख्नुहोस्। "यो PR केवल एक रिफ्याक्टरिंग हो, व्यवहार उस्तै छ" भन्न सक्षम हुनुले यसलाई अनुसन्धान गर्न सजिलो बनाउँदछ र समस्या उत्पन्न भएमा तपाईंलाई द्रुत रूपमा कारणलाई कम गर्न अनुमति दिन्छ।

सामान्य गल्तीहरू

  • टेस्टनेट बिना रिफ्याक्टरिंग। व्यवहार संरक्षित छ भनेर प्रमाणित गर्न तपाईंसँग केहि पनि बाँकी छैन।
  • यसको अर्थ "पूरै फाइल खाली गर्नुहोस्"। ठूला, अनियन्त्रित परिवर्तनहरूले त्रुटि लुकाउँछन् र जाँच गर्न सकिँदैन।
  • यसलाई नपढाई भिन्नता स्वीकार गर्दै। AI ले "केवल संरचना" भन्नाले केही तर्क फेला पारेको हुन सक्छ।
  • व्यवहार परिवर्तन संग भ्रमित refactoring। एउटै PR मा दुबै गर्नाले मूल कारण ट्र्याकिङ असम्भव बनाउँछ।
  • हरेक गन्ध ठीक गर्न कोशिस गर्दै। कुरूप कोड जुन विरलै परिवर्तन हुन्छ प्रायः कम प्राथमिकता हुन्छ; बारम्बार परिवर्तन हुने ठाउँमा ऊर्जा आवंटित गर्नुहोस्।

संक्षेपमा

रिफ्याक्टरिङको मात्र नियम भनेको व्यवहार स्थिर रहन्छ, र यसको प्रमाण परीक्षणहरू हुन्। AI कोड गन्ध पत्ता लगाउन, एक-चरण रूपान्तरण, र प्राविधिक ऋण प्राथमिकतामा शक्तिशाली छ; तर तपाईंले सेफ्टी नेट सेटअप गर्नुपर्नेछ, परीक्षणहरू चलाउनुहोस् र प्रत्येक चरण पछि भिन्नताहरू पढ्नुपर्छ। साना, उल्टाउन मिल्ने कदमहरू लिनुहोस्; व्यवहार परिवर्तन देखि refactoring को भिन्नता; र कुन ऋण तिर्ने भनेर व्यापार सन्दर्भ थाहा पाउने टोलीलाई निर्णय गर्न दिनुहोस्।

आवेदन कार्य

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

चेकलिस्ट

  • [ ] मलाई थाहा छ कि रिफ्याक्टरिङले व्यवहार परिवर्तन गर्नु हुँदैन र यसलाई प्रमाणित गर्न परीक्षणहरू छन्।
  • [ ] म एक सुरक्षा जाल सेट अप गर्दै छु जसले रिफ्याक्टर अघि हालको व्यवहार समात्छ।
  • म AI बाट सानो, एक-चरण रूपान्तरण चाहन्छु, ठूलो एक-अफ होइन।
  • [] प्रत्येक चरण पछि म परीक्षणहरू चलाउँछु र फरक पढ्छु।
  • [ ] म व्यवहार परिवर्तन PR बाट PR लाई अलग राख्छु।
  • [ ] म व्यावसायिक सन्दर्भको साथ प्राविधिक ऋणलाई प्राथमिकता दिन्छु, अन्धाधुन्ध शून्य गर्न प्रयास गर्दैन।