64 lines
2.5 KiB
Markdown
64 lines
2.5 KiB
Markdown
|
|
---
|
|||
|
|
name: springboot-verification
|
|||
|
|
description: "Spring Boot 專案的驗證循環:包含構建、靜態分析、測試與覆蓋率檢查、安全性掃描,以及在發布或提交 PR 前的 Diff 審查。"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Spring Boot 驗證循環 (Verification Loop)
|
|||
|
|
|
|||
|
|
在提交 PR、重大變更後或正式佈署前執行。
|
|||
|
|
|
|||
|
|
## 何時啟用
|
|||
|
|
|
|||
|
|
- 在開啟 Spring Boot 服務的 Pull Request 之前。
|
|||
|
|
- 在發生重大重構或依賴項升級之後。
|
|||
|
|
- 在佈署至預覽 (Staging) 或生產環境 (Production) 之前的最後確認。
|
|||
|
|
- 執行包含「編譯 → Lint → 測試 → 弱點掃描」的完整流水線。
|
|||
|
|
|
|||
|
|
## 驗證階段
|
|||
|
|
|
|||
|
|
### 階段 1:專案編譯 (Build)
|
|||
|
|
使用 Maven 或 Gradle 進行項目編譯,確保語法無誤且依賴解析正常。
|
|||
|
|
|
|||
|
|
### 階段 2:靜態程式碼分析 (Static Analysis)
|
|||
|
|
運行 Checkstyle, SpotBugs 或 PMD 插件,檢查潛在的 Code Smell 或是違反編碼規範的地方。
|
|||
|
|
|
|||
|
|
### 階段 3:測試與覆蓋率 (Tests + Coverage)
|
|||
|
|
- **執行全量測試**:驗證邏輯正確性。
|
|||
|
|
- **檢查 JaCoCo 報告**:確保整體覆蓋率達到指標 (建議 80%+)。
|
|||
|
|
- **子項驗證**:
|
|||
|
|
- **單元測試**:隔離依賴項,驗證 Service 邏輯。
|
|||
|
|
- **整合測試**:使用 **Testcontainers** 啟動真實資料庫進行驗證。
|
|||
|
|
- **API 測試**:使用 **MockMvc** 驗證 Controller 層的輸入輸出與 HTTP 語義。
|
|||
|
|
|
|||
|
|
### 階段 4:安全性掃描 (Security Scan)
|
|||
|
|
- **依賴項弱點**:檢查第三方 Library 是否存在已知 CVE。
|
|||
|
|
- **秘密資訊檢查**:使用 Grep 或工具檢查原始碼中是否誤傳了密碼、金鑰或 Secrets。
|
|||
|
|
- **掃描敏感模式**:檢查是否存在 `System.out.println`、CORS 萬用字元 (*) 或不安全的例外訊息曝露。
|
|||
|
|
|
|||
|
|
### 階段 5:代碼 Diff 審查
|
|||
|
|
在提交前最後檢視變更內容:
|
|||
|
|
- 是否殘留調試用 Logger?
|
|||
|
|
- 錯誤訊息是否一致且 HTTP 狀態碼正確?
|
|||
|
|
- 交易 (Transactions) 與驗證是否已正確實作?
|
|||
|
|
|
|||
|
|
## 驗證報告模板
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Spring Boot 驗證報告
|
|||
|
|
===================
|
|||
|
|
編譯狀態: [通過/失敗]
|
|||
|
|
靜態分析: [通過/失敗] (Checkstyle/SpotBugs)
|
|||
|
|
測試執行: [通過/失敗] (X 通過 / Y 總數, 覆蓋率 Z%)
|
|||
|
|
安全性掃描: [通過/失敗] (發現 N 個弱點)
|
|||
|
|
變更範圍: [X 個檔案變更]
|
|||
|
|
|
|||
|
|
綜合評定: [READY / NOT READY]
|
|||
|
|
|
|||
|
|
待修正事項:
|
|||
|
|
1. ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**核心原則**:越早回饋,修復成本越低。保持嚴格的驗證標準,將警告 (Warnings) 視為軟體缺陷進行修補。
|