제 점수는요

[Chap 9] Software Testing 본문

Computer Science/Software Engineering

[Chap 9] Software Testing

89점 2014. 12. 13. 18:08

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
Comments