ADVERTISEMENT
程式設計師們用了幾十年時間為AI模型編寫程式碼,而現在,AI正被用來編寫程式碼。但AI的程式碼生成器跟人類程式設計師的水準相比如何呢?
《IEEE 軟體工程學報》今年 6 月刊就發表了一項研究,從功能性、複雜性與安全性等方面評估了 OpenAI 的 ChatGPT 所生成的程式碼。結果表明,ChatGPT 在生成功能性程式碼方面取得了極大的成功,成功率最低為 0.66% ,最高可達 89% ,具體要取決於任務的難度、程式設計語言等許多其他因素。
雖然在某些情況下,AI生成器生成的程式碼比人類寫的還要好,但分析也揭示了AI生成的程式碼存在一些安全問題。
參與這項研究的格拉斯哥大學講師 Yutian Tang 指出,基於AI的程式碼生成在提高生產力和自動化軟體發展任務方面可以帶來一些優勢,但瞭解這些模型的優勢和局限性也很重要。
- 延伸閱讀:Mistral AI 開源釋出強大程式碼生成 AI 模型 Codestral Mamba,挑戰 Transformer 架構霸主地位
- 延伸閱讀:工程師可以偷懶了?Github可幫你寫程式的AI輔助工具Copilot上線,月費只要10美元
為了更詳細地探索這些局限性,他的團隊測試了 GPT-3.5 用五種程式設計語言(C、C++、Java、JavaScript 和 Python)解決 LeetCode 測試平臺上的 728 個程式設計問題的能力。
總體而言,ChatGPT 在解決不同程式設計語言的問題方面表現相當出色,在解決 2021 年之前 LeetCode 上存在的程式設計問題尤為出色。比方說,它能夠針對簡單、中等及困難等級的問題生成可執行程式碼,成功率分別約為 89%、71% 以及 40%。
Tang指出:「不過,在解決 2021 年以後的演算法問題時,ChatGPT 生成功能正確的程式碼的能力會受到影響。它有時候會沒法理解問題的含義,哪怕是簡單等級的問題。」
比方說,ChatGPT 為2021 年之後的「簡單」程式設計問題生成功能性程式碼的能力就從 89% 下降到 52%。而其為「困難」等級問題生成功能性程式碼的能力也從 40% 下降到 0.66%。
Tang說:「ChatGPT 能更好地解決2021 年之前的演算法問題,其中一個合理假設是,這些問題在訓練資料集裡經常出現。」
從本質上來說,程式設計會不斷發展演變,而ChatGPT 還接觸不到新的問題與解決方案。它缺乏人類的那種批判性思維能力,只能解決以前遇到的問題。這可以解釋為什麼它在解決舊的程式設計問題方面比解決新的程式設計問題要好得多。
有趣的是,針對相同的LeetCode 問題,ChatGPT 生成的程式碼至少比 50% 的人類解決方案更高效,使用的記憶體資源更少。
研究人員還探索了 ChatGPT 在收到 LeetCode 回饋後修復自身程式設計錯誤的能力。他們隨機挑選了 50 個程式設計場景,都是ChatGPT 一開始因為不理解內容或手頭的問題而生成了錯誤程式碼的情況。
雖然 ChatGPT 擅長修復編譯錯誤,但往往不擅長糾正自身的錯誤。
Tang解釋道:「ChatGPT 可能會生成錯誤程式碼,因為它不理解演算法問題的含義,因此光是提供錯誤回饋資訊是不夠的。」
研究人員還發現,ChatGPT 生成的程式碼確實存在相當多的漏洞,比方說缺少空值測試,但其中的很多漏洞都很容易修復。他們的結果還顯示,用 C 語言生成的程式碼最複雜,其次是 C++ 和 Python,其複雜度與人類編寫的程式碼相似。
Tangs 表示,基於這些結果,用 ChatGPT 的開發者提供更多資訊來説明 ChatGPT 更好地瞭解問題或避免漏洞非常重要。
Tang說:「比方說,在遇到更複雜的程式設計問題時,開發者可以盡可能多地提供相關知識,並在提示中告訴 ChatGPT 要注意哪些潛在的漏洞。」
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!