નફો:
- પરીક્ષણ સલામતી નેટ સેટ કરવાની ક્ષમતા જે રિફેક્ટરિંગ પહેલાં વર્તમાન વર્તનને કેપ્ચર કરે છે
- નાના, એક-પગલાં, વર્તન-સંરક્ષિત પરિવર્તન માટે AI ને પૂછવાની ક્ષમતા અને દરેક પગલું માન્ય
- વ્યવસાય સંદર્ભમાં તકનીકી દેવાને ઓળખવા અને પ્રાથમિકતા આપવાની ક્ષમતા
રિફેક્ટરિંગ એ કોડની બાહ્ય વર્તણૂક બદલ્યા વિના તેની આંતરિક રચનાને સુધારી રહી છે: તેને વધુ વાંચી શકાય તેવું, સરળ, વધુ જાળવવા યોગ્ય બનાવે છે. બીજી તરફ, ટેકનિકલ દેવું, એક ઝડપી ઉકેલ ખાતર કરવામાં આવેલ ડિઝાઇન સમાધાન છે અને સમય જતાં "વ્યાજ સાથે" પાછું ચૂકવવામાં આવે છે — તમે આજે કાપેલ દરેક ખૂણો કાલે મંદી અથવા બગ તરીકે પાછો આવશે. કૃત્રિમ બુદ્ધિ એ એક શક્તિશાળી સહાયક છે જે પુનરાવર્તિત અને યાંત્રિક રિફેક્ટરિંગ કાર્યોને ઝડપી બનાવે છે; પરંતુ રિફેક્ટરિંગનો એક સુવર્ણ નિયમ છે, અને એકલા AI તેની ખાતરી આપી શકતું નથી: વર્તન બદલવું જોઈએ નહીં.
આ એકમમાં, અમે શીખીએ છીએ કે AI સાથે સુરક્ષિત રિફેક્ટરિંગ કેવી રીતે કરવું: નાના અને ઉલટાવી શકાય તેવા પગલાં, પરીક્ષણો સાથે રક્ષણ કરવું, કોડની ગંધ શોધવી અને તકનીકી દેવાને પ્રાથમિકતા આપવી. નિર્ણાયક મુદ્દો આ છે: એ એઆઈના શબ્દથી નહીં પણ પાસ થયેલા પરીક્ષણો છે, જે સાબિત કરે છે કે વર્તન સાચવેલ છે.
રિફેક્ટરિંગનો સુવર્ણ નિયમ: વર્તન સતત રહે છે
"હું સુધારી રહ્યો છું" એમ કહેતી વખતે અજાણતા વર્તન બદલવું એ રિફેક્ટરિંગને ખતરનાક બનાવે છે. શરતને સરળ બનાવતી વખતે એજ કેસ છોડવો, લૂપને રૂપાંતરિત કરતી વખતે ક્રમ તોડવો, ફંક્શનને વિભાજિત કરતી વખતે આડઅસર ખૂટે છે - આ બધું "સ્વચ્છ દેખાતા" પરંતુ તૂટેલા કોડનું નિર્માણ કરે છે.
તેથી જ રિફેક્ટરિંગ માટે પરીક્ષણ એ પૂર્વશરત છે: બદલતા પહેલા, તમારી પાસે એવા પરીક્ષણો હોવા જોઈએ જે વર્તમાન વર્તનને કૅપ્ચર કરે. આ પરીક્ષણો "સુરક્ષા નેટ" છે; જો તમે રિફેક્ટરિંગ દરમિયાન આકસ્મિક રીતે કંઈક તોડશો, તો તેઓ તમને તોડીને ચેતવણી આપશે. જો તમારી પાસે પરીક્ષણો નથી, તો પરીક્ષણો લખો કે જે પહેલા અસ્તિત્વમાંની વર્તણૂકને ઠીક કરે છે (જેમ કે આપણે એકમ 5 માં શીખ્યા છીએ) — આ તે છે જ્યાં AI ને જમ્પ સ્ટાર્ટ મળે છે.
સાવધાન: ટેસ્ટનેટ વિના AI-આસિસ્ટેડ રિફેક્ટરિંગ એ બગ્સના સૌથી કપટી સ્ત્રોતોમાંનું એક છે. "મેં વર્તન સાચવ્યું" એમ કહેવું સહેલું છે; સાબિતી એ છે કે બદલાવ પહેલા અને પછી સમાન પરીક્ષણો પસાર થાય છે.
સ્ટેપ બાય સ્ટેપ: સુરક્ષિત રિફેક્ટરિંગ ફ્લો
- સુરક્ષા જાળ ગોઠવો. એવા પરીક્ષણો થવા દો જે કોડની વર્તમાન વર્તણૂકને કેપ્ચર કરે છે જેને તમે રિફેક્ટ કરશો; જો નહિં, તો તેમને પહેલા લખો (અને તેમને પસાર થતા જુઓ).
- ગંધનું નામ આપો. તમે શું સુધારી રહ્યા છો અને શા માટે? "આ ફંક્શન 3 વસ્તુઓ કરે છે", "સમાન તર્ક 4 જગ્યાએ પુનરાવર્તિત થાય છે", "નામો ભ્રામક છે".
- નાના, એક-પગલાના પગલાં માટે પૂછો. AI ને એક જ ટ્રાન્સફોર્મેશન માટે કહો (દા.ત. ફક્ત "આ ફંક્શનને અડધા ભાગમાં વિભાજિત કરો"), આખી ફાઇલને ફરીથી લખવા માટે નહીં.
- પરીક્ષણો ચલાવો. દરેક પગલા પછી. જો તે લીલું હોય, તો ચાલુ રાખો, જો તે લાલ હોય, તો તેને પાછું લો.
- તફાવત વાંચો. પંક્તિ દ્વારા પુષ્ટિ કરો કે પરિવર્તન ખરેખર વર્તન-સંરક્ષિત છે; AI એ "માત્ર માળખું" છે એમ કહેતી વખતે કદાચ તર્ક-વિતર્ક થઈ શકે.
- નાના ટુકડાઓમાં ભેગા કરો. મોટા વન-ટાઇમ રિફેક્ટરિંગ PR જોખમી અને અવલોકનક્ષમ બંને છે.
ત્રણ મિની કેસ
કેસ 1 — 220-લાઇન ફંક્શન સુરક્ષિત રીતે વિભાજિત. એક ટીમ પાસે 220-લાઇન ઓર્ડર પ્રોસેસિંગ કાર્ય હતું. પ્રથમ 14 પરીક્ષણો લખવામાં આવ્યા હતા (AI ની મદદથી) જેણે વર્તમાન વર્તનને કબજે કર્યું હતું, તે બધા પાસ થયા હતા. પછી ફંક્શનને AI દ્વારા સ્ટેપ બાય સ્ટેપ 5 નાના ફંક્શનમાં વિભાજિત કરવામાં આવ્યું હતું; દરેક પગલા પછી પરીક્ષણો ચલાવવામાં આવ્યા હતા. એક પગલામાં બે પરીક્ષણો તૂટી ગયા હતા - એઆઈ એ એજ કેસમાં વળતર ચૂકી ગયું હતું. પરીક્ષણોએ આને તરત જ પકડ્યું અને તેને ઠીક કર્યું. નેટવર્ક વિના, ભૂલ ઉત્પાદનમાં બધી રીતે જઈ શકી હોત.
કેસ 2 - ટેસ્ટનેટ વિના આપત્તિ. અન્ય ડેવલપરે તારીખ ગણતરીના મોડ્યુલને "સાફ" કર્યું કે જેમાં AI સાથે કોઈ પરીક્ષણ નહોતું. કોડ વધુ સારો દેખાતો હતો, પરંતુ તે લીપ વર્ષની ખોટી રીતે ગણતરી કરી રહ્યો હતો; બગ બે અઠવાડિયા પછી ગ્રાહકની ફરિયાદ સાથે બહાર આવ્યો. રિફેક્ટરિંગથી બચેલા સમય કરતાં નુકસાન ઘણું વધારે છે. પાઠ: પરીક્ષણ વિના રિફેક્ટરિંગ એ જુગાર છે.
કેસ 3 - ટેકનિકલ દેવું પ્રાથમિકતા. એક ટીમે AI ને 30 અથવા તેથી વધુ "સુધારી શકાય તેવા" પોઈન્ટનો બેકલોગ આપ્યો અને દરેકને "ફેરફાર આવર્તન × જોખમ × પ્રયાસ" અક્ષ પર સ્કોર કર્યો. પરિણામી કોષ્ટકમાં, એક કદરૂપું મોડ્યુલ કે જેને ભાગ્યે જ સ્પર્શવામાં આવતું હતું તે વાસ્તવમાં ઓછી અગ્રતા હતી, જ્યારે મધ્યમ-જટિલતા મોડ્યુલ જે વારંવાર બદલાતું હતું તે ઉચ્ચ પ્રાથમિકતા હતું. ટીમે તેની ઉર્જાને યોગ્ય સ્થાન પર પહોંચાડી.
ચાર નકલ કરી શકાય તેવા નમૂનાઓ
કોડ ગંધ શોધ અને પ્રાથમિકતા:
આ કોડમાં રિફેક્ટરિંગ ઉમેદવાર "સુગંધ"ની સૂચિ બનાવો: લાંબા કાર્ય, પુનરાવર્તન (DRYViolation), ભ્રામક નામ, ઊંડા નેસ્ટેડ સ્થિતિ, છુપી આડ અસર, જાદુ નંબર. દરેક માટે: સ્થાન, શા માટે સમસ્યા, સૂચવેલ નાનું પગલું, અંદાજિત જોખમ (નીચું/મધ્યમ/ઉચ્ચ). હજુ સુધી કોડ બદલશો નહીં, ફક્ત યોજના બનાવો.{{code}}
એક-પગલું, વર્તન-સંરક્ષિત પરિવર્તન:
બસ આ કરો: {{એક રૂપાંતર, દા.ત. આ ફંક્શનને 3 નાના નામવાળા ફંક્શનમાં વિભાજીત કરો}}. દૃશ્યમાન વર્તન, હસ્તાક્ષર અને વળતર મૂલ્યો બદલો. 1 વાક્યમાં લખો કે તમે બદલ્યું છે તે બધું વર્તન કેમ સાચવે છે.{{code}}
રિફેક્ટર પહેલા સેફ્ટી નેટ (કેરેક્ટરાઇઝેશન ટેસ્ટિંગ):
પરીક્ષણો લખો જે આ કાર્યના વર્તમાન વર્તનને કેપ્ચર કરે છે (સાચો કે નહીં); ધ્યેય રિફેક્ટરિંગ દરમિયાન વર્તન બદલાય તો તેને પકડવાનું છે. લાક્ષણિક + ધારની એન્ટ્રીઓ શામેલ કરો. કાર્યના વર્તમાન આઉટપુટના આધારે અપેક્ષાઓ લખો.{{function}}
ટેકનિકલ ડેટ રેકોર્ડ (બેકલોગ) જનરેશન:
ગંધની નીચેની સૂચિને પ્રાથમિકતા કોષ્ટકમાં રેડો: પદાર્થ, અસરગ્રસ્ત વિસ્તાર, ફેરફારની આવર્તન (મારું જ્ઞાન: {{...}}), જોખમ, અંદાજિત પ્રયત્નો, ભલામણ કરેલ અગ્રતા. ઉચ્ચ અસર + ઓછા પ્રયત્નોને ટોચ પર મૂકો. {{smell_list}}
નબળા પ્રોમ્પ્ટ / મજબૂત પ્રોમ્પ્ટ
નબળા: "આ કોડ સાફ કરો અને તેને બહેતર બનાવો."
સશક્ત: "આ 90-લાઇન ફંક્શનને તેની બાહ્ય વર્તણૂક અને હસ્તાક્ષર બદલ્યા વિના, એક જવાબદારી સાથે 3 નાના કાર્યોમાં વિભાજિત કરો. આડ અસરો (ડીબી લખે છે) વર્તમાન ક્રમમાં રાખો. મારી પાસે પરીક્ષણો છે, વર્તન સમાન રહેવું જોઈએ. તફાવત આપો અને એક વાક્યમાં સમજાવો કે શા માટે દરેક વિભાજન વર્તન-સંરક્ષિત છે. [કોડ]"
શક્તિશાળી સંસ્કરણ; તેને એક ચોક્કસ પરિવર્તનની જરૂર છે, સ્પષ્ટપણે વર્તન અને હસ્તાક્ષરની મર્યાદા લાદે છે, અને વાજબીતાની માંગણી કરે છે. "વધુ સારું કરો" જેવી અસ્પષ્ટ વિનંતીઓ અનિયંત્રિત અને જોખમી ફેરફારો તરફ દોરી જાય છે.
રિફેક્ટરિંગ પ્રકાર
AI વિશ્વસનીયતા
પૂર્વશરત
નામ બદલો
ઉચ્ચ
શું અવકાશ યોગ્ય છે?
કાર્ય વિભાગ
મધ્યમ-ઉચ્ચ
ટેસ્ટનેટ આવશ્યક છે
શેરિંગ પુનરાવર્તન
મધ્યમ
વર્તન તફાવત છુપાયેલ હોઈ શકે છે
અલ્ગોરિધમ/સંરચનામાં ફેરફાર
નીચું
વ્યાપક પરીક્ષણ + માનવ માન્યતા
આર્કિટેક્ચરલ પુનર્ગઠન
નીચું
માનવ-આગેવાની, AI-સપોર્ટેડ
ટેકનિકલ દેવુંનું સંચાલન કરવું, તેને ફરીથી સેટ કરવું નહીં
ટેકનિકલ દેવું બધું ખરાબ નથી; કેટલીકવાર સભાનપણે ઉધાર લેવો (ડિલિવરીને પહોંચી વળવા) એ યોગ્ય નિર્ણય છે. ધ્યેય દેવું દૂર કરવાનો નથી, પરંતુ તેને દૃશ્યમાન અને વ્યવસ્થાપિત બનાવવાનો છે. AI દેવું શોધવા અને પ્રાથમિકતા આપવામાં ઝડપી છે, પરંતુ "કયું દેવું ચૂકવવું જોઈએ અને કયું છોડી દેવું જોઈએ" તે નક્કી કરવા માટે વ્યવસાય સંદર્ભની જરૂર છે: આ મોડ્યુલ કેટલી વાર બદલાય છે, તે કેટલા લોકોને અસર કરે છે, જોખમ શું છે? આ નિર્ણય તે ટીમ દ્વારા લેવામાં આવે છે જે કોડ બેઝ અને પ્રોડક્ટ જાણે છે; AI માત્ર વિકલ્પોની સ્પષ્ટતા કરે છે.
ટિપ: તમારા રિફેક્ટરિંગ PR ને PRsથી અલગ રાખો જેમાં વર્તનમાં ફેરફારનો સમાવેશ થાય છે. "આ PR માત્ર એક રિફેક્ટરિંગ છે, વર્તન સમાન છે" કહેવા સક્ષમ હોવાને કારણે તપાસ કરવાનું સરળ બને છે અને જો કોઈ સમસ્યા ઊભી થાય તો તમને ઝડપથી કારણને સંકુચિત કરવાની મંજૂરી આપે છે.
સામાન્ય ભૂલો
- ટેસ્ટનેટ વિના રિફેક્ટરિંગ. વર્તન સાચવેલ છે તે સાબિત કરવા માટે તમારી પાસે કંઈ બાકી નથી.
- તેનો અર્થ છે "સંપૂર્ણ ફાઇલ સાફ કરો". મોટા, અનિયંત્રિત ફેરફારો ભૂલને છુપાવે છે અને તેની તપાસ કરી શકાતી નથી.
- ડિફને વાંચ્યા વિના સ્વીકારવું. જ્યારે તેણે "માત્ર માળખું" કહ્યું ત્યારે એઆઈએ થોડો તર્ક કર્યો હશે.
- વર્તણૂકમાં ફેરફાર સાથે ગૂંચવણભર્યું રિફેક્ટરિંગ. એક જ પીઆરમાં બંને કરવાનું મૂળ કારણ ટ્રેકિંગ અશક્ય બનાવે છે.
- દરેક ગંધને ઠીક કરવાનો પ્રયાસ કરે છે. અગ્લી કોડ કે જે ભાગ્યે જ બદલાય છે તે ઘણીવાર ઓછી પ્રાથમિકતા હોય છે; જે જગ્યાએ વારંવાર બદલાવ આવે છે ત્યાં ઊર્જા ફાળવો.
સારાંશમાં
રિફેક્ટરિંગનો એકમાત્ર નિયમ એ છે કે વર્તન સતત રહે છે, અને આનો પુરાવો પરીક્ષણો છે. AI કોડ ગંધ શોધવા, એક-પગલામાં પરિવર્તન અને તકનીકી દેવાને પ્રાથમિકતા આપવા માટે શક્તિશાળી છે; પરંતુ તમારે સુરક્ષા જાળ ગોઠવવી પડશે, પરીક્ષણો ચલાવવા પડશે અને દરેક પગલા પછી તફાવત વાંચવો પડશે. નાના, ઉલટાવી શકાય તેવા પગલાં લો; વર્તન પરિવર્તનથી રિફેક્ટરિંગને અલગ પાડો; અને જે ટીમને વ્યાપાર સંદર્ભ ખબર હોય તેને નક્કી કરવા દો કે કયું દેવું ચૂકવવું.
એપ્લિકેશન કાર્ય
તમારા કોડ બેઝમાંથી એક ફંક્શન પસંદ કરો જે તમને લાંબુ અથવા જટિલ લાગે. પ્રથમ પ્રિન્ટ પરીક્ષણો જે તેની વર્તમાન વર્તણૂકને "સેફ્ટી નેટ" ટેમ્પલેટ સાથે કેપ્ચર કરે છે અને જુઓ કે તે બધા પાસ થાય છે કે નહીં. પછી ફંક્શનને "વન-સ્ટેપ, બિહેવિયર-પ્રિઝર્વિંગ ટ્રાન્સફોર્મેશન" પેટર્ન સાથે એક જ રીતે (દા.ત. અડધા ભાગમાં વિભાજીત કરવું) રિફેક્ટર કરો અને ફરીથી પરીક્ષણો ચલાવો. જો પરીક્ષણ તૂટી જાય, તો શા માટે શોધો; જો તે બિલકુલ તૂટતું નથી, તો વર્તણૂક ખરેખર સચવાયેલી છે તેની પુષ્ટિ કરવા માટે લાઇન દ્વારા તફાવત વાંચો.
ચેકલિસ્ટ
- [ ] હું જાણું છું કે રિફેક્ટરિંગથી વર્તન બદલવું જોઈએ નહીં અને તેને સાબિત કરવા માટે પરીક્ષણો છે.
- [ ] હું એક સલામતી જાળ ગોઠવી રહ્યો છું જે રિફેક્ટર પહેલાં વર્તમાન વર્તનને પકડે છે.
- [ ] મને AI માંથી નાના, એક-પગલાંમાં પરિવર્તન જોઈએ છે, મોટા એક-ઑફ નહીં.
- દરેક પગલા પછી હું પરીક્ષણો ચલાવું છું અને તફાવત વાંચું છું.
- [ ] હું PR ને વર્તન પરિવર્તન PR થી અલગ રાખું છું.
- [ ] હું વ્યાપાર સંદર્ભ સાથે ટેકનિકલ ઋણને પ્રાથમિકતા આપું છું, આંધળી રીતે શૂન્ય કરવાનો પ્રયાસ કરતો નથી.