எல்லாத் தேர்வுகளும் வெற்றி பெற்றன. ஆனாலும் பயனரால் விளையாட முடியவில்லை
"API 200 OK-வை வழங்குகிறது!"
எனது முதல் பொறியியல் வேலையில் இருந்தபோது ஒரு பெரிய சிக்கலைக் கண்டேன். எனது மூத்த அதிகாரிகள் (seniors) டேஷ்போர்டுகளை (dashboards) மிகவும் விரும்புவார்கள். அதிகப்படியான கோட் கவரேஜை (code coverage) அவர்கள் விரும்பினார்கள். சோதனைகள் (tests) வெற்றிகரமாக (green) இருந்தால், தயாரிப்பு சரியாக வேலை செய்கிறது என்று அவர்கள் நினைத்தார்கள்.
அவர்கள் தவறு செய்தார்கள்.
கோட் வேலை செய்வதும், ஒரு மனிதன் தனக்குத் தேவையானதை அடைவதும் வெவ்வேறான விஷயங்கள். ஒரு பட்டன் வெற்றிகரமான குறியீட்டை (success code) வழங்கக்கூடும், ஆனால் அதே நேரத்தில் பயனரை ஒரு பழுதான திரையில் (broken screen) சிக்க வைக்கவும் முடியும்.
செயலியை (app) இயக்காமலேயே இத்தகைய UX முட்டுக்கட்டைகளைக் கண்டறியும் ஒரு முறையை நான் உருவாக்கினேன். இதை நான் 'two-agent static walkthrough' என்று அழைக்கிறேன். இது ஒரு சுழற்சியில் (loop) உரையாடும் இரண்டு AI ஏஜென்ட்களைப் பயன்படுத்துகிறது.
- ஏஜென்ட் A (Agent A) பயனராகச் செயல்படும். இந்த ஏஜென்ட் ஒரு குறிப்பிட்ட இலக்கைக் கொண்டிருக்கும். இது பிடிவாதமானது. ஒரு தவறு செய்தவுடன் இது கைவிடாது. இது வெவ்வேறு பாதைகளைத் தொடர்ந்து முயற்சிக்கும்.
- ஏஜென்ட் B (Agent B) செயலியாகச் செயல்படும். இதற்கு உண்மையான மூலக் குறியீட்டை (source code) வாசிக்கும் அனுமதி உண்டு. ஒவ்வொரு பயனர் நடவடிக்கையின் கோட் பாதையையும் (code path) இது பின்தொடரும். கோட் சரியாக என்ன செய்கிறது என்பதை இது துல்லியமாகத் தெரிவிக்கும். இது கோப்பில் உள்ள கோப்பு மற்றும் வரி எண்ணைக் குறிப்பிடும். கோடில் இல்லாத விஷயங்களை இது கற்பனை செய்யாது.
ஒரு பழுதான AI மினி-கேம் ஜெனரேட்டரில் (mini-game generator) நான் இதைச் சோதித்தேன். அப்போது நடந்தது இதோ:
சுற்று 1: பட்டன் தோல்வியடைந்தது. பயனர் "Generate" என்பதைக் கிளிக் செய்தார். புதிய எண்ட்-பாயிண்டிற்கு (endpoint) பதிலாக, கோட் பழைய, பயன்பாட்டில் இல்லாத ஒரு எண்ட்-பாயிண்டிற்கு கோரிக்கையை அனுப்பியது. பழைய API இன்னும் வேலை செய்ததால் சோதனைகள் வெற்றிகரமாக முடிந்தன.
சுற்று 2: கிளிக் செய்ய முடியாத வெற்றிடம். பயனர் முடிவை கிளிக் செய்ய முயன்றார். கோட் அந்த உரையை (text) எந்த கிளிக் ஹேண்ட்லரும் (click handler) இல்லாத ஒரு சாதாரணப் பெட்டியில் வைத்திருந்தது. எதுவும் நடக்கவில்லை.
சுற்று 3: தவறான வெற்றிச் செய்தி. பயனர் பிழையைச் சரிசெய்ய முயன்றார். ஒரு ID இல்லாததால் பேக்எண்ட் (backend) தோல்வியடைந்தது. சிஸ்டம் செயலிழந்த போதிலும், திரை ஒரு பச்சை நிற வெற்றிச் செய்தியைக் காட்டியது.
சுற்று 4: பாதியிலேயே நின்ற நம்பிக்கை. பயனர் கோடைத் தானாக நகலெடுக்க (copy) முயன்றார். API உரையை பாதியிலேயே வெட்டிவிட்டது. கோட் பழுதாகியிருந்தது.
பயனர் முயற்சியைக் கைவிட்டார்.
பெரும்பாலான யூனிட் டெஸ்ட்கள் (unit tests) ஒரு எண்ட்-பாயிண்ட் 200-ஐத் தருகிறதா என்பதை மட்டுமே சரிபார்க்கின்றன. பயனர் உண்மையில் தனது இலக்கை அடைகிறாரா என்பதை அவை சரிபார்ப்பதில்லை.
இதை எவ்வாறு பயன்படுத்துவது:
- பயனர் ஏஜென்ட்டைப் பிடிவாதமாக வைத்திருங்கள். உண்மையான பிழைகள் முதல் தவறுக்கு பின்னால் ஒளிந்துள்ளன.
- ஆப் ஏஜென்ட்டை (app agent) உண்மையான கோடில் நிலைநிறுத்துங்கள். இது வெறும் பாத்திரமேற்று நடித்தலை (role-play) ஒரு உண்மையான பிழை அறிக்கையாக (bug report) மாற்றும்.
- இதை உங்கள் சோதனைகளுக்கு ஒரு துணைப் பொருளாகப் பயன்படுத்துங்கள். உங்கள் தர்க்கம் (logic) யதார்த்தத்தைச் சந்திக்கும் இடங்களில் உள்ள இடைவெளிகளைக் கண்டறிய இது உதவும்.
இந்த முறை நிலையானது (static) மற்றும் செலவு குறைவானது. நீங்கள் ஒரு டெஸ்ட் ஃபிக்சரை (test fixture) எழுதுவதற்கு முன்பே இது இயங்கும். இது "கோட் வேலை செய்கிறது" என்பதை "பயனர் வெற்றி பெறுகிறார்" என மாற்றுகிறது.
ஆதாரம்: https://dev.to/terum/every-test-passed-the-user-still-couldnt-play-the-game-388o
விருப்பமான கற்றல் சமூகம்: https://t.me/GyaanSetuAi
