🍏 Application Testing
Fault(결함)
결함은 오류 발생, 작동 실패 등과 같이 소프트웨어가 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생되는 것을 의미한다.
- 사용자가 예상한 결과와 실행 결과 간의 차이나 업무 내용과의 불일치 등으로 인해 변경이 필요한 부분도 모두 결함에 해당된다.
애플리케이션 성능 측정 지표
애플리케이션 성능이란 최소한의 자원을 사용하여 최대한 많은 기능을 신속하게 처리하는 정도를 나타낸다.
- Throughput(처리량) : 일정 시간 내에 애플리케이션이 처리하는 일의 양
- Response Time(응답 시간) : 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간
- Turn Around Time(경과 시간) : 애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간
- Resource Usage(자원 활용률) : 애플리케이션이 의뢰한 작업을 처리하는 동안의 CPU 사용량, 메모리 사용량, 네트워크 사용량 등 자원 사용률
Time Complexity and Big-O Notation
알고리즘을 평가할 때, Time Complexity(시간복잡도)와 Space Complexity(공간 복잡도)를 사용한다.
- 시간 복잡도: 알고리즘의 수행시간을 평가
- 공간 복잡도: 알고리즘 수행에 필요한 메모리 양을 평가
시간 복잡도가 Worst Case(최악의 경우)일 때 Big-O표기법을 사용한다.
Big-O표기법은 알고리즘의 성능을 수학적으로 표현해주는 표기법이다.
시간 복잡도 | | 예 |
---|
O(1) | 입력값(n)에 관계 없이 일정하게 문제 해결에 하나의 단계만을 거침 | 스택의 삽입(Push), 삭제(Pop) |
O(log2n) | 문제 해결에 필요한 단계가 입력값(n) 또는 조건에 의해 감소함 | 이진트리(Binart Tree), 이진검색(Binary Search) |
O(n) | 문제 해결에 필요한 단계가 입력값(n)과 1:1의 관계를 가짐 | for문 |
O(nlog2n) | 문제 해결에 필요한 단계가 n(log2n)번만큼 수행됨 | 힙 정렬(Heap Sort), 2-Way 합병 정렬(Merge Sort) |
O(n2) | 문제 해결에 필요한 단계가 입력값(n)의 제곱만큼 수행됨 | 삽입 정렬(Insertion Sort), 쉘 정렬(Shell Sort), 선택 정렬(Selection Sort), 버블 정렬(Bubble Sort), 큌 정렬(Quick Sort) |
O(2n) | 문제 해결에 필요한 단계가 2의 입력값(n) 제곰만큼 수행됨 | 피보나치 수열(Fibonacci Sequence) |
Cyclomatic Complexity(순환 복잡도)
순환 복잡도는 한 프로그램의 논리적인 복잡도를 측정하기 위한 소프트웨어의 척도이다.
- McCabe's Cyclomatic(맥케이브 순환도)라고도 함
- 제어 흐름도 G에서 순환 복잡도 V(G)는 다음과 같이 계산할 수 있다.
- 순환 복잡도는 제어 흐름도의 영역 수와 일치하므로 영역 수를 계간
V(G) = E - N + 2
: E는 화살표 수, N는 노드의 수
ex) 순환 복잡도 = 화살표의 수 - 노드의 수 + 2 이므로
6 - 4 + 2 = 4, ∴ 4

Optimization of source code
소스 코드의 최적화는 Bad Code(나쁜 코드)를 배제하고 Clean Code(클린 코드)로 작성하는 것이다.
- 나쁜 코드로 작성된 애플리케이션의 코드를 클린 코드로 수정하면 애플리케이션의 성능이 개선됨
- Clean Code : 누구나 쉽게 이해하고 수정 및 추가할 수 있는 단순, 명료한 코드, 즉 잘 작성된 코드
- Bad Code : 프로그램의 Logic(로직)이 복잡하고 이해하기 어려운 코드
- Spaghetti Code(스파게티 코드) : 코드이 로직이 서로 복잡하게 얽혀 있는 코드
- Alien Code(외계인 코드) : 아주 오래되거나 참고문서 또는 개발자 없이 유지보수 작업이 어려운 코드
Clean Code 작성 원칙
- 가독성
- 단순성
- 의존성 배제
- 중복성 최소화
- 추상화
소스 코드 품질 분석 도구는 소스 코드의 코딩 스타일, 코드에 설정된 코딩 표준, 코드의 복잡도, 코드에 존재하는 메모리 누수 현상, 스레드 결함 등을 발견하기 위해 사용하는 분석 도구이다.
- Statci Analysis Tools(정적 분석 도구) :
- 작성한 소스 코드를 실행하지 않고 코딩 표준이나 코딩 스타일, 결함 등을 확인하는 코드 분석 도구
- pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura...
- Dynamic Analysis Tools(동적 분석 도구) :
- 소스 코드를 직접 실행하여 프로그램의 동작이나 반응을 추적하고 보고하는 분석 도구로, 프로그램 모니터링 기능이나 스냅샷 생성 기능들을 포함하며 메모리 누수, 스레드 결함 등을 분석함
- Avalanche, Valgrind...
참고,
길벗알앤디. 『정보처리기사 실기 단기완성』. 길벗. 2023.
https://yoongrammer.tistory.com/79