소프트웨어 테스트 유형
- 정적 테스트
- 테스트 대상을 실행하지 않고, 구조를 분석하여 논리성을 검증하는 테스트
- 리뷰, 정적 분석
- 동적 테스트
- 소프트웨어를 실행하는 방식으로 테스트를 수행하여 결함 검출
- 화이트박스 테스트, 블랙박스 테스트, 경험기반 테스트
정적 테스트
- 리뷰(Review)
- 소프트웨어의 다양한 산출물에 존재하는 결함을 검출하거나 프로젝트의 진행 상황을 점검하기 위한 활동으로 전문가가 수행한다.
유형
- 관리 리뷰(Management Review)
- 프로젝트 진행 상황에 대한 전반적 검토를 바탕으로 범위, 일정, 인력 등에 대한 통제 및 의사결정을 지원하는 리뷰
- 기술 리뷰(Technical Review)
- 정의된 계획 및 명세를 준수하는지에 대한 검토를 수행하는 리뷰
- 변경 사항이 적절히 구현됐는지 평가하고 여러 대안을 추천하거나 검토
- 인스펙션(Inspection)
- 소프트웨어 요구, 설계, 원시 코드 등의 저작자 외 다른 전문가 혹은 팀이 검사하여 문제를 식별하고 문제에 대한 올바른 해결을 찾아내는 형식적 검토 기법
- 워크스루(Walk Throughs)
- 검토 자료를 회의 전 배포하여 사전검토한 후 짧은 시간 회의하는 형태로 리뷰를 통해 문제 식별, 대안 조사, 개선 활동, 학습 기회를 제공하는 가장 비형식적인 검토 기법
동적 테스트
- 화이트박스 테스트
- 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트 기법
유형
- 구문 커버리지(문장 커버리지)
- 프로그램 내 모든 명령문을 한 번 이상 수행하는 테스트 커버리지
- 결정 커버리지
- 각 분기의 결정 포인트 내 전체 조건식이 한 번 이상 참/거짓으로 수행하는 테스트 커버리지
- 조건 커버리지
- 각 분기 결정 포인트 내 개별 조건식이 한 번 이상 참과 거짓의 결과가 도출되도록 수행하는 테스트 커버리지
- 조건/결정 커버리지
- 전체 조건식 뿐 아니라 개별 조건식도 참 한번, 거짓 한번이 도출되도록 수행하는 테스트 커버리지
- 블랙박스 테스트
- 프로그램 사용자의 요구사항 명세를 보며 수행하는 테스트(기능 테스트) 기법
유형
- 동등분할 테스트
- 입력 데이터의 영역을 유사한 도메인별로 유/무효값을 묶어 대푯값 테스트 케이스를 도출하여 테스트
- 경곗값 분석 테스트
- 테스트케이스를 등가분할한 후 경곗값 주변에서 오류가 나타날 가능성이 높기에 경곗값을 포함하여 테스트를 설계하여 테스트하는 기법
- 결정 테이블 테스트
- 요구사항의 논리와 발생조건을 테이블 형태로 나열하여 조건과 행위를 모두 조합하여 테스트하는 기법
- 상태 전이 테스트
- 테스트 대상, 시스템이나 객체의 상태를 구분하고 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 테스트하는 기법
- 경험기반 테스트
- 유사 소프트웨어나 유사 기술평가에서 테스터가 지닌 경험에 근거한 직관과 기술능력을 바탕으로 수행하는 테스트 기법
유형
- 탐색적 테스트(Exploratory Test)
- 테스트 스크립트 또는 테스트 케이스를 문서로 작성하지 않고 경험에 바탕을 두고 탐색적으로 기능을 수행하며 테스트하는 기법
- 오류 추정(Error Guessing)
- 개발자가 범할 수 있는 실수를 추정하고, 이에 따른 결함이 검출되도록 테스트 케이스를 설계하여 테스트하는 기법
- 체크리스트(Checklist)
- 테스트하고 평가할 내용과 경험을 분류하여 나열한 뒤, 하나씩 확인하는 테스트 기법
- 특성테스트(Characteristics Test)
- 국제표준인 ISO/IEC 9126 등의 품질모델에 있는 품질 특성을 염두하여 경험적으로 테스트 케이스를 설계하고 테스트하는 기법
테스트 목적에 따른 분류
- 회복 테스트(Recovery Testing)
- 시스템에 고의로 실패를 유도하고 시스템의 정상복귀 여부를 테스트하는 기법
- 안전 테스트(Security Testing)
- 불법적 소프트웨어가 접근하여 시스템을 파괴하지 못하도록 소스 코드 내 보안결함을 테스트하는 기법
- 성능 테스트(Performance Testing)
- 사용자의 이벤트에 시스템이 응답하는 시간, 특정 시간 내 처리하는 업무량, 사용자 요구에 시스템이 반응하는 속도 등을 측정하는 테스트 기법
- 구조 테스트(Structure Testing)
- 시스템의 내부 논리 경로, 소스 코드의 복잡도를 평가하는 테스트 기법
- 회귀 테스트(Regression Testing)
- 오류를 제거하거나 수정한 시스템에서 오류 제거와 수정에 의해 새로 발생한 오류가 없는지 확인하는 테스트 기법
성능 테스트 상세 유형
- 부하 테스트(Load Testing)
- 시스템 부하를 증가시키며 임계점을 찾는 테스트
- 스파이크 테스트(Spike Testing)
- 단시간에 사용자가 집중될 때 시스템의 반응을 확인하는 테스트
- 내구성 테스트(Endurance Testing)
- 장시간 시스템에 높은 부하를 가하며 시스템의 반응을 테스트하는 방식
테스트 시나리오 작성
- 테스트 레벨(Test Level)
- 테스트 레벨은 함께 편성되고 관리되는 테스트 활동의 그룹이다.
종류
- 단위 테스트
- 사용자 요구사항에 대한 단위 모듈, 서브루틴 등을 테스트하는 단계
- 자료구조 테스트, 실행경로 테스트, 오류처리 테스트, 인터페이스 테스트
- 통합 테스트
- 단위 테스트를 통과한 모듈 사이 인터페이스, 통합된 컴포넌트 간 상호작용을 검증하는 테스트 단계
- 빅뱅 테스트, 샌드위치 테스트, 상향식 테스트, 하향식 테스트
- 시스템 테스트
- 통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지 검증하는 테스트 단계
- 인수 테스트
- 계약상 요구사항이 만족되었는지 확인하기 위한 테스트 단계
- 계약 인수, 규정 인수, 사용자 인수, 운영상 인수, 알파·베타 테스트
애플리케이션 성능 분석
애플리케이션 성능 측정 지표
- 처리량(Throughput)
- 애플리케이션이 주어진 시간에 처리할 수 있는 트랜잭션의 수
- 웹 애플리케이션의 경우 시간당 페이지 수로 표현
- 응답 시간(Response Time)
- 사용자 입력이 끝난 후 애플리케이션의 응답 출력이 개시될 때까지의 시간
- 웹 애플리케이션의 경우 메뉴클릭시 메뉴가 나타나기까지 소요되는 시간
- 경과 시간(Turnaround Time)
- 애플리케이션에 사용자가 요구를 입력한 시점부터 트랜잭션을 처리 후 그 결과의 출력이 완료될 때까지의 시간
- 자원 사용률(Resource Usage)
- 애플리케이션이 트랜잭션을 처리하는 동안 사용하는 CPU 사용량, 메모리 사용량, 네트워크 사용량
애플리케이션 성능 개선
- 소스 코드 최적화
- 소스코드 최적화는 읽기 쉽고 변경 및 추가가 쉬운 클린 코드를 작성하는 것이다.
- 배드 코드(Bad Code)
- 다른 개발자가 로직을 이해하기 어렵게 작성된 코드
- 외계인 코드(Alien Code)
- 오래되거나 참고문서 혹은 개발자가 없어 유지보수 작업이 어려운 코드
- 스파게티 코드(Spaghetti Code)
- 컴퓨터 프로그램의 소스 코드가 복잡하게 얽힌 모습을 스파게티의 면에 비유한 표현
- 정상 작동은 하나 이해하기 어려운 코드임
- 알 수 없는 변수명
- 변수나 메서드에 대한 이름 정의를 알 수 없는 코드
- 로직 중복
- 클린 코드(Clean Code)
- 잘 작성되어 가독성이 높고 단순하며, 의존성이 적고 중복을 최소화한 코드
클린코드의 특징
- 중복코드 제거로 애플리케이션의 설계가 개선된다.
- 가독성이 높아 애플리케이션의 기능에 대해 쉽게 이해할 수 있다.
- 버그를 찾기 쉬우며 개발 속도가 빨라진다.