TRR-001 測試結果報告
| 項目 |
內容 |
| 文件編號 |
TRR-001 |
| 版本 |
2.1 |
| 測試日期 |
2026-10-01(第 2 輪;第 1 輪 2026-09-19) |
| 對應計畫 |
TRP-001(本版依 TRP-001 §7 之 6 項要求重構,見 §9) |
| 測試範圍 |
17 個領域服務 + 8 個平台模組 + WebUI 26 頁(第 1 輪僅 2 服務 + 前端) |
| 測試環境 |
本機單機(Docker 容器 12 個 + 本地服務) |
| 結果摘要 |
通過(單元測試 836 測 0 失敗;品質關卡見 §7);⚠️ 效能與一致性測試尚未執行(§5),準出未達成(§0.3) |
去識別化聲明:本報告依專案規範,客戶名稱一律以代稱表示(BEAM/迪艾克斯),不含任何可識別客戶之資訊。
⚠️ 本版之證據性質(必讀):本報告區分兩類結果——
(A) 本輪(2026-10-01)實際重跑:§0.2 之單元測試、§7 之品質關卡;
(B) 引用既有真機實測紀錄:§2 之各服務劇本,來源為 HANDOVER §3.A 之 #A-xx
(每列均附證據編號)。(B) 不是本輪重跑——不得當作「本次驗證」讀。
0. 執行摘要(TRP-001 §7-1)
0.1 通過/失敗/跳過數
| 項目 |
數量 |
說明 |
| 單元/整合測試(自動) |
836 |
失敗 0、錯誤 0、略過 0(本輪重跑) |
| 真機端到端劇本(引用) |
見 §2 |
依服務分節,附 #A-xx 證據 |
| 前端頁面實測 |
26 頁已實作 |
其中 多數具真實瀏覽器實測證據(docs/08-evidence/ 40 張) |
| 品質關卡 |
6 項 |
5 項通過、1 項待裁定(§7) |
0.2 自動化測試(本輪重跑,逐模組)
| 模組 |
測 |
失 |
錯 |
略 |
platform/common-spring |
95 |
0 |
0 |
0 |
platform/common-domain |
55 |
0 |
0 |
0 |
platform/common-security |
51 |
0 |
0 |
0 |
platform/common-saga |
23 |
0 |
0 |
0 |
platform/common-event |
18 |
0 |
0 |
0 |
platform/api-gateway |
18 |
0 |
0 |
0 |
platform/bff-web |
12 |
0 |
0 |
0 |
platform/common-batch |
3 |
0 |
0 |
0 |
services/card-service |
85 |
0 |
0 |
0 |
services/rewards-service |
72 |
0 |
0 |
0 |
services/pricing-service |
53 |
0 |
0 |
0 |
services/authorization-service |
42 |
0 |
0 |
0 |
services/installment-service |
38 |
0 |
0 |
0 |
services/payment-service |
36 |
0 |
0 |
0 |
services/notification-service |
35 |
0 |
0 |
0 |
services/statement-service |
29 |
0 |
0 |
0 |
services/merchant-service |
27 |
0 |
0 |
0 |
services/posting-service |
27 |
0 |
0 |
0 |
services/clearing-service |
24 |
0 |
0 |
0 |
services/dispute-service |
19 |
0 |
0 |
0 |
services/party-service |
19 |
0 |
0 |
0 |
services/product-service |
18 |
0 |
0 |
0 |
services/migration-service |
17 |
0 |
0 |
0 |
services/report-service |
16 |
0 |
0 |
0 |
services/limit-service |
4 |
0 |
0 |
0 |
| 合計 |
836 |
0 |
0 |
0 |
領域服務 561 測 / 平台模組 275 測。
0.3 ★ 準出達成度(對照 TRP-001 §6.2 之 8 項)
| # |
準出條件 |
狀態 |
說明 |
| 1 |
單元測試行覆蓋 ≥ 80%、分支 ≥ 70%、Mutation ≥ 75% |
⚪ 未量測
|
專案未產出覆蓋率/Mutation 報告(無 JaCoCo/PIT 設定)。不得以「測試數多」推論覆蓋率
|
| 2 |
禁止模式掃描(scaffold/mockdata/faketest)0 命中 |
✅ 達成
|
本輪重跑:3 支掃描器皆 0 命中(§7) |
| 3 |
68 項 FR 功能劇本全部 Pass |
🟡 部分
|
53 項程式承作類已交付並有真機實測(§2);15 項 R0 流程/文件類不產生程式碼,由 TRP-001/BRD-001 承作 |
| 4 |
17 項 POC 驗收全部 Pass |
🟡 部分
|
12 ✅/4 🟡/1 ⚪=82.4%(HANDOVER §1.2) |
| 5 |
效能達標:授權 P95 ≤ 500ms、iECS ≥ 1,000 TPS、BASE24-mas > 2,000 TPS |
⚪ 未執行
|
無效能測試(§5)——SoW 門檻尚無任何實測數據
|
| 6 |
引擎一致率 ≥ 99.99%、差異率 < 0.01%、A 類差異 0、批次金額差異 0 |
⚪ 未執行
|
需與 Legacy ECS 並行比對;Legacy 資料源未接入(SCS-015 §5.1) |
| 7 |
安全掃描無高/嚴重漏洞;個資遮蔽經滲透驗證 |
⚪ 未執行
|
未做安全掃描與滲透測試;僅個資保護機制經實測(KeyProvider,#A-24~#A-26) |
| 8 |
TRR-001 記載完整劇本、資料、缺陷狀態 |
✅ 本版達成
|
第 1 輪不符(缺 4 項,見 §9);本版首度符合 TRP-001 §7
|
結論:8 項中僅 2 項完全達成。不得因單元測試全綠而宣稱「測試完成」——
效能量測、一致性比對、安全掃描三項從未執行,且第 1 項(覆蓋率)從未量測。
1. 測試環境
| 項目 |
版本/內容 |
| 資料庫(權威 OLTP) |
Oracle Database 26ai Free 23.26.0.0(PDB FREEPDB1) |
| 資料庫(CQRS 讀模型/事件流) |
PostgreSQL 18.6 |
| 訊息 |
Kafka 4.3.1(KRaft)+ Kafka UI |
| 快取 |
Redis 8.8.2 |
| 物件儲存 |
Garage v2.4.1(S3 相容;2026-10-01 新增,#A-106/#A-107) |
| 身分驗證 |
Keycloak 26.4(realm cardcore;SCS-022) |
| 可觀測性 |
OTel Collector 0.161.0 + Jaeger 1.76.0 + Prometheus 3.14.0 + Grafana 12.4.11 + Loki 3.7.8 |
| 執行環境 |
Java 21.0.12.1 / Spring Boot 4.1.1 / Spring Cloud 2025.1.3 / Gradle 9.7.1 |
| 前端 |
React 18 + Vite 5 + TypeScript 5(strict) |
| 容器 |
Docker Compose(ops/local/docker-compose.yml),12 個容器
|
服務埠號
| 服務 |
埠 |
服務 |
埠 |
| authorization-service |
8081 |
statement-service |
8092 |
| card-service |
8082 |
dispute-service |
8093 |
| limit-service |
8083 |
clearing-service |
8094 |
| party-service |
8084 |
merchant-service |
8095 |
| product-service |
8085 |
migration-service |
8096 |
| pricing-service |
8086 |
notification-service |
8097 |
| posting-service |
8087 |
report-service |
8098 |
| payment-service |
8088 |
api-gateway |
8100 |
| installment-service |
8089 |
bff-web |
8101 |
| rewards-service |
8091 |
cardcore-web(Vite) |
5173 |
2. 測試劇本清單(TRP-001 §7-2)
⚠️ 證據性質:本節之「結果」為引用 HANDOVER §3.A 之真機實測紀錄(附 #A-xx),
非本輪重跑。劇本 ID 規則:TR-<服務縮寫>-NN。
「關聯」欄之 FR/POC 對應取自 GOV-004 §3/§4(權威追溯矩陣)。
2.1 authorization-service(8081)
關聯 FR:AUT-1.1/AUT-1.2/AUT-1.3 | POC:13(收單授權分流)、15(國際組織 compliance)、17(瞬間大量交易)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-AUTH-01 |
正常卡、額度充足 |
APPROVED / 00
|
✅ |
TRR 1.0 T-01 |
| TR-AUTH-02 |
額度不足 |
DECLINED / 51 LIMIT
|
✅ |
TRR 1.0 T-02 |
| TR-AUTH-03 |
鎖卡 |
DECLINED / 51 CARD_STATUS
|
✅ |
TRR 1.0 T-03 |
| TR-AUTH-04 |
13 項檢核(6 已實作) |
6 項如實回報、其餘標「未實作」不造假通過
|
✅ |
TRR 1.0 T-04/§5 L-1 |
| TR-AUTH-05 |
Stand-in 降級閉環(停額度服務) |
不停機/STANDIN/flag=1/恢復後補送/pending=0
|
✅ |
TRR 1.0 T-12~T-15 |
| TR-AUTH-06 |
沖正(FULL/重複沖正) |
對稱釋放;重複沖正回 CC-AUTH-3002
|
✅ |
#A-96/#A-97;截圖 webui-reversal-02
|
| TR-AUTH-07 |
授權策略檢核明細 |
檢核結果可查 |
✅ |
#A-95/#A-97;截圖 webui-policy-01
|
| TR-AUTH-08 |
稽核軌跡查詢(統一時間軸) |
OVERRIDE/REVERSAL 合併排序;actor 對沖正如實 null
|
✅ |
#A-102 |
| TR-AUTH-09 |
服務間 ACL(呼叫者身分) |
不符 SAD-002 §5 即 403
|
✅ |
#A-63/#A-64
|
| TR-AUTH-10 |
認證 fail-closed |
無 token → 401(17/17 服務) |
✅ |
#A-36/#A-41
|
2.2 limit-service(8083)
關聯 FR:ISS-2.4 | POC:8(專用額度)、14(授權額度更新)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-LIM-01 |
查詢永久額度 |
可用 = 10,000,000 分 |
✅ |
TRR 1.0 T-07 |
| TR-LIM-02 |
臨時額度僅於有效期計入 |
100,000 + 50,000 = 150,000 |
✅ |
TRR 1.0 T-08 |
| TR-LIM-03 |
建立佔用/釋放 |
9,700,000 → 10,000,000 |
✅ |
TRR 1.0 T-09/T-10 |
| TR-LIM-04 |
佔用超過可用 |
拒絕 CC-LIM-1001,不寫入佔用
|
✅ |
TRR 1.0 T-11 |
| TR-LIM-05 |
專用額度查詢端點 |
4 端點;⚠️ SPECIAL apply 之資料模型待裁定 |
✅ |
#A-75 |
| TR-LIM-06 |
額度控管頁(兩維度並列) |
查詢+建立佔用+釋放 |
✅ |
截圖 webui-limit-01/-02
|
2.3 card-service(8082)
關聯 FR:ISS-2.2/DEB-3.1 | POC:6(信用卡快發快綁)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-CARD-01 |
發卡/快發快綁/Token 綁定(補齊 5 端點) |
12 情境全數符合 |
✅ |
#A-37 |
| TR-CARD-02 |
bindPlatform 真正建立 Token |
不再只寫日誌 |
✅ |
#A-39 |
| TR-CARD-03 |
卡號加密(KeyProvider) |
Oracle 密文往返 |
✅ |
#A-24~#A-26
|
| TR-CARD-04 |
卡片生命週期/Token 頁 |
兩維度並列;同卡兩端點兩套錯誤碼(4040 vs 3001)如實 |
✅ |
截圖 webui-lifecycle-02/webui-token-01
|
| TR-CARD-05 |
CR-020 四項缺陷修根因 |
解鎖後 blockCode 與 status 同步;無來源案件開卡遭拒 CC-CARD-1002
|
✅ |
#A-92;截圖 webui-cr020-01~-03
|
| TR-CARD-06 |
ticketType 補 DDL 並持久化 |
契約與 DDL 一致 |
✅ |
#A-42/#A-51
|
| TR-CARD-07 |
進件作業台(受理→送徵信→核准) |
全鏈路;徵審未接上時顯示「轉人工核決」而非核准(fail-closed)
|
✅ |
#A-52;截圖 webui-applications-03
|
| TR-CARD-08 |
外部徵審介面(SCS-025) |
我方建議版;未接上時 fail-closed 回 REFER
|
🟡 |
#A-48(客戶規格未定) |
2.4 party-service(8084)
關聯 FR:ISS-2.1 | POC:10(市區停車)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-PTY-01 |
持卡人/歸戶查詢(4 端點) |
冪等 201/200/409 |
✅ |
#A-11 |
| TR-PTY-02 |
管制碼(block_code) |
設定後授權即時拒絕 |
✅ |
#A-10 |
| TR-PTY-03 |
個資加密(首個接 KeyProvider 之服務) |
Oracle 密文往返 |
✅ |
#A-24~#A-26
|
2.5 product-service(8085)
關聯 FR:COM-6.1/COM-6.2
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-PRD-01 |
產品 CRUD(5 端點) |
真機 e2e 通過 |
✅ |
#A-76 |
| TR-PRD-02 |
參數版本化(熱更新) |
版本鏈正確;重疊回錯誤 |
✅ |
#A-76;截圖 webui-parameters-01
|
| TR-PRD-03 |
產品與費率設定頁 |
建立產品、狀態僅顯示 |
✅ |
截圖 webui-product-01
|
2.6 posting-service(8087)
關聯 FR:ACQ-4.5/ISS-2.3/ISS-2.12/DEB-3.2/DEB-3.5 | POC:9(錯帳沖正、重覆入帳防範)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-POST-01 |
入帳+沖正+重複偵測 |
沖正、重複偵測皆正確 |
✅ |
#A-12 |
| TR-POST-02 |
計息串接(pricing) |
本金 67,845 × 18.5% × 30/365 = 1,032 分入 INTEREST;重送不重複;pricing 掛掉 → 503 CC-PLT-5005 且未入帳(無 fail-open)
|
✅ |
#A-31 |
| TR-POST-03 |
交易期間過濾(P0 修復) |
(上期結帳日, 本期結帳日] 半開區間;不再每期重複計收
|
✅ |
#A-33 |
| TR-POST-04 |
Round-off/幣別一致性(三方) |
1,066 = 1,066 = 1,066 |
✅ |
#A-78 |
| TR-POST-05 |
UNMATCHED 產生者(逾三日批次) |
逾時者轉換;未逾時者不動
|
✅ |
#A-79;⚠️ 見 §4 DEF-06(時間炸彈測試)
|
2.7 payment-service(8088)
關聯 FR:ISS-2.6/ISS-2.9 | POC:11(繳款即時恢復額度)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-PAY-01 |
繳款分配不變式 |
10,000 分配正確 |
✅ |
#A-14 |
| TR-PAY-02 |
繳款即時恢復額度 |
額度回復 |
✅ |
#A-14 |
| TR-PAY-03 |
未匹配繳款逾時轉換 |
逾時者轉 UNMATCHED 並重新佔額;未逾時者不動 |
✅(測試於 2026-10-01 修復,見 §4 DEF-06) |
單測 |
2.8 pricing-service(8086)
關聯 FR:ISS-2.5/DEB-3.3 | POC:1(利息 & 違約金計算及查詢)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-PRC-01 |
利息/費用/違約金(3 端點) |
利息 796、費用 5 筆、違約金夾擠 3 期、預借現金拆分;7 項錯誤路徑皆 4xx、0 筆 ERROR
|
✅ |
#A-28 |
| TR-PRC-02 |
規則選取維度(TX_TYPE) |
TIER 挪用解除,回歸客層本義 |
✅ |
#A-77 |
2.9 installment-service(8089)
關聯 FR:ISS-2.7 | POC:5(分期)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-INST-01 |
建立分期與攤還表 |
1,000.00/3 期 → 333.33/333.33/333.34(尾差末期吸收);剩餘本金收斂 0.00 |
✅ |
#A-67 |
| TR-INST-02 |
提前結清 |
EARLY → PRE_CLOSED;DB remaining_periods=0
|
✅ |
#A-67 |
| TR-INST-03 |
雙軸(channel_type × business_type) |
通路 7 值/業務型態 3 值+「不指定」;空值顯示「未記錄」 |
✅ |
#A-60/#A-67
|
| TR-INST-04 |
總約未簽署 |
CC-INS-1002 |
✅ |
#A-67 |
| TR-INST-05 |
真實瀏覽器 + Keycloak 登入 |
7 情境全數成立 |
✅ |
#A-67;截圖 5 張 |
2.10 rewards-service(8091)
關聯 FR:RWD-5.1/RWD-5.2/RWD-5.3 | POC:2(點數)、4(ONLINE REDEEM)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-RWD-01 |
三層點數(帳戶/到期桶/明細) |
三層皆可查 |
✅ |
#A-16;截圖 webui-rewards-01
|
| TR-RWD-02 |
兌換後自動重查 |
即時反映新餘額(非讀快取) |
✅ |
截圖 webui-rewards-02
|
| TR-RWD-03 |
併發兌換 |
6 筆併發無遺失更新
|
✅ |
#A-16 |
| TR-RWD-04 |
兌換雙欄位(標的類別 × 折抵方式) |
「點數+現金換哩程」兩者並存 |
✅ |
#A-70 |
| TR-RWD-05 |
現金價值由折算率計算 |
CASH_VALUE 不再恆 0 |
✅ |
#A-72 |
| TR-RWD-06 |
驗證層次對齊(分層並存) |
控制器層管形狀→平台碼;應用層管語意→服務碼 |
✅ |
#A-58(55 測 0 失敗) |
2.11 statement-service(8092)
關聯 FR:ISS-2.8 | POC:16(帳單批次執行)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-STM-01 |
結帳公式 |
new_balance 43,455 正確 |
✅ |
#A-13 |
| TR-STM-02 |
結帳前觸發計息 |
計息先於結帳 |
✅ |
#A-32 |
| TR-STM-03 |
帳單環境重建(10/11 月) |
10 月 new_balance 57,898 → 70,243;11 月 prev_balance = 70,243;明細各期互斥
|
✅ |
#A-61 |
| TR-STM-04 |
計息幣別與帳單同源 |
非 TWD 帳戶不再「以 TWD 入息、帳單標他幣」 |
✅ |
#A-78 |
| TR-STM-05 |
批次清單端點 |
GET /statement-runs?limit=N 200/5 筆 |
✅ |
#A-104 |
| TR-STM-06 |
帳單 PDF(PDF_REF) |
⚠️ 未實作(產生器需額外函式庫) |
⚪ |
SCS-011 §10 |
2.12 clearing-service(8094)
關聯 FR:ACQ-4.6/ISS-2.13/DEB-3.6 | POC:3(收單)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-CLR-01 |
清算執行/對帳查詢/結算(3 端點) |
3 端點 e2e 通過 |
✅ |
#A-81 |
| TR-CLR-02 |
差異判定 |
DIFFERENCE 如實;差異未歸零不得結案
|
✅ |
#A-81;截圖 webui-clearing-01
|
| TR-CLR-03 |
清算執行清單端點 |
200/2 筆;如實回 createdAt/updatedAt(無 startedAt 欄位,不臆造)
|
✅ |
#A-104 |
2.13 dispute-service(8093)
關聯 FR:⚠️ GOV-004 §3 未列本服務(見 §6 U-01) | POC:3(收單,部分)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-DSP-01 |
爭議受理/查詢/扣款仲裁(3 端點) |
3 端點 e2e 通過 |
✅ |
#A-82 |
| TR-DSP-02 |
雙軸拆分(DISPUTE_REASON × WORKFLOW_STAGE) |
兩軸分列 |
✅ |
#A-82;截圖 webui-dispute-01
|
| TR-DSP-03 |
跳號 |
如實回 CC-DSP-3001
|
✅ |
#A-86 |
| TR-DSP-04 |
拒付時限與舉證規範 |
⚠️ 真阻塞(卡組織文件未提供) |
⛔ |
§3.D D-1 |
2.14 merchant-service(8095)
關聯 FR:ACQ-4.1/ACQ-4.2/ACQ-4.3 | POC:3(收單)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-MCH-01 |
商戶建檔/查詢/請款(3 端點) |
e2e 通過;請款淨額 9,790 元
|
✅ |
#A-80/#A-87
|
| TR-MCH-02 |
雙軸拆分(商店型態 × 業別) |
兩軸分列 |
✅ |
#A-80;截圖 webui-merchant-01
|
| TR-MCH-03 |
merchantId 語意(對外即業務代碼) |
往返回查 200(修正前 404) |
✅ |
#A-88 |
| TR-MCH-04 |
收單帳戶金鑰管理(KMC) |
⚠️ HSM/KMS 未提供;KeyProvider 機制已就緒 |
🟡 |
§3.D D-5/§3.E W-1
|
2.15 migration-service(8096)
關聯 FR:SYS-2.8/SYS-3 | POC:12(系統功能,部分)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-MIG-01 |
遷移作業受理/舊帳查詢(2 端點) |
兩層 WAVE+JOB
|
✅ |
#A-84 |
| TR-MIG-02 |
試跑(dryRun) |
僅計數、不變更任何列
|
✅ |
截圖 webui-migration-01
|
| TR-MIG-03 |
遷移作業清單端點 |
200/3 筆;jobNo/waveCode/dryRun 正確 |
✅ |
#A-104 |
| TR-MIG-04 |
帳務資料搬移 |
⚠️ 舊系統資料源未接入 → 不搬移任何帳務資料(計數為「對映處理數」) |
⛔ |
SCS-015 §5.1 |
2.16 notification-service(8097)
關聯 FR:ISS-2.10 | POC:7(消費通知)
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-NOTIF-01 |
通知發送/查詢(2 端點) |
通道抽象先行(本地 Log 通道 stand-in) |
✅ |
#A-85 |
| TR-NOTIF-02 |
實際發送通道 |
⚠️ 真阻塞(簡訊/Email/推播供應商未定) |
⛔ |
§3.D D-3 |
2.17 report-service(8098)
關聯 FR:SYS-1/ACQ-4.4/ISS-2.11/DEB-3.4
| 劇本 ID |
情境 |
預期 |
結果 |
證據 |
| TR-RPT-01 |
報表作業受理/查詢(2 端點) |
非同步;QUEUED → COMPLETED
|
✅ |
#A-83 |
| TR-RPT-02 |
CQRS 讀模型(Oracle → Postgres 投影) |
讀側首例;投影追趕 |
✅ |
#A-83 |
| TR-RPT-03 |
XLSX/PDF 未支援 |
作業 FAILED 並載明原因(不產空檔) |
✅ |
#A-83;截圖 webui-reports-01
|
| TR-RPT-04 |
報表作業清單端點 |
200/4 筆 |
✅ |
#A-104 |
| TR-RPT-05 |
輸出改走物件儲存 |
DOWNLOAD_URL 存物件鍵;物件確實可自 Garage 取回;本機不留檔
|
✅ |
#A-107(本輪) |
| TR-RPT-06 |
報表檔案下載(代理端點) |
200 且內容與物件逐位元組一致;QUEUED→409、不存在→404 |
✅ |
#A-109(本輪) |
2.18 平台模組(8 個)
| 劇本 ID |
模組 |
情境 |
結果 |
證據 |
| TR-PLT-01 |
api-gateway |
路由(17 服務)+ Redis 限流 + 分流熱更新 |
✅ |
#A-73 |
| TR-PLT-02 |
api-gateway |
唯讀路由端點(/api/v1/gateway/routes) |
✅ |
#A-103 |
| TR-PLT-03 |
bff-web |
三域聚合 + token-relay 端到端 |
✅ |
#A-74 |
| TR-PLT-04 |
bff-web |
健康聚合(並行探測;SecurityContext 傳遞) |
✅ |
#A-101 |
| TR-PLT-05 |
bff-web |
批次聚合(四服務;DIFFERENCE→WARNING 非 SUCCEEDED) |
✅ |
#A-104 |
| TR-PLT-06 |
common-spring |
全域例外處理(7 handler、9 例外型別) |
✅ |
#A-22/#A-23
|
| TR-PLT-07 |
common-security |
KeyProvider 機制化(生產 profile 拒絕啟動) |
✅ |
#A-24~#A-26
|
| TR-PLT-08 |
全平台 |
服務間出站憑證(client_credentials) |
✅ |
#A-62 |
| TR-PLT-09 |
全平台 |
服務對服務 ACL(不符即 403) |
✅ |
#A-64 |
| TR-PLT-10 |
全模組 |
監控三支柱(19/19 模組) |
✅ |
#A-27/#A-38
|
2.19 WebUI(26 頁)
| 劇本 ID |
項目 |
結果 |
證據 |
| TR-UI-01 |
26 頁已實作(側欄/路由/頁首同源) |
✅ |
HANDOVER §2.3 |
| TR-UI-02 |
TypeScript 型別檢查 |
✅ 0 錯誤(本輪重跑) |
§7 |
| TR-UI-03 |
正式建置 |
✅ vite build 成功(392.69 kB) |
本輪 |
| TR-UI-04 |
真實瀏覽器實測 |
🟡 多數頁有截圖證據(40 張);非全部
|
docs/08-evidence/README.md |
| TR-UI-05 |
SSO 啟用後帶 token 操作 |
✅ |
截圖 webui-applications-05
|
3. 測試資料清單(TRP-001 §7-3)
| # |
資料集 |
來源 |
遮蔽狀態 |
用途 |
| DS-1 |
持卡人/歸戶/卡片/額度 |
SQL 種子寫入真實 Oracle(非程式內建假資料) |
測試資料,無真實個資
|
TR-AUTH/TR-PTY/TR-CARD |
| DS-2 |
授權交易與檢核結果 |
授權 API 產生 → 落 Oracle CC_AUTH
|
同上 |
TR-AUTH-01~04 |
| DS-3 |
帳單與明細 |
帳單批次產生(#A-61 重建後) |
同上 |
TR-STM-01~04 |
| DS-4 |
分期/攤還表 |
分期 API 產生 |
同上 |
TR-INST-01~04 |
| DS-5 |
點數帳戶/到期桶/異動 |
紅利 API 產生 |
同上 |
TR-RWD-01~05 |
| DS-6 |
清算明細/對帳結果 |
清算 API + 種子 |
同上 |
TR-CLR-01~03 |
| DS-7 |
爭議案件 |
爭議 API 產生 |
同上 |
TR-DSP-01~03 |
| DS-8 |
商店/請款 |
商店 API 產生 |
同上 |
TR-MCH-01~03 |
| DS-9 |
報表讀模型(Postgres rpt) |
Oracle 投影批次 |
同上 |
TR-RPT-02 |
| DS-10 |
遷移對映註冊表 |
種子(LEGACY_ACCOUNT_MAP) |
同上 |
TR-MIG-01~02 |
| DS-11 |
個資加密欄位 |
KeyProvider(本地靜態金鑰) |
密文儲存;金鑰不入版控 |
TR-CARD-03/TR-PTY-03 |
| DS-12 |
Stripe 測試卡(sk_test_) |
客戶提供,置 ~/.config/cardcore/stripe-test.env(repo 之外、權限 600) |
測試金鑰 |
#A-44/#A-55
|
| DS-13 |
物件儲存(報表輸出) |
報表產生 → Garage cardcore-artifacts
|
測試資料 |
TR-RPT-05 |
⚠️ 遮蔽狀態之誠實揭露:本案為本地開發環境,資料全為自建測試資料,
未使用任何客戶真實資料。故「個資遮蔽」在此階段無從驗證——
不得據此宣稱「已通過個資驗證」(TRP-001 §6.2 #7 仍未達成)。
4. 缺陷清單(TRP-001 §7-4)
嚴重度:S1(阻斷/資安)/S2(主要功能)/S3(次要)/S4(介面)。
DEF-01~DEF-05 為第 1 輪既有;DEF-06 為本輪(2026-10-01)新發現。
| DEF-ID |
缺陷 |
嚴重度 |
狀態 |
關聯 |
修復說明 |
| DEF-01 |
Flyway 從未執行(缺 spring-boot-flyway) |
S1 |
✅ 已修 |
全 17 服務 |
補 spring-boot-flyway 依賴;Spring Boot 4 模組化之「靜默不做」型缺陷(無任何錯誤訊息) |
| DEF-02 |
共用例外處理器未註冊(套件掃描範圍) |
S1 |
✅ 已修 |
common-spring |
領域例外噴 500 → 修正掃描範圍,客戶端可取 CC-* 錯誤碼 |
| DEF-03 |
OpenAPI operationId 產生邏輯撞號 |
S3 |
✅ 已修 |
gen_openapi.py |
集合端點與單一資源端點同名 → 修正唯一性 |
| DEF-04 |
SPECIAL_LIMITS 無法充當信用額度(ORA-02290) |
S2 |
✅ 已修 |
limit-service |
CR-001 |
| DEF-05 |
信用額度主檔缺口 |
S2 |
✅ 已修 |
limit-service |
CR-001 |
| DEF-06 |
★ PaymentUnmatchedServiceTest 為「時間炸彈測試」——fixture 用固定日期、受測程式用真實時鐘 |
S2(測試可信度) |
✅ 本輪已修
|
payment-service |
根因:NOW = Instant.parse("2026-09-22T08:00:00Z")(固定),而 PaymentUnmatchedService 以真實 Instant.now() − 3 日 計算 cutoff → 真實日期一過 fixture 3 日,連「剛受理」之候選也變逾時 → transitioned 由 1 變 2 → 斷言必然失敗。實測:2026-09-25 起即紅,惟先前僅逐模組跑測試而未察覺;2026-10-01 首次全量 ./gradlew test 才發現。修法:NOW 改為 Instant.now()(所有 NOW.minus(...) 之相對關係不變)。併載教訓:逐模組跑測試會漏掉「跨模組才暴露」的問題;且**「561 測 0 失敗」之記載在當時即不成立** |
| DEF-07 |
validate_sql 全庫掃描有 5 處違規(全在 db/migration-postgres/V1__rpt_read_model.sql 之 daily_auth_summary:SQL-04 表名非複數 + SQL-05 缺 id/created_at/updated_at/version) |
S3 |
✅ 已結案(#A-109,採 (c)) |
report-service/tools
|
根因=工具適用範圍未界定:該表為 Postgres 讀模型投影表(CQRS 讀側),非 Oracle 權威 OLTP schema;SQL-01~09 係為 Oracle 設計。修法(BEAM PMO 裁定 (c)):validate_sql 目錄掃描只納入 <...>/db/migration/;migration-postgres 略過並明示;單檔明示不受限;併修「靜默 0 檔」→ 印警告。驗證:掃 backend → 48 檔、0 違規。⚠️ 不修表(對投影表硬補 version = 無意義欄位=假綠,#C-36 之教訓) |
5. 效能與一致性測試對照 SoW 門檻(TRP-001 §7-5)
⚠️ 本節為空——該類測試從未執行。 誠實列出門檻與現況,不以任何推論填補。
| SoW 門檻 |
現況 |
判定 |
| 授權端到端 P95 ≤ 500ms
|
未量測 |
⚪ 未執行
|
| iECS ≥ 1,000 TPS |
未量測 |
⚪ 未執行
|
| BASE24-mas > 2,000 TPS |
未量測 |
⚪ 未執行
|
| 引擎一致率 ≥ 99.99%
|
未比對(需與 Legacy ECS 並行) |
⚪ 未執行
|
| 差異率 < 0.01%
|
未比對 |
⚪ 未執行
|
| A 類差異 0 |
未比對 |
⚪ 未執行
|
| 批次金額差異 0
|
未比對 |
⚪ 未執行
|
為何未執行(誠實說明):
-
一致性比對需 Legacy 資料源——
migration-service 之舊系統資料源未接入
(SCS-015 §5.1,真阻塞 §3.D D-4)。
-
效能測試需壓測環境——本案為本機單機(4 核/32GB),
且 TRP-001 §6.2 之 TPS 門檻為生產級,本機數據不具代表性。
-
本機服務以
--profile 分層啟動(ops/local/docker-compose.yml),
非全量常駐,不構成壓測條件。
建議:效能與一致性測試須於 SIT 環境執行,並納入 G4/G5 關卡;
在此之前,NFR 之效能相關小節(NFR 60 小節中絕大多數)不得宣稱已驗證。
6. 未決事項與風險(TRP-001 §7-6)
| U-ID |
項目 |
類型 |
說明/建議 |
U-01 |
GOV-004 §3 未列 dispute-service → ✅ 已結案(#A-109)
|
文件缺口 |
【2026-10-01 查證後結案】:★ 查明「未列」之原因為「需求側缺口」,非漏列——BRD-002 之 FR 編號群無任何爭議/拒付前綴(DEB-3.x 六項全為 DEBIT 卡)、BRD-001 僅文字提及「爭議帳款」、SCS-012 §1 早已自行揭露並建議補 DIS-*。→ GOV-004 §3 已補該服務列,FR 欄以「0」如實呈現(不捏造歸屬);§6 新增「17 服務皆納入矩陣」檢核列(差額 1 即該服務)。GOV-004 → 1.1。遺留:DIS-* FR 待 SA 補
|
U-02 |
報表下載呈現方式 → ✅ 已結案(#A-109,採方案 B)
|
待裁定 |
【2026-10-01 BEAM PMO 裁定採 B(代理端點)】:SCS-017 §6.2 立規格 → 契約 86 端點 0 錯誤 → 實作 → 前端下載鈕 → 真機驗證:QUEUED → 409 CC-PLT-3001、完成後 → 200 且下載內容與物件儲存內之原始檔逐位元組一致(SHA-256 相同)、作業不存在 → 404、非 UUID → 400。設計要點:全案唯一非封套回應;追蹤碼改以 X-Trace-Id 標頭回傳;三種「沒有檔案」分開講(404/409/物件查無→404 如實回報,不回空檔)。遺留:無 Range 支援、無下載稽核留痕(建議另立 CR) |
U-03 |
validate_sql 之適用範圍 → ✅ 已結案(#A-109,採 (c))
|
待裁定 |
【2026-10-01 BEAM PMO 裁定採 (c)「界定工具範圍」】:目錄掃描只納入 <...>/db/migration/(Oracle 遷移);db/migration-postgres/ 略過並明示;單檔明示傳入不受限;併修「靜默 0 檔」→ 印警告。驗證:掃 backend → 48 檔、0 違規(原 49 檔、5 違規)。根因:SQL-01~09 係為 Oracle 權威 OLTP schema 設計,對 Postgres 讀模型投影表不適用(硬補 version = 無意義欄位=假綠) |
| U-04 |
verify_contract_dto 4 處不符 + 2 則需確認 |
既有 |
全在 authorization-service(AuthorizeResponse vs ReversalResult/OverrideResult;AuthorizeRequest 3 欄)與 installment-service(InstallmentPeriod.principalAmount);另有 limit-service 之路徑寫法差異待人工確認。與本輪無關(既有),列此供追蹤 |
| U-05 |
NFR 60 小節僅 2 項經實測 |
風險 |
「設計 100%/驗證 3.3%」。其餘 58 項須待 G4/G5 關卡(效能壓測、資安測試、災難復原演練)——未驗證不等於未完成,但也不等於完成
|
| U-06 |
POC 17 項之 4 🟡/1 ⚪ |
風險 |
見 HANDOVER §1.2;建議逐項確認缺口 |
| U-07 |
真阻塞 6 項(§3.D) |
外部依賴 |
卡組織規範文件、收單資料源、通知發送通道——骨架/契約/狀態機可先做,業務參數與實際連線必須等
|
| U-08 |
覆蓋率與 Mutation 從未量測 |
風險 |
TRP-001 §6.2 #1 之門檻無工具支援(無 JaCoCo/PIT)。建議:納入 CI(CSP-001 §7 之關卡) |
| U-09 |
⚠️ 409 之錯誤碼語意落差(#A-109 併發現) |
待日後處理 |
SDD-006 §3.4 之 409 平台碼皆為「狀態機轉換」語意(CC-PLT-2001/2002/3001/3002),但「資源當前狀態不允許此操作」(如「作業未完成故無檔案可下載」)並非狀態機轉換 → 本輪以最接近之 CC-PLT-3001 表達,不為單一端點擴充登錄表。建議:若此類情境增多,另立 CC-PLT-3003(409「資源狀態不允許此操作」)並回填登錄表 |
7. 品質關卡(本輪重跑,2026-10-01)
| 檢查 |
指令 |
結果 |
| 空殼/佔位掃描 |
scan_scaffold.py backend |
✅ 0 命中
|
| mock data 掃描 |
scan_mockdata.py backend |
✅ 0 命中
|
| 假測試掃描 |
scan_faketest.py backend |
✅ 0 命中
|
| SQL 規則 |
validate_sql.py backend |
✅ 0 違規(48 檔=Oracle 遷移;migration-postgres 已依 #A-109 界定為不適用並略過,不靜默) |
| Mermaid 語法 |
validate_mermaid.py docs |
✅ 0 錯誤(117 區塊) |
| OpenAPI 契約 |
gen_openapi.py |
✅ 0 錯誤(17 服務 + bff-web,85 端點) |
| 契約 ↔ DTO 比對 |
verify_contract_dto.py |
⚠️ 不符 4 處、需確認 2 則(既有,見 U-04) |
| 單元/整合測試 |
./gradlew test |
✅ 836 測、0 失敗(修 DEF-06 後) |
| 前端型別檢查 |
npm run typecheck |
✅ 0 錯誤
|
| 前端正式建置 |
npm run build |
✅ 成功(392.69 kB) |
⚠️ 掃描器之範圍(避免誤讀「0 命中」):三支 scan_* 以 backend 為範圍;
validate_sql 無內建 db/migration 過濾(會掃到 migration-postgres);
validate_mermaid 以 docs 為範圍。範圍不同,不可互相推論。
8. 結論
-
單元/整合測試:836 測 0 失敗(本輪重跑,修復 DEF-06 後)。
-
品質關卡:3 支掃描器 0 命中、Mermaid 0 錯誤、契約 0 錯誤;2 項待處理(DEF-07/U-03、U-04)。
-
真機實測:17 個領域服務 + 8 個平台模組 + 26 頁 WebUI 皆有實測證據(§2,附
#A-xx)。
- ⚠️ 準出未達成(
TRP-001 §6.2):8 項中僅 2 項完全達成;
效能、一致性、安全掃描三項從未執行;覆蓋率從未量測。
建議(依優先序):
-
裁定 U-03(
validate_sql 範圍)與 U-02(報表下載方式)——兩者皆已有建議方案。
-
補
GOV-004 §3 之 dispute-service(U-01)——追溯矩陣之第 1 問缺口。
-
將覆蓋率納入 CI(U-08)——目前
TRP-001 §6.2 #1 無從量測。
-
規劃 SIT 環境以執行效能與一致性測試(§5)——本機無法代表生產。
- 處理 U-04 之 4 處契約↔實作不符(既有)。
9. 與第 1 輪之差異(TRP-001 §7 符合性)
TRP-001 §7 要求 |
第 1 輪(v1.0) |
本版(v2.0) |
| 1. 執行摘要(通過/失敗/跳過、覆蓋率、準出達成度) |
❌ 僅有測試數,無準出達成度
|
✅ §0(含對照 §6.2 8 項之達成度) |
| 2. 測試劇本清單(劇本 ID、關聯 FR/POC/NFR、步驟、預期) |
🟡 有情境,但無劇本 ID、無 FR/POC 關聯
|
✅ §2(TR-* 劇本 ID + GOV-004 之 FR/POC 關聯 + 證據) |
| 3. 測試資料清單(資料集、來源、遮蔽狀態) |
❌ 完全沒有
|
✅ §3(13 個資料集 + 誠實揭露「無從驗證遮蔽」) |
| 4. 缺陷清單(DEF-ID、嚴重度、狀態、關聯、修復) |
🟡 有缺陷,但無 DEF-ID、無嚴重度
|
✅ §4(DEF-01~07,含嚴重度;新增 DEF-06) |
| 5. 效能與一致性對照 SoW 門檻
|
❌ 完全沒有
|
✅ §5(誠實標示「未執行」,並說明原因) |
| 6. 未決事項與風險 |
🟡 有「已知限制」,但未含未決事項
|
✅ §6(U-01~U-08) |
併載之範圍擴充:測試範圍由 2 服務 + 前端 → 17 領域服務 + 8 平台模組 + 26 頁 WebUI。
10. 修訂記錄
| 版本 |
日期 |
修訂者 |
說明 |
| 2.1 |
2026-10-01 |
WorkBuddy AI |
BEAM PMO 三裁定之執行結果回寫(HANDOVER #A-109)。U-03 結案(採 (c)):validate_sql 界定適用範圍——目錄掃描只納入 <...>/db/migration/(Oracle 遷移)、migration-postgres 略過並明示、單檔明示不受限、併修「靜默 0 檔」→ 印警告 → DEF-07 結案,§7 之 SQL 規則由「違規 5 處」改為 0 違規(48 檔)。U-01 結案:★ 查明「GOV-004 §3 未列 dispute」係需求側缺口、非漏列(BRD-002 無任何爭議/拒付 FR)→ 以「0」如實呈現,GOV-004 → 1.1。U-02 結案(採代理端點 B):新增 TR-RPT-06(下載)為 ✅——真機驗證:200 且內容與物件逐位元組一致、QUEUED→409、不存在→404。★ 新增 U-09:409 之錯誤碼語意落差(既有平台 409 碼皆為狀態機轉換語意)——本輪以 CC-PLT-3001 表達並明載,建議日後另立 CC-PLT-3003
|
| 2.0 |
2026-10-01 |
WorkBuddy AI |
依 TRP-001 §7 重構 + 範圍擴充(HANDOVER #A-108)。範圍:2 服務 + 前端 → 17 領域服務 + 8 平台模組 + 26 頁 WebUI。新增 §0 準出達成度(對照 TRP-001 §6.2 8 項:僅 2 項達成)、§2 測試劇本清單(TR-* ID + GOV-004 之 FR/POC 關聯 + #A-xx 證據)、§3 測試資料清單(13 資料集)、§5 效能對照(誠實標示未執行)、§6 未決事項(U-01~U-08)。缺陷清單加 DEF-ID 與嚴重度,新增 DEF-06(時間炸彈測試,已修)與 DEF-07(validate_sql 5 處)。★ 本輪實測:./gradlew test 836 測 0 失敗(修 DEF-06 後)。⚠️ 未竟:效能/一致性/安全掃描從未執行(§5);覆蓋率從未量測
|
| 1.0 |
2026-09-19 |
WorkBuddy AI |
初版:2026-09-19 實測結果(範圍:authorization-service、limit-service、WebUI 授權作業台) |