એકમ 5 / 12

ડિબગીંગ અને મુશ્કેલીનિવારણ

નફો:

  • ભૂલ સંદેશ, સ્ટેક ટ્રેસ અને સૌથી નાના પ્રજનન ઉદાહરણ સાથે AI માં બગનું અસરકારક રીતે વર્ણન કરવાની ક્ષમતા
  • AI સાથે વ્યવસ્થિત ડિબગીંગ ફ્લો ચલાવવાની ક્ષમતા, અનુમાનિત કરીને અને તેને તબક્કાવાર સંકુચિત કરીને મૂળ કારણ શોધવા માટે
  • એઆઈ દ્વારા સૂચવવામાં આવેલ ફિક્સ વાસ્તવમાં પુનઃઉત્પાદન અને રીગ્રેસન પરીક્ષણ દ્વારા સમસ્યાને ઠીક કરી છે તે ચકાસવાની ક્ષમતા

ડીબગીંગ એ શા માટે પ્રોગ્રામ અપેક્ષા કરતા અલગ રીતે વર્તે છે તે શોધવાનું અને તેને ઠીક કરવાનું કાર્ય છે અને તે મોટાભાગના એન્જિનિયરોનો ઘણો સમય વાપરે છે. સારું ડિબગીંગ અનુમાન લગાવવાની રમત પર આધારિત નથી, પરંતુ વ્યવસ્થિત રીતે સંકુચિત કરવા પર આધારિત છે: લક્ષણ સ્પષ્ટ કરો, પૂર્વધારણા કરો, પૂર્વધારણાનું પરીક્ષણ કરો, મૂળ કારણ પર જાઓ. AI આ ચક્રમાં ખૂબ જ શક્તિશાળી ભાગીદાર છે; પરંતુ જો તમે તેને સાચી માહિતી આપો તો જ. "કોડ કામ કરતું નથી, તેને ઠીક કરો" કહેવાથી એઆઈને અનુમાન કરવા અને બ્લેન્કેટ સૂચનો કરવા દબાણ કરે છે. તેને સંપૂર્ણ ભૂલ સંદેશ, સ્ટેક ટ્રેસ અને સૌથી નાનો પ્રજનન નમૂના આપો અને સાથે મળીને તમે મૂળ કારણ શોધી શકશો.

આ એકમમાં આપણે જોઈશું કે કેવી રીતે AI માં બગનું અસરકારક રીતે વર્ણન કરવું, અનુમાનોને તબક્કાવાર સંકુચિત કરવું, અને રીગ્રેશન ટેસ્ટિંગ દ્વારા ચકાસો કે સૂચિત ફિક્સ ખરેખર સમસ્યાનું નિરાકરણ કરે છે. યાદ રાખો: બગને "ફિક્સ કરવું" અને "બગના લક્ષણને દબાવવું" એ બે અલગ-અલગ બાબતો છે; મૂળ કારણ શોધ્યા વિના કરવામાં આવેલ સુધારો ભૂલને બીજી જગ્યાએ લઈ જાય છે.

વિભાવનાઓ: સ્ટેક ટ્રેસ: એક ડમ્પ જે દર્શાવે છે કે ભૂલ સમયે કયા ક્રમમાં કયા કાર્યોને બોલાવવામાં આવ્યા હતા. ન્યૂનતમ રિપ્રો: સૌથી સરળ, ટૂંકો કોડ/ઇનપુટ જે ભૂલને ટ્રિગર કરે છે. મૂળ કારણ: સમસ્યાનો વાસ્તવિક સ્ત્રોત, લક્ષણ નથી. રીગ્રેસન પરીક્ષણ: પરીક્ષણ જે ખાતરી કરે છે કે સમાન ભૂલનું પુનરાવર્તન ન થાય.

AI થી બગનું વર્ણન

AI નું મૂળ કારણ શોધવાની સંભાવના તમે પ્રદાન કરો છો તે માહિતીની ગુણવત્તાના સીધા પ્રમાણસર છે. સારા ભૂલ વર્ણનમાં શામેલ છે: તમે શું કરવાનો પ્રયાસ કર્યો, તમે શું અપેક્ષા રાખતા હતા, શું થયું, ચોક્કસ ભૂલ ટેક્સ્ટ અને સ્ટેક ટ્રેસ, સામેલ કોડ, પર્યાવરણ (ભાષા/સંસ્કરણ/OS), અને સૌથી નાનો નમૂનો કે જેણે ભૂલ ઉત્પન્ન કરી.

  1. લક્ષણ સ્પષ્ટ કરો. ફોર્મેટમાં "અપેક્ષિત X, વાસ્તવિક Y".
  2. સંપૂર્ણ ભૂલ લખાણ અને સ્ટેક ટ્રેસ પેસ્ટ કરો. તેને ટૂંકો ન કરો, તેને સેન્સર કરો, પરંતુ બંધારણને તોડશો નહીં.
  3. સૌથી નાનું પ્રજનન આપો. ન્યૂનતમ ઇનપુટ અને કોડ કે જે ભૂલને ટ્રિગર કરે છે.
  4. પર્યાવરણ સ્પષ્ટ કરો. ભાષા સંસ્કરણ, પુસ્તકાલય સંસ્કરણ, રનટાઇમ પર્યાવરણ.

અસરકારક ભૂલ વર્ણન પ્રોમ્પ્ટ: "હું બગ ડીબગ કરી રહ્યો છું. માહિતી:- હું શું કરવાનો પ્રયાસ કરી રહ્યો છું: [X] - અપેક્ષિત વર્તન: [Y] - વાસ્તવિક વર્તન: [Z] - સંપૂર્ણ ભૂલ સંદેશ અને સ્ટેક ટ્રેસ: [પેસ્ટ] - પર્યાવરણ: [ભાષા/સંસ્કરણ, પુસ્તકાલય/સંસ્કરણ] - ઓછામાં ઓછું કોડ આપો. સંભવતઃ સંભાવનાના ક્રમમાં મૂળ કારણો અને દરેક માટે કયો ચેક ચકાસવો તે મને જણાવો."

પૂર્વધારણા દ્વારા સંકુચિત પ્રવાહ

વ્યવસ્થિત ડિબગીંગ એ એક પછી એક શક્યતાઓને દૂર કરવાની કળા છે. પૂર્વધારણાઓ બનાવવા માટે AI નો ઉપયોગ કરો અને દરેક પૂર્વધારણાને ચકાસવા માટે પ્રયોગ ડિઝાઇન કરો; પછી પ્રયોગ ચલાવો અને પરિણામ પરત કરો. આ ચક્ર રેન્ડમ ફેરફારો અને બંધ કરવાની આદત કરતાં વધુ ઝડપી છે, જેને "શોટગન ડીબગીંગ" કહેવાય છે.

દ્વિસંગી શોધ (દ્વિભાજન) હેલ્પર પ્રોમ્પ્ટ: "આ ભૂલ ગઈ કાલે ન હતી, તે આજે છે. હું શોધવા માંગું છું કે છેલ્લા 20 ફેરફારોમાંથી કયા દ્વિભાજ સાથે ભૂલ લાવી છે. મને એક પગલું-દર-પગલાની યોજના આપો: પરિણામના આધારે મારે કયા બિંદુનું પરીક્ષણ કરવું જોઈએ, કયા અડધા સુધી જવું જોઈએ. દરેક પગલા પર શું તપાસવું તે પણ મને બરાબર જણાવો."

લોગ નિવેશ વ્યૂહરચના પ્રોમ્પ્ટ: "હું ભૂલ શોધી શકતો નથી કારણ કે હું આ ફંક્શનમાં મધ્યવર્તી મૂલ્યો જોઈ શકતો નથી. મને કહો કે મારે કયા બિંદુઓ પર લૉગ લાઇન ઉમેરવાની જરૂર છે જે ચલ છાપે છે. દરેક લોગ માટે 'હું આ લોગમાંથી શું શીખીશ' સમજૂતી ઉમેરો. તે ચેતવણીઓનો પણ ઉલ્લેખ કરો જે મને ગોપનીય ડેટાને લૉગ કરવાથી અટકાવશે."

ટીપ: જો તમે કોઈ ભૂલને ઉકેલી શકતા નથી, તો મોટાભાગે સમસ્યા ક્યાંક એવી હોય છે જ્યાં તમે ખોટી રીતે ધાર્યું હોય. AI ને પૂછો "મારી કઈ ધારણા ખોટી હોઈ શકે?" પૂછવાથી તમારું અંધત્વ તૂટી જશે. સૌથી અઘરી ભૂલો એ જગ્યાએ છુપાવે છે જ્યાં તમે કહો છો "મને ખાતરી છે કે આ બરાબર કામ કરી રહ્યું છે".

નબળા પ્રોમ્પ્ટ / મજબૂત પ્રોમ્પ્ટ

WEAK:"મારો કોડ ભૂલ આપે છે, તેને ઠીક કરો: [કોડની 200 લાઇન]"(પરિણામ: AI જાણતું નથી કે તે કઈ ભૂલ છે, શું અપેક્ષિત છે; તે અનુમાનના આધારે સામાન્ય સૂચનો આપે છે, તેમાંથી મોટા ભાગના નકામા છે.)STRONG:"મને NullPointerException મળે છે. અપેક્ષિત: વપરાશકર્તા સૂચિ પરત કરવામાં આવે. [પેસ્ટ].પર્યાવરણ: જાવા 17. ન્યૂનતમ પુનરાવર્તન: તે ત્યારે થાય છે જ્યારે વપરાશકર્તાઓની સૂચિ ખાલી હોય, પરંતુ જ્યારે તે ભરેલી હોય ત્યારે નહીં: [કોડ] મૂળ કારણ અને શા માટે ટ્રિગર થાય છે તે સમજાવો."

શક્તિશાળી પ્રોમ્પ્ટ સંદર્ભમાં ભૂલ મૂકે છે: જે કિસ્સામાં તે થાય છે (ખાલી સૂચિ), જે કિસ્સામાં તે થતું નથી (સંપૂર્ણ સૂચિ). આ એક સંકેત ("ખાલી હોય ત્યારે થાય છે") લગભગ સીધું જ મૂળ કારણ તરફ નિર્દેશ કરે છે. નબળા પ્રોમ્પ્ટમાં આ માહિતી ઉપલબ્ધ ન હોવાથી, AI અંધ અનુમાન લગાવે છે.

ફિક્સની ચકાસણી કરી રહ્યા છીએ

ફિક્સ એ માત્ર એક વાસ્તવિક ફિક્સ છે જો તે ત્રણ વસ્તુઓ કરે છે:

નિયંત્રણ

પ્રશ્ન

કેવી રીતે ચકાસવું

શું ભૂલ થઈ ગઈ છે?

શું એ જ એન્ટ્રી હવે કામ કરે છે?

ફરીથી ન્યૂનતમ રેપ્રો ચલાવો

કોઈ નવી ભૂલો નથી?

બીજું કંઈ તૂટી ગયું છે?

સમગ્ર ટેસ્ટ સ્યુટ ચલાવો

શું તે પુનરાવર્તન નહીં થાય?

શું એ જ ભૂલ ફરી થશે?

આ દૃશ્ય માટે રીગ્રેશન ટેસ્ટ ઉમેરો

મૂળ કારણ શોધ્યા વિના કરવામાં આવેલ સુધારાઓ ઘણીવાર લક્ષણને દબાવી દે છે. ઉદાહરણ તરીકે, "સ્કિપ જો નલ" સાથે નલ એરરને ગ્લોસ કરવાથી વાસ્તવિક કારણ બને છે, "ડેટા શા માટે નલ આવી રહ્યો છે?" અદ્રશ્ય છે, અને ભૂલ અન્યત્ર ફરી થાય છે.

મીની કેસો

કેસ 1 - લક્ષણ દમન છટકું. એક ટીમ અજમાયશ-કેચ સાથે પ્રસંગોપાત નલ ભૂલને શાંત કરે છે; ભૂલ અદૃશ્ય થઈ જાય છે પરંતુ 2 અઠવાડિયા પછી ડેટા ખૂટે છે. વાસ્તવિક કારણ એ છે કે સેવા સમયસમાપ્તિ પર નલ પરત કરે છે. જ્યારે તમે AI ને પૂછો કે "તે કેમ શૂન્ય થઈ રહ્યું છે?", મૂળ કારણ બહાર આવે છે; વાસ્તવિક સુધારો 1 કલાક લે છે પરંતુ કાયમી છે.

કેસ 2 - ન્યૂનતમ રિપ્રો પાવર. ડેવલપર એવી બગને ઠીક કરી શકતો નથી કે જે કહે છે કે "તે દરેક સમયે ક્રેશ થાય છે." તે AI ના સૂચન સાથેના સૌથી નાના ઇનપુટમાં ભૂલને ઘટાડે છે: સમસ્યા ફક્ત ટર્કિશ અક્ષરો (એન્કોડિંગ ભૂલ) ધરાવતા ફાઇલનામો સાથે થાય છે. જ્યારે અનિશ્ચિતતાની 300 રેખાઓ નિર્ણાયક રિપ્રોની 5 રેખાઓ સુધી ઘટાડવામાં આવે છે, ત્યારે ઉકેલ સ્પષ્ટ બને છે.

કેસ 3 - એન્ટિ-રીગ્રેશન ટેસ્ટ. AI તારીખ ગણતરીની ભૂલને સુધારે છે. એન્જિનિયર આનાથી સંતુષ્ટ નથી; ભૂલભરેલા દૃશ્ય માટે રીગ્રેશન ટેસ્ટ ઉમેરે છે (મહિનો અંત, જાન્યુઆરી 31 + 1 મહિનો). જ્યારે અન્ય ફેરફાર 4 મહિના પછી સમાન વિસ્તારને સ્પર્શે છે, ત્યારે પરીક્ષણ લાલ થઈ જાય છે અને બગ ઉત્પાદન સુધી પહોંચે તે પહેલાં જ પકડાઈ જાય છે.

સામાન્ય ભૂલો

  • તેનો અર્થ છે "તે કામ કરતું નથી, તેને ઠીક કરો". ભૂલ ટેક્સ્ટ, અપેક્ષા અને રિપ્રો વિના, AI અનુમાન કરે છે.
  • સ્ટેક ટ્રેસ આપતા નથી. સ્ટેક ટ્રેસ ઘણીવાર સીધું મૂળ કારણ સૂચવે છે.
  • રેન્ડમ ફેરફારો કરવાનું ચાલુ રાખો. પૂર્વધારણા સ્થાપિત કર્યા વિના પ્રયોગો સમયનો બગાડ કરે છે.
  • લક્ષણને દબાવવું અને મૂળ કારણ ખૂટે છે. ભૂલ અન્યત્ર પુનર્જન્મ પામે છે.
  • રીગ્રેસન પરીક્ષણ સાથે ફિક્સ સુરક્ષિત નથી. એ જ ભૂલ ભવિષ્યમાં ચુપચાપ પાછી આવે છે.

સારાંશમાં

અસરકારક ડિબગીંગ એ વ્યવસ્થિત સંકુચિત છે, અનુમાન લગાવવું નહીં. AI ને સંપૂર્ણ ભૂલ લખાણ, સ્ટેક ટ્રેસ, ન્યૂનતમ પ્રજનન અને પર્યાવરણની માહિતી આપવાથી મૂળ કારણ શોધવાની તકો ઝડપથી વધી જાય છે. પૂર્વધારણાઓ બનાવવા માટે AI નો ઉપયોગ કરો અને દરેક પૂર્વધારણાને ચકાસવા માટે પ્રયોગ ડિઝાઇન કરો; તમે પ્રયોગ ચલાવો. જ્યારે તમે જોશો કે ભૂલ દૂર થઈ ગઈ છે, કોઈ નવી ભૂલો રજૂ કરવામાં આવી નથી, અને તે રીગ્રેસન પરીક્ષણ દ્વારા સુરક્ષિત છે ત્યારે જ ફિક્સ "થઈ ગયું" ને ધ્યાનમાં લો.

એપ્લિકેશન કાર્ય

વાસ્તવિક અથવા કૃત્રિમ ભૂલને ધ્યાનમાં લો. સૌપ્રથમ ભૂલને સૌથી નાના પ્રજનનમાં ઘટાડો (જે ઇનપુટમાં તે થાય છે, જેમાં તે થતું નથી). અસરકારક બગ રેસીપી પ્રોમ્પ્ટનો ઉપયોગ કરીને, AI ને 3 મૂળ કારણ પૂર્વધારણાઓ અને દરેક માટે એક ચકાસણી પગલું પૂછો. એક પછી એક પૂર્વધારણાઓનું પરીક્ષણ કરીને મૂળ કારણ શોધો, તેને ઠીક કરો, પછી ભૂલ દૂર થઈ ગઈ છે અને પરીક્ષણ રક્ષણ પૂરું પાડે છે તે બતાવવા માટે આ દૃશ્ય માટે રીગ્રેશન ટેસ્ટ લખો અને ચલાવો.

ચેકલિસ્ટ

  • [ ] મેં લક્ષણને "અપેક્ષિત વિ અનુભૂતિ" તરીકે સ્પષ્ટ કર્યું.
  • [ ] મેં AI ને સંપૂર્ણ ભૂલ લખાણ અને સ્ટેક ટ્રેસ આપ્યો.
  • [ ] મેં ભૂલને સૌથી નાના પ્રજનનમાં ઘટાડી છે.
  • એક પછી એક અનુમાનોનું પરીક્ષણ કરીને, મને મૂળ કારણ મળ્યું.
  • [ ] લક્ષણને દબાવવાને બદલે, મેં મૂળ કારણને ઠીક કર્યું.
  • [ ] મેં એ જ ભૂલ માટે રીગ્રેશન ટેસ્ટ ઉમેર્યો અને ચલાવ્યો.