Configuration Management

코드 품질 분석기

알로그 2018. 7. 1. 10:58
반응형

코드품질 분석기 개발 기록

인턴기간(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