AI-જનરેટેડ ટેસ્ટનું ઓડિટ કરો: અડધું ગ્રીન CI કંઈ જ સાબિત કરતું નથી

પાસ થતો ટેસ્ટ પુરાવા જેવો લાગે છે. તે સામાન્ય રીતે તમે વિચારતા હોવ તેના કરતા ઓછો હોય છે.

ટેસ્ટ એ વાતની ખાતરી કરે છે કે કોડ તે જ કરે છે જે ટેસ્ટ અપેક્ષા રાખે છે. જો સમાન લેખક જ કોડ અને અપેક્ષા (expectation) બંને લખે, તો અપેક્ષા કોડ દ્વારા જ ઘડાયેલી હોય છે. ટેસ્ટ એટલા માટે પાસ થાય છે કારણ કે તે પાસ થવા માટે જ લખવામાં આવ્યો હતો.

ગ્રીન ચેકમાર્ક એ સાબિત કરે છે કે તમારા ટેસ્ટ કોડ સાથે સહમત છે. તે એ સાબિત કરતું નથી કે કોડ સાચો છે.

જ્યારે AI એજન્ટ્સ આખા pull requests મોકલે છે ત્યારે આ સમસ્યા વધે છે. તેઓ એકસાથે ઇમ્પ્લીમેન્ટેશન અને ટેસ્ટ બંને લખે છે. લેખક બદલાવાથી ચેકમાર્ક વધુ વિશ્વસનીય બનતો નથી.

આ ખામી શોધવા માટે મેં mirror_audit.py બનાવ્યું છે. તે AST નો ઉપયોગ કરીને ટેસ્ટ સોર્સ વાંચે છે. તે ક્યારેય કોડ રન કરતું નથી. તે ત્રણ સામાન્ય પેટર્ન શોધે છે:

  • The Recompute: ટેસ્ટ કોડ જેવું જ સૂત્ર વાપરે છે. તે વેશભૂષામાં f(x) == f(x) જેવું છે.
  • The Golden Literal: ટેસ્ટ અગાઉના રનમાંથી કોપી કરેલી સંખ્યાનો ઉપયોગ કરે છે. તે ટેસ્ટને પહેલા દિવસે કોડે જે કંઈ પણ કર્યું હોય (બગ્સ સહિત) તેને જ પકડી રાખે છે.
  • The Smoke Test: ટેસ્ટ એ તપાસે છે કે પરિણામ None નથી, પરંતુ તેમાં વાસ્તવિક assertion નો અભાવ હોય છે.

મેં આને બે સૂટ્સ (suites) પર ચલાવ્યું.

પ્રથમ સૂટ ઇમ્પ્લીમેન્ટેશનને મિરર કરવા માટે બનાવવામાં આવ્યો હતો. તેણે 50.0% mirror-ratio મેળવ્યો. CI નિષ્ફળ ગયું. અડધા ટેસ્ટમાં કોઈ સ્વતંત્ર સિગ્નલ (independent signal) નહોતું.

બીજો સૂટ પ્રમાણિક હતો. તેણે નેગેટિવ કેસ અને સ્વતંત્ર અપેક્ષાઓનો ઉપયોગ કર્યો હતો. તેણે 0.0% સ્કોર કર્યો. CI પાસ થયું.

mirror-ratio તમારી બગ રેટ (bug rate) માપતું નથી. તે ખૂટતા સ્વતંત્ર સિગ્નલને માપે છે. તે તમને જણાવે છે કે તમારું ગ્રીન CI કેટલું માત્ર કોડ સાથે સહમત થઈને ચાલી રહ્યું છે.

જો ટેસ્ટ ઇમ્પ્લીમેન્ટેશન જેવું જ ખોટું પરિણામ ગણતરી કરે છે, તો ટેસ્ટ ગ્રીન રહે છે. જો ટેસ્ટ વાસ્તવિક કોન્ટ્રાક્ટની ખાતરી કરે છે, તો ટેસ્ટ લાલ (red) થઈ જાય છે અને બગ પકડી પાડે છે.

ફક્ત કવરેજ જોવાનું બંધ કરો. પૂછો કે શું તમારા ટેસ્ટ ખરેખર કોઈ વાસ્તવિક કારણસર નિષ્ફળ જઈ શકે છે.

Source: https://dev.to/alex_spinov/audit-ai-generated-tests-half-of-green-ci-proves-nothing-4bmb

Optional learning community: https://t.me/GyaanSetuAi