소프트웨어 테스트
기능
과 성능
, 사용성
, 안정성
을 만족하는지 확인소프트웨어 결함
을 찾아내는 활동소프트웨어 테스트 필요성
동료 검토
, 워크 스루
, 인스펙션
등을 통해 오류를 사전에 발견반복적인 테스트
를 거침. 신뢰도 향상소프트웨어 테스트의 기본 원칙
💡 소프트웨어 테스트 원리
- 결함 존재 증명 : 테스트는 결함이 존재함을 밝히는 활동, 결함이 없다는 것은 증명 ❌
- 완벽 테스팅은 불가능 : 무한 입력값으로 완벽한 테스트는 어려움
- 초기 집중 : 개발
초기
에 체계적인 분석을 하면, 테스팅 기간 단축 가능- 결함 집중 : 파레토 법칙의 내용인 적은 수의 모듈(
20%
)에서 결함 (80%
) 발견- 살충제 패러독스 :
동일한 테스트 케이스
에 의한 반복적 테스트는 새로운 버그 발견 ❌- 정황 의존성 : 소프트웨어의
성격
에 맞게 테스트를 수행해야함- 오류-부재의 궤변 :
요구사항을 충족
시켜주지 못하면, 품질이 높은 건 아님
💡 소프트웨어 테스트 산출물
- 테스트 계획서 : 테스트 목적과 범위 정의, 구조 파악, 수행 절차 등
테스트 수행을 계획
- 테스트 베이시스 : 테스트 설계를 위해
기준
이 되는 문서 (요구사항 명세서)- 테스트 케이스 : 설계된 입력값, 실행 조건, 기대 결과로 구성된
테스트 항목
의 명세서- 테스트 슈트 : 실행 환경에 따라 구분해 놓은
테스트 케이스의 집합
- 테스트 시나리오 : 테스트 되어야 할
기능 및 특징
, 테스트가 필요한상황
을 작성
- 단일 시나리오에서, 여러 개의 테스트 케이스를 포함
- 테스트 스크립트 : 테스트 케이스의
실행 순서
를 작성한 문서
- 특정 기능에 대한
상세 절차
/ 테스트 스크립트 -개략적
- 테스트 결과서 : 테스트 프로세스를 리뷰하고,
결과
를 평가하고 리포팅
프로그램 실행 여부에 따른 분류
실행하지 않고
, 구조 분석, 논리성 검증실행하고
, 테스트를 수행하며 결함 검출테스트 기법에 따른 분류
화이트 박스 테스트
- 응용 프로그램의 내부 구조와 동작 검사
- 코드 분석과 프로그램 구조에 대한 지식 바탕, 결함 발생 가능성이 있는 모듈 테스트
💡 화이트 박스 테스트 유형 ⭐구결조 조변다 기제데루
- 구문 커버리지 : 모든 명령문을 적어도 한번 수행
- 결정 커버리지 : 분기의 전체 조건식이 적어도 한번은 참과 거짓의 결과 수행
(x < 30 and y > 30)
→ 전체 조건식 참/거짓- 조건 커버리지 : 분기의 개별 조건식이 적어도 한번은 참과 거짓의 결과 수행
(x < 30)
and(y > 30)
→ 각각 참/거짓 만족- 조건/결정 커버리지 : 전체 조건식 뿐만아니라 개별 조건식도 참 거짓 결과
(x < 30 and y > 30)
/(x < 30)
and(y > 30)
→ 모두 참 거짓- 변경 조건/결정 커버리지 : 개별 조건식이 다른 개별 조건식에 영향을 받지 않고, 전체 조건식에 독립적으로 영향을 주도록 함
- 다중 조건 커버리지 : 모든 개별 조건식의 모든 가능한 조합을 100% 만족
(x < 30)
and(y > 30)
→ (T,T) / (T,F) / (F,T) / (F,F)- 기본 경로 커버리지 : 수행 가능한 모든 경로 테스트
맥케이브 순환복잡도
: V(G) = E-N+2 (간선-노드+2) / V(G) = P+1 (조건 분기문)- 제어 흐름 테스트 : 제어 구조를 그래프 형태로 나타냄. 내부 로직 테스트
- 데이터 흐름 테스트 : 데이터 사용현황을 추가한 그래프
- 루프 테스트 : 반복 구조에 초점을 맞춰 실시하는 테스트 기법
블랙박스 테스트
- 기능 및 동작 위주, 내부 구조를 알지 못해도 가능
💡 블랙박스 테스트 유형 ⭐ 동경결상 유분페원비오
- 동등 분할 테스트 : 데이터의 영역을
유사한 도메인 별
로 유효값/ 무효값을 그룹핑- 경계값 분석 테스트 :
경계값
을 포함하여 테스트 케이스 설계, MIN 위, MAX 아래- 결정 테이블 테스트 : 요구사항의
논리와 발생조건, 테이블
형태로 나열, 모두 조합- 상태 전이 테스트 : 객체의
상태를 구분
,상태 전이
경우의 수 테스트- 유스케이스 테스트 : 유스케이스로 모델링, 프로세스 흐름을 기반으로 테스트 명세
- 분류트리 테스트 : SW 전체를
트리 구조
로 분석 및 표현, 테스트 진행- 페어와이즈 테스트 : 데이터를
가능한 한 번씩 조합
, 상대적 적은 양의 테스트 구성- 원인-결과 그래프 테스트 :
그래프
를 활용하여, 데이터 간의 관계 및 출력의 영향- 비교 테스트 :
여러 버전
의 프로그램에같은 값
을 넣어 테스트, 값 비교- 오류 추정 테스트: 개발자가 범할 수 있는
실수 추정
, 결함이 검출 되도록 테스트
테스트 시각에 따른 분류
테스트 목적에 따른 분류
실패를 유도
하고, 시스템 정상적 복귀 여부
테스트보안적 결함
을 미리 점검하는 테스트 기법응답하는 시간
, 처리 업무량
, 반응하는 속도
등을 테스트논리 경로
, 소스 코드의 복잡도
평가새롭게 유입된 오류
가 없는지 일종의 반복 테스트 기법동일한 데이터를 입력 후 결과 비교
성능 테스트 상세 유형
부하를 계속 증가
시키면서, 시스템의 임계점
찾기임계점 이상
의 부하를 가하여 비정상적인 상황에서 시스템 동작 상태 확인짧은 시간
에 사용자가 몰릴 때 시스템의 반응 측정높은 부하
를 가하여 시스템의 반응 테스트리뷰 : 소프트웨어의 진행 상황 점검하기 위한 활동
전문가
가 문제를 찾아내는 방식회의 전에 배포
, 사전 검토 후 짧은 시간동안 회의 진행정적 분석 : 자동화된 도구 이용, 산출물의 결함 검출, 복잡도
구조 기반 테스트, 코드 기반 테스트, 로직 기반 테스트, 글래스 박스 테스트
라고도 불림기능
을 모수로 설정, 수행된 기능의 수 측정라인 수
를 모수로 설정, 테스트 시나리오가 수행한 코드의 라인 수 측정구문, 조건, 결정, 구조 코드
자체가 얼마나 테스트 되었나모든 명령문
을 적어도 한번 수행전체 조건식
이 적어도 적어도 한 번 참, 거짓 결과 수행if x>1 or y>3:
z *= x
if x<2 or y>1:
z += 1
테스트 케이스 | (x>1) or (y>3) | x<2 or y>1 |
---|---|---|
x=1.5, y=2, z=2 | T | T |
x=3, y=2, z=1 | T | F |
x=1, y=3, z=3 | F | T |
개별 조건식
이 적어도 한번은 참, 거짓의 결과 수행 (코드는 위와 동일) → 테스트 케이스 순차적 수행
테스트 케이스 | x > 1 | y > 3 | x < 2 | y > 1 |
---|---|---|---|---|
x=3, y=0.5, z=2 | T | F | F | F |
x=1, y=3, z=3 | F | F | T | T |
x=0.5, y=4, z=1 | F | T | T | T |
y > 3
부분에서 테스트 케이스 3번째까지 가야 조건 커버리지 만족블랙박스 테스트
경험 기반 테스트
경험에 바탕
을 두고 기능 수행테스트 케이스
설계특정 요구사항에 준수하는지를 학인하기 위해 개발된 입력 값, 실행 조건, 예상된 결과
공통 작성 항목 요소
개별 작성 항목 요소
모든 입력값
에 대하여 결과 생성, 발생된 오류를 모두 검출 가능특정한 몇 개의 입력값
에 대해서만 결과 제공휴리스틱(추정)
함결과 값이 같은지
확인
태스트 레벨은 함께 편성되고 관리되는 테스트 활동의 그룹
테스트 레벨 종류
개발자 환경
에 통제된 환경에서 개발자와 함께하는 인수 테스트실제 환경
에서 사용자가 사용하고 피드백 받는 인수 테스트동작 순서
를 기술한 문서
단위 테스트 개념
단위 테스트 수행 도구
상위 모듈
역할, 인자를 통해 넘겨줌, 결과 값 전달하위 모듈
의 역할, 시험용 모듈단위 테스트가 끝난 모듈에 대해서 설계 단계에서 제시한 기능으로 구현되었는지 확인
통합 테스트 방식
스텁
사용드라이버
사용테스트 도구를 활용하여 반복적인 테스트 작업을 스크립트 형태로 구현
테스트 자동화 도구의 장단점
테스트 자동화 도구 유형
코딩 표준
, 코딩 스타일
, 코드 복잡도 및 남은 결함 발견성능
목표 테스트테스트 하네스
결함 : 개발자가 설계한 것과 다르게 동작하거나 다른 결과가 발생하는 현상
결함의 원인
이 되는 것, 일반적으로 사람에 의해 생성된 실수고장
을 일으키게 함예상치 못한 결과
가 나는 현상어플리케이션 성능 측정 지표
⭐ 처응경자 : 처의 응원을 받은 경호 자원봉자사
처리할 수 있는
트랜잭션의 수, 웹의 경우 시간당 페이지 수
응답 출력
이 개시될 때까지의 시간
요구를 입력한 시점
부터, 트랜잭션을 처리, 결과의 출력이 완료
할 때까지 시간CPU, 메모리, 네트워크 사용량
유형별 성능 분석 도구
- 성능/부하/스트레스 점검 도구 : 성능 점검을 위해 가상의 사용자를 점검 도구 상에서 테스트
- 모니터링 도구 : 어플리케이션 실행 시, 자원 사용량 확인하고 분석 가능한 도구
- 성능 모니터링, 성능 저하 원인 분석, 시스템 부하량 분석 등을 지원하는 도구
소스 코드 최적화
Bad Code : 개발자가 로직을 이해하기 어렵게 작성한 코드, 서로 얽혀 있는 스파게티 코드 등
Clean Code : 가독성이 높고, 단순, 의존성을 줄이고, 중복을 최소화
들여쓰기
기능을 사용클래스/메소드/함수를 최소 단위
로 분리영향도를 최소화
, 코드의 변경이 다른 부분에 영향이 없게 작성중복된 코드를 제거
, 공통된 코드를 사용동일한 수준의 추상화
구현리팩토링 : 기능을 변경 ❌, 복잡한 소스 코드를 수정, 보완하여 가용성 및 가독성을 높이는 기법
코딩 스타일, 설정된 코딩 표준, 코드의 복잡도, 메모리 누수 현황
등을 발견실행하지 않고
, 코드 자체만으로 결함을 발견실행하여
. 메모리 누수나 스레드 결함 분석