1.1 테스팅이란 무엇인가
소프트웨어 시스템은 우리 생활의 많은 부분과 밀접하게 연관되어 있다. 올바르게 동작하지 않는 소프트웨어는 금전적, 시간적, 비즈니스 평판 손실뿐만 아니라 부상이나 사망에 이르기 까지 다양한 문제를 일으킬 수 있다. 소프트웨어 테스팅을 통해 품질을 평가하고 소프트웨어 사용시 나타나는 장애의 위험을 줄일 수 있다.
소프트웨어 테스팅은 결함을 식별하고 소프트웨어 산출물의 품질을 평가하는 일련의 활동이다. 테스트의 대상이 되는 산출물을 테스트 대상(test object)이라고 한다. 흔히 테스팅이 소프트웨어를 실행하고 결과를 확인하는 테스트 수행(test execution)에 국한된다고 오해하지만, 실제로 테스팅 호라동은 소프트웨어 개발 수명주기(SDLC)에 따라 달라진다.
테스팅에 대한 또 다른 오해는 테스팅이 전적으로 테스트 대상의 베리피케이션(verification)에만 초점을 맞춘다는 것이다. 테스팅은 시스템이 주어진 요구사항을 충족하는지 확인하는 베리피케이션을 포함하지만, 시스템이 운영 환경에서 사용자 또는 기타 이해관계자가 필요한 바를 만족하는지를 확인하는 벨리데이션(Validation)도 포함된다.
용어 정리
베리피케이션(verification) : 소프트웨어가 기획서나 명세서에 맞게 제대로 만들어졌는지 확인하는 활동
벨리데이션(validation) : 소프트웨어가 실제 사용환경에서 사용자나 기타 이해관계자의 요구를 충족하는지 확인하는 활동
소프트웨어 테스팅은 동적 테스팅과 정적 테스팅으로 나눌수 있다.
- 동적 테스팅
소프트웨어를 실제 실행하여 테스트를 수행하는 방법으로 다양한 테스트 기법과 접근법을 사용하여 테스트 케이스를 도출한다. - 정적 테스팅
소프트웨어를 실행하지 않고 리뷰와 정적 분석을 통해 수행하는 테스트 방법 이다.
테스팅은 기술적인 활동뿐만 아니라 적절한 계획, 관리, 추정, 모니터링, 제어도 필요하다. 테스터는 도구를 사용하지만, 테스팅은 주로 테스터가 전문 지식과 분석 기술을 바탕으로 비판적 사고와 시스템적 사고를 적용하는 지적 활동임을 기억해야 한다.
1.1.1 테스트 목적
- 요구사항, 사용자 스토리, 설계, 소스 코드 등 산출물 평가
- 장애 유발 및 결함 식별
- 테스트 대상에 필요한 커버리지 보장
- 소프트웨어 품질 부족으로 인한 리스크 수준 완화
- 정의된 요구사항의 충족 여부를 확인하는 베리피케이션
- 테스트 대상의 계약, 법률, 규제 요구사항 준수 여부를 확인하는 베리피케이션
- 이해관계자가 정보에 입각한 결정을 내리는데 필요한 정보 제공
- 테스트 대상의 품질에 대한 자신감 획득
- 테스트 대상의 완성 여부와 이해관계자의 기대 충족 여부를 확인하는 벨리데이션
테스팅의 목적은 테스트 대상인 작업 산출물, 테스트 레벨, 리스크, 사용하는 소프트웨어의 개발수명주기(SDLC), 기업구조, 경쟁사 구도, 시장 출시 시기 등의 비즈니스 정황에 따라 달라질 수 있다.
1.1.2 테스팅과 디버깅
테스팅과 디버깅은 별개의 활동이다.
테스팅
소프트웨어의 결함을 직접 식별하는 행위이며 동적테스팅과 정적테스팅으로 나눠진다.
- 동적 테스팅
소프트웨어를 실행하여 문제를 유발하고 그 결과를 통해 결함을 찾는다. - 정적 테스팅
소프트웨어를 실행하지 않고, 문서나 코드 자체를 검토하여 결함을 찾는다.
디버깅
- 동적 테스팅으로 장애가 발생했을 때, 디버깅은 장애(결함)의 원인을 찾고 분석하여 제거하는 활동이다.
- 일반적인 디버깅 프로세스는 다음과 같다.
- 장애 재현
- 분석(근본 원인 식별)
- 원인 해결
- 확인 테스팅을 통해 문제가 제대로 수정되었는지 확인한다. (확인 테스팅은 테스트를 처음 수행한 사람이 다시 수행하는 것이 바람직하다.)
- 수정 사항이 테스트 대상의 다른 부분에 장애를 일으키지 않았는지 확인하기 위해 리그레션 테스팅을 추가로 수행할 수 있다.
- 정적 테스팅
- 결함을 직접 식별하여 디버깅으로 결함을 제거하는 데 중점을 둔다.
- 정적 테스팅에서는 장애를 유발하지 않으므로 장애를 재현하고 분석할 필요가 없다.
예상 문제
문제 1: 테스팅과 디버깅의 차이에 대해 옳은 설명은?
A. 테스팅과 디버깅은 동일한 활동이다.
B. 테스팅은 소프트웨어 결함을 식별하는 활동이고, 디버깅은 결함의 원인을 찾고 해결하는 활동이다.
C. 테스팅은 결함을 제거하는 활동이고, 디버깅은 소프트웨어를 실행하여 결함을 유발하는 활동이다.
D. 테스팅은 소프트웨어를 실행하지 않으며, 디버깅은 소프트웨어를 실행하여 결함을 식별한다.
정답
해설: 테스팅은 소프트웨어의 결함을 찾는 과정이며, 이는 소프트웨어의 품질을 평가하는 데 중점을 둔다. 반면, 디버깅은 이러한 결함이 발생하는 원인을 분석하고 이를 해결하는 과정이다.
문제 2: 동적 테스팅과 정적 테스팅의 차이에 대해 옳은 설명은?
A. 동적 테스팅은 소프트웨어를 실행하지 않고, 정적 테스팅은 소프트웨어를 실행하여 테스트를 수행한다.
B. 동적 테스팅은 소프트웨어를 실행하여 결함을 찾고, 정적 테스팅은 소프트웨어를 실행하지 않고 문서나 코드를 검토하여 결함을 찾는다.
C. 동적 테스팅은 소프트웨어를 실행하여 문서나 코드를 검토하고, 정적 테스팅은 결함을 찾지 않는다.
D. 동적 테스팅과 정적 테스팅은 모두 소프트웨어를 실행하여 결함을 찾는다.
정답
해설: 동적 테스팅은 소프트웨어를 실제로 실행하여 결함을 찾는 반면, 정적 테스팅은 소프트웨어를 실행하지 않고 문서나 코드 리뷰 등을 통해 결함을 찾는 방법이다.
문제 3: 다음 중 정적 테스팅의 예가 아닌 것은 무엇인가?
A. 코드 리뷰
B. 정적 분석
C. 워크스루
D. 유닛 테스트
정답
해설: 코드 리뷰, 정적 분석, 워크스루는 모두 소프트웨어를 실행하지 않고 결함을 찾는 정적 테스팅 방법이다. 반면, 유닛 테스트는 소프트웨어의 개별 구성 요소를 실행하여 테스트하는 동적 테스팅 방법이다.
문제 4: 디버깅 프로세스의 일반적인 단계가 아닌 것은 무엇인가?
A. 장애 재현
B. 분석(근본 원인 식별)
C. 테스트 케이스 작성
D. 원인 해결
정답
해설: 디버깅 프로세스의 일반적인 단계는 장애를 재현하고, 근본 원인을 분석하여, 이를 해결하는 것이다. 테스트 케이스 작성은 디버깅이 아니라 테스팅 활동의 일부로, 디버깅 프로세스에는 포함되지 않는다.
문제 5: 확인 테스팅(confirmation testing)과 리그레션 테스팅(regression testing)에 대한 설명으로 옳은 것은?
A. 확인 테스팅은 수정된 부분이 제대로 수정되었는지 확인하는 것이며, 리그레션 테스팅은 수정된 부분이 다른 부분에 영향을 미치지 않았는지 확인하는 것이다.
B. 확인 테스팅은 소프트웨어 전체를 다시 테스트하는 것이며, 리그레션 테스팅은 특정 기능만 테스트하는 것이다.
C. 확인 테스팅은 결함을 제거하는 것이며, 리그레션 테스팅은 결함을 유발하는 것이다.
D. 확인 테스팅과 리그레션 테스팅은 모두 소프트웨어를 처음부터 끝까지 다시 테스트하는 것이다.
정답
해설: 확인 테스팅은 결함이 수정된 후 동일한 테스트를 수행하여 문제가 해결되었는지 확인하는 과정이다. 리그레션 테스팅은 수정된 코드가 다른 부분에 새로운 결함을 유발하지 않았는지 확인하는 테스트이다. 따라서 A가 올바른 설명이다.
'ISTQB > CTFL' 카테고리의 다른 글
ISTQB CTFL - 1.3 테스팅의 원리 (1) | 2024.10.04 |
---|---|
ISTQB CTFL - 1.4. 테스트 활동, 테스트웨어, 테스트 역할 (1) | 2024.10.04 |
ISTQB CTFL - 1.5. 테스팅의 필수 기술 및 모범 사례 (0) | 2024.10.04 |
ISTQB 1장 예상 문제 (0) | 2024.10.04 |
ISTQB CTFL - 1.2 테스팅이 왜 필요한가 (0) | 2024.10.04 |