소스 코드 최적화
▼소스 코드 최적화
읽기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것을 의미한다.
★클린코드와 베드코드
소스 코드 품질을 위해 기본적으로 지킬 원칙과 기준을 정의한다.
클린 코드 | 베드 코드 |
깔끔하게 잘 정리되어 있는 코드. 중복 코드 제거로 애플리케이션의 설개가 개선되고 가독성이 높아 애플리케시션의 기능이해가 용이하며, 버그를 찾는 속도의 향상 및 개발속도가 빨라 진다. 클린 코드 최적화 원칙: 가독성, 독창성, 단순성, 의존성 배제, 중복성 최소화, 추상화. |
스파게티 코드라고도 불리는 것으로다른 개발자가 로직을 이해하기 어렵게 작성된 코드로 변수와 메소드에 대한 명칭을 알키힘들며, 동일한 처리 로직이 중복하게 작성되어 있는 것을 의미한다. |
유형: 보기좋은 배치, 작은 함수, 분석가능한 제어 흐름, 오류 처리, 간결한 주석, 의미있는 이름. | 유형: 오렴, 문서 부족, 의미없는 이름, 높은 결합도, 아키텍처 침식 |
★스파게티 코드
처리 로직의 제어가 체계화되어 있지 않고 스파게티 면처럼 서로 얽혀 있는 코드이다. 소스 코드 이해 부족으로 인하여 코드를 계속 덧붙이기 할 경우 코드 복잡도가 증가하고 잦은 오류가 발생할 가능성이 있다.
★코드의 간결성 유지 지침
공백을 이용하여 실행문 그룹과 주석을 명확히 구분하고, 복잡한 논리식과 산술식은 괄호와 들여쓰기를 통해 명확히 표현한다. 빈줄을 사용하여 선언부와 구현부를 구별하고 한줄에 되도록 작은 문장을 코딩한다.
★클린 코드의 작성 원칙
가독성: 이해하기 쉬운 용어를 사용하고 들여쓰기 등을 활용하여 코드를 쉽게 읽을 수 있도록 작성한다.
단순성: 클래스/메소드/함수는 최소 단위로 분리해 한 번에 한 가지 기능만 처리한다.
의존성 배제: 다른 모듈에 미치는 영향을 최소화하여 코드 변경 시 다른 부분에 영향 없도록 작성한다.
중복성 최소화: 중복된 코드는 삭제하여 공통된 코드로 사용한다.
추상화: 상위 클래스/메소드/함수에서 간략하게 애플리케이션 특성을 나타내고, 상세 내용은 하위 클래스/메소드/함수에서 구현한다.
★외계인 코드
오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이어려운 프로그램을 의미한다.
★소스 코드 최적화 유형
클래스 분할 배치: 하나의 클래스는 하나의 역활만 수행하도록 응집도를 높이도록한다.
모듈 크기를 작게 작성한다.
좋은 이름 사용: 변수나 함수 이름은 네이밍 룰을 정의하여 기억하기 좋고, 규칙성 있게 사용한다.
코딩 형식 준수: 개념적 유사성 높은 종속 함수를 사용하여 논리적으로 코드를 라인별로 구분하여 가독성을 높인다.
호출하는 함수는 앞쪽에 배치,호출되는 함수는 뒤쪽에 배치하고, 지역변수는 각 함수 맨 처음에 선언한다.
느슥한 결합: 클래스 간 의존성 을 느슨하게 하기 위해 인터페이스 클래스를 이용하여 추상화된 자료 구조와 메소드를 구현한다.
적절한 주석: 코드의 간단한 기능 안내 및 중요 코드를 표시할 떄 적절히 사용한다.
▼소스코드 품질 분석
★소스코드 품질 분석 도구
소스 코드의 코딩 스타일, 코드에 설정된 코드 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기위해 사용하는 분석도구이다.
정적 분석 도구
- 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 |
★정적 분석과 동적 분석 기술 비교
분류 | 정적 분석 | 동적 분석 |
대상 | 소스코드 | 실제 애플리케이션 |
평가 기술 | 오염 분석, 패턴 비교 | 애플리케이션 실제 실행 |
단계 | 애플리케이션 개발단계 | 애플리케이션 개발 완료 단계 |