ടെസ്റ്റ് ജനറേഷന് വേണ്ടി AI: എവിടെ സഹായിക്കുന്നു, എവിടെ വഞ്ചിക്കുന്നു
AI വേഗത്തിൽ ടെസ്റ്റുകൾ എഴുതുന്നു. എന്നാൽ യഥാർത്ഥമെന്ന് തോന്നിക്കുന്നതും എന്നാൽ തെറ്റായ കാര്യങ്ങൾ പരിശോധിക്കുന്നതുമായ ടെസ്റ്റുകളും അത് എഴുതുന്നുണ്ട്.
നിങ്ങൾ ഒരു ഫംഗ്ഷൻ AI-യിൽ പേസ്റ്റ് ചെയ്യുന്നു. മുപ്പത് സെക്കൻഡിന് ശേഷം, പന്ത്രണ്ട് പാസ്സാകുന്ന ടെസ്റ്റുകൾ നിങ്ങളുടെ കയ്യിലുണ്ട്. നിങ്ങളുടെ കവറേജ് സ്കോർ കൂടുന്നു. നിങ്ങൾ ഉൽപ്പാദനക്ഷമതയുള്ളവനായി (productive) തോന്നുന്നു.
പിന്നീട് പ്രൊഡക്ഷനിൽ ഒരു ബഗ് വരുന്നു. നിങ്ങൾ ആ പന്ത്രണ്ട് ടെസ്റ്റുകളും പരിശോധിക്കുമ്പോൾ, അവയിൽ ഒരുന്നും ആ ബഗ് കണ്ടെത്താൻ സഹായിക്കില്ലെന്ന് നിങ്ങൾ തിരിച്ചറിയുന്നു.
നിങ്ങളുടെ കോഡ് എന്താണോ ചെയ്യുന്നത് എന്നാണ് AI ടെസ്റ്റ് ചെയ്തത്, നിങ്ങളുടെ കോഡ് എന്താണോ ചെയ്യേണ്ടത് എന്നല്ല.
AI ഉപയോഗപ്രദമാണ്, എന്നാൽ അത് എങ്ങനെ ഉപയോഗിക്കണമെന്ന് നിങ്ങൾക്കറിയണം.
AI വിജയിക്കുന്ന ഇടങ്ങൾ:
- setup, teardown ബ്ലോക്കുകൾ പോലുള്ള boilerplate കോഡുകൾ നിർമ്മിക്കുക.
- ആവർത്തന സ്വഭാവമുള്ള factory helpers, data objects എന്നിവ എഴുതുക.
- ഒരു നല്ല ടെസ്റ്റ് പാറ്റേണിന്റെ വിവിധ രൂപങ്ങൾ (variations) സൃഷ്ടിക്കുക.
- null, empty strings, അല്ലെങ്കിൽ zero പോലുള്ള വ്യക്തമായ edge cases കൈകാര്യം ചെയ്യുക.
AI പരാജയപ്പെടുന്ന ഇടങ്ങൾ:
- Implementation-based tests: ബിസിനസ് ലോജിക് എന്നതിന് പകരം കോഡ് ഘടനയെ പിന്തുടരുന്ന ടെസ്റ്റുകളാണ് ഇത് എഴുതുന്നത്. നിങ്ങൾ കോഡ് refactor ചെയ്താൽ, ഫലം ശരിയാണെങ്കിൽ പോലും ടെസ്റ്റുകൾ പരാജയപ്പെടുന്നു.
- Shallow edge cases: ഇത് വ്യക്തമായ പിശകുകൾ കണ്ടെത്തുമെങ്കിലും domain-specific ബഗുകൾ കാണാതെ പോകുന്നു. നിങ്ങളുടെ ടൈംസോൺ വ്യതിയാനങ്ങളോ, ഡാറ്റാബേസ് നിയന്ത്രണങ്ങളോ, അല്ലെങ്കിൽ നിങ്ങളുടെ പ്രത്യേക ബിസിനസ് നിയമങ്ങളോ ഇതിന് അറിയില്ല.
- Brittle mocks: യഥാർത്ഥമായിരിക്കേണ്ട ഇന്റേണൽ സർവീസുകളെ ഇത് mock ചെയ്യുന്നു. ഇത് ടെസ്റ്റുകൾ പരിപാലിക്കുന്നത് പ്രയാസകരമാക്കുകയും refactoring സമയത്ത് എളുപ്പത്തിൽ തകരാറിലാകാൻ കാരണമാവുകയും ചെയ്യുന്നു.
"test theater" സൃഷ്ടിക്കാതെ AI എങ്ങനെ ഉപയോഗിക്കാം:
- ആദ്യം കരാർ (contract) നിർവചിക്കുക. ടെസ്റ്റ് എന്ത് തെളിയിക്കണം എന്നതിനെക്കുറിച്ച് ലളിതമായ ഇംഗ്ലീഷിൽ ഒരു വാചകം എഴുതുക. ഉദാഹരണത്തിന്: "An expired code must return the original amount."
- ആ വാചകം AI-ക്ക് നൽകുക. കോഡ് എഴുതാൻ AI-യെ അനുവദിക്കുക, എന്നാൽ അതിന്റെ ഉദ്ദേശ്യം (intent) നിങ്ങളുടേതായിരിക്കണം.
- അതിരുകളിൽ (boundary) മാത്രം mock ചെയ്യുക. നിങ്ങളുടെ ഇന്റേണൽ മോഡ്യൂളുകൾക്കായി യഥാർത്ഥ ഇൻസ്റ്റൻസുകൾ ഉപയോഗിക്കുക. എക്സ്റ്റേണൽ APIs അല്ലെങ്കിൽ ഡാറ്റാബേസുകൾ മാത്രം mock ചെയ്യുക.
- ഒരു domain edge case നേരിട്ട് എഴുതുക. AI "വ്യക്തമായ" edge cases കൈകാര്യം ചെയ്യുന്നു. എന്നാൽ പ്രൊഡക്ഷനിൽ പ്രശ്നങ്ങൾ ഉണ്ടാക്കുന്ന "3 AM" edge cases നിങ്ങൾ തന്നെ കൈകാര്യം ചെയ്യണം.
ടെസ്റ്റ് എന്ത് പരിശോധിക്കണം എന്ന് തീരുമാനിക്കാൻ AI-യെ അനുവദിക്കരുത്. കോഡ് ടൈപ്പ് ചെയ്യാൻ അതിനെ ഉപയോഗിക്കുക, എന്നാൽ ലോജിക് നിങ്ങൾ നൽകണം.
Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm
