SpecificationBasedTest

소프트웨어 요구사항(requirements) 은 어떤 기능이 무엇을 해야 하는지를 설명하는 텍스트 문서를 의미하며, 이것이 테스트를 작성함에 있어서 가장 중요한 요소이다.

명세 기반 테스트(Specification-Based Test)는 UserStory 나 UML 의 usecase 같은 프로그램 요구사항을 테스트의 입력으로 사용한다.

개발자가 TDD 를 사용해서 Class 의 구조를 다 갖추고 난 후, 개발자는 테스트 모드(test mode) 로 자세를 바꾸어 버그를 잡아야 하며, 이 테스트 모드에서 맨 처음으로 사용하기 적합한 방법이 '명세 기반 테스트' 이다.

SpecificationBasedTest Workflow:

  • 요구사항 이해
    • 요구사항의 핵심 세부사항을 이해하는 것이 중요
    • 프로그램이 무엇을 수행해야 하는지, 무엇을 수행하지 말아야 하는지
    • 특정 코너 케이스를 다루고 있는 지
    • 입출력의 변수 타입, 입출력의 도메인(e.g 5와 10사이의 숫자인지)
  • 프로그램 탐색
    • 다양한 입력 값으로 프로그램을 테스트해서 프로그램이 무엇을 출력하는지 살피기
    • 체계적일 필요는 없음
  • 구획 식별
    • 각 입력변수의 타입과 값의 범위를 살피기
    • 변수끼리 의존성이 있는지 살피기
    • 출력값이 가질 수 있는 타입을 살펴보고 전부 테스트 할 것인지 정하기
    • 입출력을 살펴보는 동안 암묵적인(비지니스) 규칙과 논리, 기대 동작에 주의 기울이기
  • 경계 분석
    • 모든 구획이 가진 경계를 분석하기
  • 테스트 케이스 고안
    • 기본 아이디어는 모든 가능한 입력 조합을 테스트하기 위해 서로 다른 범주에 있는 모든 구획을 조합하는 것. 하지만 이 비용은 많이 든다. 따라서, 조합의 수를 줄이는 작업이 필요
  • 테스트 자동화
    • 테스트 자동화란 테스트에 사용할 구체적인 입력값을 식별하고, 프로그램의 수행 결과에 대한 기댓값을 명시하는 일을 말한다. 테스트 코드도 코드이므로 중복을 줄이고 읽기 쉽게 해야 함
    • 테스트가 실패했을 때 다른 테스트 케이스를 쉽게 식별할 수 있어야 함
  • 강화 (창의성과 경험)
    • 경험과 창의성을 발휘해서 놓친 케이스는 없는지 확인