728x90
소프트웨어 테스트 원리
소프트웨어 테스트 원리 [2020년 1회]
원리 | 설명 |
결함 존재 증명 | - 결함이 존재함을 밝히는 활동 - 결함이 없다는 것을 증명할 수는 없음 - 결함을 줄이는 활동 |
완벽 테스팅은 불가능 | - 완벽하게 테스팅하려는 시도는 불필요한 시간과 자원낭비 - 무한경로(한 프로그램 내의 내부 조건은 무수히 많을 수 있음), 무한 입력값(입력이 가질 수 있는 모든 값의 조합이 무수히 많음)으로 인한 테스트 어려움 |
초기 집중 | - 조기 테스트 설계 시 장점: 테스트 결과를 단시간에 알 수 있고, 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 및 결함 예방 - SW 개발 초기 체계적인 분석 및 설계가 수행되지 못하면 그 결과가 프로젝트 후반에 영향을 미치게 되어 비용이 커진다는 요르돈의 법칙 적용(Snowball Effect, 눈덩이 법칙) |
결함 집중 | - 적은 수의 모듈에서 대다수의 결함이 발견됨 - 소프트웨어 테스트에서 오류의 80%는 전체 모듈의 20% 내에서 발견 - 파레토의 내용인 80 대 20 법칙 적용 |
살충제 패러독스 | - 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그를 찾지 못함 - 테스트 케이스의 정기적 리뷰와 개선 및 다른 시각에서의 접근이 필요 |
정황 의존성 | - 소프트웨어의 성격에 맞게 테스트 실시 - 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행 |
오류-부재의 궤변 | - 요구사항을 충족시켜주지 못한다면, 결함이 없다고 해도 품질이 높다고 볼 수 없음 |
테스트 기법에 따른 분류
테스트 기법에 따른 분류에는 화이트박스 테스트와 블랙박스 테스트가 있다.
① 화이트박스 테스트(White-Box Test) [2021년 2회]
- 화이트박스 테스트는 각 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트이다.
- 화이트박스 테스트는 코드 분석과 프로그램 구조에 대한 지식을 바탕으로 문제가 발생할 가능성이 있는 모듈 내부를 테스트하는 방법이다.
- 소스 코드의 모든 문장을 한 번 이상 수행함으로써 진행되고, 산출물의 기능별로 적절한 프로그램의 제어 구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검한다.
- 화이트박스 테스트는 내부 소스 코드의 동작을 개발자가 추적할 수 있기 때문에, 동작의 유효성뿐만 아니라 실행되는 과정을 확인할 수 있다.
- 화이트박스 테스트는 구조 기반 테스트, 코드 기반 테스트, 로직 기반 테스트, 글래스(Glass) 박스 테스트라고 부른다.
유형 | 내용 |
구문 커버리지 = 문장 커버리지 (Statement Coverage) |
- 구문 커버리지는 프로그램 내의 모든 명령문을 적어도 한 번 수행하는 커버리지 - 조건문 결과와 관계없이 구문 실행 개수로 계산 |
결정 커버리지 = 선택 커버리지 (Decision Coverage) = 분기 커버리지 (Branch Coverage) [2020년 3회] |
- 결정 커버리지는 (각 분기의) 결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)와 거짓(F)의 결과를 수행하는 테스트 커버리지 - 구문 커버리지를 포함 - 결정 커버리지는 (각 분기의) 결정 포인트 내의 전체 조건식이 적어도 한 번은 참(T)과 거짓(F)의 결과를 수행하는 테스트 커버리지이다. - 결정 커버리지는 선택 커버리지(Decision Coverage), 분기 커버리지(Branch Coverage)라고도 한다. - 결정 커버리지는 구문 커버리지를 포함한다. |
조건 커버리지 (Condition Coverage) |
- 조건 커버리지는 (각 분기의) 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행하는 테스트 커버리지 - 구문 커버리지를 포함 |
조건/결정 커버리지 (Condition/Decision Coverage) |
- 조건/결정 커버리지는 전체 조건식뿐만 아니라 개별 조건식도 참 한 번, 거짓 한 번 결과가 되도록 수행하는 테스트 커버리지 |
변경 조건/결정 커버리지 (Modified Condition/ Decision Coverage) |
- 변경 조건/결정 커버리지는 개별 조건식이 다른 개별 조건식에 영향을 받지 않고 전체 조건식에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시킨 커버리지 |
다중 조건 커버리지 (Multiple Condition Coverage) |
- 다중 조건 커버리지는 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 커버리지 |
기본 경로 커버리지 =경로 커버리지 (Base Path Coverage) |
- 기본 경로 커버리지는 수행 가능한 모든 경로를 테스트하는 기법 |
제어 흐름 테스트 (Control Flow Testing) |
- 제어 흐름 테스트는 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법 |
데이터 흐름 테스트 (Data Flow Testing) |
- 데이터 흐름 테스트는 제어 흐름 그래프에 데이터 사용현황을 추가한 그래프를 통해 테스트하는 깁버 |
② 블랙박스 테스트(Black-Box Test) [2020년 3회, 2021년 3회]
- 블랙박스 테스트는 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)이다.
유형 | 내용 |
동등분할 테스트 =동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트 (Equivalence Partitioning Testing) |
- 동등분할 테스트는 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법 |
경계값 분석 테스트 =한곗값 테스트 (Boundary Value Analysis Testing) |
- 경곗값 분석 테스트는 등가 분할 후 경계값 부분에서 오류 발생 확률이 높기 때문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법 - 최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법 |
결정 테이블 테스트 (Decision Table Testing) |
- 결정 테이블 테스트는 요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법 |
상태 전이 테스트 (State Transition Testing) |
- 상태 전이 테스트는 테스트 대상/시스템이나 객체의 상태를 구분하고, 이벤트에 의해 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법 |
유스케이스 테스트 (Use Case Testing) |
- 유스케이스 테스트는 시스템이 실제 사용되는 유스케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트케이스를 명세화하여 수행하는 테스트 기법 |
분류 트리 테스트 (Classification Testing) |
- 분류 트리 테스트는 SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법 |
페어와이즈 테스트 (Pairwise Testing) |
- 페어와이즈 테스트는 테스트 데이터값들 간에 최소한 한 번씩을 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법 |
원인-결과 그래프 테스트 (Cause-Effect Graph Testing) |
- 원인-결과 그래프 테스트는 그래프를 활용하여 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석하여 효용성이 높은 테스트 케이스를 선정하여 테스트하는 기법 |
비교 테스트 (Comparision Testing) |
- 비교 테스트는 여러 버전의 프로그램에 같은 입력값을 넣어서 동일한 결과 데이터가 나오는지 비교해 보는 테스트 기법 |
- 블랙박스 테스트는 소프트웨어의 특징, 요구사항, 설계 명세서 등에 초점을 맞춰 테스트가 이루어진다.
- 블랙박스 테스트는 기능 및 동작 위주의 테스트를 진행하기 때문에 내부 구조나 작동 원리를 알지 못해도 가능하다.
- 블랙박스 테스트는 곧 명세 테스트라고도 불린다.
블랙박스 테스트(명세 기반 테스트) [2021년 1회]
- 블랙박스 테스트는 프로그램 외부 사용자의 요구사항 명세를 보면서 수행하는 테스트(기능 테스트)이다.
- 블랙박스 테스트는 곧 명세 테스트이다.
- 모든 종류의 소프트웨어 시스템에 대해 테스트가 가능하다.
- 전체 소프트웨어 테스트 레벨(단위, 통합, 시스템, 인수)에서 적용할 수 있는 기법이다.
① 동등분할 테스트(Equivalence Partitioning Testing)
- 동등 분할 테스트는 입력 데이터의 영역을 유사한 도메인별로 유효값/무효값을 그룹핑하여 대푯값 테스트 케이스를 도출하여 테스트하는 기법이다.
- 동등 분할 테스트는 동치 분할 테스트, 균등 분할 테스트, 동치 클래스 분해 테스트라고도 한다.
② 경곗값 분석 테스트(Boundary Value Analysis Testing)
개념 | - 경곗값 분석 테스트는 등가 분할 후 경곗값 부분에서 오류 발생 확률이 높기 때문에 경곗값을 포함하여 테스트 케이스를 설계하여 테스트하는 기법 - 최솟값 바로 위, 최대치 바로 아래 등 입력값의 극한 한계를 테스트하는 기법 - 한곗값 테스트라고도 함 - 경곗값 : 클래스 간의 경곗값, 경계 바로 위 값, 경계 바로 아래 값 |
특징 | - 다수의 오류들이 입력 영역의 경계에서 발생 - 대부분의 경우 동등분할 테스트와 함께 사용 |
입력 조건 | 선택 기준 |
값의 범위 | - 범위의 끝에 속하는 유효 입력값, 범위 바로 바깥에 속하는 유효하지 않은 입력값 |
몇 개의 값 | - 입력값의 최솟값과 최댓값 - 최솟값과 최댓값의 바로 아래와 바로 위의 값 |
파일, 리스트, 테이블과 같은 정렬된 집합 형태 |
- 첫 번째 항목과 마지막 항목 |
그 외 | - 개인의 독창성과 직관에 따라 경계에 해당하는 여러 값 선택 |
방법 | 설명 |
2-value | - 경계에 있는 값 - 바로 위, 아래 중 하나의 값 * 경계가 유효하면 유효하지 않은 값, 유효하지 않으면 유효한 값 선택 |
3-value | - 경계에 있는 값 - 경계 바로 위의 값 - 경계 바로 아래의 값 |
③ 결정 테이블 테스트(Decision Table Testing)
- 결정 테이블 테스트는 요구사항의 논리와 발생조건을 테이블 형태로 나열하여, 조건과 행위를 모두 조합하여 테스트하는 기법이다.
- 입력 조건의 모든 조합에 대한 시스템의 액션을 고려하여 테스트 케이스를 도출하는 기법이다.
- 특징으로는 복잡한 논리적 관계를 표현하기 좋고, 누락된 요구사항 검사에 용이하다.
번호 | 작성 방법 |
1 | 명세 등을 분석하여 시스템의 행동에 영향을 주는 모든 조건을 분석 |
2 | 조건은 왼쪽 위, 행동은 왼쪽 아래 위치하는 테이블 구성 |
3 | 모든 조건의 조합을 나열하고, 그에 해당하는 행동 작성 |
4 | 가능하지 못한 조건의 조합은 배제 |
5 | 결정표를 축약할 수 있는지 파악 |
6 | 결정표의 각 규칙이 최소한 한 번은 테스트할 수 있도록 테스트 케이스 생성 |
④ 상태 전이 테스트(State Transition Testing)
- 상태 전이 테스트는 테스트 대상/시스템이나 객체의 상태를 구분하고, 이벤트에 의한 어느 한 상태에서 다른 상태로 전이되는 경우의 수를 수행하는 테스트 기법이다.
- 시스템을 상태 전이도로 모델링 한 후 상태 전이도에서 테스트 케이스를 도출하는 기법이다.
- 상태 전이도는 시스템 외부에서 들어오는 일련의 이벤트들에 대한 시스템 상태가 어떻게 전이되고 어떤 식으로 반응하는가를 나타내는 도구이다.
⑤ 유스케이스 테스트(Use Case Testing)
유스케이스유스 케이스 테스트는 시스템이 실제 사용되는 유스 케이스로 모델링 되어 있을 때 프로세스 흐름을 기반으로 테스트 케이스를 명세화하여 수행하는 테스트 기법
⑥ 분류 트리 테스트(Classification Tree Method Testing)
- 분류 트리 테스트는 SW의 일부 또는 전체를 트리 구조로 분석 및 표현하여 테스트 케이스를 설계하여 테스트하는 기법이다.
- 시스템 또는 SW의 입력 및 동작을 다양한 기준으로 구분한 트리를 이용해서 테스트 케이스를 설계한다.
- 동등 분할 영역을 구분하는 것과 유사하며, 동등 분할 테스트 커버리지 측정 원리와 동일하다.
⑦ 페어와이즈 테스트(Pairwise testing)
- 페어와이즈 테스트는 테스트 데이터 값들 간에 최소한 한 번씩 조합하는 방식이며, 이는 커버해야 할 기능적 범위를 모든 조합에 비해 상대적으로 적은 양의 테스트 세트를 구성하기 위한 테스트 기법이다.
- 페어와이즈 테스트는 대부분의 결함이 두 입력값 두 입력값의 상호 작용에 기인하므로, 가능한 모든 입력값의 조합을 테스트한 것과 비슷한 효과를 얻는다.
- 페어와이즈 테스트는 상대적으로 적은 양의 테스트 세트 구성이 용이하고, 입력 변수 개수와 입력 가능 값이 많을수록 테스트 케이스 도출 복잡도가 높다.
테스트 케이스 필요 항목 [20201년 3회]
테스트 케이스 작성에 필요한 공통 작성 항목 요소와 개별 테스트 케이스 항목 요소로 나누어 작성한다,
구분 | 항목 | 설명 |
공통 작성 항목 요소 |
테스트 단계명, 작성자, 승인자, 작성 일자, 문서 버전 식별 | 단위/통합/시스템/인수 테스트 등의 테스트 단계와 테스트 케이스 작성자, 승인자, 작성 일자, 버전 등을 작성 |
대상 시스템 식별 | 애플리케이션 개발 서버 또는 개발 시스템명 등을 작성 | |
변경 여부 식별 | 테스트 케이스 변경 여부 및 변경 사유 등을 작성 | |
테스트 범위 식별 | 테스트 대상 애플리케이션의 기능별 테스트 범위 및 업무별 테스트 범위를 식별 | |
테스트 조직 식별 | 테스트 케이스 작성 및 테스트 수행을 담당할 조직 식별 | |
개별 테스트 케이스 항목 요소 |
테스트 ID 식별 | 테스트 케이스를 고유하게 식별하기 위한 ID를 작성 |
테스트 목적 작성 | 테스트 시 고려해야 할 중점 사항이나 테스트 케이스의 목적을 작성 | |
테스트할 기능 요약 | 애플리케이션의 테스트할 기능을 간략하게 작성 | |
입력 데이터 작성 | 테스트 실행 시 입력할 데이터(입력값, 선택 버튼, 체크 리스트 값 등)를 작성 | |
기대 결과 작성 | 테스트 실행 후 기대되는 결과 데이터(출력 데이터, 결과 화면, 기대 동작 등)를 작성 | |
테스트 환경 설정 | 테스트 시 사용할 물리적, 논리적 테스트 환경, 사용할 데이터, 결과 기록 서버 등의 내용을 작성 | |
전제 조건 설정 | 테스트 간으 ㅣ종속성, 테스트 수행 전 실행되어야 할 고려 사항 등을 작성 | |
성공/실패 기준 설정 | 테스트를 거친 어플리케이션 기능의 성공과 실패를 판단하는 조건을 명확하게 작성 | |
기타 요소를 식별하여 설정 | 사용자의 테스트 요구사항 중 특별히 고려해야 할 내용을 간략하게 기술 |
테스트 레벨
테스트 레벨 종류 [2021년 1회]
애플리케이션 테스트는 소프트웨어의 개발 단계에 따라 분류할 수 있고, 이렇게 분류된 것을 테스트 레벨이라고 한다.
① 테스트 레벨의 종류
- 테스트 레벨의 종류에는 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트가 있다.
종류 | 설명 | 기법 |
단위 테스트 |
사용자 요구사항에 대한 단위 모듈, 서브루틴 등을 테스트하는 단계 | 자료구조 테스트, 실행 경로 테스트, 오류 처리 테스트, 인터페이스 테스트 |
통합 테스트 |
단위 테스트를 통과한 모듈 사이의 인터페이스, 통합된 컴포넌트 간의 상호 작용을 검증하는 테스트 단계 | 빅뱅 테스트, 샌드위치 테스트, 상향식 테스트, 하향식 테스트 |
시스템 테스트 |
통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지를 검증하는 테스트 단계 | 기능/비기능 요구사항 테스트 |
인수 테스트 |
계약상의 요구사항이 만족되었는지 확인하기 위한 테스트 단계 | 계약 인수, 규정 인수, 사용자 인수, 운영상의 인수, 알파/베타 테스트 |
- 분석, 설계, 개발 단계에서 부과된 조건을 만족하는지 검증을 수행하고, 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트 단계에서 최종 산출물에 대한 확인을 한다.
② 단위 테스트(Unit Test)
- 단위 테스트는 구현이 진행되면서 수행하는 테스트이다.
- 단위 테스트는 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춘 테스트이다.
- 단위 테스트는 사용자의 요구사항을 기반으로 한 기능성 위주의 테스트를 수행한다.
- 단위 테스트는 명세 기반 테스트(블랙박스 테스트)와 구조 기반 테스트(화이트박스 테스트)로 나누어지지만 주로 구조 기반 테스트 위주로 수행한다.
③ 통합 테스트(Intergration Test)
- 통합 테스트는 소프트웨어 각 모듈 간의 인터페이스 관련 오류 및 결함을 찾아내기 위한 체계적인 테스트 기법이다.
- 단위 테스트가 끝난 모듈 또는 컴포넌트 단위의 프로그램이 설계 단계에서 제시한 애플리케이션과 동일한 구조와 기능으로 구현된 것인지를 확인하는 테스트이다.
④ 시스템 테스트(System Test)
- 시스템 테스트는 통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지를 검증하는 테스트이다.
- 컴퓨터 시스템을 완벽하게 검사하기 위한 목적 또는 성능 목표를 가지고 테스트한다.
유형 | 설명 |
기능적 요구사항 테스트 |
요구사항 명세서, 비즈니스 절차, 유스케이스 등 명세서 기반의 블랙박스(Black Box) 테스트 |
비기능적 요구사항 테스트 |
성능 테스트, 회복 테스트, 보안 테스트, 내부 시스템의 메뉴 구조, 웹 페이지의 내비게이션 등의 구조적 요소에 대한 화이트 박스(White Box) 테스트 |
⑤ 인스 테스트(Acceptance Test)
- 인수 테스트는 최종 사용자와 업무의 이해 관계자 등이 테스트를 수행함으로써 개발된 제품에 대해 운영 여부를 결정하는 테스트이다.
- 시스템의 일부 또는 특정한 비기능적인 특성에 대해 인수 테스트를 통해 확인한다.
- 인수 테스트의 종류는 아래와 같다
종류 | 설명 |
사용자 인수 테스트 |
비즈니스 사용자가 시스템 사용의 적절성 여부 등을 확인하는 테스트 |
운영상의 인수 테스트 |
시스템 관리자가 시스템 인수 시 수행하는 테스트 활동으로 백업/복원 시스템, 재해 복구, 사용자 관리, 정기 점검 등을 확인하는 테스트 |
계약 인수 테스트 |
계약상의 인수/검수 조건을 준수하는지 여부 등을 확인하는 테스트 |
규정 인수 테스트 |
정부 지침, 법규, 규정 등이 규정에 맞게 개발되었는지 확인하는 테스트 |
알파 테스트 | 선택된 사용자(회사 내의 다른 사용자 또는 실제 사용자)가 개발자 환경에서 통제된 상태로 개발자와 함께 수행하는 인수 테스트 |
베타 테스트 | 실제 환경에서 일정 수의 사용자에게 대상 소프트웨어를 사용하게 하고 피드백을 받는 인수 테스트 |
[참고 : 수제비 2022]
'자격증 > 정보처리기사' 카테고리의 다른 글
chapter 11. 응용 SW 기초 기술 활용 (1) (0) | 2022.05.04 |
---|---|
chapter 10. 애플리케이션 테스트 관리 (2) (0) | 2022.05.03 |
chapter 09. 소프트웨어 개발 보안 구축 (0) | 2022.05.02 |
chapter 08. 서버 프로그램 구현 (0) | 2022.05.02 |
chapter 07. SQL 응용 (1) | 2022.04.27 |