प्रत्येक टेस्ट पास झाली. तरीही वापरकर्ता गेम खेळू शकला नाही
"API 200 OK रिटर्न करतेय!"
मी माझ्या पहिल्या इंजिनिअरिंग जॉबमध्ये असताना एक मोठी समस्या पाहिली. माझ्या सिनियर्सना डॅशबोर्ड्स खूप आवडायचे. त्यांना हाय कोड कव्हरेज (high code coverage) आवडायचे. त्यांना वाटायचे की जर टेस्ट्स 'ग्रीन' (green) असतील, तर उत्पादन (product) व्यवस्थित काम करत आहे.
ते चुकीचे होते.
कोड काम करणे आणि मानवी वापरकर्त्याला (user) हवे असलेले मिळणे या दोन वेगळ्या गोष्टी आहेत. एखादे बटण 'सक्सेस कोड' (success code) देऊ शकते, पण त्याच वेळी वापरकर्त्याला एका बिघडलेल्या स्क्रीनवर अडकवून ठेवू शकते.
ॲप न चालवता हे UX डेड-एन्ड्स (UX dead-ends) शोधण्यासाठी मी एक मार्ग तयार केला आहे. मी याला 'टू-एजंट स्टॅटिक वॉकथ्रू' (two-agent static walkthrough) म्हणतो. यामध्ये दोन AI एजंट्स एकमेकांशी संवाद साधतात.
- एजंट A हा वापरकर्ता (user) आहे. या एजंटचे एक विशिष्ट ध्येय असते. तो हट्टी असतो. तो एका चुकीनंतर हार मानत नाही. तो सतत वेगवेगळे मार्ग शोधण्याचा प्रयत्न करत राहतो.
- एजंट B हे ॲप आहे. याला प्रत्यक्ष सोर्स कोडचा (source code) 'रीड ॲक्सेस' (read access) असतो. तो वापरकर्त्याच्या प्रत्येक कृतीचा कोड पाथ (code path) ट्रॅक करतो. कोड नेमके काय करतो, याचा तो अहवाल देतो. तो फाईल आणि लाईन नंबर देखील सांगतो. कोडमध्ये जे अस्तित्वात नाही, त्याची तो कल्पना करू शकत नाही.
मी एका बिघडलेल्या AI मिनी-गेम जनरेटरवर याची चाचणी घेतली. तेव्हा काय घडले ते खालीलप्रमाणे आहे:
टर्न १: बटण फेल झाले. वापरकर्त्याने "Generate" वर क्लिक केले. कोडने नवीन एंडपॉइंटऐवजी (endpoint) जुन्या, बंद पडलेल्या एंडपॉइंटवर विनंती (request) पाठवली. टेस्ट्स पास झाल्या कारण जुना API अजूनही काम करत होता.
टर्न २: क्लिक न करता येणारी पोकळी (un-clickable void). वापरकर्त्याने रिझल्टवर क्लिक करण्याचा प्रयत्न केला. कोडने मजकूर एका साध्या बॉक्समध्ये टाकला होता, ज्यामध्ये कोणताही 'क्लिक हँडलर' (click handler) नव्हता. काहीच घडले नाही.
टर्न ३: खोटा आनंद (false blessing). वापरकर्त्याने त्रुटी (error) सुधारण्याचा प्रयत्न केला. आयडी (ID) नसल्यामुळे बॅकएंड फेल झाले. सिस्टीम बंद पडली असूनही स्क्रीनवर हिरवा 'सक्सेस मेसेज' (success message) दिसत होता.
टर्न ४: अर्धवट राहिलेली आशा (truncated hope). वापरकर्त्याने कोड मॅन्युअली कॉपी करण्याचा प्रयत्न केला. API ने मजकूर अर्धवट कापला. कोड खराब झाला होता.
वापरकर्त्याने प्रयत्न सोडले.
बहुतेक युनिट टेस्ट्स (unit tests) फक्त एंडपॉइंट 200 रिटर्न करते की नाही हे तपासतात. वापरकर्ता खरोखर त्याच्या ध्येयापर्यंत पोहोचतो का, हे त्या तपासत नाहीत.
याचा वापर कसा करावा:
- युजर एजंटला हट्टी बनवा. खऱ्या त्रुटी (bugs) पहिल्या चुकीच्या मागे लपलेल्या असतात.
- ॲप एजंटला प्रत्यक्ष कोडशी जोडा. यामुळे केवळ रोल-प्ले न राहता तो एक खरा बग रिपोर्ट (bug report) बनतो.
- याचा तुमच्या टेस्ट्ससाठी पूरक म्हणून वापर करा. तुमचे लॉजिक आणि वास्तव जिथे एकमेकांना भेटतात, त्यातील त्रुटी हे शोधून काढते.
ही पद्धत स्टॅटिक (static) आणि स्वस्त आहे. तुम्ही एकही टेस्ट फिक्स्चर (test fixture) लिहिण्यापूर्वीच ही चालते. हे "कोड काम करतो" याला "वापरकर्ता यशस्वी होतो" मध्ये बदलते.
स्त्रोत: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o
ऐच्छिक लर्निंग कम्युनिटी: https://t.me/GyaanSetuAi
