2022. 9. 12. 22:08ㆍ정처기(실기)/애플리케이션 테스트 관리
(1) 애플리케이션 성능 점검 개요
1. 애플리케이션 성능 측정 지표
- 처리량(Throuput) : 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수, 웹 애플리케이션의 경우 시간당 페이지 수로 표현
- 응답 시간 : 사용자 입력이 끝난 후, 애플리케이션의 응답 출력이 개시될 때까지의 시간, 애플리케이션의 경우 메뉴 클릭 시 해당 메뉴가 나타나기까지 걸리는 시간
- 경과 시간 : 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료될 때까지 걸리는 시간
- 자원 사용률 : 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 처리량, 메모리 사용량, 네트워크 사용량
2. 유형별 성능 분석 도구
- 성능 분석 도구는 애플리케이션의 성능을 점검하는 도구와 시스템 자원 사용량을 모니터링 하는 도구로 분류할 수 있다.
3. 성능 분석 도구 유형
도구 | 설명 | 지원환경 |
JMeter | HTTP, FTP, LDAP 등 다양한 프로토콜을 지원하는 안전성, 확장성, 부하, 기능 테스트 도구 | 크로스 플랫폼 |
LoadUI | UI를 통해 HTTP, JDBC 등 주로 웹 서비스를 대상으로 서버 모니터링을 지원하는 부하 테스트 도구 | 크로스 플랫폼 |
OpenSTA | HTTP, HTTPS 지원하는 부하 테스트 및 생산품 모니터링 도구 | 윈도즈 |
▼시스템 모니터링 도구
도구 | 설명 | |
Scouter | 단일 뷰 통합/실시간 모니터링, 튜닝에 최적화된 인프라 통합 모니터링 도구 | 크로스 플랫폼 |
Zabbix | 웹기반 서버, 서비스, 애플리케이션 모니터링 도구 | 크로스 플랫폼 |
(2) 애플리케이션 성능 저하 원인
- 애플리케이션의 성능이 저하되는 원인은 크게 DB연결 및 쿼리 실행, 내부적인 요인과 외부적인 요인, 기타 환경 설정이나, 네트워크 등의 문제로 구분할 수 있다.
1. 데이터베이스 관련 성능 저하 원인
- 일반적으로 DB에 연결하기 위해 Connection 객체를 생성하거나 쿼리를 실행하는 애플리케이션 로직에서 성능 저하 또는 장애가 빈번하게 발견된다.
▼데이터베이스 관련 성능 저하 원인
구분 | 설명 |
데이터베이스 락 | 대량의 데이터 조회, 과도한 업데이트, 인덱스 생성 시 발생하는 현상 요청한 작업은 Lock의 해제 시까지 대기하거나 타임 아웃됨 |
불필요한 데이터베이스 패치 | 실제 필요한 데이터보다 많은 대량의 데이터 요청이 들어올 경우 응답시간 저하 현상 발생 결과 세트에서 마지막 위치로 커서를 옮기는 작업이 빈번한 경우 응답시간 저하 현상 발생 |
연결 누수 | DB 연결과 관련한 JDBC 객체를 사용 후 종료하지 않을 경우 발생 |
부적절한 커넥션 풀 크기 | 너무 작거나 크게 설정한 경우 성능 저하 현상이 발생할 가능성 존재 |
확정 관련 | 트랜잭션이 확정되지 않고 커넥션 풀에 반환될 때 성능 저하 가능성 존재 잘못 작성된 코드로 인해 불필요한 확정이 자주 발생하는 경우 성능 저하 가능성 존재 |
2. 내부 로직으로 인한 성능 저하 원인
구분 | 설명 |
웹 애플리케이션의 인터넷 접속 불량 | 웹 애플리케이션의 실행 시 인터넷 접속 불량으로 서버 소켓 쓰기는 지속되나, 클라이언트에서 정상적 읽기가 수행되지 않을 경우 성능 저하 가능성 존재 |
특정 파일의 업로드, 다운로드로 인한 성능 저하 |
대량의 파일을 업로드하거나 다운로드할 경우 처리시간이 길어져서 애플리케이션의 성능 저하 가능성 존재 |
정상적으로 처리되지 않은 오류 처리로 인한 성능 저하 | 오류 처리 로직과 실제 처리 로직 부분을 분리하지 않고 코딩하거나 예외가 발생할 경우에 제대로 처리되지 않아 행이 걸리는 상황이 발생하여 성능 저하 가능성 존재 |
3. 외부 호출로 인한 성능 저하 원인
- 임의의 트랜잭션이 수행되는 동안 트랜잭션이 장시간 수행되거나, 타임아웃이 일어나는 경우 성능 저하 현상이 발생할 수 있다.
4. 잘못된 환경 설정이나 네트워크 문제로 인한 성능 저하 원인
- 환경 설정으로 인한 성능 저하 : 스레드 풀, 힙 메모리의 크기를 너무 작게 설정하면 Heap Memory Full 현상 발생으로 성능 저하 가능성 존재
- 네트워크 장비로 인한 성능 저하 : 라우터, L4 스위치 등 네트워크 관련 장비 간 데이터 전송 실패 또는 전송 지연에 따른 데이터 손실 발생 시 애플리케이션의 성능 저하 또는 장애 발생 가능성 존재
(3) 애플리케이션 성능 테스트 프로세스
테스트 목표 및 목표값을 설정하여 작성 -> 측정 항목을 기술하여 작성 -> 테스트 시나리오 작성 -> 사전 확인 사항 작성
1. 애플리케이션 성능 테스트 수행 절차
성능 테스트 도구 설치 -> 테스트 환경 설정 -> 시나리오 생성 -> 성능 테스트 실행 및 모니터링
(4) 소스 코드 최적화
- 소스 코드 최적화는 읽기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것으로, 소스 코드 품질을 위해 기본적으로 준수해야 할 원칙과 기준을 정의하고 있다.
1. 배드 코드
- 다른 개발자가 로직을 이해하기 어렵게 작성된 코드이다.
- 처리 로직의 제어가 정제되지 않고 서로 얽혀 있는 스파게티 코드, 변수나 메소드에 대한 이름 정의를 알 수 없는 코드, 동일한 처리 로직이 중복되게 작성된 코드 등이 있다.
▼배드 코드 사례
사례 | 설명 |
외계인 코드 | 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 아주 어려운 코드 |
스파게티 코드 | 컴퓨터 프로그램의 소스 코드가 복잡하게 얽힌 모습을 스파게티의 면발에 비유한 표현 스파게티 코드는 작동은 정상적으로 하지만, 사람이 코드를 읽으면서 그 코드의 작동을 파악하기는 어려운 코드임 |
알 수 없는 변수명 | 변수나 메소드에 대한 이름 정의를 알 수 없는 코드 |
로직 중복 | 동일한 처리 로직이 중복되게 작성된 코드 |
▼배드 코드 유형
- 오염 : 비즈니스 기능을 수행하지 못하는 많은 컴포넌트들이 존재
- 문서부족 : 현재 코드와 문서가 일치하지 않고 수정과 변경을 위한 도메인 지식은 크게 증가, 하지만 개발자의 지식부족 초래
- 의미 없는 이름 : 함수, 클래스, 컴포넌트 이름들이 명확한 의미를 갖지 못하거나 실제 작동과 불일치
- 높은 결합도 : 클래스와 컴포넌트 간에 데이터와 컨트롤 흐름이 네트워크로 복잡하게 연결
- 아키텍처 침식 : 아키텍처가 더 이상 구별되지 않고 여러 솔루션으로 이루어져 아키텍처상 변형들로 인해 시스템 품질이 떨어짐
2. 클린 코드
- 잘 작성되어 가독성이 높고 단순하며, 의존성을 줄이고, 중복을 최소화하여 깔끔하게 잘 정리된 코드를 말한다.
- 중복 코드 제거로 애플리케이션의 설계가 개선된다.
- 가독성이 높으므로 애플리케이션의 기능에 대해 쉽게 이해할 수 있다.
- 버그를 찾기 쉬워지며, 프로그래밍 속도가 빨라진다.
▼ 클린 코드의 작성 원칙
- 가독성 : 이해하기 쉬운 용어를 사용, 코드 작성 시 들여쓰기 기능을 사용
- 단순성 : 한 번에 한 가지 처리만 수행, 클래스/메서드/함수를 최소 단위로 분리
- 의존성 최소 : 영향도를 최소화, 코드의 변경이 다른 부분에 영향이 없게 작성
- 중복성 제거 : 중복된 코드를 제거
- 추상화 : 클래스/메서드/함수에 대해 동일한 수준의 추상화 구현
(5) 소스 코드 품질분석
- 소스 코드에 대한 코딩 스타일, 설정된 코딩 표준, 코드의 복잡도, 코드 내에 존재하는 메모리 누수 현황, 스레드의 결함 등을 발견하기 위한 활동이다.
- 정적 분석 도구와 동적 분석 도구가 있다.
- 정적 분석 도구 : 작성된 소스 코드를 실행시키지 않고, 코드 자체만으로 코딩 표준 준수 여부, 코딩 스타일 적정 여부, 잔존 결함 발견 여부를 확인하는 코드 분석 도구
- 동적 분석 도구 : 애플리케이션을 실행하여 코드에 존재하는 메모리 누수 현황을 발견하고, 발생한 스레드의 결함 등을 분석하기 위한 도구
▼소스 코드 품질분석 도구
정적분석 도구
- pmd : 자바 및 타언어 소스 코드에 대한 버그, 데드코드 분석
- cppcheck : C/C++ 코드에 대한 메모리 누수, 오버플로우 등 문제 분석
- SonarQube : 소스 코드 품질 통합 플랫폼, 플러그인 확장기능
- checkstyle : 자바 코드에 대한 코딩 표준 검사 도구
- ccm : 다양한 언어의 코드 복잡도 분석 도구, 리눅스, 맥 환경 CLI 형태 지원
- cobertura : jcoverage 기반의 테스트 커버리지 측정 도구
동적분석 도구
- Avalanche : Valgrind 프레임워크 및 STP 기반 소프트웨어 에러 및 취약점 동적 분석 도구
- Valgrind : 자동화된 메모리 및 스레드 결함 발견 분석 도구
(6) 애플리케이션 성능 개선 방안
- 애플리케이션 개발 프레임워크의 코딩 표준을 설정하고, 인터페이스 클래스를 이용하여 느슨한 결합 코드를 구현한다.
- 인터페이스를 통해 추상화된 자료 구조를 구현하여 의존성을 최소화한다.
'정처기(실기) > 애플리케이션 테스트 관리' 카테고리의 다른 글
애플리케이션 테스트 케이스 설계 (0) | 2022.09.11 |
---|