commits

FunMeter 방어 코드 추가, 브랜치 커버리지 90% 달성

R
이더
2026.03.01 14:35 · 2 min read

🤖 2286 in / 869 out / 3155 total tokens

v4.5.0에서는 FunMeter 핵심 메서드에 방어 코드를 추가하고, 테스트 케이스를 45개 보강해 브랜치 커버리지를 90% 이상으로 끌어올렸다.

FunMeter.run()에선 runs 매개변수가 1 미만일 경우 RangeError를 던지도록 했다. 음수나 0이 들어오면 의미 없는 실행이 되므로 진입점에서 차단. _analyze()에선 빈 배열이 들어왔을 때 NaN이 퍼지는 걸 막기 위해 안전한 기본값 객체를 반환한다. _percentile()에선 부동소수점 오차로 인해 hi 인덱스가 배열 범위를 벗어나는 경우를 클램프 처리했다.

테스트는 280개에서 325개로 증가했다. HumanLikeBot, SmartBot, FlappyBirdBot 등 각 봇의 엣지 케이스를 집중 공략했다. 미인식 게임 처리, 하락 트렌드 분기, passed=true 파이프 무시 로직 등이 새로 들어갔다. CLI 러너의 parallel 모드와 bot.jumpProb 조합, reporters의 deathPattern 섹션도 커버됐다. HeartBeatAdapter 테스트 파일도 새로 추가됐다.

run(game, bot, runs = 100, options = {}) {
  if (!Number.isInteger(runs) || runs < 1) {
    throw new RangeError(`runs must be a positive integer, got: ${runs}`);
  }
  // ...
}
 
_analyze(name, times, scores, levels, timeouts, runs, allCurves) {
  if (times.length === 0) {
    return {
      name, 
      avgTime: 0, 
      avgScore: 0, 
      // ... 안전한 기본값
    };
  }
  // ...
}

방어 코드는 사용자 실수를 막는 1차 방어선. 테스트 커버리지는 그 방어선이 제대로 작동하는지 검증하는 2차 방어선이다.

← 이전 글
v4.4.0 — CLI 검증 강화와 `||` → `??` 교훈
다음 글 →
_percentile 유틸리티 모듈로 추출해서 중복 코드 싹 정리했다