평가 범위
언어별 best/stress 샘플 16개를 고정 SHA로 clone하고, Metrics v13 exact score와 integrity를 4개 cache shard에서 검증합니다.
현재 세트는 독립 validation이 아닌 partition=regression이며, jam-full 과거 평가는 test/security 보강 효과를 확인합니다.
별도 OWASP Java 세트는 partition=validation으로 TP/FN/TN/FP를 측정합니다.
Independent security validation
| Scope | Precision | Recall | FPR | F1 |
|---|---|---|---|---|
| OWASP CWE-78/89/327 micro, 1,001 cases | 52.84% | 67.05% | 66.81% | 59.10% |
이 값은 프로젝트 등급과 다른 case-level 분류 기준선입니다. CWE-78/89는 recall이 높지만 FPR도 약 88%이고, CWE-327은 현재 Java 패턴 범위에서 recall 0%여서 다음 analyzer 개선 우선순위로 기록했습니다.
Lite regression gate
| 항목 | 계약 | 검증 |
|---|---|---|
| 매니페스트 | testdata/e2e-corpus.yaml v2 | profile, regression partition, SHA, exact score/grade, expected integrity |
| 실행 | 4개 cache shard | clone → detached pinned SHA → jam scan --strict |
| 산출물 | 5종 | Markdown, 26열 CSV, result JSON v3, run manifest v2, SARIF 2.1.0 |
| 증적 | jam/e2e-summary@1 | profile/partition, production CLOC, coverage, finding/exclusion 수 |
Full E2E 요약 (과거 v0.10.6 평가)
| 항목 | 결과 | 해석 |
|---|---|---|
| 샘플 수 | 16개 | Go, TS, JS, Python, Java, C#, Rust, C, C++ best/stress |
jam-full.json | 16/16 | 측정 결과 문서는 모든 샘플에서 생성 |
test/report.json | 6/16 | toolchain/프로젝트 테스트 증적이 있는 경우만 생성 |
security-report.json | 14/16 | Java 2개는 Maven Central 429로 측정 불가 |
| exit 분포 | 0: 3, 1: 11, 4: 2 | 대부분은 품질 실패, Java SCA는 인프라 실패 |
검증된 보완 효과
- 당시 metrics 기준으로 jam-lite A였던 보안 취약 샘플 일부가 jam-full security에서 D/F로 내려갔습니다.
- test evidence가 없는 프로젝트는 exit 4가 아니라 quality failure(exit 1)로 분류되도록 보정했습니다.
- medium/low-only 보안 finding은 policy failure와 점수 의미를 분리하기 위해 security score 하한을 조정했습니다.
- partial full 모드로 test와 security를 독립 검증할 수 있게 했습니다.
남은 리스크
외부 네트워크
SCA 도구가 Maven Central 같은 원격 저장소 rate limit에 걸리면 security component가 infrastructure failure가 됩니다. CI에서는 캐시와 offline profile이 필요합니다.
테스트 증적
C/C++/C#/일부 JS 샘플은 test artifact 생성 경로가 프로젝트별로 달라 test-cli 설정 보강이 필요합니다. JAM은 이를 품질 실패로 기록합니다.