안드레이 2024. 5. 22. 16:53

▼소스 코드 최적화

읽기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것을 의미한다.

 

★클린코드와  베드코드

소스 코드 품질을 위해  기본적으로 지킬 원칙과 기준을 정의한다.

클린 코드 베드 코드
깔끔하게 잘 정리되어 있는 코드. 중복 코드 제거로 애플리케이션의 설개가 개선되고 가독성이 높아 애플리케시션의 기능이해가 용이하며, 버그를 찾는 속도의 향상 및 개발속도가 빨라 진다.
클린 코드 최적화 원칙: 가독성, 독창성,  단순성, 의존성   배제, 중복성 최소화,   추상화.
스파게티 코드라고도 불리는 것으로다른 개발자가 로직을 이해하기 어렵게 작성된 코드로 변수와 메소드에 대한 명칭을 알키힘들며, 동일한 처리  로직이  중복하게 작성되어 있는 것을 의미한다.
유형: 보기좋은  배치, 작은 함수, 분석가능한 제어 흐름,  오류  처리, 간결한 주석,  의미있는 이름. 유형: 오렴, 문서 부족, 의미없는 이름, 높은 결합도, 아키텍처 침식

 

★스파게티 코드

처리 로직의 제어가 체계화되어  있지  않고 스파게티 면처럼 서로 얽혀 있는 코드이다. 소스 코드  이해  부족으로  인하여 코드를 계속 덧붙이기 할 경우 코드 복잡도가 증가하고 잦은 오류가 발생할 가능성이 있다.

 

★코드의 간결성 유지 지침

공백을 이용하여 실행문 그룹과  주석을 명확히 구분하고, 복잡한 논리식과  산술식은 괄호와 들여쓰기를 통해 명확히 표현한다. 빈줄을 사용하여 선언부와 구현부를 구별하고 한줄에 되도록 작은 문장을 코딩한다.

 

★클린 코드의 작성 원칙

가독성: 이해하기 쉬운 용어를 사용하고 들여쓰기 등을 활용하여 코드를 쉽게 읽을 수 있도록 작성한다.

단순성: 클래스/메소드/함수는 최소 단위로 분리해 한 번에 한 가지 기능만 처리한다.

의존성  배제: 다른 모듈에 미치는 영향을 최소화하여 코드 변경 시 다른 부분에 영향 없도록 작성한다.

중복성  최소화: 중복된 코드는 삭제하여 공통된  코드로 사용한다.

추상화: 상위 클래스/메소드/함수에서  간략하게 애플리케이션 특성을 나타내고, 상세  내용은 하위 클래스/메소드/함수에서 구현한다.

 

★외계인 코드

오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이어려운 프로그램을 의미한다.

 

★소스 코드 최적화 유형

클래스 분할 배치: 하나의 클래스는 하나의 역활만 수행하도록 응집도를 높이도록한다.

모듈 크기를 작게 작성한다.

좋은 이름 사용:  변수나 함수 이름은  네이밍 룰을 정의하여 기억하기  좋고, 규칙성 있게  사용한다.

코딩 형식 준수: 개념적 유사성 높은 종속 함수를 사용하여 논리적으로 코드를 라인별로 구분하여  가독성을 높인다.

호출하는 함수는 앞쪽에 배치,호출되는 함수는 뒤쪽에 배치하고, 지역변수는 각 함수 맨 처음에 선언한다.

느슥한 결합: 클래스 간 의존성 을 느슨하게 하기 위해 인터페이스 클래스를 이용하여 추상화된 자료 구조와 메소드를 구현한다.

적절한  주석:  코드의 간단한 기능 안내 및 중요 코드를 표시할  떄 적절히 사용한다.

 

▼소스코드 품질 분석

★소스코드 품질 분석 도구

소스 코드의 코딩 스타일,  코드에 설정된 코드 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함  등을 발견하기위해 사용하는 분석도구이다.

 

정적 분석  도구

- pmd, cppcheck, SonarQube, checkstyle, ccm, cobertuna

도구 설명 지원환경
pmd 소스 코드에 대한 미사용 변수, 최적화되지 않은 결함을 유발할 수 있는 코드 검사 Linux, Windows
cppcheck C/C++ 코드에대한 메모리 누수, 오버플로 분석 Windows
SonarQube 중복코드, 복잡도, 코딩설계 등을 분석 Cross-Platform
checkstyle - 자바 코드 표준 검사
- 다양한 개발도구에 통합 사용 가능
Cross-Platform
ccm 다양한 언어의 복잡도 분석 Cross-Platform
cobertuna 자바 언어의 소스코드 복잡도 분석 및 테스트 커버리지 측정 Cross-Platform

 

동적 분석 도구

- Avalanche, Valgrind

도구 설명 지원환경
Avalanche - Valgrind 프레임워크 및 STP 기반 구현
- 프로그램의 결함 및 취약점 분석
Linux, Android
Valgrind 프로그램의 메모리 및 쓰레드 결함 분석 Cross-Platform

 

★정적 분석과 동적 분석 기술 비교

분류 정적 분석 동적 분석
대상 소스코드 실제 애플리케이션
평가 기술 오염 분석,  패턴 비교 애플리케이션 실제 실행
단계 애플리케이션 개발단계 애플리케이션   개발 완료 단계