નફો:
- AI સાથે યુનિટ ટેસ્ટિંગ, એજ કેસ અને કવરેજ ગેપ એનાલિસિસ ઉત્પન્ન કરવાની ક્ષમતા
- સ્પષ્ટીકરણના આધારે પરીક્ષણ અપેક્ષાઓ છાપવાની ક્ષમતા, કોડના વર્તમાન વર્તનને નહીં
- ટેસ્ટ વાસ્તવમાં ઇન્જેક્શન ભૂલો દ્વારા રક્ષણ આપે છે કે કેમ તે ચકાસવાની ક્ષમતા
લેખન પરીક્ષણો એ સૌથી વધુ મૂલ્ય-ઉત્પાદક કાર્યોમાંનું એક છે જે મોટાભાગના વિકાસકર્તાઓએ મુલતવી રાખ્યું છે. એક સારો ટેસ્ટ સ્યુટ એ સાબિતી છે કે કોડ અપેક્ષા મુજબ કામ કરે છે અને ભવિષ્યમાં ફેરફારો માટે જીવનરેખા છે. સમસ્યા એ છે કે પરીક્ષણો લખવાનું પુનરાવર્તિત અને સમય માંગી લેતું હોય છે - બરાબર એ પ્રકારનું કામ જ્યાં AI ચમકે છે. પરંતુ ત્યાં એક કેચ છે: AI ઘણીવાર કોડના હાલના વર્તનનું પરીક્ષણ કરે છે, તે હોવું જોઈએ તેવું વર્તન નહીં. આ તફાવતનું સંચાલન આ એકમનો સાર છે.
આ એકમમાં, તમે એકમ પરીક્ષણ (પરીક્ષણ કે જે એકલા ફંક્શનનું પરીક્ષણ કરે છે, એકલતામાં), એજ કેસ ટેસ્ટ અને AI સાથે ટેસ્ટ ડેટા જનરેટ કરવાનું શીખી શકશો; પરીક્ષણ કવરેજમાં ગાબડાં બંધ કરવા; અને શા માટે AI પરીક્ષણો પર આંધળો વિશ્વાસ કરવો જોખમી છે.
પરીક્ષણની બે બાજુઓ: ફિક્સિંગ બિહેવિયર વિરુદ્ધ. ચકાસો
એક પરીક્ષણ બે અલગ અલગ હેતુઓ પૂરા કરી શકે છે. પ્રથમ ચકાસણી છે: તે પરીક્ષણ કરે છે કે કોડ સાચો છે, કે તે સ્પષ્ટીકરણનું પાલન કરે છે. બીજું રીગ્રેશન પ્રોટેક્શન છે: તે આજે કોડની વર્તણૂકને સ્થિર કરે છે, તેથી જો કોઈ કાલે આકસ્મિક રીતે તેને બદલશે, તો પરીક્ષણ તૂટી જશે અને સૂચિત કરશે.
AI બાદમાં ખૂબ સારું છે; તે કોડને જુએ છે અને એવા કિસ્સાઓ જનરેટ કરે છે જે પરીક્ષણ કરે છે કે "તે અત્યારે શું કરી રહ્યું છે." પરંતુ જો કોડ શરૂઆતથી ખોટો હોય, તો AI તે ખોટા વર્તનને "સાચો" તરીકે પિન કરી શકે છે. તેથી તમારે એઆઈ દ્વારા ઉત્પાદિત દરેક પરીક્ષણના નિવેદનની સમીક્ષા કરવી જોઈએ: "કોડ 42 આપે છે અને પરીક્ષણ 42 ની અપેક્ષા રાખે છે" નો અર્થ એ નથી કે 42 સાચો જવાબ છે.
સાવધાન: જો AI પરીક્ષણ પાસ કરે છે, તો તેનો અર્થ એ નથી કે કોડ "કાર્યશીલ" છે; તેનો અર્થ ફક્ત "એઆઈની અપેક્ષા મુજબ તે વર્તે છે". તમે સ્પષ્ટીકરણ જોઈને નક્કી કરો કે અપેક્ષા સાચી છે કે નહીં.
સ્ટેપ બાય સ્ટેપ: AI સાથે મજબૂત ટેસ્ટ લખવા
- સ્પષ્ટીકરણ આપો, માત્ર કોડ જ નહીં. જો તમે "આ ફંક્શને આ કરવું જોઈએ" માહિતી ઉમેરો છો, તો AI સાચી અપેક્ષા લખી શકે છે; જો તમે માત્ર કોડ પ્રદાન કરો છો તો તે વર્તમાન વર્તનનું પરીક્ષણ કરશે.
- ધાર કેસો માટે પૂછો. ખાલી, શૂન્ય, શૂન્ય, નકારાત્મક, ખૂબ મોટું, ખરાબ ફોર્મેટ, સંમતિ — સ્પષ્ટપણે સુખી માર્ગનો દાવો કરો.
- પરીક્ષણ માળખું અને શૈલી સ્પષ્ટ કરો. "પાયટેસ્ટનો ઉપયોગ કરો", "એરેન્જ-એક્ટ-એસર્ટ પેટર્ન", "દરેક ટેસ્ટને એક વસ્તુની ચકાસણી કરવા દો" વગેરે.
- અપેક્ષાઓ તપાસો (વિધાન). સ્પષ્ટીકરણ સાથે સરખામણી કરો કે દરેક દાવા યોગ્ય મૂલ્ય માટે તપાસે છે.
- અવકાશમાં ગાબડાં બંધ કરો. હાલના પરીક્ષણો આપો અને પૂછો કે "કઈ શાખાઓ અને કેસોનું પરીક્ષણ કરવામાં આવ્યું નથી?" તમને પૂછવા દો; પછી ઉત્પાદિત વધારાના પરીક્ષણો ચકાસો.
ત્રણ મિની કેસ
કેસ 1 - 52% થી 85% સુધીનું કવરેજ. એક સેવા મોડ્યુલનું પરીક્ષણ કવરેજ 52% હતું. ટીમે એઆઈને હાલના પરીક્ષણો ખવડાવ્યા હતા, તેની પાસે પરીક્ષણ ન કરાયેલ શાખાઓની યાદી બનાવી હતી અને તેમના માટે પરીક્ષણો જનરેટ કર્યા હતા. માનવીય સમીક્ષા સાથે, કવરેજ વધીને 85% થયું; પ્રક્રિયામાં, AI એ બગ બ્રાન્ચમાં એક વાસ્તવિક બગ (એક પાથ કે જેણે ખોટો એરર કોડ પાછો આપ્યો) શોધી કાઢ્યો જેનું અગાઉ ક્યારેય પરીક્ષણ કરવામાં આવ્યું ન હતું.
કેસ 2 - ખોટી અપેક્ષા ફિક્સેશન ટ્રેપ. મની રાઉન્ડિંગ કાર્ય ખરેખર ખોટું હતું; 2.675 થી 2.67 સુધી રાઉન્ડિંગ કરવાને બદલે, તે 2.68 ને બદલે 2.67 રાઉન્ડિંગ કરી રહ્યું હતું. AI એ કોડને જોયો અને લખ્યો assert round_money(2.675) == 2.67 — ભૂલને “true” તરીકે ફ્રીઝ કરીને. જ્યારે વિકાસકર્તાએ સ્પષ્ટીકરણ વાંચ્યું, ત્યારે તેણે અપેક્ષા સુધારી અને વાસ્તવિક ભૂલ પકડી. કોડની નહીં પણ નિયમની ચકાસણી કરવાથી ફરક પડ્યો.
કેસ 3 - એજ સ્ટેટ વિસ્ફોટ. તારીખ રેંજ ફંક્શન માટે AI ને ફક્ત "એજ કેસ" માટે પૂછતી વખતે; તેણે સ્ટાર્ટ=એન્ડ, રિવર્સ ઈન્ટરવલ, લીપ વર્ષ 29 ફેબ્રુઆરી, અલગ અલગ સમય ઝોન અને નલ ઈન્ટરવલ જેવા 8 કેસ બનાવ્યા. આમાંથી બે (વિપરીત અંતર અને લીપ વર્ષ) વાસ્તવમાં ભૂલનું કારણ બની રહ્યા હતા. આ કેસોને મેન્યુઅલી ધ્યાનમાં લેવાનું ઘણીવાર છોડવામાં આવે છે; AI અહીં "એજ-કેસ બ્રેઈનસ્ટોર્મિંગ" પાર્ટનર બન્યું.
ચાર નકલ કરી શકાય તેવા નમૂનાઓ
સ્પષ્ટીકરણ-આધારિત પરીક્ષણ જનરેશન:
ભૂમિકા: એક વિકાસકર્તા જે પરીક્ષણો લખે છે. ફ્રેમવર્ક: {{pytest/JUnit/Jest...}}. કાર્ય શું કરવું જોઈએ (વિશિષ્ટતા): {{rule}}નીચેના કાર્ય માટે પરીક્ષણો લખો. સ્પષ્ટીકરણ અનુસાર અપેક્ષાઓ લખો, કોડનું વર્તમાન આઉટપુટ નહીં. હેપી પાથ + ઓછામાં ઓછા 4 એજ કેસ ઉમેરો. દરેક પરીક્ષણને એક વસ્તુની ચકાસણી કરવા દો, વર્ણનાત્મક નામનો ઉપયોગ કરો. {{કાર્ય}}
એજ કેસ બ્રેઈનસ્ટોર્મિંગ:
આ ફંક્શન (નલ, નલ, બ્રેકપોઇન્ટ્સ, ખરાબ ફોર્મેટ, સંમતિ, બાહ્ય ભૂલ) માટે પરીક્ષણમાં અજમાવવામાં આવે તેવા કિનારી/નિષ્ફળતાના કેસોની સૂચિ બનાવો. દરેક કેસ માટે: ઇનપુટ, અપેક્ષિત વર્તન. હજી સુધી કોડ લખશો નહીં, ફક્ત સૂચિ બનાવો.{{function}}
કવરેજ ગેપ વિશ્લેષણ:
નીચે કાર્યો અને ઉપલબ્ધ પરીક્ષણો છે. કઈ શાખાઓ, પરિસ્થિતિઓ અને કેસોની ચકાસણી કરવામાં આવી નથી? ખામીઓની યાદી બનાવો અને માત્ર ખામીઓ માટે જ નવા પરીક્ષણો લખો. અસ્તિત્વમાં છે તે પુનરાવર્તન કરશો નહીં. કાર્ય:{{function}}પરીક્ષણો:{{existing_tests}}
ટેસ્ટ ડેટા / મોક ઑબ્જેક્ટ જનરેશન:
{{function/service}} પરીક્ષણો માટે વાસ્તવિક પરીક્ષણ ડેટા બનાવો: માન્ય નમૂનાઓ, સરહદ નમૂનાઓ અને અમાન્ય નમૂનાઓ અલગથી. બાહ્ય નિર્ભરતા {{X}} માટે એક સરળ ઉપહાસપૂર્ણ વર્તન સૂચવો. સાચા ગોપનીય ડેટા/PII નો ઉપયોગ કરવો; નકલી ડેટા જનરેટ કરો.
નબળા પ્રોમ્પ્ટ / મજબૂત પ્રોમ્પ્ટ
નબળા: "આ કાર્ય માટે એક પરીક્ષણ લખો."
સશક્ત: "pytest સાથે. ફંક્શન apply_discount(કુલ, ટકા) — નિયમ: ડિસ્કાઉન્ટ 0%–30% હોવું જોઈએ, બાઉન્ડની બહાર ValueError થવી જોઈએ, પરિણામ 2 દશાંશ સુધી ગોળાકાર હોવું જોઈએ. આ નિયમ દ્વારા અપેક્ષાઓ લખો (કોડ દ્વારા નહીં). હેપી પાથ + આ ધારના કિસ્સાઓ: 0%, 0% = 0%, કુલ 0%, 0%, 0% = . [કોડ]"
તે મજબૂત પ્રકાશનનો નિયમ આપે છે અને કહે છે કે "નિયમ અનુસાર અપેક્ષા લખો, કોડ નહીં"; આ એક વાક્ય એઆઈ ફિક્સિંગ ગેરવર્તણૂકની જાળને બંધ કરે છે.
ટેસ્ટ પ્રકાર
AI યોગદાન
માનવ નિયંત્રણ
હેપી રોડ યુનિટ ટેસ્ટિંગ
ઝડપી હાડપિંજર
શું અપેક્ષા સાચી છે?
ધાર કેસો
વ્યાપક મંથન
અપ્રસ્તુત દૂર કરો
સ્કોપ ગેપ ફિલિંગ
છોડેલી શાખાઓ શોધે છે
મહત્વની પુષ્ટિ કરો
ટેસ્ટ ડેટા/મોક
વાસ્તવિક નમૂનાનું ઉત્પાદન કરે છે
કોઈ PII, વાસ્તવિકતા નિયંત્રણ નથી
પરીક્ષણો ગુણવત્તાનું સંચાલન કરે છે, તેની ખાતરી આપતા નથી
ઉચ્ચ પરીક્ષણ કવરેજ આત્મવિશ્વાસ આપે છે, પરંતુ તે ગેરમાર્ગે દોરનારું પણ હોઈ શકે છે: 100 ટકા કવરેજનો અર્થ છે "દરેક લાઇન ચલાવવામાં આવી હતી," નહીં કે "દરેક લાઇન સાચી છે." AI સાથે કવરેજ વધારવું સરળ છે; વાસ્તવિક મૂલ્ય અર્થપૂર્ણ અપેક્ષાઓ લખવામાં છે. પરીક્ષણનું મૂલ્ય એ છે કે જ્યારે કોડ તૂટી જાય ત્યારે તેને તોડવાની અને તમને ચેતવણી આપવાની ક્ષમતા છે. તેથી જ AI-જનરેટેડ પરીક્ષણો "શું કોડ બદલાય ત્યારે તે ખરેખર તૂટી જાય છે?" પ્રશ્ન પર આધારિત છે. પ્રશ્ન સાથે તેની ચકાસણી કરો; ઇરાદાપૂર્વક લાઇન તોડવી અને ટેસ્ટ બ્રેક (મ્યુટેશન આઇડિયા) જોવું એ સાબિતી છે કે પરીક્ષણ કામ કરે છે.
ટીપ: એઆઈ લખે છે તે ટેસ્ટ કામ કરે છે કે કેમ તે જોવા માટે, કોડમાં એક નાનો બગ બનાવો (દા.ત. a + થી a - બદલો) અને જુઓ કે ટેસ્ટ તૂટી જાય છે કે કેમ. જો તે તૂટતું નથી, તો તે પરીક્ષણ તમારું રક્ષણ કરતું નથી.
સામાન્ય ભૂલો
- નિયમ આપ્યા વિના ટેસ્ટ માટે પૂછવું. મોડેલ વર્તમાન વર્તનને સ્થિર કરે છે; ભૂલને "સત્ય" તરીકે સુધારે છે.
- અપેક્ષાઓ વાંચ્યા વિના સ્વીકારવી. પરીક્ષણ ગેરમાર્ગે દોરનારું છે જો તમે તપાસો નહીં કે દાવાઓ યોગ્ય મૂલ્ય માટે તપાસ કરી રહ્યાં છે.
- ફક્ત સુખી માર્ગની પરીક્ષા. વાસ્તવિક ભૂલો માર્જિન પર રહે છે; ધાર કેસો માટે સ્પષ્ટપણે પૂછો.
- હેતુ માટે અવકાશની ભૂલ કરવી. ઉચ્ચ ટકાવારી એ યોગ્ય વર્તનની કોઈ ગેરંટી નથી.
- વાસ્તવિક/છુપાયેલ ડેટાને ટેસ્ટ ડેટા તરીકે બનાવવો. ગ્રાહક ડેટા અથવા રહસ્યો પરીક્ષણ અને સંગ્રહમાં પ્રવેશવા જોઈએ નહીં; સિન્થેટીક ડેટા જનરેટ કરો.
સારાંશમાં
AI લેખિત કસોટીઓમાંથી પુનરાવર્તિત બોજનો મોટાભાગનો ભાગ લે છે: તે ઝડપી હાડપિંજર, ધાર કેસોની મોટી સૂચિ અને કવરેજ ગેપ વિશ્લેષણનું ઉત્પાદન કરે છે. પરંતુ સૌથી નિર્ણાયક મુદ્દો અપેક્ષાઓ છે: AI કોડના વર્તમાન વર્તનનું પરીક્ષણ કરે છે, જ્યારે પરીક્ષણ સ્પષ્ટીકરણ અનુસાર લખવું જોઈએ. નિયમ આપો, અપેક્ષાઓ તપાસો, ધાર કેસો લાગુ કરો અને પરીક્ષણો ખરેખર બગને ઇન્જેક્શન દ્વારા સુરક્ષિત કરે છે કે કેમ તે તપાસો. ટેસ્ટ કવરેજ એ એક સાધન છે, લક્ષ્ય નથી.
એપ્લિકેશન કાર્ય
ફંક્શન પસંદ કરો અને પ્રથમ એઆઈને તેનો કોડ આપીને ટેસ્ટ પ્રિન્ટ કરો; અપેક્ષાઓ નોંધો. પછી તે જ કાર્ય માટે સ્પષ્ટીકરણ (જરૂરી વર્તન) આપીને ફરીથી પરીક્ષણ છાપો. બે ટેસ્ટ સેટની અપેક્ષાઓની સરખામણી કરો: શું ત્યાં કોઈ અલગ છે, જે વાસ્તવિક બગ દર્શાવે છે? છેલ્લે, કોડમાં ઈરાદાપૂર્વક બગ ઉમેરીને અને ટેસ્ટ બ્રેક જોઈને જનરેટ કરેલ પરીક્ષણોમાંથી એકે કામ કર્યું છે તે ચકાસો.
ચેકલિસ્ટ
- [ ] હું તફાવત કરું છું કે પરીક્ષણ વર્તનને ઠીક કરવા અથવા ચકાસવા માટે છે.
- [ ] જ્યારે હું પરીક્ષણની વિનંતી કરું છું, ત્યારે હું નિયમ (વિશિષ્ટતા) આપું છું જે સ્થાને હોવું જોઈએ, કોડ નહીં.
- [ ] હું દરેક જનરેટ કરેલા નિવેદનની સ્પષ્ટીકરણ સાથે તુલના કરું છું.
- [ ] હું સ્પષ્ટપણે ધાર અને નિષ્ફળતાના કેસોની વિનંતી કરું છું.
- [ ] હું ટકાવારી કવરેજને એક સાધન તરીકે જોઉં છું, લક્ષ્ય નહીં.
- [ ] હું પરીક્ષણ કરું છું કે શું પરીક્ષણ ખરેખર ભૂલોને ઇન્જેક્શન દ્વારા સુરક્ષિત કરે છે.