1. 소스 코드 최적화
- 나쁜 코드 Bad Code
- 프로그램의 로직이 복잡하고 이해하기 어려운 코드
- 나쁜 코드의 종류
- 스파게티 코드 : 코드의 로직이 서로 복잡하게 얽혀 있는 코드
- 외계인 코드 : 아주 오래되거나 참고문서 또는 개발자가 없어 유지 보수 작업이 어려운 코드
- 클린 코드 Clean Code 작성 원칙
- 가독성
- 누구든지 코드를 쉽게 읽을 수 있도록 작성
- 코드 작성 시 이해하기 쉬운 용어를 사용하거나 들여쓰기 기능을 사용
- 단순성
- 코드를 간단하게 작성
- 한 번에 한 가지를 처리하도록 코드를 작성, 클래스/메소드/함수 등을 최소 단위로 분리
- 의존성 배제
- 코드가 다른 모듈에 미치는 영향을 최소화
- 코드 변경 시 다른 부분에 영향이 없도록 작성
- 중복성 최소화
- 코드의 중복을 최소화
- 중복된 코드는 삭제하고 공통된 코드를 사용
- 추상화
- 상위 클래스/메소드/함수 : 애플리케이션 특성 나타냄
- 하위 클래스/메소드/함수 : 상세 내용 구현
- 가독성
2. 소스 코드 최적화 유형
- 클래스 분할 배치 : 하나의 클래스는 하나의 역할만 수행하도록 응집도를 높이고 크기를 작게 작성
- 느슨한 결합 : 인터페이스 클래스를 이용하여 추상화된 자료 구조와 메소드를 구현함으로써 클래스 간의 의존성 최소화
- 코딩 형식 준수
- 줄 바꿈 사용
- 개념적 유사성이 높은 종속 함수 사용
- 호출하는 함수는 선배치, 호출되는 함수는 후배치
- 지역 변수는 각 함수의 맨 처음에 선언
- 좋은 이름 사용 : 기본적인 명명 규칙을 정의하고 규칙에 맞는 이름을 사용
- 적절한 주석문 사용 : 소스 코드 작성 시 앞으로 해야 할 일을 기록하거나 중요한 코드를 강조할 때 주석문을 사용
3. 소스 코드 품질 분석 도구
- 소스 코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구
- 소스 코드 품질 분석 도구 종류
- 정적 분석 도구
- 작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석 도구
- 비교적 애플리케이션 개발 초기의 결함을 찾는데 사용, 개발 완료 시점에서는 개발된 소스 코드의 품질을 검증하는 차원에서 사용
- 자료 흐름이나 논리 흐름을 분석하여 비정상적인 패턴을 찾을 수 있음
- 동적 분석 도구로는 발견하기 어려운 결함을 찾아내고, 소스 코드에서 코딩의 복잡도, 모델 의존성, 불일치성 등을 분석할 수 있음
- 종류 : pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura 등
- 동적 분석 도구
- 작성한 소스 코드를 실행하여 코드에 존재하는 메모리 누수, 스레드 결함 등을 분석하는 도구
- 종류 : Avalanche, Valgrind 등
- 정적 분석 도구
4. 소스 코드 품질 분석 도구의 종류
- pmd : 소스 코드에 대한 미사용 변수, 최적화되지 않은 코드 등 결함을 유발할 수 있는 코드 검사 - Linux, Windows
- cppcheck : C/C++ 코드에 대한 메모리 누수, 오버플로우 등 분석 - Windows
- SonarQube : 중복 코드, 복잡도, 코딩 설계 등을 분석하는 소스 분석 통합 플랫폼 - Cross-Plafform
- checkstyle : 자바 코드에 대해 소스 코드 표준을 따르고 있는지 검사, 다양한 개발 도구에 통합하여 사용 - Cross-Plafform
- ccm : 다양한 언어의 코드 복잡도를 분석 - Cross-Plafform
- cobertura : 자바 언어의 소스 코드 복잡도 분석 및 테스트 커버리지를 측정 - Cross-Plafform
- Avalanche : Valgrind 프레임워크 및 STP 기반으로 구현, 프로그램에 대한 결함 및 취약점을 분석 - Linux, Android
- Valgrind : 프로그램 내에 존재하는 메모리 및 쓰레드 결함 등을 분석 - Cross-Plafform
'자격증 > 정보처리기사' 카테고리의 다른 글
[정보처리기사 필기] 인터페이스 구현 - 055. 모듈 연계를 위한 인터페이스 기능 식별 (0) | 2025.01.13 |
---|---|
[정보처리기사 필기] 인터페이스 구현 - 054. 모듈 간 공통 기능 및 데이터 인터페이스 확인 (0) | 2025.01.13 |
[정보처리기사 필기] 애플리케이션 테스트 관리 - 052. 복잡도 (0) | 2025.01.13 |
[정보처리기사 필기] 제품 소프트웨어 패키징 - 037. 소프트웨어 패키징 (0) | 2025.01.12 |
[정보처리기사 필기] 애플리케이션 설계 - 023. 디자인 패턴 (0) | 2025.01.10 |