代碼屎山噩夢加速來襲,都是AI生成代碼的鍋?

編譯 | 核子可樂、褚杏娟

“周邊很多程度員一直在使用,都是用上就離不開了!”知乎上,在“大家現在使用哪些 AI 輔助編程工具?節省了多少工作量?”話題下,答主“以默”說道。

按照“以默”瞭解的情況,AI 輔助編程工具估計至少能幫程序員減少 30% 的工作量。對於工具,他表示“當然首選 GPT,也可能是唯一答案!國產在這方面差距很大。”“綜合能力水平: 4.0>3.5>國產大模型。模型能力越強,越好用!”

現在用 AI 輔助編程已經是很多程序員的選擇,但隨着 AI 軟件開發迅速普及,代碼質量又會隨之受到怎樣的影響?⻓期代碼研究員 Adam Tornhill 就曾表示擔憂,AI 輔助編程的主要挑戰在於,它非常容易生成大量本來就不應該編寫的代碼。

根據最新研究,結果確實令人憂心。除了代碼返工(即代碼在添加後不久即遭刪除)以外,重複代碼比例升高等問題愈發嚴重。

主要讓“添加代碼”

自 2021 年 6 月推出 beta 版以來,GitHub Copilot 已經掀起 AI 編碼的一波流域。據公司 CEO Thomas Dohmke 介紹,該軟件目前擁有超 100 萬付費訂閱開發者,已經讓開發任務的速度提高了 55%。而且在啓用 Copilot 的文件中,有 46% 的代碼量是由 AI 生成。

根據來自開發者分析公司 GitClear 的研究,基於從 1.5 億行已更改代碼中收集到的數據,調查發現其中三分之二來自以匿名方式共享數據的私營企業,三分之一則來自谷歌、Facebook 及微軟等技術大廠的開源項目。

這項研究着眼於經過添加、更新、刪除、複製及移動的代碼,並排除掉 GitClear 預先定義的“噪音”,例如被提交至多個分支的相同代碼、空行及其他無意義的代碼行。

但 GitClear 的研究將關注重點放在代碼質量、而非數量上,並觀察到AI 助手主要是在提供“代碼添加建議,但很少涉及代碼的更新、移動或刪除建議”。

研究人員還指出,“根據獎勵設計,代碼建議算法更傾向於提供最可能被採納的建議”。儘管看似有理,但這明顯忽略了代碼簡潔、易讀等特性的重要意義。

GitClear 分析得出的代碼更改趨勢

對代碼質量做精準衡量並不容易。研究人員也的確發現了一些變化趨勢,表明代碼的添加、刪除、更新和複製 / 粘貼量大大提高,但代碼移動比例卻有所下降。他們還發現代碼返工率大幅增加,從 2020 年的 3.3% 提升到目前的 7.1%。

一般來講,代碼移動是開發者進行代碼重構的關鍵指標。具體來講,就是在改進代碼設計和結構的同時,確保不改變行爲。

研究人員初步猜測這種趨勢可能與 AI 編碼技術的日益普及相關,但真實原因仍有待驗證。他們還嚴厲批評了大量複製 / 粘貼代碼的負面影響,稱“這種對 AI 生成代碼的無腦使用,將對代碼的長期可維護性產生災難性的影響”。

但過度使用複製 / 粘貼並不算是新問題。開發人員之所以這樣做,很可能是因爲無腦照搬比調整和重用現有代碼更快、更省事,或者同一項目下多位開發者之間溝通不暢,抑或是從開發示例 / 編碼問答網站上“抄襲”了太多內容。

GitClear 研究人員並沒有具體討論應如何解決調查中發現的這些問題,而是轉向了“後續研究問題”。但他們也建議工程部門領導者應當“監督提交數據,並考慮其對未來產品維護造成的影響”。

這次研究可能在一定程度上讓那些擔心被 AI 工具取代的開發者們感到放心。代碼分析公司 CodeScene 最近開展的一項 AI 代碼重構研究也得出結論,“在編碼環境中,AI 還遠無法取代人類;當前的 AI 太容易出錯,且完全不具備安全修改現有代碼的水平。”

代碼質量,誰更應該關注

可以肯定的是,AI 編碼助手絕不會就此消失,反而是像一切新工具那樣不斷改進,並由開發者學習優化思路、改善使用效果。

其實,現在開發者們也已經意識到了代碼質量的問題。在 GitHub 與 Wakefield Research 的調查報告中,當被調查的程序員被問到,“在積極使⽤⼈⼯智能時,應該根據哪些指標進⾏評估?”“代碼質量”成爲最關⼼的問題,

但另一方面,更應該關注代碼質量問題的其實是公司領導層。

“我公司的領導曾經就動過用代碼行數衡量每個人的工作量這種想法。研發人員每週代碼量至少在 500 行以上,一個月必須在 2000 行以上。甚至他還搞來了第三方的測算軟件,輸入 git 賬號來計算你的代碼量。然後在一次技術會議上,全體組員忍無可忍的懟了技術總監。“知乎上有網友分享到。

一般公司考覈代碼量相對簡單直觀,但是代碼質量考覈就不那麼容易了:滿足用戶需求,

合理的進度、成本、功能關係,具備擴展性和靈活性等都不是那麼可量化的指標。

但 關於代碼質量對業務影響的研究 表明,一般來說,由於技術債務和糟糕的代碼,公司平均浪費了開發人員 23%~ 42% 的時間。但似乎這還不夠令人感到擔憂,關於 軟件開發人員由於技術債務而導致的生產力損失 的研究還發現,開發人員經常“被迫”引入新的技術債務,因爲公司一直在用代碼質量換取新功能等短期收益。

現在企業爲“降本增效”引入 AI 輔助工具是可以理解的,但需要注意揚長避短、合理使用。根據 Alphacodium 的說法,大模型生成單個冗長函數的結果很差,代碼通常包含錯誤或邏輯錯誤,大模型也往往在需要思考、推理並做出嚴格、重要決策的代碼任務中遇到困難。

代碼生成與其他對話不同,它需要匹配目標語言的精確語法、識別最佳路徑和邊緣情況、關注問題規範中的衆多小細節,並解決其他特定於代碼的問題和要求。因此,在自然語言生成中許多優化和技巧可能對代碼任務無效。

如何讓 AI 輔助編程更好地幫助開發者,也需要各方努力。

https://devclass.com/2024/01/24/ai-assistance-is-leading-to-lower-code-quality-claim-researchers/

https://www.zhihu.com/question/640036429

https://zhuanlan.zhihu.com/p/626643788

https://github.blog/2023-06-13-survey-reveals-ais-impact-on-the-developer-experience/

聲明:本文爲 InfoQ 翻譯,未經許可禁止轉載。