AI 幫忙寫代碼程序員用了都說好,但代碼質(zhì)量真的靠譜嗎?結(jié)果或許令你大跌眼鏡。
一家名為 GitClear 的公司分析了近四年超過 1.5 億行代碼后發(fā)現(xiàn),隨著 GitHub Copilot 工具的加入,代碼流失率(即代碼寫入后不久又被返工修改、刪除的情況)出現(xiàn)了顯著上升:2023 年為 7.1%,而 2020 年時僅為 3.3%,翻了一番。
與之相應(yīng)的,代碼復(fù)用率也出現(xiàn)了明顯下降。言外之意,AI 寫的很多內(nèi)容其實不亞于“屎山”,根本不好隨著業(yè)務(wù)的變化作相應(yīng)更改??雌饋恚珹I 編程工具還遠(yuǎn)沒有宣傳中的那么好用?
Copilot 更愛直接添加代碼而不鼓勵復(fù)用
GitClear 收集的 1.5 億行代碼中,有三分之二來自匿名私企,剩下的 1/3 則源自于谷歌、Meta 和微軟的開源項目。它們?nèi)勘慌懦恕霸肼暋睌?shù)據(jù),比如在多個分支中提交的一模一樣的代碼、空行以及其他沒有意義的代碼行。
調(diào)查的主要對象是微軟的 GitHub Copilot。它于 2021 年 6 月推出測試版,按照 CEO 說法,截至 2023 年第三季度,該工具已有超 100 萬開發(fā)者付費(fèi)訂閱,能夠幫助開發(fā)者編寫 46% 的代碼,并將編碼速度提高 55%。
不過在此,GitClear 不關(guān)心編碼速度,只關(guān)心質(zhì)量。
“AI 編程工具更類似于高級開發(fā)人員,仔細(xì)又精細(xì)?還是更像短期承包商一樣,只在乎面前的任務(wù)完成與否?”
為此,他們統(tǒng)計了這 1 億行 + 代碼的新增、刪除、更新、移動、復(fù)制 / 粘貼等情況,得出了這樣一個趨勢表格:
從中我們可以發(fā)現(xiàn):Copilot 添加代碼、復(fù)制 / 粘貼代碼的百分比比更新、刪除和移動增加得更明顯。
其中我們還可以清晰地看到,移動代碼的百分比從 2020 年的 25% 下降到了 13.4%,這是所有數(shù)據(jù)中唯一一個反向特例。
更少的移動意味著更少的重構(gòu)和復(fù)用,加上大幅增長的添加、復(fù)制 / 粘貼代碼,這表明:AI 編程工具并不鼓勵代碼復(fù)用、在已有代碼上進(jìn)行修改,而是更傾向于“無腦重寫”。
在此,GitClear 也指出,過度新增代碼、復(fù)制 / 粘貼對代碼的長期可維護(hù)性也相當(dāng)不利。
這其實在人類程序員中也是老問題,可能是程序員覺得解決當(dāng)下問題比思考如何復(fù)用、整合現(xiàn)有代碼更快更容易,也可能是因為同個項目組中的開發(fā)人員溝通不暢等。
遭殃的就變成后面的維護(hù)人員。
Copilot 的代碼質(zhì)量下降也體現(xiàn)在代碼流失率(Churn)這個數(shù)據(jù)上。在此,它的標(biāo)準(zhǔn)定義是代碼編寫后不到兩周的時間內(nèi)修改更新的百分比。
表格顯示,2020 年的流失率為 3.3%(那會還沒有用上 Copilot),2023 年增長到 5.5%。GitClear 預(yù)計,2024 年將直接相比 2020 年翻一番之多,達(dá)到 7.1%。這說明 AI 的加速,并沒有帶來足夠高質(zhì)量的代碼。
除了以上結(jié)論,GitClear 還發(fā)現(xiàn),Copilot 的代碼建議算法還被設(shè)計為總是提出最有可能被用戶接受的建議 —— 這選擇乍一聽沒啥毛病,但其實會忽略代碼簡潔易讀的重要性。
總的來說,這項結(jié)果足以讓那些擔(dān)心 AI 編程工具會取代人類程序員的人暫時把心放肚子里。
最近也有不少其他研究佐證了 GitClear 的發(fā)現(xiàn)。比如來自 CodeScene 的一篇報告就表示:
在編碼任務(wù)中,AI 遠(yuǎn)無法取代人類;今天的 AI 太容易出錯,且遠(yuǎn)未達(dá)到能夠安全修改已有代碼的程度。
網(wǎng)友體驗大差不差
實實在在使用過 Copilot 的人怎么說?
一位網(wǎng)友表示:
我用了兩個月后取消了會員,因為花了太多精力去檢查 AI 給出的代碼以及修復(fù) bug。
在 TA 看來,現(xiàn)階段還是自己編寫內(nèi)容要省力得多,因為自己知道自己想要寫什么,修復(fù)自己的 bug 總是比修復(fù)機(jī)器人的更容易。
有人使用的是 ChatGPT 而非 Copilot,也對 TA 的話表示了贊同:
我對 AI 的能力感到驚訝,但還是不會稱其為“好代碼”。
當(dāng)然,Copilot 在大家眼里也并非一無是處。一位從事 web 開發(fā) 20 多年的程序員就表示:
用它編寫重要的 SQL 或 TypeScript 代碼時,總是失??;但對于編寫測試、請求處理、React 樣式等等來說,它還是可以幫我節(jié)省大量時間的。
你的 Copilot(或者其他 AI 編碼工具)體驗如何?你同意 GitClear 的發(fā)現(xiàn)嗎?
參考鏈接:
[1]https://devclass.com/2024/01/24/ai-assistance-is-leading-to-lower-code-quality-claim-researchers/
[2]https://visualstudiomagazine.com/articles/2024/01/25/copilot-research.aspx
[3]https://www.gitclear.com/coding_on_copilot_data_shows_ais_downward_pressure_on_code_quality
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。