లాభాలు:
- రీఫ్యాక్టరింగ్ చేయడానికి ముందు ప్రస్తుత ప్రవర్తనను క్యాప్చర్ చేసే టెస్ట్ సేఫ్టీ నెట్ని సెటప్ చేయగల సామర్థ్యం
- చిన్న, ఒక-దశ, ప్రవర్తన-సంరక్షించే పరివర్తనల కోసం AIని అడిగే సామర్థ్యం మరియు ప్రతి దశను ధృవీకరించడం
- వ్యాపార సందర్భంలో సాంకేతిక రుణాన్ని గుర్తించే మరియు ప్రాధాన్యత ఇవ్వగల సామర్థ్యం
రీఫ్యాక్టరింగ్ అనేది కోడ్ యొక్క బాహ్య ప్రవర్తనను మార్చకుండా దాని అంతర్గత నిర్మాణాన్ని మెరుగుపరచడం: దానిని మరింత చదవగలిగేలా, సరళంగా, మరింత నిర్వహించగలిగేలా చేస్తుంది. మరోవైపు, సాంకేతిక రుణం అనేది త్వరిత పరిష్కారం కోసం రూపొందించిన రాజీ మరియు కాలక్రమేణా "వడ్డీతో" తిరిగి చెల్లించబడుతుంది - ఈ రోజు మీరు కత్తిరించిన ప్రతి మూల రేపు మందగమనం లేదా బగ్గా తిరిగి వస్తుంది. కృత్రిమ మేధస్సు అనేది పునరావృత మరియు యాంత్రిక రీఫ్యాక్టరింగ్ పనులను వేగవంతం చేసే శక్తివంతమైన సహాయకుడు; కానీ రీఫ్యాక్టరింగ్ యొక్క ఒక బంగారు నియమం ఉంది మరియు AI మాత్రమే దానికి హామీ ఇవ్వదు: ప్రవర్తన మారకూడదు.
ఈ యూనిట్లో, AIతో సురక్షితమైన రీఫ్యాక్టరింగ్ ఎలా చేయాలో మేము నేర్చుకుంటాము: చిన్న మరియు రివర్సిబుల్ దశలు, పరీక్షలతో రక్షించడం, కోడ్ వాసనలను గుర్తించడం మరియు సాంకేతిక రుణానికి ప్రాధాన్యత ఇవ్వడం. కీలకమైన అంశం ఇది: ఇది ఉత్తీర్ణత పరీక్షలు, AI యొక్క పదం కాదు, ప్రవర్తన సంరక్షించబడిందని రుజువు చేస్తుంది.
రీఫ్యాక్టరింగ్ యొక్క గోల్డెన్ రూల్: ప్రవర్తన స్థిరంగా ఉంటుంది
రీఫ్యాక్టరింగ్ ప్రమాదకరమైనది ఏమిటంటే, "నేను మెరుగుపడుతున్నాను" అని చెప్పేటప్పుడు తెలియకుండానే ప్రవర్తనను మార్చడం. షరతును సులభతరం చేసేటప్పుడు ఎడ్జ్ కేస్ను వదలడం, లూప్ను మార్చేటప్పుడు క్రమాన్ని విచ్ఛిన్నం చేయడం, ఫంక్షన్ను విభజించేటప్పుడు సైడ్ ఎఫెక్ట్ను కోల్పోవడం-ఇవన్నీ "క్లీన్-లుకింగ్" కానీ బ్రోకెన్ కోడ్ను ఉత్పత్తి చేస్తాయి.
అందుకే రీఫ్యాక్టరింగ్ కోసం పరీక్ష తప్పనిసరి: మార్చడానికి ముందు, మీరు ఇప్పటికే ఉన్న ప్రవర్తనను సంగ్రహించే పరీక్షలను కలిగి ఉండాలి. ఈ పరీక్షలు "భద్రతా వలయం"; రీఫ్యాక్టరింగ్ సమయంలో మీరు అనుకోకుండా ఏదైనా విచ్ఛిన్నం చేస్తే, వారు విచ్ఛిన్నం చేసి మిమ్మల్ని హెచ్చరిస్తారు. మీకు పరీక్షలు లేకుంటే, ముందుగా ఉన్న ప్రవర్తనను సరిచేసే పరీక్షలను వ్రాయండి (యూనిట్ 5లో మేము నేర్చుకున్నట్లుగా) — ఇక్కడే AI జంప్ స్టార్ట్ అవుతుంది.
జాగ్రత్త: టెస్ట్నెట్ లేకుండా AI-సహాయక రీఫ్యాక్టరింగ్ బగ్ల యొక్క అత్యంత కృత్రిమ మూలాలలో ఒకటి. "నేను ప్రవర్తనను సంరక్షించాను" అని చెప్పడం సులభం; మార్పుకు ముందు మరియు తర్వాత అవే పరీక్షలు పాస్ అవడమే రుజువు.
దశల వారీగా: సురక్షిత రీఫ్యాక్టరింగ్ ఫ్లో
- భద్రతా వలయాన్ని సెటప్ చేయండి. మీరు రీఫాక్టర్ చేసే కోడ్ యొక్క ప్రస్తుత ప్రవర్తనను సంగ్రహించే పరీక్షలు ఉండనివ్వండి; కాకపోతే, వాటిని ముందుగా వ్రాయండి (మరియు వాటిని చూడటం చూడండి).
- వాసనకు పేరు పెట్టండి. మీరు ఏమి మెరుగుపరుస్తున్నారు మరియు ఎందుకు? "ఈ ఫంక్షన్ 3 పనులను చేస్తుంది", "అదే లాజిక్ 4 ప్రదేశాలలో పునరావృతమవుతుంది", "పేర్లు తప్పుదారి పట్టించేవి".
- చిన్న, ఒక-దశ దశల కోసం అడగండి. మొత్తం ఫైల్ను తిరిగి వ్రాయకుండా, ఒకే రూపాంతరం కోసం AIని అడగండి (ఉదా. “ఈ ఫంక్షన్ని సగానికి విభజించండి”).
- పరీక్షలను అమలు చేయండి. ప్రతి అడుగు తర్వాత. ఇది ఆకుపచ్చగా ఉంటే, కొనసాగించండి, ఎరుపు రంగులో ఉంటే, దాన్ని తిరిగి తీసుకోండి.
- తేడా చదవండి. మార్పు నిజానికి ప్రవర్తనను సంరక్షించేదని లైన్ ద్వారా నిర్ధారించండి; AI అనేది "కేవలం నిర్మాణం" అని చెప్పేటప్పుడు లాజిక్ జారడం ఉండవచ్చు.
- చిన్న ముక్కలుగా కలపండి. పెద్ద వన్-టైమ్ రీఫ్యాక్టరింగ్ PRలు ప్రమాదకరమైనవి మరియు సమీక్షించలేనివి.
మూడు మినీ కేసులు
కేస్ 1 — 220-లైన్ ఫంక్షన్ సురక్షితంగా విభజించబడింది. ఒక బృందం 220-లైన్ ఆర్డర్ ప్రాసెసింగ్ ఫంక్షన్ను కలిగి ఉంది. ప్రస్తుత ప్రవర్తనను సంగ్రహించిన మొదటి 14 పరీక్షలు (AI సహాయంతో) వ్రాయబడ్డాయి, అవన్నీ ఉత్తీర్ణత సాధించాయి. అప్పుడు ఫంక్షన్ AI ద్వారా దశలవారీగా 5 చిన్న ఫంక్షన్లుగా విభజించబడింది; ప్రతి దశ తర్వాత పరీక్షలు జరిగాయి. ఒక దశలో రెండు పరీక్షలు విరిగిపోయాయి - AI ఒక ఎడ్జ్ కేసులో రిటర్న్ను కోల్పోయింది. పరీక్షల్లో దీన్ని వెంటనే పట్టుకుని పరిష్కరించారు. నెట్వర్క్ లేకుండా, లోపం ఉత్పత్తికి వెళ్ళే అవకాశం ఉంది.
కేస్ 2 — టెస్ట్నెట్ లేని విపత్తు. మరొక డెవలపర్ AIతో పరీక్షలు లేని తేదీ గణన మాడ్యూల్ను "క్లీన్ అప్" చేసారు. కోడ్ మెరుగ్గా కనిపించింది, కానీ అది లీపు సంవత్సరాన్ని తప్పుగా గణిస్తోంది; రెండు వారాల తర్వాత కస్టమర్ ఫిర్యాదుతో బగ్ బయటపడింది. రీఫ్యాక్టరింగ్ నుండి ఆదా చేసిన సమయం కంటే నష్టం చాలా ఎక్కువ. పాఠం: పరీక్ష లేకుండా రీఫ్యాక్టరింగ్ చేయడం ఒక జూదం.
కేసు 3 - సాంకేతిక రుణ ప్రాధాన్యత. ఒక బృందం AIకి 30 లేదా అంతకంటే ఎక్కువ "మెరుగుపరచదగిన" పాయింట్ల బ్యాక్లాగ్ను అందించింది మరియు ప్రతి ఒక్కటి "చేంజ్ ఫ్రీక్వెన్సీ × రిస్క్ × ఎఫర్ట్" అక్షం మీద స్కోర్ చేసింది. ఫలిత పట్టికలో, అరుదుగా తాకబడిన ఒక అగ్లీ మాడ్యూల్ వాస్తవానికి తక్కువ ప్రాధాన్యతనిస్తుంది, అయితే తరచుగా మారే మీడియం-సంక్లిష్టత మాడ్యూల్ అధిక ప్రాధాన్యతనిస్తుంది. జట్టు తన శక్తిని సరైన ప్రదేశానికి మళ్లించింది.
నాలుగు కాపీ చేయగల టెంప్లేట్లు
కోడ్ వాసన గుర్తింపు మరియు ప్రాధాన్యత:
ఈ కోడ్లో రీఫ్యాక్టరింగ్ అభ్యర్థి "వాసనలు" జాబితా చేయండి: లాంగ్ ఫంక్షన్, రిపీట్ (DRYViolation), తప్పుదారి పట్టించే పేరు, లోతైన సమూహ స్థితి, దాచిన సైడ్ ఎఫెక్ట్, మ్యాజిక్ నంబర్. ప్రతిదానికి: స్థానం, ఎందుకు సమస్య, సూచించిన చిన్న అడుగు, అంచనా వేసిన ప్రమాదం (తక్కువ/మధ్యస్థం/అధిక). ఇంకా కోడ్ని మార్చవద్దు, ప్లాన్ చేయండి.{{code}}
ఒక-దశ, ప్రవర్తన-సంరక్షించే పరివర్తన:
ఇలా చేయండి: {{ఒకే మార్పిడి, ఉదా. ఈ ఫంక్షన్ని 3 చిన్న పేరున్న ఫంక్షన్లుగా విభజించండి}}. కనిపించే ప్రవర్తన, సంతకం మరియు రిటర్న్ విలువలను మార్చండి. మీరు మార్చిన ప్రతిదీ ప్రవర్తనను ఎందుకు భద్రపరుస్తుంది అని 1 వాక్యంలో వ్రాయండి.{{code}}
రిఫ్యాక్టర్కు ముందు భద్రతా వలయం (క్యారెక్టరైజేషన్ టెస్టింగ్):
ఈ ఫంక్షన్ యొక్క ప్రస్తుత ప్రవర్తనను సంగ్రహించే పరీక్షలను వ్రాయండి (సరైనది లేదా కాదు); రీఫ్యాక్టరింగ్ సమయంలో ప్రవర్తన మారితే పట్టుకోవడం లక్ష్యం. సాధారణ + అంచు ఎంట్రీలను చేర్చండి. ఫంక్షన్ యొక్క ప్రస్తుత అవుట్పుట్ ఆధారంగా అంచనాలను వ్రాయండి.{{function}}
సాంకేతిక రుణ రికార్డు (బ్యాక్లాగ్) ఉత్పత్తి:
కింది వాసనల జాబితాను ప్రాధాన్యత పట్టికలో పోయాలి: పదార్థం, ప్రభావిత ప్రాంతం, మార్పు యొక్క ఫ్రీక్వెన్సీ (నా జ్ఞానం: {{...}}), ప్రమాదం, అంచనా వేసిన ప్రయత్నం, సిఫార్సు చేయబడిన ప్రాధాన్యత. పైభాగంలో అధిక ప్రభావం + తక్కువ శ్రమతో కూడిన వాటిని ఉంచండి. {{smell_list}}
బలహీనమైన ప్రాంప్ట్ / బలమైన ప్రాంప్ట్
బలహీనమైనది: "ఈ కోడ్ని క్లీన్ అప్ చేసి, దాన్ని మెరుగుపరచండి."
బలమైనది: "ఈ 90-లైన్ ఫంక్షన్ను దాని బాహ్య ప్రవర్తన మరియు సంతకాన్ని మార్చకుండా, ఒకే బాధ్యతతో 3 చిన్న ఫంక్షన్లుగా విభజించండి. ప్రస్తుత క్రమంలో దుష్ప్రభావాలను (DB వ్రాస్తుంది) ఉంచండి. నాకు పరీక్షలు ఉన్నాయి, ప్రవర్తన అలాగే ఉండాలి. తేడాను ఇవ్వండి మరియు ప్రతి విభజన ప్రవర్తనను ఎందుకు కాపాడుతుందో ఒక వాక్యంలో వివరించండి. [code]"
శక్తివంతమైన వెర్షన్; దీనికి ఒకే నిర్దిష్ట పరివర్తన అవసరం, స్పష్టంగా ప్రవర్తన మరియు సంతకం పరిమితిని విధిస్తుంది మరియు సమర్థనను డిమాండ్ చేస్తుంది. "మెరుగైనది చేయండి" వంటి అస్పష్టమైన అభ్యర్థనలు అనియంత్రిత మరియు ప్రమాదకర మార్పులకు దారితీస్తాయి.
రీఫ్యాక్టరింగ్ రకం
AI విశ్వసనీయత
ముందస్తు అవసరం
పేరు మార్చు
అధిక
పరిధి సరైనదేనా?
ఫంక్షన్ డివిజన్
మధ్యస్థ-ఎక్కువ
టెస్ట్నెట్ తప్పనిసరి
పునరావృతం భాగస్వామ్యం
మధ్యస్థ
ప్రవర్తనలో తేడా దాగి ఉండవచ్చు
అల్గోరిథం/స్ట్రక్చర్ మార్పు
తక్కువ
విస్తృతమైన పరీక్ష + మానవ ధ్రువీకరణ
నిర్మాణ పునర్వ్యవస్థీకరణ
తక్కువ
మానవ నేతృత్వంలోని, AI-మద్దతు
సాంకేతిక రుణాన్ని నిర్వహించడం, దాన్ని రీసెట్ చేయడం లేదు
సాంకేతిక రుణం అంతా చెడ్డది కాదు; కొన్నిసార్లు స్పృహతో రుణాలు తీసుకోవడం (డెలివరీని చేరుకోవడానికి) సరైన నిర్ణయం. లక్ష్యం రుణాన్ని తొలగించడం కాదు, దానిని కనిపించేలా చేయడం మరియు నిర్వహించడం. రుణాన్ని గుర్తించడంలో మరియు ప్రాధాన్యత ఇవ్వడంలో AI వేగవంతమైనది, కానీ “ఏ రుణాన్ని చెల్లించాలి మరియు ఏది వదిలివేయాలి” అని నిర్ణయించడానికి వ్యాపార సందర్భం అవసరం: ఈ మాడ్యూల్ ఎంత తరచుగా మారుతుంది, ఎంత మంది వ్యక్తులపై ప్రభావం చూపుతుంది, ప్రమాదం ఏమిటి? కోడ్ బేస్ మరియు ఉత్పత్తి గురించి తెలిసిన బృందం ఈ నిర్ణయం తీసుకుంటుంది; AI కేవలం ఎంపికలను స్పష్టం చేస్తుంది.
చిట్కా: ప్రవర్తన మార్పుతో కూడిన PRల నుండి మీ రీఫ్యాక్టరింగ్ PRని వేరుగా ఉంచండి. "ఈ PR కేవలం రీఫ్యాక్టరింగ్ మాత్రమే, ప్రవర్తన ఒకేలా ఉంటుంది" అని చెప్పగలిగితే దర్యాప్తు చేయడం సులభం అవుతుంది మరియు సమస్య తలెత్తితే కారణాన్ని త్వరగా తగ్గించడానికి మిమ్మల్ని అనుమతిస్తుంది.
సాధారణ తప్పులు
- టెస్ట్ నెట్ లేకుండా రీఫ్యాక్టరింగ్. ప్రవర్తన సంరక్షించబడిందని నిరూపించడానికి మీకు ఏమీ లేదు.
- దీని అర్థం "పూర్తి ఫైల్ను క్లియర్ చేయి". పెద్ద, అనియంత్రిత మార్పులు లోపాన్ని దాచిపెడతాయి మరియు పరిశీలించబడవు.
- డిఫ్ చదవకుండానే అంగీకరించడం. AI "కేవలం నిర్మాణం" అని చెప్పినప్పుడు కొంత తర్కం జారిపోయి ఉండవచ్చు.
- ప్రవర్తనా మార్పుతో రీఫ్యాక్టరింగ్ గందరగోళం. రెండింటినీ ఒకే PRలో చేయడం మూలకారణాన్ని ట్రాక్ చేయడం అసాధ్యం.
- ప్రతి వాసనను పరిష్కరించడానికి ప్రయత్నిస్తున్నారు. అరుదుగా మారే అగ్లీ కోడ్ తరచుగా తక్కువ ప్రాధాన్యతనిస్తుంది; తరచుగా మారే ప్రదేశానికి శక్తిని కేటాయించండి.
సారాంశంలో
రీఫ్యాక్టరింగ్ యొక్క ఏకైక నియమం ఏమిటంటే ప్రవర్తన స్థిరంగా ఉంటుంది మరియు దీనికి రుజువు పరీక్షలు. AI కోడ్ వాసనలు, ఒక-దశ పరివర్తనలు మరియు సాంకేతిక రుణాలకు ప్రాధాన్యత ఇవ్వడంలో శక్తివంతమైనది; కానీ మీరు భద్రతా వలయాన్ని సెటప్ చేయాలి, పరీక్షలను అమలు చేయాలి మరియు ప్రతి దశ తర్వాత తేడాను చదవాలి. చిన్న, రివర్సిబుల్ దశలను తీసుకోండి; ప్రవర్తన మార్పు నుండి రీఫ్యాక్టరింగ్ను వేరు చేయండి; మరియు వ్యాపార సందర్భం తెలిసిన బృందం ఏ రుణాన్ని చెల్లించాలో నిర్ణయించుకోనివ్వండి.
అప్లికేషన్ టాస్క్
మీ కోడ్ బేస్ నుండి మీకు పొడవుగా లేదా సంక్లిష్టంగా కనిపించే ఫంక్షన్ను ఎంచుకోండి. "సేఫ్టీ నెట్" టెంప్లేట్తో దాని ప్రస్తుత ప్రవర్తనను క్యాప్చర్ చేసి, అవన్నీ ఉత్తీర్ణత సాధించాయో లేదో చూసే మొదటి ప్రింట్ పరీక్షలు. "ఒక-దశ, ప్రవర్తన-సంరక్షించే పరివర్తన" నమూనాతో ఫంక్షన్ను ఒకే మార్గంలో (ఉదా. సగానికి విభజించడం) రీఫ్యాక్టరింగ్ చేసి, పరీక్షలను మళ్లీ అమలు చేయండి. పరీక్ష విచ్ఛిన్నమైతే, ఎందుకు అని తెలుసుకోండి; ఇది అస్సలు విచ్ఛిన్నం కాకపోతే, ప్రవర్తన నిజంగా సంరక్షించబడిందని నిర్ధారించడానికి డిఫ్ లైన్ను లైన్ ద్వారా చదవండి.
చెక్లిస్ట్
- [ ] రీఫ్యాక్టరింగ్ ప్రవర్తనను మార్చకూడదని నాకు తెలుసు మరియు దానిని నిరూపించడానికి పరీక్షలు ఉన్నాయి.
- [ ] నేను రిఫ్యాక్టర్కు ముందు ప్రస్తుత ప్రవర్తనను గుర్తించే భద్రతా వలయాన్ని సెటప్ చేస్తున్నాను.
- [ ] నాకు AI నుండి చిన్న, ఒక-దశ పరివర్తనలు కావాలి, పెద్ద వన్-ఆఫ్లు కాదు.
- [ ] ప్రతి దశ తర్వాత నేను పరీక్షలను అమలు చేస్తాను మరియు తేడాను చదువుతాను.
- [ ] నేను ప్రవర్తన మార్పు PR నుండి వేరుగా PRని రీఫ్యాక్టరింగ్ చేస్తూ ఉంటాను.
- [ ] నేను వ్యాపార సందర్భంతో సాంకేతిక రుణాలకు ప్రాధాన్యత ఇస్తాను, గుడ్డిగా సున్నా చేయడానికి ప్రయత్నించడం లేదు.