程式規格書(Program Specification Document)範本

版本:1.0
參照標準:IEEE 1016-2009、ISO/IEC/IEEE 12207:2017、ISO/IEC 8631:1989
適用對象:系統分析師(SA)、開發工程師、委外/外包開發廠商
文件性質:單一程式/批次工作之詳細規格文件,作為程式撰寫與驗收的直接藍圖


📋 使用說明

程式規格書是以「單一程式或批次工作」為撰寫單位的實作藍圖,將 TSD(技術規格文件)的模組/服務層級設計,進一步展開為可直接編碼的輸入輸出欄位、處理邏輯、畫面或報表版面與錯誤代碼。相較於 TSD 偏重物件導向的類別/方法設計,程式規格書更貼近傳統主機、批次、報表與轉檔程式的撰寫方式。

何時使用本範本

  • 批次程式(Batch Job):日結、月結、對帳、資料清算等排程程式
  • 報表程式:產出固定版面報表、對外申報檔案
  • 介面轉檔程式:與外部系統的檔案交換、資料匯入匯出
  • 委外/外包開發:需要逐支程式驗收,規格必須避免「口頭補充」
  • 任何需要精確定義輸入輸出欄位與處理邏輯、無法僅以 TSD 類別設計涵蓋的程式

與其他文件的關係

SDD(如何設計整體架構) → TSD(模組/服務層級技術規格) → 程式規格書(單一程式的實作藍圖) → Source Code
      ↑                        ↑                              ↑                              ↑
    架構師                    開發工程師                  SA / 開發工程師                    開發工程師
  • TSD 定義模組內的類別、方法、演算法與資料結構,適合物件導向、微服務式的系統設計
  • 程式規格書 則是「向下再展開一層」:把 TSD 的設計具體落實到單一程式的輸入來源、輸出目的、逐步處理邏輯與例外情境,讓程式撰寫者(含委外廠商)不需回頭詢問即可完成編碼
  • 兩者可搭配使用:物件導向服務層級用 TSD;批次/報表/轉檔類程式或委外驗收則另補程式規格書

填寫原則

  1. 輸入輸出明確:每個欄位都需標註型別、長度、必要性與驗證規則,不可只用文字概略描述
  2. 處理邏輯可執行:流程敘述與虛擬碼需精確到可直接轉換為程式碼,邏輯表示法建議依循 ISO/IEC 8631 的慣例(結構化流程圖/虛擬碼),避免撰寫者各自發明符號
  3. 正常與異常並重:正常流程之外,需完整列出所有已知的例外情境與對應處理、錯誤代碼
  4. 可獨立驗收:規格本身應足以作為驗收依據,尤其用於委外開發時

📄 範本正文


[程式代號/程式名稱] 程式規格書

1. 文件資訊

項目內容
文件編號PSD-[專案代碼]-[程式代碼]-[序號]
版本v0.1
建立日期YYYY-MM-DD
最後更新YYYY-MM-DD
撰寫者[SA / 開發工程師姓名]
審核者[技術主管 / 架構師]
狀態草稿 / 審查中 / 已核准

版本歷程

版本日期修改人修改內容摘要
v0.1YYYY-MM-DD[姓名]初版建立

關聯文件

文件名稱文件編號版本關聯性
技術規格文件(TSD)TSD-XXX-001v1.0所屬模組技術設計
系統設計文件(SDD)SDD-XXX-001v1.0系統架構來源

2. 程式基本資訊

項目內容
程式代號[如 BATCH-CUST-RECON-001]
程式名稱[程式中文名稱]
程式類型Online(線上)/ Batch(批次)/ Report(報表)/ Interface(介面轉檔)
所屬系統/模組[系統名稱]
觸發方式排程(Cron)/ 人工執行 / 事件觸發 / API 呼叫
執行排程[如:每月最後一個工作日 02:00]
前置程式[執行前必須先完成的程式代號,無則填「無」]
後續程式[本程式完成後接續執行的程式代號,無則填「無」]
預估工時[人天]

3. 功能說明

3.1 程式目的

一句話說明本程式解決什麼問題、為何需要。

3.2 功能摘要

  • [功能 1 描述]
  • [功能 2 描述]
  • [功能 3 描述]

3.3 使用者/呼叫端

呼叫來源說明
[排程系統 / 上游程式 / 使用者角色][呼叫情境說明]

4. 輸入規格

4.1 輸入來源

來源類型來源名稱說明
資料表[TABLE_NAME][用途]
檔案[檔名格式,如 CUST_YYYYMMDD.csv][來源系統、傳輸方式]
API / 訊息佇列[端點/Topic 名稱][呼叫方式]

4.2 輸入欄位定義

欄位名稱型別長度必要驗證規則說明
[FIELD_NAME]VARCHAR/NUMERIC/DATE[長度]✅/❌[規則][說明]

5. 輸出規格

5.1 輸出目的

目的類型目的名稱說明
資料表[TABLE_NAME][用途]
檔案[檔名格式][下游系統、傳輸方式]
報表[報表名稱/編號][用途、送達對象]

5.2 輸出欄位定義

欄位名稱型別長度來源/計算方式說明
[FIELD_NAME]VARCHAR/NUMERIC/DATE[長度][公式或來源欄位][說明]

5.3 輸出檔案/報表格式範例

[以固定寬度或分隔符號範例呈現實際輸出格式,供程式撰寫者比對]

6. 處理邏輯

6.1 前置條件

  • [執行前必須滿足的條件,如:昨日批次已成功結案]

6.2 處理流程

1. [步驟一:讀取輸入資料]
2. [步驟二:資料驗證]
   └─ 驗證失敗 → [處理方式,如寫入例外檔]
3. [步驟三:核心運算/轉換邏輯]
4. [步驟四:寫入輸出]
5. [步驟五:異動稽核記錄]

6.3 虛擬碼(Pseudocode)

依 ISO/IEC 8631 結構化虛擬碼慣例撰寫,需可直接轉換為程式碼。

function processProgram(inputRecords):
    validRecords = []
    errorRecords = []

    for each record in inputRecords:
        if not isValid(record):
            errorRecords.append(record)
            continue
        transformed = applyBusinessRule(record)
        validRecords.append(transformed)

    writeOutput(validRecords)
    if errorRecords is not empty:
        writeErrorReport(errorRecords)

    return { processedCount: len(validRecords), errorCount: len(errorRecords) }

6.4 業務規則與計算公式

規則編號規則描述公式/邏輯
BR-001[規則名稱][計算公式或條件邏輯]

7. 畫面/報表版面配置

若為 Online 程式,附畫面欄位配置圖;若為 Report 程式,附版面配置圖。無適用情境者填「不適用」。

[版面配置示意,可用文字方塊或表格標示欄位位置]

8. 資料庫/檔案存取設計

8.1 存取資料表清單

資料表名稱存取方式說明
[TABLE_NAME]讀取 / 寫入 / 更新 / 刪除[用途]

8.2 主要查詢/處理邏輯摘要

-- 摘要說明核心 SQL 邏輯,非完整程式碼
SELECT ...
FROM ...
WHERE ...

8.3 交易控制

項目說明
交易範圍[單筆 Commit / 批次 Commit,如每 1000 筆 Commit 一次]
交易失敗處理[Rollback 策略]

9. 錯誤處理與訊息代碼

錯誤代碼錯誤情境處理方式是否中斷程式
[E-XXX][情境描述][記錄例外檔 / 通知 / 略過]是/否

10. 效能與作業排程考量

項目內容
預估資料量[如:日均 5 萬筆,月結尖峰 200 萬筆]
執行時間限制[如:需於 03:00 前完成,避免影響營業時間]
Rerun / Restart 機制[是否支援斷點續跑、重複執行是否具冪等性]
相依排程[與前後程式的排程相依關係]

11. 測試要點

11.1 測試案例摘要

測試案例 ID測試場景預期結果
TC-001正常資料處理輸出筆數與輸入相符,無例外記錄
TC-002輸入含不合法資料該筆寫入例外檔,其餘正常處理
TC-003輸入為空程式正常結束,不產生輸出檔

11.2 邊界值與驗收標準

  • [邊界值情境,如:金額為 0、日期為月底、資料量為單一極大批次]
  • 驗收標準:[如:連續 3 次執行結果一致、效能符合第 10 節限制]

12. 附錄

12.1 呼叫關係圖

[前置程式] → [本程式] → [後續程式]

12.2 特殊注意事項

  • [如:本程式涉及個資欄位需遮罩記錄於日誌]

範例:客戶月結對帳批次程式(BATCH-CUST-RECON-001)

程式基本資訊

項目內容
程式代號BATCH-CUST-RECON-001
程式名稱客戶月結對帳批次程式
程式類型Batch
觸發方式排程(Cron)
執行排程每月最後一個工作日 02:00
前置程式BATCH-ORDER-CLOSE-001(訂單月結批次)
後續程式RPT-CUST-STATEMENT-001(客戶對帳單報表)

輸入欄位定義(節錄)

欄位名稱型別長度必要驗證規則說明
CUSTOMER_IDVARCHAR20需存在於 CUSTOMER 主檔客戶編號
ORDER_DATEDATE-需介於結算月份區間訂單日期
TOTAL_AMOUNTDECIMAL(15,2)-≥ 0訂單金額

處理流程

1. 讀取結算月份區間內的 CUSTOMER_ORDER 資料
2. 依 CUSTOMER_ID 分組加總 TOTAL_AMOUNT
3. 比對客戶帳戶餘額(CUSTOMER_BALANCE)
   └─ 差異超過容許誤差(NT$1)→ 寫入差異明細表 RECON_EXCEPTION
4. 產出對帳結果至 CUSTOMER_RECON_RESULT
5. 寫入批次執行日誌(含處理筆數、差異筆數)

錯誤代碼(節錄)

錯誤代碼錯誤情境處理方式是否中斷程式
E-RECON-001客戶編號不存在於主檔記錄至 RECON_EXCEPTION,繼續處理下一筆
E-RECON-002對帳金額差異超過容許誤差記錄至 RECON_EXCEPTION,發送告警通知
E-RECON-099資料庫連線失敗記錄錯誤日誌並中止程式,等待重跑

效能與作業排程考量

項目內容
預估資料量月均 200 萬筆訂單資料
執行時間限制需於 03:00 前完成,避免影響 03:30 報表批次
Rerun 機制具冪等性,可依結算月份重複執行且結果一致

📌 填寫提醒

  1. 程式規格書應由 SA 或資深開發工程師撰寫,技術主管審查後方可交付撰碼
  2. 輸入輸出欄位定義須與實際資料表/檔案結構一致,避免與 TSD、SDD 內容衝突
  3. 委外開發時,本文件為驗收依據,內容須完整、不可有「口頭補充」的隱含規則
  4. 處理邏輯章節的虛擬碼須可直接轉換為程式碼,避免僅有文字概述
  5. 程式異動時應同步更新本文件,保持與實際程式邏輯一致