ప్రతి టెస్ట్ పాస్ అయింది. అయినా యూజర్ గేమ్ ఆడలేకపోయాడు
"API 200 OK రిటర్న్ చేస్తోంది!"
నేను నా మొదటి ఇంజనీరింగ్ ఉద్యోగంలో ఉన్నప్పుడు ఒక పెద్ద సమస్యను గమనించాను. నా సీనియర్లు డ్యాష్బోర్డ్లను ఇష్టపడేవారు. వారికి హై కోడ్ కవరేజ్ అంటే చాలా ఇష్టం. టెస్ట్లు గ్రీన్ (green) గా ఉంటే, ఉత్పత్తి (product) సరిగ్గా పనిచేస్తుందని వారు భావించేవారు.
వారు పొరబడ్డారు.
కోడ్ పనిచేయడం మరియు ఒక మనిషికి కావాల్సినది అందడం అనేవి వేర్వేరు విషయాలు. ఒక బటన్ సక్సెస్ కోడ్ను రిటర్న్ చేస్తూనే, యూజర్ను ఒక పాడైపోయిన స్క్రీన్పై ఇరుక్కుపోయేలా చేయవచ్చు.
యాప్ను రన్ చేయకుండానే ఇటువంటి UX డెడ్-ఎండ్స్ను (dead-ends) కనుగొనడానికి నేను ఒక మార్గాన్ని రూపొందించాను. దీనిని నేను 'టూ-ఏజెంట్ స్టాటిక్ వాక్త్రూ' (two-agent static walkthrough) అని పిలుస్తాను. ఇది లూప్లో మాట్లాడుకునే రెండు AI ఏజెంట్లను ఉపయోగిస్తుంది.
- ఏజెంట్ A యూజర్. ఈ ఏజెంట్కు ఒక నిర్దిష్ట లక్ష్యం ఉంటుంది. ఇది మొండిగా ఉంటుంది. ఒక తప్పు జరిగిన వెంటనే ఇది వదిలేయదు. ఇది వేర్వేరు మార్గాలను ప్రయత్నిస్తూనే ఉంటుంది.
- ఏజెంట్ B యాప్. దీనికి అసలు సోర్స్ కోడ్ను చదివే యాక్సెస్ ఉంటుంది. ఇది ప్రతి యూజర్ చర్య యొక్క కోడ్ పాత్ను ట్రాస్ (trace) చేస్తుంది. కోడ్ ఖచ్చితంగా ఏమి చేస్తుందో ఇది రిపోర్ట్ చేస్తుంది. ఇది ఫైల్ మరియు లైన్ నంబర్ను కూడా పేర్కొంటుంది. కోడ్లో లేని వాటిని ఇది ఊహించలేదు.
నేను దీనిని ఒక పాడైపోయిన AI మినీ-గేమ్ జనరేటర్పై పరీక్షించాను. అక్కడ ఏం జరిగిందంటే:
టర్న్ 1: బటన్ విఫలమైంది. యూజర్ "Generate" పై క్లిక్ చేశారు. కోడ్ కొత్త ఎండ్పాయింట్కు బదులుగా పాత, పని చేయని ఎండ్పాయింట్కు రిక్వెస్ట్ను పంపింది. పాత API ఇంకా పనిచేస్తుండటంతో టెస్ట్లు పాస్ అయ్యాయి.
టర్న్ 2: క్లిక్ చేయలేని శూన్యం. యూజర్ రిజల్ట్ను క్లిక్ చేయడానికి ప్రయత్నించారు. కోడ్ ఆ టెక్స్ట్ను క్లిక్ హ్యాండ్లర్ (click handler) లేని ఒక సాధారణ బాక్స్లో ఉంచింది. ఏమీ జరగలేదు.
టర్న్ 3: తప్పుడు శుభవార్త. యూజర్ ఆ లోపాన్ని సరిదిద్దడానికి ప్రయత్నించారు. ఒక ID లేకపోవడం వల్ల బ్యాకెండ్ విఫలమైంది. సిస్టమ్ ఫెయిల్ అయినప్పటికీ, స్క్రీన్ పచ్చని సక్సెస్ మెసేజ్ను చూపించింది.
టర్న్ 4: మధ్యలోనే ఆగిపోయిన ఆశ. యూజర్ కోడ్ను మాన్యువల్గా కాపీ చేయడానికి ప్రయత్నించారు. API టెక్స్ట్ను సగం వరకు మాత్రమే పంపింది. కోడ్ పాడైపోయింది.
యూజర్ వెళ్ళిపోయారు.
చాలా యూనిట్ టెస్ట్లు కేవలం ఒక ఎండ్పాయింట్ 200 రిటర్న్ చేస్తుందో లేదో మాత్రమే తనిఖీ చేస్తాయి. యూజర్ నిజంగా తన లక్ష్యాన్ని చేరుకున్నారో లేదో అవి తనిఖీ చేయవు.
దీనిని ఎలా ఉపయోగించాలి:
- యూజర్ ఏజెంట్ను మొండిగా ఉంచండి. నిజమైన బగ్స్ మొదటి తప్పు వెనుక దాగి ఉంటాయి.
- యాప్ ఏజెంట్ను అసలు కోడ్తో అనుసంధానించండి. ఇది రోల్-ప్లేను నిజమైన బగ్ రిపోర్ట్గా మారుస్తుంది.
- దీనిని మీ టెస్ట్లకు అనుబంధంగా ఉపయోగించండి. మీ లాజిక్ వాస్తవంతో కలిసే చోట ఉండే లోపాలను ఇది గుర్తిస్తుంది.
ఈ పద్ధతి స్టాటిక్ మరియు తక్కువ ఖర్చుతో కూడుకున్నది. మీరు ఒకే ఒక్క టెస్ట్ ఫిక్చర్ను (test fixture) రాయకముందే ఇది రన్ అవుతుంది. ఇది "కోడ్ పనిచేస్తుంది" అనే స్థితిని "యూజర్ విజయం సాధించాడు" అనే స్థితిగా మారుస్తుంది.
Source: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o
Optional learning community: https://t.me/GyaanSetuAi
