CodeClone 2.0.0b1: 베이스라인 인식 기반 파이썬 코드 품질 분석
CodeClone 2.0.0b1은 단순한 복제 탐지기에서 CI 파이프라인 내 파이썬 프로젝트의 구조적 건강 상태를 모니터링하는 도구로 진화했습니다. 주요 초점은 베이스라인 비교—과거 기술 부채와 최신 회귀 문제를 구분하는 데 있습니다. 건강 점수, 무용한 코드 탐지, 구조적 발견 기능을 지원하며, 파이프라인 통합을 원활하게 하기 위한 결정론적 계약을 제공합니다.
베이스라인이 CI 계약의 핵심이 되다
2.0 버전에서는 베이스라인이 검증된 프로젝트 상태의 스냅샷으로 성숙했습니다. 기존 문제와 최근 변경 사항을 분리하고, 메트릭 게이팅에 참여하며, CI 환경에서 예측 가능하게 동작합니다.
핵심 원칙:
- 신뢰 의미를 갖는 스키마 검증.
- 복제, 복잡도 등 다양한 메트릭에서 기존 문제와 새로운 문제를 명확히 구분.
- 현재 상태를 베이스라인으로 고정하여 메인 브랜치에 새로운 회귀가 발생하지 않도록 방지.
이로 인해 오래된 기술 부채로 인한 전체 프로젝트 차단 없이 품질 게이트를 구현할 수 있습니다.
건강 점수: 모듈러한 품질 지표
새로운 건강 점수는 여러 신호를 종합적으로 반영합니다:
| 메트릭 | 설명 |
|--------------|--------------------------------------|
| 복제 | 구조적 중복 |
| 복잡도 | 함수 순환 복잡도 (Cyclomatic Complexity) |
| 결합도 | 모듈 간 의존성 |
| 응집도 | 내부 모듈 일관성 |
| 무용한 코드 | 사용되지 않는 코드 |
| 종속성 | 종속성 사이클 |
| 커버리지 | 테스트 커버리지 |
점수는 생산 코드와 테스트 코드의 기여도, 고위험 영역으로 세분화됩니다. HTML 리포트에는 가이지, KPI 카드, 레이더 차트가 포함되어 빠른 인사이트를 제공합니다.
히우리스틱 없이 무용한 코드 탐지
무용한 코드 탐지기는 파이썬 특유의 패턴—프레임워크 훅, 리플렉션, 플러그인 로딩 등을 고려합니다. 암시적 제외에 의존하지 않고, 인라인 억제를 사용합니다:
# codeclone: ignore[dead-code]
def handle_exception(exc: Exception) -> None:
...
또는
class Middleware: # codeclone: ignore[dead-code]
...
억제는 해당 지역에서만 규칙을 비활성화하며 다른 분석에 영향을 주지 않습니다. 요소는 리포트에 표시되지만 건강 점수에는 영향을 주지 않습니다.
복제를 넘어서는 구조적 발견
새로운 계층은 초기 아키텍처 신호를 탐지합니다:
duplicated_branches— 반복되는 제어 흐름 브랜치.clone_guard_exit_divergence— 복제된 블록의 종료 지점 간 차이.clone_cohort_drift— 유사한 구조군 간의 편차.
핵심은 표준 JSON 형식으로 사실을 생성하고, UI는 추가 렌더링 없이 이를 시각화합니다.
단일 소스에서 나온 보고서
모든 출력은 표준 JSON의 프로젝션입니다:
- 개요, 경영진 요약, 소스 분석 포함의 HTML.
- 자동화 스크립트용 JSON.
- 로그용 텍스트/마크다운.
- 베이스라인 상태, %SRCROOT%, IDE/코드 스캔 아티팩트 포함의 SARIF 형식.
안정적인 정렬과 페이로드 표준화를 통해 결정론성이 보장됩니다.
낮아진 임계값과 성능 향상
보다 광범위한 커버리지를 위해 임계값이 완화되었습니다:
--min-loc(함수): 15에서 10으로 감소.- 더 부드러운 블록/세그먼트 게이트.
대가: 분석량 증가. 캐시 및 리포트 계약 최적화로 보완됩니다.
내부의 계약들
엄격한 사양:
- 베이스라인 계약: 스키마 + 의미.
- 캐시 계약: 예측 가능성.
- 리포트 계약: 일관된 포맷.
- CLI 종료 코드: 명확한 의미.
이로써 숨겨진 변경으로 인한 파이프라인 실패를 최소화합니다.
중요한 점
- 베이스라인은 실제 CI 게이팅에서 부채와 회귀를 분리합니다.
- 건강 점수는 생산 코드에 집중된 세밀한 지표입니다.
- 인라인 억제는 무용한 코드 분석의 투명성을 유지합니다.
- 구조적 발견은 복제가 형성되기 전 문제를 조기에 포착합니다.
- GitHub Actions, Azure DevOps와의 통합을 위한 SARIF 대응.
— Editorial Team
아직 댓글이 없습니다.