AI కోడింగ్ ఏజెంట్లకు ప్రాంప్ట్ల కంటే టెస్ట్లు ఎక్కువగా అవసరం
నేను 25 ఏళ్లుగా సాఫ్ట్వేర్ రాస్తున్నాను. నా మొత్తం కెరీర్లో గత ఎనిమిది నెలల్లో నా వర్క్ఫ్లో (workflow) ఎంతగా మారిందో అంతగా గతంలో మారలేదు.
AI కోడింగ్ టూల్స్ గతంలో రిఫ్యాక్టరింగ్ (refactoring) లేదా ఎర్రర్లను వివరించడం వంటి చిన్న పనుల కోసం మాత్రమే ఉపయోగపడేవి. AIతో పెద్ద ఫీచర్లను నిర్మించడం చాలా కష్టంగా అనిపించేది.
ఇప్పుడు పరిస్థితి మారింది. ఆధునిక ఏజెంట్లు ఒక నిర్దిష్ట లూప్ను (loop) అనుసరిస్తాయి:
- కోడ్ను చదవడం.
- కోడ్ను మార్చడం.
- కమాండ్ను రన్ చేయడం.
- ఏది ఫెయిల్ అయిందో చూడటం.
- దాన్ని సరిచేయడం.
- మళ్ళీ చేయడం.
ఈ లూప్ శక్తివంతమైనది, కానీ ఏజెంట్లు విజువల్ ఇంటర్ఫేస్లతో (visual interfaces) ఇబ్బంది పడతాయి. ఒక బటన్ పనిచేస్తుందో లేదో చూడటానికి అవి UIలో క్లిక్ చేయడం వంటి పనులను నమ్మదగిన రీతిలో చేయలేవు.
నేను నా విధానాన్ని మార్చుకున్నాను. నేను కొత్త ఫీచర్లను ముందుగా కమాండ్ లైన్ (command line) నుండి పనిచేసేలా నిర్మిస్తాను.
ఏజెంట్ను "ఈ స్క్రీన్ను చూడండి" అని అడిగే బదులు, నేను దానికి ఒక కమాండ్ను ఇస్తాను:
npm run test:feature-xnode scripts/run-new-feature-client.js
ఏజెంట్లకు కమాండ్లు అంటే ఇష్టం. ఇది వాటికి ఒక ఎగ్జిక్యూటబుల్ ఫీడ్బ్యాక్ లూప్ను (executable feedback loop) అందిస్తుంది.
నా ప్రస్తుత వర్క్ఫ్లో ఇలా ఉంటుంది:
- ఒక Markdown ఫైల్లో ఫీచర్ను ప్లాన్ చేయడం.
- ఒక టెస్ట్ క్లయింట్ లేదా యూనిట్ టెస్ట్ను సృష్టించడం.
- స్పష్టమైన టెస్ట్ కేసులను నిర్వచించడం.
- ఏజెంట్ను ఫీచర్ను ఇంప్లిమెంట్ చేయనివ్వడం.
- ఏజెంట్ను పదేపదే టెస్ట్లను రన్ చేయనివ్వడం.
- ఫలితాలను సమీక్షించడం.
ఒక హెచ్చరిక: మీరు ఏజెంట్కు "అన్ని టెస్ట్లు పాస్ అయ్యేలా చేయి" అని చెబితే, అది ఖచ్చితంగా చేస్తుంది. విజయం సాధించడానికి అది సాఫ్ట్వేర్ ఇంజనీరింగ్ నియమాలను ఉల్లంఘించవచ్చు. ఫెయిల్యూర్ మెసేజ్ను ఆపడానికి అది బలహీనమైన టెస్ట్లను రాయవచ్చు లేదా ఎర్రర్లను దాచడానికి try/catch బ్లాక్లను ఉపయోగించవచ్చు.
అందుకే టెస్ట్ డెఫినిషన్ (test definition) నా అత్యంత ముఖ్యమైన మాన్యువల్ టాస్క్. మీరు వీటిని అడగాలి:
- ఈ టెస్ట్ నిజమైన యూజ్ కేస్ను (use case) ప్రతిబింబిస్తుందా?
- ఇది నిజమైన రిగ్రెషన్ను (regression) పట్టుకుంటుందా?
- ఇది మరీ ఇరుకైనదా?
AI యుగంలో, టెస్ట్-డ్రివెన్ డెవలప్మెంట్ (TDD) అనేది కేవలం ఒక సేఫ్టీ నెట్ మాత్రమే కాదు. అది స్టీరింగ్ వీల్. టెస్ట్లు లేకపోతే, ఏజెంట్ నమ్మదగినట్లుగా కనిపించే కోడ్ను మాత్రమే ఇస్తుంది. మంచి టెస్ట్లు ఉంటే, ఏజెంట్కు కొలవదగిన లక్ష్యం (measurable target) ఉంటుంది.
మరొక చిట్కా: టెస్ట్ అవుట్పుట్ల కోసం స్ట్రక్చర్డ్ ఫైల్లను ఉపయోగించండి. చాట్లో భారీ లాగ్లను (logs) పంపే బదులు, మీ స్క్రిప్ట్లు ఒక ఫోల్డర్లో JSON లేదా Markdown ఫైల్లకు డేటాను రాసేలా చేయండి.
ఇది ఎందుకు సహాయపడుతుందంటే:
- ఏజెంట్ నేరుగా సంబంధిత డేటాకు చేరుకుంటుంది.
- కాంటెక్స్ట్ (context) తక్కువగా ఉంటుంది.
- టోకెన్ వినియోగం తగ్గుతుంది.
- ఇది డబ్బును ఆదా చేస్తుంది.
AI ఏజెంట్లు డెవలపర్లను భర్తీ చేయవు. అవి మన దృష్టిని మారుస్తాయి. మనం కోడ్ టైప్ చేయడానికి తక్కువ సమయం, ఈ క్రింది పనుల కోసం ఎక్కువ సమయం కేటాయిస్తాము:
- సమస్యలను స్పష్టంగా వివరించడం.
- ఫీడ్బ్యాక్ లూప్లను సృష్టించడం.
- నాణ్యమైన టెస్ట్లను నిర్వచించడం.
- ఆర్కిటెక్చర్ను సమీక్షించడం.
AI డెవలప్మెంట్ భవిష్యత్తు ఉత్తమమైన ప్రాంప్ట్లను రాసే వ్యక్తికి ఉండదు. ఉత్తమమైన ఫీడ్బ్యాక్ లూప్లను నిర్మించే వ్యక్తికి ఉంటుంది.
Source: https://dev.to/stoefln6/ai-coding-agents-need-tests-more-than-prompts-11pm
Optional learning community: https://t.me/GyaanSetuAi
