컴퓨터과학/0 +소프트웨어 테스팅

[소프트웨어 테스팅] 2. the psychology and economics of software testing

힘들면힘을내는쿼카 2022. 3. 13. 17:44
728x90
반응형

소프트웨어 테스팅 2주차 강의내용 정리

 

소프트웨어를 테스트 하기 위해서는 경제성과 심리학적인 요소를 고려하는 것이 중요하다.


The Psychology of Testing

테스트에 관한 심리성으로 잘못된 생각은 다음과 같다.

테스트는 에러의 부재를 입증하는 과정이다.

테스트는 프로그램이 의도된 기능대로 올바르게 동작하는 것을 보여주기 위한 것이다.

테스트는 프로그램이 기대한 방향으로 동작하는 것을 확신을 주는 과정이다.

하지만 위 내용은 잘못된 것이다.!

 

 

 

테스트의 목적은 다음과 같이 정의 할 수 있다.

테스트는 오류를 찾기위해 프로그램을 실행하는 과정이다.
오류를 발견하여 프로그램을 파손!!

 

소프트웨어 테스트의 진짜 정의를 이해하는 것은 정말로 중요하다.

사람은 목표지향적인 경향이 강하며, 적절한 목표를 세우는 것이 심리적 영향을 미친다.

우리의 목표가 프로그램에 오류가 있다는것을 증명하는 것이라면, 테스트 데이터는 오류를 발견할 확률이 더 높을 것이다.

 

대부분 프로젝트 관리자는 오류를 발견하지 못한 테스트를 성공적인 테스트로 여긴다.

그리고 오류를 발견하는 테스트는 보통 성공적이지 않은 것으로 여긴다.

하지만 이것은 잘못되었다.

 

에러는 찾지 못하는 테스트는 실패한 것이다.
👱‍♂️

 

 

즉, 실행된 소프트웨어 테스트는 수정가능한 오류를 발견했을 때 성공한다.

같은 테스트에서 더 이상 오류가 발견되지 않는것이 밝혀졌을 때 또한 성공한 테스트로 여긴다.

오류가 없는 테스트는 실패로 여겨진다. 기본적으로 오류가 없는 프로그램은 비현실적이기 때문이다.

 


 

The Economics of Testing

프로그램을 테스트 하기위해서는 우리는 적절한 전략을 짜야한다.

2가지 전략을 소개한다.

 


Black-Box Testing

프로그램이 명세 대로 동작하지 않도록 하는 것이 목적이다. (프로그램 내부 구조에 대해서는 관심이 없음)

black-box testing방법을 사용하여 모든 오류는 찾으려면 가능한 모든 입력데이터 조건을 테스트 케이스로 작성해야한다.

하지만, 이러한 것은 불가능하다.

Exhaustive input testing is impossible.

1. 프로그램이 오류가 없다는 것을 보장하기 위해 테스트하는 것은 불가하다.

2. 프로그램 테스트를 위해 재정적인 부분도 고려해야한다.

따라서 철저한 시험은 불가능하므로 한정된 시험에서 발견되는 오류 수를 극대화함으로써 시험 투자에 대한 수익률을 극대화하는 것이어야 한다.


 

White-Box Testing

프로그램 내부 구조를 파악하여 test case를 유도한다.

철저한 경로 시험으로 간주된다. (exhaustive path testing)

즉, 테스트 케이스를 통해 가능한 모든 제어 경로가 프로그램을 통과하는 경우 프로그램이 완전히 테스트되었다고 함.
하지만 2가지 단점이 있다.
 
1. 경우의 수가 천문학적으로 많을 수 있다.(물론 Exhaustive input testing 보다는 적다.)
  • 비현실적이다.
2. 철저한 경우로 테스트는 여전히 프로그램은 오류가 있을 수 있다.
  • exhaustive path testing가 프로그램 사양과 일치 한다는 것을 보장하지 않는다.
  • missing path 인하여 프로그램이 잘못 될 수 있다.
  • data-sensitivity 오류를 범할 수 있다.

data-sensitivity 오류를 범한 경우

 

 

결론은...

 

하지만 테스트를 하지 않으면 안된다..!

 


 

software testing 의 원리

1. 테스트 케이스는 입력 값, 예상되는 출력 값에 대한 정의 입니다.

2. 개발자는 자신의 프로그램을 테스트 하는 것을 피해야한다.

3. 프로그래밍 조직은 해당 조직의 프로그램을 테스트해서는 안된다.

4. 모든 테스트 프로세스에는 각 테스트의 결과에 대한 철저한 검사가 필요하다.

5. 테스트 케이스는 유효하지 않은 조건뿐만 아니라, 유효하고 예상되는 입력 조건에 대해서도 작성되어야 한다.

6. 프로그램이 하고자 하는것을 안하는지 테스트하는 것이 반이고, 나머지 절반은 하고자 안하는 것을 하는지 테스트하는 것이다.

7. 프로그램이 폐기되지 않는 이상 테스트 케이스를 버리는건 바보다.

8. 오류가 발견되지 않을 것이라는 가정하에 테스트 케이스를 작성하면 절대 안된다..!

9. 프로그램의 한 섹션에 오류가 존재 했다면 해당 섹션에 오류가 발견될 확률은 매우매우매우 높다.

10. 테스트를 하는 것은 창의적이고 도전적인 작업이다. 😎

 


728x90

 

요약

  • 테스트는 오류를 찾기위한 목적으로 프로그램을 실행하는 과정
  • 개발자가 테스트를 하지 않는 것이 더 성공적인 테스트이다.
  • 발견되지 않은 오류를 탐지할 확률이 높은 테스트 케이스는 좋은 테스트 케이스이다.
  • 성공적인 테스트 케이스는 발견되지 않는 오류를 감지하는 것이다.
  • 테스트 성공에는 예상되는 결과값을 신중하게 정의하는 것도 포함 된다.
  • 테스트 결과를 연구하는 것 또한 성공적인 테스트에 포함 된다.

 

 

 

728x90
반응형