제 점수는요
[Chap 9] Software Testing 본문
8.1 Software Testing이란
- 소프트웨어 테스팅은 무엇인가?
.품질에 대한 측정
.실제 결과와 예상되는 결과 사이의 차이를 확인하는 것
.에러를 발견하는것
- 소프트웨어 테스팅을 왜 하는가?
.품질보증(QA)안에 검증(verification) & validation(확인) 부분에 Testing이 포함되어 있음
.즉, 검증 분야에서 '실행에 기반을 둔 검증 부분'을 테스팅
.Verification(검증): 제대로 만들고 있는가에 대한 답변(Internal Process)
.Validation(확인): 사용될 수있는 올바른 것인가에 대한 답변(External Process)
- 디버깅과의 차이
.디버깅(Debugging): 찾아낸 에러를 제거하는 것이 목적
.테스팅(Testing): 에어를 찾아내는 것이 목적
- 에러(Error)와 폴트(Fault), Failure
.에러(Error): 적절치 못한 결과를 사람이 만들어내는 것. 에러는 매우 자연 발생적인 부분
.폴트(fault): 사람의 에러에 의해 생겨난 코드 차원에서의 잘못된 부분.
예를 들면, '>='를 써야하는데 '>'를 씀으로써 >라는 fault가 만들어짐
폴트는 단순히 코드가 잘못된 것이기 때문에 static함
.Failure: 예상된 서비스에 대하여 벗어난 소프트웨어. 폴트가 failure를 야기시킴
- 단순한 오타적인 부분의 fault를 commission, 스펙에 명시된 부분을 생략하면 Omission, 스펙 외적인 부분을 하면 Surprises(또는 Excess)
- 테스팅은 무엇을 보여줄 수 있는가?
.에러의 존재, 요구사항 명세서와의 일치, 성능과 품질
- 테스팅은 누가 하는가?
.개발자가 직접: 시스템을 가장 잘 이해하는 사람이지만 여기저기 자기것을 보여주기 싫어함
.독립적인(전문적인 테스터): 시스템에 대해서 잘 알아야 하지만, 에러를 마구 찾을려고 함(바람직함)
.따라서 개발자가 아닌 테스터가 테스트를 하기 위해 체계적으로 테스트 할 것이 요구됨
- 기본적인 테스팅 질문들
.어떠한 경우들을 테스트해야만 하는가
.결과값이 옳바른가?
.언제 테스팅을 멈춰야하는가?
- 실질적인 테스팅의 목표는 어느 정도의 수준에서 테스팅을 할 것인지를 먼저 보여줘야 한다.
. 레벨에 따라 테스팅을 할 것
8.2 Test Case Design
- 어떠한 경우(case)들을 테스트할 것인가에 대해 Test Case들을 디자인해야함
.Test Case는 에러를 찾기 위함이며, 최소한의 노력과 시간으로 에러를 찾고자 함
- 테스트케이스를 디자인 할 때는 체계적으로 설계하되, 유지보수가 잘 되도록 하는 것이 중요하다(테스팅은 destructive(파헤치는) 과정이므로)
- Fisherman's Dilemma
.다음과 같은 상황을 가정해보자. 나는 낚시를 위해 오직 3일의 시간을 가지고 있고 2개의 호수(X, Y)에서 낚시를 할 있다.
.첫 날, X 호수에서 8마리의 물고리를 잡았다
.둘째 날: Y 호수에서 32마리의 물고리를 잡았다
.마지막 날에는 난 어느 호수로 가면 더 많은 물고기를 잡을 수 있을까? (물고기가 많이 남은쪽? 많이 집힌 쪽?)
.만약 이 상황을 테스팅으로 가져온다면 Y쪽을 선택하는 것이 옳바르다. 에러를 잡아낼 경우에는 이미 에러가 많은 곳이 더 에러가 많을 확률이 높다고 생각함
- 테스팅에 의해 발견될 수 있는 것은 INVALID(예상대로 안됨)와 UNEXPECTED(예상밖으로 됨)한 에러가 있다.
- 테스트 케이스는 입력값을 주고 예상되는 결과들을 살핌으로서 만들 수 있다.
.예상되는 결과는 요구사항 명세서에 명시된 것을 이용한다. 즉, 테스트케이스는 Reg SPEC으로 부터 나옴
- 테스팅 전략은 효과적이고 효율적으로
.적은 테스트 케이스로 가능한 많은 에러를 찾을 수 있도록
.하지만 테스팅은 위험과 비용사이에서 trade-off가 있으므로 신뢰단계(confidence level)에 따라 테스트하도록 한다.
- 모든 테스트 케이스에 대해서 테스트해야 에러가 없다라는 것을 보장하나 이것은 불가능하다.
.따라서 테스팅이 프로그램에 에러가 완전히 없다라는 것을 보장해주지 않는다
- 모든 이용가능한 입력값을 넣을 수 없으므로 Selective Testing을 이용할 수 있음
.테스트 하고 싶은 path에 맞는 입력값을 넣어 선택적으로 테스팅함
'Computer Science > Software Engineering' 카테고리의 다른 글
[Chap 11] White Box Testing (0) | 2014.12.15 |
---|---|
[Chap 10] Black Box Testing (0) | 2014.12.13 |
[Chap 8] Architecture Design (0) | 2014.12.13 |
[Chap 7] Design (0) | 2014.12.11 |
[Chap 6] Object-Oriented Concepts (0) | 2014.12.05 |