എന്റെ ടീമിന്റെ AI കോഡ് ഞാൻ ഓഡിറ്റ് ചെയ്തു. ഞങ്ങൾ കണ്ടെത്തിയത് ഇതാണ്.

റെക്കോർഡ് വേഗതയിൽ കോഡ് നിർമ്മിക്കാൻ എന്റെ ടീം AI ഉപയോഗിച്ചു. ഞങ്ങൾ ഫീച്ചറുകൾ വികസിപ്പിക്കാൻ മൂന്നിരട്ടി കുറഞ്ഞ സമയം എടുത്തു. ഞങ്ങളുടെ വേഗത മികച്ചതായിരുന്നു. ടെസ്റ്റ് കവറേജ് 91% ആണ്.

എന്നാൽ ഞങ്ങൾ ഒരു പ്രതിസന്ധി നേരിട്ടു.

പരിഹരിക്കാൻ പ്രയാസമുള്ള പ്രൊഡക്ഷൻ ബഗുകൾ (production bugs) ഞങ്ങൾ നേരിട്ടു. ഒരു ലളിതമായ റീഫാക്ടറിന് (refactor) നാല് ദിവസത്തിന് പകരം നാല് ആഴ്ചകൾ വേണ്ടി വന്നു. കോഡ് വൃത്തിയുള്ളതാണെങ്കിലും മനസ്സിലാക്കാൻ അസാധ്യമാണെന്ന് പുതിയൊരു ജീവനക്കാരൻ എന്നോട് പറഞ്ഞു.

കോഡ്ബേസ് ഓഡിറ്റ് ചെയ്യാൻ ഞങ്ങൾ മൂന്നാഴ്ച ചെലവഴിച്ചു. ഒരു സ്കാനറിനും കണ്ടെത്താൻ കഴിയാത്ത സാങ്കേതിക കടബാധ്യതകൾ (technical debt) ഞങ്ങൾ കണ്ടെത്തി. ഈ കടബാധ്യത ആർക്കിടെക്ചറൽ (architectural) ആയിരുന്നു, അത് ബിഹേവിയറൽ (behavioral) കൂടിയായിരുന്നു.

AI ടൂളുകൾ നിങ്ങളുടെ പ്രോംപ്റ്റിലെ (prompt) പെട്ടെന്നുള്ള പ്രശ്നങ്ങൾക്ക് പരിഹാരം കാണുന്നു. അവ പ്രാദേശികമായ ജോലികൾക്ക് (local task) മുൻഗണന നൽകുന്നു. അവയ്ക്ക് മുഴുവൻ സിസ്റ്റത്തെയും കുറിച്ച് അറിവില്ല. ഏത് സർവീസുകളാണ് നിങ്ങൾ ഉടൻ നീക്കം ചെയ്യാൻ ഉദ്ദേശിക്കുന്നത് എന്ന് അവക്കറിയില്ല. നിങ്ങളുടെ ദീർഘകാല ഡാറ്റാ മോഡലുകളെക്കുറിച്ചും അവയ്ക്ക് അറിവില്ല.

ഇതിന്റെ ഫലമായി ലഭിക്കുന്നത് പ്രാദേശികമായി ശരിയാണെങ്കിലും മൊത്തത്തിൽ അസ്ഥിരമായ (fragile) കോഡാണ്.

ഞങ്ങൾ നാല് പ്രത്യേക രീതികൾ കണ്ടെത്തി:

  1. മറഞ്ഞിരിക്കുന്ന എഡ്ജ് കേസുകൾ (Hidden Edge Cases) AI നിങ്ങൾ നൽകുന്ന ടെസ്റ്റുകൾ പാസ്സാകുന്ന രീതിയിലാണ് കോഡ് എഴുതുന്നത്. സ്വന്തം തെറ്റുകൾ പരിശോധിക്കാനുള്ള ടെസ്റ്റുകൾ എഴുതാൻ അതിന് കഴിയില്ല.
  • പരിഹാരം: ഒരു എൻജിനീയർ കോഡ് കാണാതെ തന്നെ സഹപ്രവർത്തകന് അത് വിശദീകരിച്ചു കൊടുക്കണം. അവർക്ക് അത് വിശദീകരിക്കാൻ കഴിയുന്നില്ലെങ്കിൽ, കോഡ് മെർജ് (merge) ചെയ്യാൻ പാടില്ല.
  1. ടെസ്റ്റ് കവറേജ് തിയേറ്റർ (Test Coverage Theater) നിലവിലുള്ള കോഡ് കവർ ചെയ്യുന്ന ടെസ്റ്റുകളാണ് AI നിർമ്മിക്കുന്നത്. സിസ്റ്റം യഥാർത്ഥത്തിൽ എങ്ങനെ പ്രവർത്തിക്കണം എന്നതിനെക്കുറിച്ചുള്ള ടെസ്റ്റുകൾ അത് എഴുതുന്നില്ല.
  • പരിഹാരം: ഓരോ AI ടെസ്റ്റ് സ്യൂട്ടും ഒരു അഡ്വേഴ്സേറിയൽ റിവ്യൂ (adversarial review) പാസ്സാകണം. രണ്ടാമതൊരു എൻജിനീയർ ആ കോഡ് തകരാറിലാക്കാൻ (break) ശ്രമിക്കണം.
  1. അദൃശ്യമായ കപ്ലിംഗ് (Invisible Coupling) ഒരു പ്രോംപ്റ്റിന് വേഗത്തിൽ പരിഹാരം കാണാൻ AI പുതിയ ഡിപെൻഡൻസികൾ (dependencies) ചേർക്കുന്നു. ഇത് നോട്ടിഫിക്കേഷൻ ലോജിക് നിങ്ങളുടെ ബില്ലിംഗ് അല്ലെങ്കിൽ യൂസർ മോഡ്യൂളുകളുമായി കൂട്ടിച്ചേർക്കാൻ ഇടയാക്കിയേക്കാം. ഇത് പിന്നീട് സർവീസുകളെ വേർതിരിക്കാൻ അസാധ്യമാക്കുന്നു.
  • പരിഹാരം: AI കൊണ്ടുവരുന്ന ഏതൊരു പുതിയ ഡിപെൻഡൻസിയും ഒരു സീനിയർ എൻജിനീയർ അംഗീകരിക്കണം.
  1. ഉപരിപ്ലവമായ എറർ ഹാൻഡ്‌ലിംഗ് (Shallow Error Handling) പൂർണ്ണമെന്ന് തോന്നിക്കുന്ന എറർ ബ്ലോക്കുകൾ AI പലപ്പോഴും എഴുതാറുണ്ട്, എന്നാൽ യഥാർത്ഥ സിസ്റ്റം പരാജയങ്ങൾ കൈകാര്യം ചെയ്യാൻ അവയ്ക്ക് കഴിയില്ല.
  • പരിഹാരം: ഞങ്ങൾ ഒരു 'ചേഞ്ച് ടെസ്റ്റ്' (change test) ഉപയോഗിക്കുന്നു. ഒരു ചെറിയ മാറ്റം വരുത്തുമ്പോൾ എത്ര ഫയലുകൾ തകരാറിലാകുന്നു എന്ന് ഞങ്ങൾ അളക്കുന്നു. ഉയർന്ന ഇംപാക്ട് എന്നാൽ ഉയർന്ന കപ്ലിംഗ് (high coupling) എന്നാണ് അർത്ഥം.

AI ശത്രുവല്ല. നിങ്ങൾ AI-യെ ഒരു ജൂനിയർ എൻജിനീയറെപ്പോലെ കാണണം. നിങ്ങൾ മാർഗ്ഗനിർദ്ദേശങ്ങൾ നൽകുകയും, പ്രതീക്ഷകൾ നിശ്ചയിക്കുകയും, അതിന്റെ ഔട്ട്‌പുട്ടിനെ തിരുത്താൻ നിങ്ങളുടെ വിവേചനാധികാരം ഉപയോഗിക്കുകയും വേണം.

ടാസ്ക്കുകൾ (tasks) ചെയ്യാൻ ടൂളുകൾ മികച്ചതാണ്. എന്നാൽ ജോലികൾ (jobs) പൂർത്തിയാക്കാൻ അവ മികച്ചതല്ല.

Source: https://dev.to/emilywoodsnyc/i-spent-3-weeks-auditing-my-teams-ai-generated-code-here-is-what-we-found-1kj5

Optional learning community: https://t.me/GyaanSetuAi