跳到內容
getnextpdf.com

工程品質

NextPDF 的每次 push 與 pull request 都會執行阻擋建置的 CI 閘門,涵蓋靜態分析、 變更行覆蓋率、變異分數與標籤化輸出驗證。

每次 push 與 pull request 會執行三道 PHPStan 閘門:

閘門範圍是否阻擋
Level 10src/
Level max(嚴格設定檔)src/
SARIF 註記src/僅供參考

CI 將 src/ 中的 PHPStan Level 10 發現視為阻擋建置的項目。有兩項設定使標準高於預設的 Level 10 執行:

  • treatPhpDocTypesAsCertain——PHPStan 將 PHPDoc 註解視為既定事實,而不是回頭放寬為原生型別;因此凡是與靜態分析可推導結果相矛盾的窄化註解,都會成為被回報的發現。
  • reportUnmatchedIgnoredErrors——每一條抑制規則都必須對應到一個目前實際回報的錯誤,否則建置失敗。

src/ 的每一筆 ignoreErrors 項目都釘選到特定的 PHPStan 識別碼、精確的檔案路徑,以及(在適用時)精確的出現次數——同一識別碼在其他任何位置新出現,或在同一檔案中出現第二次,都會使建置失敗。

CI 對每個 pull request 所變更的程式行強制執行 90% 覆蓋率門檻,以 PCOV 對照基底分支量測。低於門檻的 pull request 會使建置失敗。

變異測試檢驗測試是否真正對行為作出斷言:CI 會對程式碼植入變異,並要求必須有測試因此失敗。三項變異分數指標各設有單調不下降的下限:

指標強制最低值
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

任何會使任一指標跌破其下限的 pull request 都會被拒絕。CI 在將單次執行結果與下限比較之前,會先套用一套有文件記載的波動容差。

CI 以 veraPDF 1.30.1 搭配 pdfua.strict 設定檔,作為標籤化輸出測試集上阻擋建置的閘門。