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