ટેસ્ટ જનરેશન માટે AI: ક્યાં તે મદદરૂપ છે અને ક્યાં તે છેતરામણું છે

AI ઝડપથી ટેસ્ટ લખે છે. તે એવા ટેસ્ટ પણ લખે છે જે વાસ્તવિક લાગે છે પરંતુ ખોટી વસ્તુઓની ચકાસણી કરે છે. કદાચ તમને તમારું કવરેજ વધતું દેખાશે, પરંતુ તમારો કોડ ખામીયુક્ત જ રહેશે.

AI ચોક્કસ કાર્યો માટે ઉત્તમ છે. તેનો ઉપયોગ આ માટે કરો:

  • એક સારા ઉદાહરણ પરથી અનુમાન લગાવો (Extrapolate). જો તમે એક સંપૂર્ણ ટેસ્ટ લખો છો, તો AI તમારી જ શૈલીમાં બીજા દસ ટેસ્ટ લખી શકે છે.
  • પુનરાવર્તિત ટાઈપિંગ સંભાળો. તેનો ઉપયોગ setup blocks, teardown, અને factory helpers માટે કરો.
  • પ્રારંભિક સ્કેફોલ્ડિંગ (scaffolding) બનાવો. તે ખાલી ફાઇલ કરતા તમને એડિટર સુધી ઝડપથી પહોંચાડે છે.

જો તમે AI ને "contract" નક્કી કરવા દો છો, ત્યારે જોખમ શરૂ થાય છે.

જો તમે AI ને કોઈ function આપો છો અને ટેસ્ટ માટે કહો છો, તો તે કોડ વાંચે છે અને કોડ અત્યારે શું કરે છે તેની ચકાસણી કરે છે. તે કોડ શું કરવું જોઈએ તેની ચકાસણી કરતું નથી. આ એક બંધ લૂપ (closed loop) બનાવે છે. AI એક ધારણા કરે છે, કોડ લખે છે, અને પછી તે જ ધારણા સાથે સુસંગત હોય તેવા ટેસ્ટ લખે છે.

જ્યારે production માં બગ્સ (bugs) આવે છે, ત્યારે તે એટલા માટે આવે છે કારણ કે ટેસ્ટ સ્યુટ બગના પક્ષમાં હતું.

આ ત્રણ છટકબારીઓ (traps) થી સાવધ રહો:

  1. Implementation-આકારના ટેસ્ટ (Implementation-shaped tests) AI ઘણીવાર બિઝનેસ રૂલ્સને બદલે લોજિક પાથ (logic paths) ટેસ્ટ કરે છે. જો તમે નાની આંતરિક વિગત બદલો છો, તો પરિણામ હજુ પણ સાચું હોવા છતાં ટેસ્ટ તૂટી જાય છે. આ રિફેક્ટરિંગ (refactoring) ને એક દુઃસ્વપ્ન બનાવી દે છે.

  2. છીછરા એજ કેસિસ (Shallow edge cases) AI nulls, empty strings, અને zeros ટેસ્ટ કરવામાં સારું છે. આ સ્પષ્ટ છે. તે "domain edges" શોધી શકતું નથી. તે તમારા ચોક્કસ ટાઈમઝોન બગ્સ, તમારા ડેટાબેઝની વિચિત્રતાઓ, અથવા તમારા અનન્ય બિઝનેસ રૂલ્સ વિશે જાણતું નથી.

  3. બ્રિટલ મોક્સ (Brittle mocks) AI બધું જ mock કરવાનું પસંદ કરે છે. આનાથી બે સમસ્યાઓ થાય છે:

  • મોક (mock) ખોટો છે. તે API ની એવી નકલી આવૃત્તિનું અનુકરણ કરે છે જે વાસ્તવિકતા સાથે મેળ ખાતી નથી.
  • મોક અમલીકરણને (implementation) જામ કરી દે છે. તે અંતિમ પરિણામની ચકાસણી કરવાને બદલે તમારો કોડ અન્ય ફંક્શન્સને કેવી રીતે કોલ કરે છે તેની ચકાસણી કરે છે.

AI નો સાચો ઉપયોગ કેવી રીતે કરવો:

"intent" (હેતુ) ને AI ની પહોંચથી દૂર રાખો.

  • પહેલા contract લખો. દરેક ટેસ્ટ માટે સાદી અંગ્રેજીમાં એક વાક્ય લખો. ઉદાહરણ: "Expired codes must return the original amount."
  • તે વાક્યો AI ને આપો. તેને assertions લખવા દો, પરંતુ અર્થ તમે આપો.
  • સીમાઓ (boundaries) પર mock કરો. ફક્ત બાહ્ય APIs અથવા ડેટાબેઝને જ mock કરો. તમારા પોતાના આંતરિક મોડ્યુલ્સના વાસ્તવિક વર્ઝનનો ઉપયોગ કરો.
  • એક domain edge case જાતે લખો. જ્યારે પણ તમે કોઈ function પૂર્ણ કરો, ત્યારે તમને જે એક બાબતથી ડર લાગે છે તે લખી લો. તેનો ઉપયોગ AI માટે prompt તરીકે કરો.

AI એ ઉત્પાદકતાનું સાધન (productivity tool) છે, વિચારવાની પદ્ધતિનો વિકલ્પ નથી. ટેસ્ટનું બોડી લખવા માટે તેનો ઉપયોગ કરો, પરંતુ ટેસ્ટ શેના માટે છે તે નક્કી કરવા ક્યારેય તેને ન દો.

સ્ત્રોત: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm

વૈકલ્પિક લર્નિંગ કોમ્યુનિટી: https://t.me/GyaanSetuAi