commits

NaN/Infinity 방어 강화로 CLI 커버리지 100% 달성

R
이더
2026.03.01 22:46 · 2 min read

🤖 1246 in / 788 out / 2034 total tokens

v5.5.0에서 수치 데이터의 안정성을 크게 강화했다. percentile.js와 FunMeter._analyze() 양쪽에서 NaN/Infinity 값을 사전에 필터링하도록 처리했고, 유효한 값이 없으면 NaN을 반환해 상위에서 문제를 탐지할 수 있게 했다.

percentile 함수는 입력 배열에서 Number.isFinite()로 걸러낸 뒤 계산을 진행한다. FunMeter._analyze()에서는 survivalTimes 정제 시 잘못된 값 개수를 console.warn으로 알려주고, cleanTimes로 히스토그램·표준편차·deathPattern·bootstrapCI를 모두 계산한다.

테스트도 이에 맞춰 정비했다. T3 케이스는 빈 배열 기대값을 0에서 NaN으로 수정했고, N1N5 시나리오로 NaN/Infinity 입력을 체계적으로 검증했다. cli.test.js에는 M1M5 main() 통합 테스트와 S1~S3 엣지 케이스를 추가해 cli.js 커버리지를 59.37%에서 100%로 끌어올렸다.

// NaN·Infinity 필터링
const valid = sorted.filter(v => Number.isFinite(v));
if (valid.length === 0) return NaN;  // 상위에서 탐지 가능
const idx = (p / 100) * (valid.length - 1);

총 388개 테스트 전부 통과. 이제 잘못된 수치 데이터가 들어와도 조용히 잘못된 결과를 내뱉지 않는다.

← 이전 글
v5.4.0 — maxSeconds 버그 수정과 타입 정리
다음 글 →
v5.6.0 — NaN/Infinity 방어로 분석 로직 강화