이 문서는 SonarQube의 핵심 개념인 클린 코드에 대해 설명한다.
Clean Code란?
클린코드는 소프트웨어가 의도한 대로 동작하며, 높은 품질 기준을 만족하도록 만드는 코드를 의미한다.
클린코드의 핵심 속성은 보안성, 신뢰성, 유지보수성으로, 이를 통틀어 소프트웨어 품질이라고 한다.
Clean Code 정의
클린코드는 다음과 같은 특성을 갖춘 코드를 의미합니다.
일관성(Consistentency)
일관성 코드는 통일되고 전통적인 방식으로 작성되며, 모든 코드는 서로 다른 시간에 여러 명의 기여자가 있더라도 유사해 보이고 규칙적인 패턴을 따른다. 형식이 지정되고 일반적이며 식별 가능하다.
- 형식화(Formatted) : 체계적이고 규칙적인 코드. 간격, 들여쓰기, 문자 배치와 같은 비의미적 선택은 코드베이스 전체에서 일관되게 유지되어 파일과 작성자 간에 통일성을 유지한다.
- 규칙화(Conventional) : 예상된 지침에 따라 작업을 수행하는 코드. 똑같이 좋은 옵션이 있는 경우 코드는 모든 인스턴스에서 단일 선택을 고수하며 언어 규칙을 선호한다. 여기에는 적절한 프로그래밍 인터페이스와 언어 기능을 사용하는 것이 포함된다.
- 식별 가능(Identifiable) : 이름은 언어 규칙을 기반으로 한 일반적인 구조를 따르며 식별자에 사용되는 대/소문자 구분 기호, 접미사, 접두사는 임의의 차이 없이 목적을 갖는다.
의도성(Intentionality)
의도성 코드는 정확하고 목적이 있고 모든 지시사항은 의미가 있고 적절하게 구성되어 있으며 동작을 명확하게 전달한다. 명확하고 논리적이며 완전하고 효율적이다.
- 명확함(Clear) : 명확한 코드는 설명이 필요 없으며 해당 기능을 투명하게 전달하며, 불필요하고 영리하거나 복잡한 솔루션을 피하고 모호성을 최소화하는 간단한 방식으로 작성된다.
- 논리적(Logical) :논리적인 코드에는 함께 작동하는 잘 구성되고 건전한 지침이 있으며, 예측할 수 없거나 불쾌감을 줄 수 있는 명시적인 오류, 모순 및 명령이 없다.
- 완성적(Complete) : 완성적인 코드는 구성이 포괄적이고 적절하고 철저하게 사용된다. 코드는 기능적이며 암시된 목표를 달성한다. 명백히 불완전하거나 부족한 솔루션은 없다.
- 효율성(Efficient) : 효율적인 코드는 불필요한 낭비 없이 리소스를 활용한다. 가능한 경우 경제적인 옵션을 우선시하여 메모리, 프로세서, 디스크 또는 네트워크 리소스의 불필요한 소비를 방지한다.
적응성(Adaptability)
적응성 코드는 쉽게 진화하고 자신있게 개발할 수 있도록 구성되어 있다. 부품을 쉽게 확장하거나 용도를 변경할 수 있으며 바람직하지 않은 부작용 없이 국부적인 변경을 촉진한다. 집중적이고 고유하며 모듈식이며 테스트된다.
- 집중형(Focused) : 집중형 코드에는 단일하고 좁은 특정 범위가 있다. 각 유닛은 지침이 너무 많이 축적되거나 너무 복잡해지지 않고 하나의 간결한 목적만 가져야 한다.
- 구별성(Distinct) : 구별성 코드 절차와 데이터가 과도하게 중복되지 않고 고유하고 구별된다. 코드베이스에는 더 작은 공유 세그먼트로 분해될 수 있는 중요한 반복이 없다.
- 모듈형(Modular) : 모듈형 코드를 구성하고 배포하여 부분 간의 분리를 강조한다. 코드 내의 관계는 신중하게 관리되어 최소한으로 명확하게 정의된다.
- 테스트됨(Tested) : 테스트 된 코드에는 기능에 대한 확신을 제공하는 자동화된 검사가 포함되어 있다. 기능적 회귀 위험 없이 구현 변경을 가능하게 하는 충분한 테스트 범위를 갖추고 있다.
책임성(Responsibility)
책임성 코드는 데이터에 대한 윤리적 의무와 사회적 규범을 고려한다. 합법적이고, 신뢰할 수 있으며, 존중적이다.
- 합법적(Lawful) : 합법적 코드는 라이센스 및 저작권 규정을 존중한다. 이는 작성자의 권리를 행사하고 자신의 코드에 라이선스를 부여할 수 있는 다른 사람의 권리를 존중한다.
- 신뢰적(Trustworthy) : 신뢰적 코드는 개인 정보를 공개하거나 하드 코딩하지 않는다. 자격 증명 및 개인 식별 정보와 같은 민감한 개인 정보를 보존한다.
- 존중적(Respectful) : 존중적 코드는 차별적이고 공격적인 언어 사용을 자제한다. 동일한 의미를 전달하는 대안이 존재할 때마다 포괄적인 용어를 우선시하기로 결정한다.
CleanCode 이점 : 소프트웨어 품질
Clean Code는 안전하고 안정적이며 유지 관리가 가능한 소프트웨어로 이어진다.
보안, 신뢰성, 유지 관리성이라는 세 가지 측면을 Sonar 솔루션에서는 소프트웨어 품질(Software qualities)이라고 부르며 , 이는 소프트웨어의 장기적인 가치에 기여한다.
보안(Security)
보안은 무단 액세스, 사용 또는 파괴로부터 소프트웨어를 보호하는 것이다.
신뢰성(Reliability)
소프트웨어가 명시된 기간 동안 명시된 조건에서 성능 수준을 유지할 수 있는 방법을 측정한 것이다.
유지 관리성(Maintainability)
유지 관리성은 소프트웨어 코드를 쉽게 수정, 개선 및 이해할 수 있음을 의미한다.
Clean Code 기반의 코드 분석
Sonar 솔루션은 코드의 클린 코드를 방해하는 모든 문제를 식별하는 것을 목표로 한다.
각 Clean Code 속성은 일련의 규칙에 따라 특정 언어에 대해 평가됩니다.
- 각 규칙(Rule):
- 각 규칙은 평가하는 Clean Code 속성과 연관되어 있다.
- 각 규칙은 클린 코드 속성이 기여하는 소프트웨어 품질과 연관되어 있다.
각 관련 소프트웨어 품질(보안, 신뢰성 또는 유지 관리 가능성)에는 심각도(높음, 중간 또는 낮음)가 지정된다. 심각도(Severity)는 규칙이 위반될 때 소프트웨어 품질이 얼마나 영향을 받는지 결정한다. - 규칙이 위반되면 이슈(Issue)가 제기된다. 이슈(Issue)는 규칙(Rule)에서 상속된 다양한 심각도로 하나 이상의 소프트웨어 품질에 영향을 미친다.