테스트 레벨
테스트 유형
기능 테스트
비기능 테스트
| 테스트 레벨 | 의미 |
|---|---|
| 컴포넌트/단위 테스트 | 단위 모듈을 테스트 대상으로 하여 개별단위 모듈을 독립적으로 테스트 |
| 통합 테스트 (Integration) | 단위모듈이 정확하게 통합되었는지에 초점. 시스템내부 구성모듈과 이들간의 관계를 정의한 구조 설계 명세서를 바탕으로 테스트 |
| 시스템 테스트 | 전체 시스템을 테스트 대상으로 하여 테스트. 요구사항 명세서에 명시된 방식으로 시스템이 동작하는지 확인 |
| 인수 테스트 (Acceptance) | 전체 시스템을 하나의 단위로 보고 테스트 진행. 시스템 테스트와 달리 고객/사용자 관점에서 고객이 기대하는 방식으로 작동하는지 확인 |

테스트를 통해 확인하고자 하는 기준은 요구사항 명세서에 정의
비기능(Non-functional) 테스트
유형 테스트(Type test)
기능 테스트와 각각의 비기능 테스트 (ISO 29119 표준)
테스트 유형
| 기능 테스트 | 결함 검출 및 충족 여부 확인 목적 모든 테스트 레벨에서 진행 |
|---|---|
| 비기능 테스트 | 품질 요구사항 시스템 , 인수 테스트에서 진행 |
ISO 25010 품질 모델
| 주특성 | 부특성 |
|---|---|
| 기능 적합성 | 완전성 / 정확성 / 적절성 |
| 신뢰성 | 성숙성 / 가용성 / 결함 허용성 / 복구성 |
| 사용성 | 적합 인식성 / 학습 용이성 / 운용 용이성 / 사용자 오류방지성 사용자 인터페이스 심미성 / 접근성 |
| 호환성 | 공존성 / 상호운영성 |
| 성능 효율성 | 시간 반응성 / 자원 활용성 / 수용성 |
| 보안성 | 기밀성 / 무결성 / 부인방지성 / 책임성 / 인증성 |
| 유지보수성 | 모듈성 / 재사용성 / 변경 용이성 / 분석성 / 테스트 용이성 |
| 이식성 | 적응성 / 설치 용이성 / 대치 용이성 |
정적 테스트와 동적 테스트로 분류
정적 테스트 => [리뷰 / 정적 분석]
동적 테스트 => [명세 기반 테스트 / 구조 기반 테스트 / 경험 기반 테스트]
정적 테스트
대상을 실행하지 않는 방식으로 테스트
이는 동적 테스트 방법에서 검출하기 힘든 오류 검출 가능.
개발 초기에 오류를 찾아내어 품질을 향상시키실 수 있으며,
프로그램 개발 단계에서 산출되는 결과물에서 결함 검출 가능
동적 테스트
대상을 실행하여 결함을 검출하는 방법
=> 테스트 케이스 결정 필요
명세 기반 테스트
소스 코드를 참고하지 않고 테스트 케이스를 결정
시스템의 명세 정보를 얻을 수 있는 한, 적용 대상에 제한이 없으며
단통시인 전 과정에 걸쳐 사용 가능
EX. 동등 분할, 분류 트리 기법, 경곗값 분석, 신택스 테스트, 조합 테스트, 상태 전이 테스트, 인과 그래핑,
결정표 테스트, 시나리오 테스트
구조 기반 테스트
경험 기반 테스트
테스트 경험, 테스트 대상이 되는 시스템 및 해당 도메인에 대한 경험 등을 바탕으로 수행하는 테스트 방법
애자일 방법을 사용하는 웹 응용 시스템의 테스트에 적합
세션 기반 테스팅을 사용하여 테스트를 구조화
오류 추정(Error guessing)
개발자가 범할 수 있는 실수를 추정하고 이에 따른 결함이 검출되도록 테스트 케이스를 설계하는 방법
매우 직관적이고 상황에 따라 적합한 방식으로 수행되므로 일반화된 기법과 절차를 정의 X
명세 기반 테스트의 동등 분할이나 경곗값 분석 방법과 함께 사용이 가능
특정 소프트웨어에 대해 테스터의 직관과 경험을 활용하여
어떤 유형의 결함이 발생할 것을 예측하여 테스트하는 방법
탐색적 테스트
사전에 구체적으로 테스트 케이스를 설계하여 기록하고 이를 바탕으로 테스트를 수행하는 방식이 아니라,
테스트 대상에 대한 이해, 테스트 케이스 설계, 테스트 실행을 병행하는 방식
테스트 대상에 대한 이해를 바탕으로 즉석에서 테스트 케이스를 결정한 후,
문서화 없이 해당 테스트를 바로 수행
테스터의 지식에 의존
개별적인 모듈의 테스트를 말하며, 구현 단계에서 각 모듈을 구현한 후에 수행
모듈을 단독으로 실행할 수 있는 환경이 필요
다른 테스트의 비해 쉽게 수행 가능
테스트 수행에 따른 피드백이 빠름
결함이 발견되었을 때 결함을 발생시키는 부분을 쉽게 식별하여 수정가능

모의 객체 생성 프레임워크
모의 객체는 스텁의 객체 지향 버전
모의 객체
더미 객체 (Dummy)
가짜 객체 (Fake)
테스트 스텁 (Stub)
테스트 스파이 (Spy)
FIRST 원칙
컴포넌트 테스트를 잘 수행하기 위한 5가지 규칙
모듈을 통합하는 과정에서 사용되는 인터페이스를 대상으로 상호 작용이 올바르게 이루어지는지 검증하는 테스트
컴포넌트를 통합하는 과정에서 수행되는 테스트
컴포넌트 간의 상호 연동이 제대로 수행되는지 검사하는 테스트
두 관점이 존재
1. 점진적 통합 (상향식과 하향식)
2. 빅뱅 방식
점진적 통합
점진적 통합 단점
점진적 통합 순서

상향식/하향식 정리
| 통합테스트 종류 | 특징 |
|---|---|
| 상향식 통합 | 하위에서 상위로 통합 모듈의 묶음을 클러스트 OR 빌드 라고 함 하위 컴포넌트를 충분하게 테스트할수 있음 스텁 필요 X 하위 컴포넌트를 반복적으로 테스트하기 때문에 빠름. |
| 하향식 통합 | 상위에서 하위로 통합 스텁이 실제 모듈로 대체되면 리그레션 테스트 수행 많은 스텁이 필요함 설계오류를 빠른 시점에 발견 가능 |
| 샌드위치 통합 | 상향식+하향식 통합을 동시에 진행 |

전체 시스템이
시스템 명세에 따라 개발되었는지
검증하기 위해 수행하는 테스트
컴포넌트 테스트나 통합 테스트는 기능이 올바르게 수행되는지
검증하는 것에 중점을 두지만,
시스템 테스트는 시스템의 기능 측면뿐만 아니라
성능, 호환성, 사용성, 신뢰성, 보안성, 유지보수성, 이식성 등과 같은
비기능적인 요구사항을 만족하는지도 검증
인수 테스트의 주 목적은 결함 검출이 아니라
시스템을 인수해도 되는지 고객의 입장에서 평가
테스트 유형
알파 테스트
베타 테스트
사용자의 요구사항을 시스템이 얼마나 만족하는지에 대한 정보를 제공
기능 완전성
명시된 요구사항을 포괄하는 정도
모든 명시된 기능을 제공하는 정도
기능 정확성
기능 적절성
적절한 자원의 사용 및 적정한 반응시간 정도에 대한 정보를 제공
성능 효율성
성능 테스팅
| 종류 | 설명 |
|---|---|
| 부하 테스트 | 부하를 계속 증가시키면서 임계점을 찾는 테스트 |
| 스트레스 테스트 | 임계정 이상의 부하로 비정상적인 상황에서의 처리를 테스트 |
| 스파이크 테스트 | 짧은 시간에 사용자가 몰릴때 테스트 |
| 내구성 테스트 | 오랜시간 높은 부하로 테스트 |

리틀의 법칙(Little's law)
목표 처리량에 요구되는 동시 사용자 수를 산정할 때 사용
다른 시스템과의 상호 연동 능력에 대한 정보를 제공
서로 다른 시스템과의 상호연동능력을 확인하기 위한 테스트
다른 제품과 공통으로 환경 및 자원을 공유하면서
그 제품에 유해한 영향을 미치지 않고
올바른 기능을 수행할 수 있는지 확인하는 테스트
호환성
공존성
다른 소프트웨어와 환경 및 자원을 공유하면서
서로 간섭없이 독립적으로 요구된 기능을 효율적으로 수행하는 정도
시스템의 장애 발생이 인명 손실이나 막대한 재산 피해,
또는 치명적인 환경 파괴를 가져올 수 있는
안전성 필수(Safety – critical) 시스템에서 매우 중요
상호운영성

특정 조건에서 특정 기간 동안 시스템이 요구되는 서비스를 오동작 없이 제공하는 정도
신뢰성
성숙성
가용성
결함 허용성
복구성
일반적으로 가용성과 MTTF 척도로 정량화 가능
일반적으로 신뢰성을 테스트하기 위해서는 통계적 테스트 방법 사용
시스템이 정보 및 데이터를 보호하는 정도
정적 분석으로 검증 가능
보안성
기밀성
무결성
부인 방지성
책임성
인증성
CWE
침입 테스트
시스템이 변경 요구를 만족시키는 능력
요구사항을 만족하도록 얼마나 쉽게 변경할 수 있는지 테스트
유지보수성
모듈성
재사용성
분석성
변경 용이성
테스트 용이성
정적 테스트로 검증 가능
모듈의 결합도는 낮게 , 응집도는 높게 하는 것이 목표
하드웨어 및 소프트웨어 환경이 달라도
동등한 서비스를 제공하는지 테스트
이식성
적응성
설치 용이성
대체 용이성
크로스 브라우징 테스트
테스트를 자동화 하기 위해 Selenium Grid, QTP, RFP와 같은 도구를 사용
특정한 사용자들이 주어진 사용 환경에서 특정한 목적을 달성하기 위해
제품이나 시스템을 사용할 때 얻게 되는 효율성과 효과성 및 만족도로 정의
사용성
적합 인식성
학습 용이성
운영 용이성
사용자 오류 방지성
사용자 인터페이스 심미성
접근성

사용성 평가 방법
| 방법 | 설명 |
|---|---|
| 휴리스틱 평가 | 체크리스트를 통해 사용성에 관한 문제점 도출 3~5명의 전문가들이 실시 |
| FGI | 그룹 인터뷰 방식 공통점이 있는 사용자들을 그룹화하여 의견 교류 |
| 인지적 워크쓰루 | 아무것도 안알려주고 사용자들에게 써보라고 하고 행동 관찰 학습 용이성 분석에 중점을 둔 방법 |