大語言模型對軟體開發的影響

大語言模型對軟體開發的影響

近期閱讀了一份文件,內容是關於大語言模型對軟體開發工作的影響,文件的連結在這:Assessing and Advancing Benchmarks for Evaluating Large Language Models in Software Engineering Tasks

這份文件聚焦於大型語言模型(LLMs)應用於軟體工程(SE)領域的效能評估。這是個有趣的題目,所謂的效能,簡單的說就是能直接在該工作任務中大幅增進效能的比例。

大家都知道現在的 AI 寫 code 已經不是什麼大不了的事,但透過 vibe coding 寫出來的 code 真的可以用嗎?符合需求嗎?品質可以嗎?能被維護嗎?

關於這些問題,我們要如何衡量 AI 的有效性呢?目前的答案是透過 Benchmark(基準)。

舉例來說,之前有的 benchmark 叫 SWE-bench,它使用了真實 GitHub issue 與 PR,測試模型是否能修正程式庫內的 bug。根據能修正多少來為模型評分。

或者是 HumanEval,是由 164 個 Python 程式任務組成,每個任務都附帶測試案例。評估方式以 Pass@k(程式通過測試案例的比例)來衡量模型的解題能力。

簡單說,基準是為了幫助我們判斷這個 LLM 在特定任務上的解題能力或成熟度。而過去大家熟知的研究大多針對程式碼生成或測試,但這份研究報告則覆蓋了需求、程式碼生成、測試、維護與品質管理等面向。

報告中回顧過去幾年發布的 291 個相關基準,算是具有一定程度的代表性。

下圖,是這份研究的架構概覽:

  • Requirements & Design (需求與設計)需求蒐集 (4)分析 (10)規格與驗證 (9)管理 (2)合計 25 個基準。
  • Coding Assistant (程式輔助)代碼生成與推薦 (102)總結 (11)翻譯 (13)推理 (3)合計 124 個基準(這個數字加總似乎有錯),數量最多。
  • Software Testing (軟體測試)測試案例生成 (14)斷言生成 (1)GUI 測試 (2)測試自動化 (4)測試預測 (2)測試修復 (2)合計 25 個基準。
  • AIOps (智慧化維運)日誌生成 (4)日誌解析 (2)僅 6 個基準。
  • Maintenance (維護)程式碼審查 (7)Clone 偵測 (5)重構 (1)合計 13 個基準。
  • Quality Management (品質管理)缺陷預測 (5)錯誤定位 (20)錯誤修復 (12)漏洞偵測 (62)漏洞修復 (18)合計 111 個基準,僅次於程式輔助。

基準的數量,某種程度可以說是該工作任務由 AI 完成的成熟度。所以從上方的數字看來,程式碼撰寫、測試、修 bug是目前 AI 能做得最好的項目。而需求、維護跟維運則做得相對較差。

簡單的說,脫離了程式碼,來到商業需求層面的議題,AI 能參考的數據源較少,較難給出符合需要成品。程式碼可以相對容易在網路上取得,Github、Stackoverflow 上都有許多的程式碼。

但 BRD、PRD、MRD、架構圖、佈署圖等需求文件跟架構文件,通常屬於商業機密,不太可能在網路上直接公開。這部分便是所謂的 domain know-how 跟 business know-how,我相信即便 AI 持續發展,要能完全替代人類去做這方面的任務,還是有很長的一段路要走。

而這也是未來軟體工程師跟 PM 相關職務能直接區別於 AI 的重要路線


需求收集基準

進一步看看需求收集的基準,發現這些基準的代表性相對薄弱。例如 NFR-Review,主要收集了 iBooks (iOS) 與 WhatsApp (Android) 的使用者評論,隨機挑選 4,000 筆,最後整理出 1,278 筆需求作為基準。

而且重點著重於非功能性需求(Non-Functional Requirements, NFR),如可靠性、可用性、效能、安全性。非功能性需求通常是相對泛用的,跟 domain know-how 的綁定程度相對較低。或許具有一定程度的可參考性。

或者 Habib et al.,它是從 10 個線上需求資料集中篩選出 242 條高品質需求。所謂的高品質指的是泛用的需求,應該也會涵蓋許多非功能性需求,不過我沒找到這 242 條需求的清單,所以不太肯定它的範圍到底涵蓋到哪。

不過它有特別提到所有的需求都要符合 ISO 29148 標準,這是一套軟體工程標準,主要目的是確保需求可理解、可追溯、可驗證,並減少軟體與系統專案中的歧義與錯誤。

以下請 AI 幫忙整理 ISO 29148 標準。

這套標準主要規範「什麼是好需求」以及「如何撰寫需求文件」,核心分成三大區塊:

1. 需求的特性(Characteristics of good requirements)

一個需求應該是:

  • 正確 (Correct):符合系統/用戶需求。
  • 無歧義 (Unambiguous):單一解讀,不容誤會。
  • 完整 (Complete):涵蓋必要條件。
  • 一致 (Consistent):不與其他需求衝突。
  • 可驗證 (Verifiable):能透過測試、檢查或分析來確認。
  • 可行 (Feasible):能在技術、時間、成本內實現。
  • 必要 (Necessary):每個需求都應支援業務目標。
  • 有追溯性 (Traceable):能追溯到來源(如用戶需求或設計決策)。

2. 需求種類

  • 功能性需求 (Functional Requirements, FRs)
    描述系統必須做什麼,例如「系統應允許使用者登入並查詢餘額」。
  • 非功能性需求 (Non-Functional Requirements, NFRs)
    描述系統品質或限制,例如「系統應在 2 秒內回應查詢」、「系統必須符合 GDPR」。

3. 需求規格文件(SRS, Software Requirements Specification)

ISO 29148 提供 需求文件的範本結構,包含:

  1. 簡介與背景
  2. 系統總覽與目標
  3. 功能需求
  4. 非功能需求(效能、安全性、可靠性、可維護性等)
  5. 限制與假設
  6. 驗證與驗收準則

而為了確保每一個需求都能符合這樣的標準,Habib et al. 的作者還撰寫了另外一份研究報告 ReqBrain: Task-Specific Instruction Tuning of LLMs for AI-Assisted Requirements Generation

在這研究中,它採用了 AI 負責撰寫符合 ISO 29148 標準的文件,並由人類進行分析與驗證的方式來進行。

而 AI 生成的文件是否符合 ISO 29148 的標準,則由三個關鍵任務來判讀:如何

  • How-to? INST教模型如何用 ISO 29148 語法撰寫完整需求。例如:指令:寫一條符合 ISO 29148 的需求,功能是讓員工能列印會員卡。完成:系統應允許員工透過 POS 系統列印姓名與會員編號(含條碼)。
  • RE-types INST教模型辨識與生成不同類型需求(功能性 vs 非功能性,如可用性、安全性)。例如:指令:給我一條關於「可用性」的需求。完成:顧客應能在 3 分鐘內完成電影購買與播放。
  • Missing INST模擬「需求清單不完整」的情境,讓模型補充缺失需求。例如:指令:已有部分需求(瀏覽功能、儲存功能),請補齊其他需求。完成:補充「顯示功能」、「儲存追蹤功能」等缺失項目。

從這份報告的架構,我大致上能理解大語言模型在需求收集這個任務上的基準的表現。現階段大致只能處理通用性需求,但無法深入處理具備特殊商業判斷的需求


具備商業思維(business know-how)與領域知識(domain know-how),且能從架構設計上思考的軟體工程師或 PM。即便面對 AI 的浪潮,可被取代性還是相對低的。

如果你覺得我內容寫得還不錯,歡迎訂閱我的電子報,我每雙週會發送一封電子報到你的信箱。訂閱連結在這,過往的電子報也在這:Gipi電子報

也鼓勵你可以將我的電子報分享給你認為有需要的朋友們,也許你的舉手之勞,將會改變另一個人的思維與習慣。

Read more

普通人悖論

普通人悖論

今天跑步時聽了一本書,書中提到一個「普通人悖論」。聽著有趣,因為似乎解答了我這幾年的一些自我認知的疑問。 「我們一般人....」 「對普通家庭來說....」 我們總看著成功人士的故事,閱讀那些不平凡的案例,可到最後,我們還是會回過頭來告訴自己「我們就是個普通人」。 我們渴望不凡,渴望能活出屬於自我的人生,但我們卻又認為自己無法脫離普通人的路徑。20 多歲出社會,謀得一份工作,接著兢兢業業數十年,從基層爬到高層,一輩子在職場上與人競爭。當我們看到那些跳脫這種路徑的人時,我們又說服自己「那是別人」、「那是獨特個案」。 我們心理渴望自己也能是獨特個案,但又不斷說服自己「我只是個普通人」。 這種心境,讓我們沒有勇氣去追求屬於自己的人生。 在聆聽這段時,為什麼我會特別有感觸呢? 在我今年撰寫的新書《用商業思維優化你的人生選擇》中我提到,每個人的人生都是獨一無二的。你不見得要像他人一樣功成名就才算非凡,你能做自己喜歡的是,成為自己想要成為的樣子,活出自己的人生,那你就是個非凡的人。 因為其他人很難活得像你這樣。 我內心是堅定相信這件事的。但我卻又經常在一些時刻,會將「我們一般人」

By gipi
如何快速熟悉一個產業?

如何快速熟悉一個產業?

什麼是產業,什麼又是行業? 有人會說電子業、食品業,也有人會說製造業、零售業、服務業,這兩者指的是相同的概念嗎?其實這邊隱含了兩個概念,也就是業種跟業態。 業種,是行業種類,以販售的「商品種類」區分所屬行業。例如賣建材的建材行、賣文具的文具店、賣水果的水果店或賣米的米店等。這些業種店看招牌名稱就可得知該商店販賣哪種商品。 業態,是行業型態,則是以該店家的「經營型態」區分所屬行業。例如提供即時、方便服務的便利商店;提供專櫃及流行品的百貨公司;提供量大、低價的開架式民生消費品的量販店等。這類商店,無法從其名稱辨別產品。通常是提供「一站式購買服務」為訴求,並提供其他相關的附加服務。 典型的業態,其實分兩大類,製造與流通。製造商負責製造產品,流通商負責將貨物流通到消費者手上,並因應消費者的需求,擴大產品品項,增加服務,而大家常講的零售與批發,其實也歸屬於流通範疇中。 舉例來說,生鮮食品經生鮮處理中心,將生鮮品分類分裝,這是製造的範疇,大盤商集中所有產品,

By gipi
當 vibe coding 已成必然,軟體開發會有什麼變化?

當 vibe coding 已成必然,軟體開發會有什麼變化?

當 Vibe coding 興起後,有愈來愈多的資深工程師的工作重點轉換到修復 AI 寫出的各種 bug。因這個現象,有些資深工程師們打趣地說,他們現在的任務像是專門處理這些 vibe coder 寫出來的爛 code。而這個職務稱為 Vibe Coding Cleanup Specialist。 我個人絕對支持 vibe coding,因為這是軟體開發的典範轉移,用得好的話可以大幅提升生產力,加上 AI 顛覆職場的趨勢幾乎不可逆。擁抱變化會比抗拒變化更明智。 這讓我回想起 2005 年剛出社會時,因為我起步的程式領域是 C#.net,使用的開發工具是 Visual Studio。C# 的好與壞我就不提了,但在當年,Visual Studio 這工具被稱為地表最強 IDE 應該是沒問題的。 它有多方便呢?所見即所得,元件直接拉到畫面上,出來的畫面就長那樣,

By gipi
主動改變或被動被改變

主動改變或被動被改變

「像恆溫器(thermostat)一樣改變環境,而不是像溫度計(thermometer)一樣被動測量環境」 如果環境不好,但你又想繼續待在這個環境,那你能做些什麼? 分享兩個以前團隊中年輕夥伴的故事,一個剛畢業,另一個則只有兩年工作經驗。 第一位是當時公司招募的儲備幹部,剛進公司月薪就有兩萬人民幣,這薪資高過公司內最少 80% 以上的員工。公司對這些人有著高期待,也為他們安排了一系列入職培訓,希望將他們培養成公司未來的骨幹。 而在計畫開始時我也擔任了面試官的角色,在面試過程我聊到一位很適合做產品的年輕夥伴,他在幾家網路公司都有實習經驗,而且能清楚的說明他負責的工作項目,針對我的提問「如何優化數字」、「如何做計畫」、「如何修正錯誤」等問題都能回答得很好。 面試後我跟 HR 說,我想跟這位談談能否放棄儲備幹部計畫直接到我們部門任職。HR 說只要對方同意就沒問題。 我找這位年輕夥伴聊,清楚地跟他說我為什麼希望他能加入我們團隊,可同時也跟他說我們給的薪資肯定不如儲備幹部,而少了這個光環,他要被看見就得靠自己的表現了。但我能跟他保證的是我們部門這個職務能讓他成長得更快。 他跟我說:「

By gipi