테마
성능 지표와 코드 품질
애플리케이션이 맞게 동작해도 느리거나 코드가 읽기 어려우면 품질이 낮다. 그래서 테스트 단계에서는 성능을 숫자로 재는 지표와 코드 품질을 높이는 원칙·도구도 함께 다룬다. 실기 시험은 성능 지표 네 가지의 정의, 클린 코드 원칙의 이름, 코드 분석 도구가 정적인지 동적인지를 묻는다.
애플리케이션 성능 지표
"빠르다"는 말로는 개선을 판단할 수 없어 정해 둔 지표로 잰다.
| 지표 | 무엇을 재나 |
|---|---|
| 처리량 | 단위 시간에 끝낸 작업 건수 |
| 응답 시간 | 요청부터 첫 응답 도착까지 |
| 경과 시간 | 요청부터 처리 완료까지 |
| 자원 사용률 | 처리 중 CPU·메모리·네트워크 사용량 |
처리량(throughput)은 초당 처리 건수처럼 양을 잰다. 응답 시간(response time)은 사용자가 첫 반응을 받기까지의 기다림을 잰다. 경과 시간(turnaround time)은 반환 시간이라고도 하며, 응답의 시작이 아니라 작업이 완전히 끝날 때까지를 잰다는 점이 응답 시간과 다르다. 자원 사용률(resource usage)은 같은 일을 하면서 자원을 얼마나 쓰는지를 본다.
소스 코드 최적화와 클린 코드
소스 코드 최적화는 나쁜 코드(bad code)를 없애고 클린 코드(clean code)로 작성하는 것이다. 클린 코드는 누구나 쉽게 이해하고 고치고 기능을 더할 수 있는 단순·명료한 코드다. 나쁜 코드의 대표로 로직이 얽혀 흐름을 따라가기 어려운 스파게티 코드(spaghetti code)와, 너무 오래되었거나 문서·개발자가 없어 유지보수가 어려운 외계인 코드(alien code)가 있다.
| 클린 코드 원칙 | 뜻 |
|---|---|
| 가독성 | 누구나 읽기 쉽게, 쉬운 이름과 들여쓰기 |
| 단순성 | 한 번에 한 가지 일, 작은 단위로 분리 |
| 의존성 배제 | 다른 모듈에 주는 영향을 최소화 |
| 중복성 최소화 | 중복을 지우고 공통 코드 사용 |
| 추상화 | 상위는 간략히, 상세는 하위에서 구현 |
가독성과 단순성은 읽는 시간을 줄여 실수를 막고, 의존성 배제와 중복성 최소화는 한 곳의 수정이 여러 곳으로 번지는 일을 줄인다.
소스 코드 품질 분석 도구
코드 분석 도구는 표준 위반·복잡도·메모리 누수(memory leak)를 자동으로 찾는다. 코드를 실행하지 않고 보는 정적 분석(static analysis)과, 실행하면서 보는 동적 분석(dynamic analysis)으로 나뉜다.
| 도구 | 역할 |
|---|---|
| PMD | 여러 언어의 잠재 버그·나쁜 습관 검사, 중복 코드 탐지 |
| Cppcheck | C·C++ 코드의 결함 검사 |
| SonarQube | 여러 언어의 버그·취약점·중복·복잡도를 지속 검사 |
| Checkstyle | Java 코드가 코딩 표준을 지키는지 검사 |
| Cobertura | Java 테스트가 코드를 얼마나 지나갔는지 측정 |
| Valgrind | 실행 중 메모리 누수·스레드(thread) 결함 탐지 |
시험에서는 PMD, Cppcheck, SonarQube, Checkstyle, ccm, Cobertura를 정적 분석 도구로, Avalanche와 Valgrind를 동적 분석 도구로 묶는다. ccm은 C·C++·C# 같은 코드의 순환 복잡도(cyclomatic complexity)를 재는 도구이고, Avalanche는 Valgrind를 바탕으로 프로그램을 입력을 바꿔 가며 실행해 결함을 찾는 도구다. 다만 Cobertura는 공식 설명상 테스트가 접근한 코드 비율을 계산하는 커버리지(coverage) 도구라서, 엄밀히는 테스트를 실행해야 값이 나온다.1
시험 포인트
- 시간당 처리 건수 → 처리량. 첫 응답까지 → 응답 시간. 처리 완료까지 → 경과 시간. CPU·메모리 사용량 → 자원 사용률.
- 클린 코드 원칙 다섯: 가독성·단순성·의존성 배제·중복성 최소화·추상화.
- 로직이 얽힌 코드 → 스파게티 코드. 오래되고 문서·개발자가 없는 코드 → 외계인 코드.
- 정적: PMD·Cppcheck·SonarQube·Checkstyle·ccm·Cobertura. 동적: Avalanche·Valgrind.
참고
시험 답안은 정적 분석 도구 쪽으로 쓰되, 실제 용도가 커버리지 측정이라는 점을 알아 두면 도구 이름을 역할과 짝지을 때 헷갈리지 않는다. ↩︎
