ടെസ്റ്റ് ജനറേഷന് വേണ്ടി 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 എങ്ങനെ ഉപയോഗിക്കാം:

  1. ആദ്യം കരാർ (contract) നിർവചിക്കുക. ടെസ്റ്റ് എന്ത് തെളിയിക്കണം എന്നതിനെക്കുറിച്ച് ലളിതമായ ഇംഗ്ലീഷിൽ ഒരു വാചകം എഴുതുക. ഉദാഹരണത്തിന്: "An expired code must return the original amount."
  2. ആ വാചകം AI-ക്ക് നൽകുക. കോഡ് എഴുതാൻ AI-യെ അനുവദിക്കുക, എന്നാൽ അതിന്റെ ഉദ്ദേശ്യം (intent) നിങ്ങളുടേതായിരിക്കണം.
  3. അതിരുകളിൽ (boundary) മാത്രം mock ചെയ്യുക. നിങ്ങളുടെ ഇന്റേണൽ മോഡ്യൂളുകൾക്കായി യഥാർത്ഥ ഇൻസ്റ്റൻസുകൾ ഉപയോഗിക്കുക. എക്സ്റ്റേണൽ APIs അല്ലെങ്കിൽ ഡാറ്റാബേസുകൾ മാത്രം mock ചെയ്യുക.
  4. ഒരു 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