11. 테스팅
- 테스팅과 관련된 질문들은 보통 다음 네 가지 범주 중 하나에 속함.
- 실생활에서 접하는 객체를 테스트하라
- 소프트웨어 하나를 테스트하라.
- 주어진 함수에 대한 테스트 코드를 작성하라.
- 발생한 이슈에 대한 해결책을 찾아내라.
- 입력 형식이 깔끔하다거나, 사용자가 예측 가능한 행동만 할 것이라고 가정하면 안됨.
- 아주 이상한 방식으로 시스템이 사용될 수 있으니 그에 대비해야 함.
면접관이 평가하는 것
- 큰 그림을 이해하고 있는가
- 테스트케이스 간의 우선순위를 적절히 매길 수 있는가?
- 퍼즐 조각을 제대로 맞추는 방법을 아는가
- 소프트웨어가 어떻게 동작하는지 아는가
- 각 소프트웨어가 보다 더 큰 생태계의 일부로 어떻게 귀속되는지 이해하는가
- 조직화
- 문제에 구조적으로 접근하고 있는가
- 시스템을 구조적으로 잘 나누면 테스트 케이스를 보다 풍부하게 찾아 나갈 수 있다.
- 실용성
- 실제로 적용 가능한 합리적인 테스트 계획을 세울 수 있는가
실제 세계에서 객체 테스트하기
1단계 : 사용자는 누구인가? 클립의 사용 목적은 무엇인가?
- 문제를 풀기 전에 해당 제품을 어떤 사용자가 어떤 목적으로 사용하게 될지 면접관과 의논해 봐야 함.
2단계 : 어떤 유스케이스(use case)가 있나?
- 유스케이스 목록을 만들어 두면 도움이 될 것임.
3단계 : 한계 조건은?
- ex) 클립의 경우, 영구적 손상 없이 30~50장 정도는 약간 손상이 있다
- 환경적 요인들에도 적용될 수 있음.
4단계 : 스트레스 조건과 장애 조건은?
- 장애가 발생하는 조건을 분석해야 함.
- 면접관과 이야기해 봐야 하는 것은 제품에 발생한 문제를 받아들일 수 있는 때는 언제인지, 어떤 종류이ㅡ 문제를 심각하게 간주해야 하는지이다.
5단계 : 테스트는 어떻게 수행할 것인가?
- 테스트와 관련된 세부사항을 이야기 하는 것임.
- 어떤 것을 사용한다고 했을 때, ‘정상적인 사용’이 어떤 의미인지 정의해야 함.
- 수작업 테스트 외에, 자동화된 테스트를 도입하는 것도 고려해야 함.
소프트웨어 테스팅
- 하나의 소프트웨어를 테스트하는 것은 실제 세계의 객체를 테스트하는 것과 아주 유사함.
- 소프트웨어의 경우, 성능 테스트의 세부사항을 더 많이 강조함.
- 소프트웨어 테스팅의 두 가지 핵심적 측면은 다음과 같음.
- 수작업 테스트 vs. 자동화된 테스트
- 블랙박스 테스트 vs. 화이트박스 테스트
1단계 : 블랙박스 테스트를 하고 있는가 아니면 화이트박스 테스트를 하고 있는가?
- 필자는 가능한 이런 질문은 일찍 던지는 쪽을 선호함.
- 블랙박스 테스트를 해야 하는지, 화이트박스 테스트를 해야하는지, 아니면 둘 다 해야 하는지 확인하라.
2단계 : 누가 사용할 것인가? 왜 사용하는가?
- 소프트웨어는 보통 여러 명의 사용자를 대상으로 함.
3단계 : 어떤 유스케이스들이 있나?
- 유스케이스를 ‘마술적으로’ 생각해 내야 하는 것이 아니라 면접관과 상의하여 도출해 내야 함.
4단계 : 한계 조건은?
- 유스케이스가 모호하게 정의되어 있다면, 그게 무엇을 의미하는지 정확히 알아낼 필요가 있음.
5단계 : 스트레스 조건과 장애 조건은?
- 소프트웨어에 장애가 발생할 때, 그 장애가 어떤 모습인지 알아야 함.
6단계 : 테스트 케이스는? 테스트 실행은 어떻게?
- 수작업 테스트와 자동화 테스트가 구별되는 지점임.
함수 테스트
- 가장 쉬운 종류의 테스트임.
- 입력과 출력을 확인하는 테스트만 하면 되기에, 모호한 부분이 적음.
1단계 : 테스트 케이스 정의
- 아래의 테스트 케이스를 생각해 봐야 함.
- 정상적인 케이스
- 극단적인 케이스
- 널(null) 입력, 잘못된(illegal) 입력
- 특수한 입력
2단계 : 예상되는 결과를 정의하라
- 예상되는 결과는 대체로 올바른 출력 결과를 말함.
3단계 : 테스트 코드를 작성하라.
- 테스트 케이스를 만들고 결과를 정의했다면 테스트 케이스를 코드 형태로 구현하는 것은 간단함.
문제 해결에 관한 문제
- 이미 있는 장애를 어떻게 디버깅하고 해결할 것인가에 대한 문제도 출제됨.
- 개발자가 해야할 일은 진짜 문제가 무엇인지 알아내어 해결할 수 있도록 돕는 것임.
1단계 : 시나리오를 이해하라.
- 상황을 가능한 정확하게 이해할 수 있도록 많은 질문을 던져라.
- 사용자가 얼마나 오랫동안 이 문제를 겪었는가?
- 브라우저 버전은? 운영체제 버전은?
- 문제가 항상 똑같이 발생하는지, 발생 빈도는 얼마나 되는지, 언제 그런 일이 발생하는지
- 오류가 발생할 때, 오류 보고서가 표시되는가?
2단계 : 문제를 쪼개라
- 시나리오를 구체적으로 이해했으면, 문제를 테스트 가능한 단위로 분할할 수 있음.
3단계 : 구체적이고 관리 가능한 테스트들을 생성하라.
댓글