코드품질 분석기 개발 기록
인턴기간(2015. 08 ~ 2015. 12)에 적용했던 코드 품질 분석기를 기록해본다.
1. How
정적분석 (Static Analysis)
- 동적 테스팅으로 찾기 힘든 결함 발견
- 테스팅 실행 전 조기결함 발견
- 높은 복잡도 측정치와 같은 매트릭을 계산하여 의심스러운 양상에 대한 조기 경보
코딩룰 (Coding Rule)
- 소스코드 스타일의 통일성을 갖기 위함
- 소스코드 가독성 향상
- 유지보수 용이
SWMD (SW Module Design)
- SW 모듈간의 의존성 관리로 모듈의 독립성 확보
- 모듈 단위 독립적/병렬적 개발, 테스트를 통한 R&D 효율화
- 재작업을 최소화하여 제품 Lead time을 단축
Technical Dept: 빠르지만 지저분한 방식으로 일하면, 회계에서 말하는 부채와 유사한 기술 부채로 압박
=> SW 품질은 반드시 확보해야만 하는 작업으로 자동화를 통해 팀 자체적으로 주도적으로 할 필요성이 있음
커밋마다 즉시 코드 품질을 분석하여 해당 결과를 Gerrit에 Notification 함으로써 개발자의 코드 품질 개선을 유도하고, 리뷰의 Reference로 활용하도록 하자.
2. Tools
- Coverity : 상용 툴로 라이센스 필요, Full Build를 통해 결과 확인 가능, 개발자 본인이 직접 사용 불가
- Cpplint(코딩룰) : Free, 구글의 코딩 컨벤션 도구, 코두 수정용이(배포 가능), 사용하기 편리
- Code-measure : 사내에서 개발, 파일라인, 함수복잡도, 함수개수, 함수라인 출력 가능
3. Logic
Controller -> SWMD -> Coding Rule -> Static Analysis -> Report로 흘러감
Precondition
- Gerrit Trigger Event 설정 (Gerrit Stream Events)
- Jenkins에서 Gerrit Trigger 플러그인 설치
- Gerrit Connection Setting 화면 진입 후 필요항목 작성
3.1 Controller: Gerrit에 commit이 올라오면 이를 trigger하여 분석할 파일들을 분류하는 작업
1. 파라미터(git path, commit list) 수신
2. Repo sync
3. 전달받은 파라미터를 이용해 Git path로 이동
4. 전달받은 파라미터를 이용해 Cherry-Pick
5. 모든 커밋을 수행하도록 2번 3번 반복
그리고 변경 된 소스코드만 input으로 넣기위한 사전 작업 진행.
3.2 SWMD:
1. 사내 툴 실행 (함수복잡도, 함수라인수, 코드라인수, 함수개수 추출)
2. CCfinder 실행 (코드중복비율 추출)
3. SWMD 결과 값 파싱
4. 사내 기준값과 비교
5. 결과 값 필터 및 commit 별 저장
3.3 Coding Rule:
1. Customized cpplint 실행
2. Coding Rule 결과값 파싱
3. 사내 기준값과 비교
4. 결과 값 필터 및 commit 별 저장
3.4 Static Analysis:
1. Static Analysis 실행
2. Static Analysis 결과 값 파싱
3. 사내 기준값과 비교
4. 결과 값 필터 및 commit 별 저장
3.5 Report:
1. Raw Data 파싱
2. 가독성을 위해 Data 가공
3. Data 송신
'Configuration Management' 카테고리의 다른 글
새로 생성한 파일까지 git diff로 patch 생성 (0) | 2020.11.07 |
---|---|
Git (브랜치, 태그) (0) | 2020.11.07 |
Git (설치, 기본 명령어) (0) | 2020.11.07 |
Git (이론) (0) | 2020.11.07 |
소스코드 시각화 (Call graph) (0) | 2018.07.01 |