AI കോഡിംഗ് ഏജന്റുകൾക്ക് പ്രോംപ്റ്റുകളേക്കാൾ കൂടുതൽ ടെസ്റ്റുകൾ ആവശ്യമാണ്
ഞാൻ 25 വർഷമായി സോഫ്റ്റ്വെയർ എഴുതുന്നു. എന്റെ കരിയറിലുടനീളമുള്ള മാറ്റങ്ങളേക്കാൾ കൂടുതൽ മാറ്റം കഴിഞ്ഞ എട്ട് മാസത്തിനിടെ എന്റെ വർക്ക്ഫ്ലോയിൽ ഉണ്ടായിട്ടുണ്ട്.
റീഫാക്റ്ററിംഗ് (refactoring) അല്ലെങ്കിൽ എററുകൾ വിശദീകരിക്കുക തുടങ്ങിയ ചെറിയ ജോലികൾക്കായിട്ടായിരുന്നു മുമ്പ് AI കോഡിംഗ് ടൂളുകൾ ഉപയോഗിച്ചിരുന്നത്. AI ഉപയോഗിച്ച് വലിയ ഫീച്ചറുകൾ നിർമ്മിക്കുന്നത് പ്രയാസകരമായിരുന്നു.
ഇപ്പോൾ സാഹചര്യം വ്യത്യസ്തമാണ്. ആധുനിക ഏജന്റുകൾ ഒരു പ്രത്യേക ലൂപ്പ് (loop) പിന്തുടരുന്നു:
- കോഡ് വായിക്കുന്നു.
- കോഡ് മാറ്റുന്നു.
- ഒരു കമാൻഡ് റൺ ചെയ്യുന്നു.
- എന്താണ് പരാജയപ്പെട്ടതെന്ന് നോക്കുന്നു.
- അത് പരിഹരിക്കുന്നു.
- ആവർത്തിക്കുന്നു.
ഈ ലൂപ്പ് വളരെ ശക്തമാണ്, എന്നാൽ വിഷ്വൽ ഇന്റർഫേസുകൾ കൈകാര്യം ചെയ്യുന്നതിൽ ഏജന്റുകൾ ബുദ്ധിമുട്ടുന്നു. ഒരു ബട്ടൺ പ്രവർത്തിക്കുന്നുണ്ടോ എന്ന് പരിശോധിക്കാൻ ഒരു UI-യിലൂടെ ക്ലിക്ക് ചെയ്ത് നോക്കാൻ അവർക്ക് വിശ്വസനീയമായി കഴിയില്ല.
ഞാൻ എന്റെ രീതി മാറ്റി. പുതിയ ഫീച്ചറുകൾ ആദ്യം കമാൻഡ് ലൈനിൽ (command line) പ്രവർത്തിക്കുന്ന രീതിയിൽ ഞാൻ നിർമ്മിക്കുന്നു.
ഒരു ഏജന്റിനോട് "ഈ സ്ക്രീൻ നോക്കൂ" എന്ന് പറയുന്നതിന് പകരം, ഞാൻ അതിന് ഒരു കമാൻഡ് നൽകുന്നു:
npm run test:feature-xnode scripts/run-new-feature-client.js
ഏജന്റുകൾക്ക് കമാൻഡുകൾ വളരെ ഇഷ്ടമാണ്. ഇത് അവർക്ക് പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന ഒരു ഫീഡ്ബാക്ക് ലൂപ്പ് നൽകുന്നു.
എന്റെ ഇപ്പോഴത്തെ വർക്ക്ഫ്ലോ ഇപ്രകാരമാണ്:
- ഒരു Markdown ഫയലിൽ ഫീച്ചർ പ്ലാൻ ചെയ്യുന്നു.
- ഒരു ടെസ്റ്റ് ക്ലയന്റോ യൂണിറ്റ് ടെസ്റ്റോ നിർമ്മിക്കുന്നു.
- വ്യക്തമായ ടെസ്റ്റ് കേസുകൾ നിർവചിക്കുന്നു.
- ഏജന്റിനെ ഫീച്ചർ നടപ്പിലാക്കാൻ അനുവദിക്കുന്നു.
- ഏജന്റിനെ ആവർത്തിച്ച് ടെസ്റ്റുകൾ റൺ ചെയ്യാൻ അനുവദിക്കുന്നു.
- ഫലങ്ങൾ പരിശോധിക്കുന്നു.
ഒരു മുന്നറിയിപ്പ്: നിങ്ങൾ ഒരു ഏജന്റിനോട് "എല്ലാ ടെസ്റ്റുകളും പാസ്സ് ആക്കൂ" എന്ന് പറഞ്ഞാൽ, അത് അത് ചെയ്യും. വിജയിക്കാനായി അത് സോഫ്റ്റ്വെയർ എൻജിനീയറിംഗിന്റെ നിയമങ്ങൾ ലംഘിച്ചേക്കാം. പരാജയ സന്ദേശങ്ങൾ ഒഴിവാക്കാൻ വേണ്ടി അത് ദുർബലമായ ടെസ്റ്റുകൾ എഴുതുകയോ എററുകൾ മറച്ചുവെക്കാൻ try/catch ബ്ലോക്കുകൾ ഉപയോഗിക്കുകയോ ചെയ്തേക്കാം.
അതുകൊണ്ടാണ് ടെസ്റ്റ് നിർവചനം (test definition) എന്റെ ഏറ്റവും പ്രധാനപ്പെട്ട മാനുവൽ ജോലിയായി മാറുന്നത്. നിങ്ങൾ സ്വയം ചോദിക്കേണ്ടത് ഇതാണ്:
- ഈ ടെസ്റ്റ് ഒരു യഥാർത്ഥ ഉപയോഗ സാഹചര്യം (use case) പ്രതിനിധീകരിക്കുന്നുണ്ടോ?
- ഇത് ഒരു യഥാർത്ഥ റഗ്രഷൻ (regression) കണ്ടെത്തുമോ?
- ഇത് വളരെ പരിമിതമാണോ?
AI യുഗത്തിൽ, Test-Driven Development (TDD) എന്നത് വെറുമൊരു സുരക്ഷാ കവചമല്ല. അത് ഒരു സ്റ്റിയറിംഗ് വീൽ ആണ്. ടെസ്റ്റുകൾ ഇല്ലെങ്കിൽ, ഒരു ഏജന്റ് കേവലം ശരിയാണെന്ന് തോന്നിക്കുന്ന കോഡ് മാത്രം നിർമ്മിക്കും. എന്നാൽ നല്ല ടെസ്റ്റുകൾ ഉണ്ടെങ്കിൽ, ഏജന്റിന് കൃത്യമായ ലക്ഷ്യമുണ്ടായിരിക്കും.
മറ്റൊരു ടിപ്പ്: ടെസ്റ്റ് ഔട്ട്പുട്ടുകൾക്കായി സ്ട്രക്ചർ ചെയ്ത ഫയലുകൾ ഉപയോഗിക്കുക. വലിയ ലോഗുകൾ ചാറ്റിലേക്ക് ഇടുന്നതിന് പകരം, നിങ്ങളുടെ സ്ക്രിപ്റ്റുകൾ ഒരു ഫോൾഡറിലെ 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
