콘텐츠로 이동
getnextpdf.com

엔지니어링 품질

NextPDF의 모든 푸시와 풀 리퀘스트에서는 정적 분석, 변경 라인 커버리지, 뮤테이션 점수, 태그된 출력 검증에 대해 빌드를 차단하는 CI 게이트가 실행됩니다.

모든 푸시와 풀 리퀘스트에서 세 개의 PHPStan 게이트가 실행됩니다.

게이트범위차단 여부
Level 10src/
Level max(strict 프로파일)src/
SARIF 어노테이션src/권고

CI는 src/의 PHPStan Level 10 발견 사항을 빌드 차단 사유로 처리합니다. 두 가지 설정이 기본 Level 10 실행보다 기준을 높입니다.

  • treatPhpDocTypesAsCertain — PHPStan이 네이티브 타입으로 다시 확장하지 않고 PHPDoc 어노테이션을 사실(ground truth)로 신뢰합니다. 따라서 정적 분석이 도출할 수 있는 결과와 모순되는 축소(narrowing) 어노테이션은 보고 대상 발견 사항이 됩니다.
  • reportUnmatchedIgnoredErrors — 모든 억제(suppression) 항목은 현재 실제로 보고되는 오류와 일치해야 하며, 그렇지 않으면 빌드가 실패합니다.

src/에 대한 각 ignoreErrors 항목은 PHPStan 식별자, 정확한 파일 경로, 그리고 해당되는 경우 정확한 발생 횟수에 고정되어 있습니다. 동일한 식별자가 다른 위치에서 새로 발생하거나 같은 파일에서 두 번째로 발생하면 빌드가 실패합니다.

CI는 각 풀 리퀘스트가 변경한 라인에 대해 90% 커버리지 임계값을 적용하며, 베이스 브랜치를 기준으로 PCOV로 측정합니다. 임계값에 미달하는 풀 리퀘스트는 빌드가 실패합니다.

뮤테이션 테스트는 테스트가 실제 동작을 검증하는지 확인합니다. CI가 코드를 변이시키고, 그 변이에 대해 테스트가 실패할 것을 요구합니다. 세 가지 뮤테이션 점수 지표에는 단조 비감소 하한이 적용됩니다.

지표적용 최소값
raw_msi88.9%
effective_msi89.0%
covered_msi88.9%

어느 지표라도 하한 아래로 떨어뜨리는 풀 리퀘스트는 거부됩니다. CI는 실행 결과를 하한과 비교하기 전에 문서화된 변동 허용치를 적용합니다.

CI는 태그된 출력 코퍼스에 대해 pdfua.strict 프로파일을 사용하는 veraPDF 1.30.1을 빌드 차단 게이트로 실행합니다.