工程實作 16 min read ★ Featured

軟體有多大?Nesma 功能點分析:只數功能不數行數

Nesma 是荷蘭軟體度量協會(Netherlands Software Metrics Association),主推功能點分析(FPA):不看程式碼行數、只數軟體對使用者做了幾件事,來量一套系統多大。這篇講清楚它是什麼、資料功能(ILF/EIF)+交易功能(EI/EO/EQ)在數什麼、三種計數層級(detailed/estimated/indicative 荷蘭法),以及跟 IFPUG、COSMIC、敏捷 Story Point 差在哪——功能點波動不到 5%、Story Point 團隊間差異可達 400%。對一個 2026 年同時教課又接案的開發者,功能點最實用的價值不是精算,是當一把「客觀的尺」。

軟體有多大?Nesma 功能點分析:只數功能不數行數
本文目錄 · 10
TL;DR:Nesma 是荷蘭軟體度量協會,主推「功能點分析(FPA)」——不看程式碼行數、只數軟體對使用者做了幾件事,來量一套系統多大。它跟 IFPUG 幾乎同源(同一套 ISO 血統),但多了 estimated / indicative 兩種「早期快速估」層級,很適合需求還沒定死時抓規模。想在敏捷開發裡量「功能大小」而不是「主觀點數」,Nesma 跟 COSMIC 是兩個正經選項。這篇講清楚它是什麼、跟 IFPUG / COSMIC / story points 的差別,以及對一個 2026 年的開發者到底還有沒有用。

📌 目錄

🧠 Nesma 是什麼?先別跟那堆同名公司搞混

第一次看到「Nesma」這個字,我自己也查了一輪才確定講的是哪個。因為叫 Nesma 的東西一堆:沙烏地阿拉伯有個叫 Nesma Holding 的大集團、還有 Nesma Airlines 航空公司、美國新英格蘭有個彈簧沖壓協會也縮寫成 NESMA。

這篇要講的是軟體工程領域的那個 Nesma——原名 Netherlands Software Metrics Association(荷蘭軟體度量協會),現在官網 nesma.org 定位是「敏捷功能性軟體規模量測與客觀度量」。它從 1989 年就在做這件事,主推的核心方法叫 FPA(Function Point Analysis,功能點分析),並且是 ISO/IEC 24570 這條國際標準的來源。

一句話定義它在幹嘛:用一套客觀規則,量出一套軟體「有多大」,量的單位是「功能點(Function Point)」,而不是程式碼行數、也不是工時。

為什麼要量「功能大小」而不是「行數」?因為行數會騙人。同一個功能,用 Java 寫跟用 Python 寫行數差好幾倍;一個資淺工程師寫 500 行,資深的可能 80 行搞定同一件事。如果你用行數當生產力指標,等於在獎勵寫爛 code。 功能點想解決的就是這件事:不管你用什麼語言、誰寫的,只要對使用者呈現的功能一樣多,規模就一樣。

⚙️ 功能點到底在數什麼?資料功能 + 交易功能

功能點分析的核心觀念很簡單:站在使用者的角度,數這套系統「存了哪些資料」跟「能做哪些操作」。 拆成兩大類:

1. 資料功能(Data Functions) —— 系統維護或參照了哪些邏輯資料群組。

類型全名白話
ILFInternal Logical File系統自己維護的資料,例如「訂單」「會員」這種你自己 CRUD 的資料表群
EIFExternal Interface File系統只讀不寫、來自別的系統的資料,例如串接的第三方匯率表
2. 交易功能(Transactional Functions) —— 使用者能對系統做的操作。
類型全名白話
EIExternal Input資料進來:新增訂單、改密碼、送出表單
EOExternal Output資料出去且有加工:月營收報表、含計算的統計圖
EQExternal Inquiry純查詢、不加工:搜尋、查明細、下拉選單帶資料
每一個被辨識出來的功能,會依「複雜度」評成 Low / Average / High,再對照權重表換成功能點數,全部加總就是這套系統的規模。

用一個具體例子感受一下:你要做一個「線上請假系統」。

  • 「請假單」「員工」「假別設定」→ 3 個 ILF
  • 串 HR 系統拉組織架構 → 1 個 EIF
  • 送出請假、主管簽核、取消請假 → 3 個 EI
  • 產月度請假統計報表 → 1 個 EO
  • 查自己的請假紀錄、查剩餘天數 → 2 個 EQ
這樣就辨識出 10 個功能項,各自評複雜度、查權重表加總,得出一個功能點數。重點是:這個數字在需求階段就能算出來,不需要先寫任何 code。 這才是它的價值。

整個計數流程長這樣:

需求 / 規格

辨識功能

資料功能
ILF / EIF

交易功能
EI / EO / EQ

評複雜度
Low/Avg/High

查權重表
換算功能點

加總 = 系統規模

Nesma 功能點分析封面:手繪卡尺量軟體藍圖、數功能點

📏 Nesma 的三種計數層級:detailed / estimated / indicative

這是 Nesma 跟純 IFPUG 最實用的差異。Nesma 定義了三種精細度的計數方式,讓你依「手上資訊多完整」選一種,不用永遠都做最精細的那套:

層級需要的資訊準度適用時機
Detailed(詳細)每個功能都辨識 + 評複雜度最高需求規格完整、要簽約報價
Estimated(估算)辨識所有功能,但複雜度用預設值中高需求大致成形、要抓個譜
Indicative(指示性)只數資料功能(ILF/EIF)數量低但快專案最早期、只有粗略構想
其中 indicative 這套被業界叫做「荷蘭法(the Dutch Method)」——只要數出有幾個 ILF、幾個 EIF,套個公式就能吐出一個非常粗但立即可得的規模估計。準度不高,但在「連需求都還沒定」的專案啟動期,有個數字總比拍腦袋好。

值得一提的是:Nesma 這套「早期快速估」的方法後來被 IFPUG 正式收編,成為 IFPUG 官方的「High-level FPA(HLFPA)」方法。所以你可以把 Nesma 理解成在 IFPUG 標準之上,補了一層「需求還沒完整時也能估」的實務工具

⚖️ Nesma vs IFPUG vs COSMIC:一張表看懂

功能性規模量測(Functional Size Measurement)符合 ISO 標準的主流有這三家,常常被搞混。直接上對照表:

維度NesmaIFPUGCOSMIC
ISO 標準ISO/IEC 24570ISO/IEC 20926ISO/IEC 19761
起源荷蘭,1989美國,1970s 末2000 年後,較新
跟 IFPUG 關係幾乎同源,2004 起指南高度一致本尊獨立設計、觀念不同
計數對象資料功能 + 交易功能資料功能 + 交易功能資料移動(Entry/Exit/Read/Write)
早期快速估✓ 內建三層級△ 後來收編 Nesma 的 HLFPA✓ 天生支援不完整需求
從 User Story 直接數△ 較難✗ 不行✓ 可以
適合分層/現代架構△ 設計時代較早✓ 為多層架構設計
學習成本中高(文件最厚)較低(約 IFPUG 的 1/3 頁數)
幾個關鍵結論:
  • Nesma 跟 IFPUG 本質上是「近親」。 自 IFPUG CPM 4.2(2004)起,兩者的 FPA 指南幾乎一樣。差別在 Nesma 多了那套早期估算層級。
  • COSMIC 是「另一個流派」。 它不數 ILF/EIF/EI/EO/EQ,而是數「資料群組的移動次數」——每一次 Entry / Exit / Read / Write 算 1 個 CFP。它天生為現代分層架構跟不完整需求設計,所以敏捷圈更愛。
  • 要在敏捷/user story 環境量功能大小,COSMIC 通常是首選;要跟舊有基準庫(如 ISBSG)對接、或做企業級傳統專案估算,Nesma/IFPUG 的資料更厚。

🎯 功能點 vs 敏捷 Story Points:不是同一種東西

這是我自己一開始也搞混、最值得講清楚的一點。我原本以為功能點跟 story point 是競爭關係、二選一——後來才發現它們量的根本不是同一個東西。

面向功能點(Function Point)Story Point
量的是功能大小(客觀規模)相對工作量(主觀難度感受)
依據使用者需求 + 標準規則團隊的經驗與共識
跨團隊可比✓ 高度可比✗ 各團隊尺度不同
波動範圍不同人數同一套系統,通常差 <5%團隊之間差異可達 400%
用途簽約、報價、跨組織基準比較團隊內衝刺規劃、速度追蹤
搜尋到的資料裡有個很有力的數字:同一套系統,不同專業人員用功能點去數,結果通常差異不超過 5%;而 story point 在不同團隊之間,同樣的東西估出來可以差到 400%。

這不是說 story point 沒用——它在團隊內部的衝刺規劃很好用,因為它反映的是「這個團隊做這件事有多費力」。但正因為它綁在特定團隊的手感上,你不能拿 A 團隊的 story point 去跟 B 團隊比,也不能拿它去對外報價或簽約。 功能點的價值就在這裡:它是個跨團隊、跨語言、可簽約的客觀規模單位。

一個實務上的組合拳是:用功能點做對外/跨組織的規模與生產力基準,用 story point 做團隊內部的衝刺規劃。 兩者各司其職。

🕳️ 我踩過的認知坑

寫這篇之前,我自己對這套東西有幾個誤解,這裡誠實列出來:

坑一:以為功能點是「過時的瀑布式產物」

我一開始的直覺是:功能點分析聽起來就很 1990 年代、很「先寫完整規格再開工」,跟現在敏捷開發格格不入。查下去才發現,Nesma 官網現在的定位直接掛「Agile Functional Software Sizing」,而且 COSMIC 這一支還特別強調能從不完整需求、直接從 user story 去數。所以「功能點 = 瀑布式」是我自己的刻板印象,不是事實。

坑二:把 Nesma 跟 IFPUG 當成兩套要選邊站的對手

實際上這兩家從 1990 年就密切合作定義共同標準,2004 年後指南幾乎一致,Nesma 的早期估算法還被 IFPUG 收編。它們是近親、不是對手。真正觀念不同、要選邊的是 COSMIC。

坑三:以為「數功能點」一定要專人專證、很重

detailed 那套確實需要訓練跟經驗。但 Nesma 的 indicative(荷蘭法)只要數「有幾個邏輯資料檔」就能吐出粗估——這件事一個懂系統的工程師花十分鐘就能做。它不是只有大企業養一組估算師才能碰的東西,你在專案啟動會議上就能拿來當個粗略的規模 sanity check。

🔮 2026 年,這套東西對開發者還有用嗎?

老實說,如果你是在小型新創、產品需求天天變、只在乎團隊速度——那你大概一輩子用 story point 就夠了,不太會碰功能點。

但有幾個場景,功能點(Nesma/IFPUG/COSMIC)仍然是正解:

  • 對外報價與簽約:接案、外包、政府標案,要一個「客觀、可稽核、跟語言無關」的規模數字時,story point 沒辦法簽約,功能點可以。
  • 跨團隊/跨組織生產力比較:大型組織想比較不同團隊的產出,需要一個統一尺度,功能點是少數能做到的。
  • 早期規模 sanity check:專案還沒動工,只想抓個譜「這大概是 50 人天還是 500 人天」,Nesma 的 indicative 估算十分鐘給你一個數字。
  • AI 輔助自動估算的輸入:這幾年有研究在做「從需求文件自動數功能點」「用機器學習估功能大小」。功能點因為規則明確、波動小,反而比 story point 更適合當 AI 自動化的量測對象。
對我這種同時在教課、又在接開發案的人來說,功能點最實用的價值不是拿來精算,而是拿來當一把「客觀的尺」——當有人問「這個系統做起來要多久」時,我至少有個不靠拍腦袋、可以攤開講的估算基礎。你不一定要考證照、也不一定要用到 detailed 那套,但知道「軟體大小可以這樣量、而且有國際標準」,本身就是一個有用的思考工具。

❓ 常見問題

Q1:Nesma 跟 IFPUG 到底該選哪個?
如果你要對接 ISBSG 這類國際基準資料庫,或做傳統企業專案估算,兩者幾乎通用,Nesma 多了早期估算層級更實用。真正要跟它們比較、且做敏捷/user story 的話,考慮 COSMIC。

Q2:功能點可以取代 story point 嗎?
不能,也不該。它們量的是不同東西:功能點量「功能大小」(客觀),story point 量「工作量」(主觀相對)。功能點用於對外報價/跨團隊比較,story point 用於團隊內衝刺規劃,通常搭配使用。

Q3:算功能點一定要專業認證嗎?
detailed 精算需要訓練與經驗。但 Nesma 的 indicative「荷蘭法」只需數邏輯資料檔數量,一個熟悉系統的工程師就能做粗估,不需要證照。

Q4:功能點在敏捷開發裡還有意義嗎?
有。Nesma 官網現在的定位就是敏捷功能性規模量測;COSMIC 更是設計成能從 user story 直接量測。功能點在敏捷裡的角色是「跨團隊可比的客觀規模」,補 story point 無法對外比較的短板。

Q5:功能點跟程式碼行數(LOC)差在哪?
行數受語言、寫法、工程師習慣影響很大,用它當生產力指標等於獎勵寫囉唆的 code。功能點量的是「對使用者呈現的功能量」,跟實作語言無關,所以能公平比較不同技術棧的專案。

🔗 延伸資源

author
陳彥彤

AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

support

覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

related

相關文章

[工程實作] · 19min
我怎麼把別人的 skill 吸進自己產線,做成更強的 skill:一次語意標註實作覆盤
看到好用的 skill,大部分人裝來用;如果你有自己的產線,更值錢的做法是拆它的零件焊進你的流程。我原本有一套截圖審查+手冊產線(/screenshot-review),但手冊圖是「乾圖」沒有圖上標註——這正是 app-screenshots 的 annotate.js 補得上的洞。本文覆盤:我怎麼把它拆進產線,過程撞到一個架構級的坑(標註截不進圖=OVERLAY GONE:agent-browser 每個 CLI 指令是獨立 CDP 呼叫,eval 注入的 overlay 下一指令就蒸發),查根因、用 batch 把 open→eval→screenshot 綁進同一 session 解掉、封裝成 annotate-shot.sh、寫回自己的 skill。全程真的跑真的驗,附 batch 解法的真實成果圖與踩坑總表。
[工程實作] · 14min
我想要一個自己的後端:用 AI 協作把 Cloudflare Workers 免費方案架起來(附免費額度怎麼算)
想在純靜態部落格旁加一個「自己的後端」——能存資料、能驗身分,又不想養 server、不想付月費。最後選了 Cloudflare Workers + D1,全程用 AI 協作從零架到線上。這篇只記三件事:怎麼一個下午搭好骨架並部署、workerd 沒有 Node 怎麼用 WebCrypto 手刻密碼與 JWT、以及最實用的——Cloudflare 免費方案額度怎麼算、什麼時候撞牆(Workers 每天 10 萬請求、D1 每天讀 500 萬列寫 10 萬列、5GB 儲存)。
[工程實作] · 21min
Claude Code Teams Plugin 為什麼不會自動更新?根因 + 3 步修法
Claude Code Teams Plugin 永遠不更新的根因:version string 兩端相等。3 步修法:git SHA 比對 + GitHub Action 自動 bump + Managed Settings 推 SessionStart hook,session 啟動自動拉最新。