개발환경

[SonarLint] 내 코드를 자동으로 리뷰해 주는 IDE플러그인

dev.yong 2020. 3. 23. 17:19

[SonarLint]

나의 개발환경

재직중인 회사가 IT회사가 아닌 제조업 기반의 회사의 전산실이다보니, 개발스러운 문화가 완전하지 않은 환경이다.

그 중에 하나가 코드리뷰 문화가 없다는 것 인데, 나같은 주니어 개발자의 경우 코드리뷰를 하면서, 내가 엉망으로 짜놓았을 지 모르는 코드를 리뷰하고 수정하는 과정에 대한 성장할 수 있는데 재직중인 회사는 알아서 코드를 짜고, 알아서 커밋하고 동작에 이상이 없으면 문제를 삼지 않기 때문에 이 점이 항상 아쉬웠다.

 

열악한(?) 근무환경에서 일을 하다 보니, 타 IT회사에서 일하는 방식이 궁금해서 가끔 개발자 컨퍼런스를 참석하는데 헤이딜러에서 릴리즈 배포 전 Sonar Qube로 코드를 정적으로 검수 한 후 이상이 없으면 배포한다는 강의 내용을 듣고 Sonar를 찾아보게 되었다.

SonarLint

SonarLint는 코드 작성 시 품질 문제를 정적으로 탐지하고 해결하는데 도움을 주는 IDE확장 플러그인이다.

코드정적 분석
실제 프로그램을 실행하지 않고 코드의 형태에 대한 분석을 말한다. 위험성이 있는 코드, 미리 정의된 규칙이나 코딩 표준에 준수하는지에 대한 분석

사용환경

SonarLint를 사용할 수 있는 IDE는 4가지이다.(2020. 01. 22 기준)

(분석 지원 언어는 아래 링크 참조)

SonarLint를 사용하기 위해서는 Java 8 이상이 필요하다.

기능

 

위와같이 코드에 문제가 있다고 판단하면 해당코드에 '~~~' 모양의 밑줄이 생기고 마우스 오버시 해당 코드의 문제점에 대해 간략히 알려준다. 또한 상세 설명도 볼 수 있다.

 

SonarLint 플러그인을 설치하면 2개의 메뉴가 생성되는데 각 메뉴의 기능은 아래와 같다.

 

On-the-fly

코드를 작성할 때 문제점 목록을 간략하게 보여준다. 새로운 문제에 대해 코드 아래 표시를 해주므로 코딩에 집중할 수 있다.

 

Rule Description

문제가 된다고 판단되는 코드의 상세 설명과 수정 가이드 내용이 담겨 있으며, 예시 코드의 내용이 있다.

 

품질요소 기준

Sonar는 다음 7가지 품질 요소를 기준으로 코드의 품질을 구분한다.

  • Code Smells(Maintainability)
  • Bugs(Reliability)
  • Vulnerabilities(Security)
  • Coverage
  • Duplications
  • Size
  • Complexity

Code Smells(Maintainability)

심각한 이슈는 아니지만 베스트 프렉티스에서 사소한 이슈들로 모듈성(modularity), 이해가능성(understandability), 변경가능성(changeability), 테스트용의성(testability), 재사용성(reusability) 등이 포함된다.

  • Code Smells
  • Debt
  • Debt Ratio

Bugs(Reliability)

일반적으로 잠재적인 버그 혹은 실행시간에 예상되는 동작을 하지 않는 코드를 나타낸다. 

  • Code Smells
  • Debt
  • Debt Ratio

Vulnerabilities(Security)

해커들에게 잠재적인 약점이 될 수 있는 보안상의 이슈를 말한다. SQL 인젝션, 크로스 사이트 스크립팅과 같은 보안 취약성을 찾아낸다.

  • Code Smells
  • Debt
  • Debt Ratio

Duplications

코드 중복은 코드의 품질을 저해시키는 가장 큰 요인 중 하나이다.

  • Density
  • Duplicated Lines
  • Duplicated Blocks
  • Duplicated Files

Unit Tests

단위테스트 커버리지를 통해 단위 테스트의 수행 정도와 수행한 테스트의 성공/실패 정보를 제공한다.

Unit Test Coverage

  • Line Coverage : 구문 커버리지
  • Condition Coverage ; 조건 커버리지

Unit Test Result

  • Unit Tests : 단위 테스트 수
  • Failures : 실패한 단위테스트 코드 수
  • Errors : 에러가 발생한 단위 테스트 코드 수
  • Skipped : 스킵한 단위 테스트 코드 수
  • Success : 단위 테스트 성공률
  • Duration : 단위 테스트 수행에 소요된 시간

Complexity

순환복잡도(Cyclomatic Complexity) 측정

  • 코드의 논리적인 흐름상에 존재하는 독립적인 선형 경로의 개수를 의미

인지복잡도(Cognitive Complexity)  측정

 

Size

소스코드 사이즈와 관련된 다양한 지표를 제공합니다.

  • 코드 라인수
  • 전체 라인수
  • 구문
  • 함수
  • 클래스
  • 파일
  • 디렉토리
  • 주석 수
  • 코멘트 비율

 

사용후기

내가 짠 코드를 완벽하게 검사 할 수는 없으나 간단한 코드들에 대해서는 sonarlint가 지적해주니 사용하면서 많은 도움을 받게 되었다. sonarQube와 같이 서버를 만들지 않고 IDE플러그인 설치만으로도 비교적 가볍게 쓰기도 좋은 플러그인이다.

'개발환경' 카테고리의 다른 글

CRLF와 LF차이의 이해  (0) 2022.03.28
간편하게 ssh접속하기  (0) 2021.06.16
[PostMan] Postman이 느릴 때(CPU/메모리 사용량 증가)  (0) 2020.04.09