| source | https://www.perforce.com/blog/kw/what-is-differential-analysis |
|---|---|
| created | 2026-03-12 |
| by | nvidia:glm5 |
| style | 개조식 |
(요약) 차분 분석 (Differential Analysis) 이란?
차분 분석의 정의
- 정적 코드 분석의 일종인 '빠른 피드백 (fast feedback)' 솔루션
- 이전 분석 빌드의 시스템 컨텍스트 데이터 활용
- 새롭거나 변경된 파일만 분석하되, 전체 시스템 분석과 동등한 결과 제공
- 분석 데이터의 정확성과 세부 사항 유지하면서 최단 분석 시간 달성
증분 분석 (Incremental Analysis) 과의 비교
- 증분 분석
- 컴파일러의 '업데이트 빌드'와 유사한 '업데이트 분석' 수행
- 이전 빌드의 '분석 객체 (analysis objects)' 및 의존성 정보 유지
- 변경된 소스 파일 식별 후 재분석 수행
- 최적의 경우 전체 분석보다 빠르지만, 최악의 경우 (중앙 모듈 변경 등) 전체 분석과 소요 시간 동일
- 모듈화 부재 및 복잡한 의존성으로 인해 대규모 코드베이스에서 비효율적일 수 있음
- 차분 분석
- 대규모·복잡 코드베이스 및 CI/CD 파이프라인용 강화된 증분 분석
- 원격 빌드 서버의 이전 전체 분석 데이터 (시스템 컨텍스트) 활용
- 로컬 분석기는 버전 관리 시스템 (Git, P4 등) 이 보고한 변경·신규 파일만 검사
- 시스템의 극히 일부만 로컬에서 분석해도 전체 분석과 동등한 결과 도출
- 코드베이스 규모나 설계의 모듈성 부재와 무관하게 개발팀에 '빠른 피드백' 제공
- Klocwork 와 같은 도구는 메인 브랜치 대비 새로 발견된 이슈만 보고하여 품질 저하 요인 집중 관리
- 증분 분석
차분 분석의 중요성
- 분석 시간 단축 및 피드백 가속화
- 로컬 또는 커밋 전 분석 시 전체 코드베이스 재분석 불필요
- 대규모 프로젝트에서 수 분~수 시간 소요되는 비효율성 해결
- 이슈 발견 시점이 늦어지거나 (최종 릴리스 주기 등) 수정이 지연되는 것 방지
- 분석 시간 단축 및 피드백 가속화
활용 시나리오 예시
- 기능 브랜치 (Feature Branch) CI 파이프라인
- 개발자의 빈번한 커밋마다 실행
- 변경된 파일 하위 집합에 대한 새 이슈·취약점만 보고
- 메인 브랜치 병합 전 이슈 수 감소 효과
- 통합 브랜치 (Integration Branch)
- 여러 기능 브랜치 병합 후 개발 (Dev) 브랜치에서 실행
- 이전 릴리스 브랜치 대비 변경 사항만 '증분' 분석
- 대규모 코드베이스에서 시간 절감 및 전체 빌드와 일관된 결과 제공
- 최신 시스템 컨텍스트 데이터 유지를 위한 주기적 갱신 필요
- 릴리스 브랜치 CD 파이프라인
- 릴리스 후보 생성 시 전체 크린 (clean) 분석 권장
- 안전성·보안 표준 및 규정 준수를 위한 정확한 최종 데이터 확보
- 이전 실행 결과와 간섭 없는 독립적인 분석 필요
- 기능 브랜치 (Feature Branch) CI 파이프라인
Klocwork 를 통한 차분 분석 작동 방식
- 서버 프로젝트 연결: 로컬 데스크톱 워크스페이스를 서버 프로젝트와 자동 연동
- 통합 분석 실행: 분석 결과를 서버에 푸시하여 기존 코드베이스의 인터페이스 동작 정보 저장 및 공유
- 변경 코드 차분 분석: 로컬에서 분석되지 않은 함수 호출 시 서버의 인터페이스 동작 정보 참조하여 분석 정확도 유지
구체적 분석 사례 (Klocwork 기준)
- 데스크톱 분석 (로컬 단독)
main.c만 분석 시 null 포인터 역참조 결함 미발견- 타 모듈 (
sendMessage) 과의 상호작용 정보 부재로 인한 한계
- 서버 연동 분석 (차분 분석)
- 서버의 통합 빌드 지식 베이스 (지식 DB) 활용
- 로컬 미분석 함수 (
sendMessage) 의 인수 처리 로직 정보 참조하여 결함 식별 가능 - 전체 코드베이스 재분석 없이 커밋 전 결함 수정 가능
- 전체 프로젝트 분석 대비 장점
- 병합 후 발생할 가능성이 높은 결함 사전 예견 (미리보기)
- 병합 전 선제적 수정 기회 제공
- 서버의 지식 베이스는 메인 코드베이스 기준이므로 병합 후 환경과 유사한 결과 보장
- 데스크톱 분석 (로컬 단독)