Software Test and Unit Test

2019-06-14
Terminology

안녕하세요. 도미닉입니다.

오늘은 소프트웨어 테스트와 Unit Test 에 대해서 알아보겠습니다.

소프트웨어 테스트의 목적

소프트웨어 테스트는 보통 소프트웨어의 버그를 찾는 것이라고 생각하실 것 같습니다.

저 또한 그렇게 생각했지만 잘못알고 있는 것이었습니다.

소프트웨어 테스트는 제품이 효과적임을 보여주려는 것입니다.

소프트웨어 테스트가 버그를 찾고 품질을 높이는 것이라면 거기에 드는 비용은 어마어마 할 것입니다.

소프트웨어 테스트는 품질 첨가이기 보다 품질 보증입니다.

소프트웨어 테스트의 최종 목표는 소프트웨어가 원래 해야 하는 동작을 해서 비용을 지불할 만한 가치가 있는지를 고객에세 보여주는 것이 되어야 합니다.

소프트웨어 테스트의 시기

소프트웨어의 문제점을 발견하는 시점이 어느 때일 때 비용이 적게 들까요?

제품을 만드는 초기 단계에서 테스트하면 문제점을 찾는데 더 적은 비용이 듭니다.

전체 과정 중 어느 한 단계인 일부분이 안정적으로 잘 동작하는지 테스트 할 수 있을 것입니다.

그렇게 하면 해당 부분을 통합한 후 최종 단계에서 모든 테스트를 하는 것보다 더 적은 문제가 발생할 것입니다.

단위 테스트 란?

단위 테스트란 기능 단위 별로 테스트를 하는 것을 의미합니다.

단위 테스트는 테스트를 실행하는 데 쓰는 단계와 기대되는 결과를 명세해야 합니다.

단위 테스트의 가장 중요한 장점 중 하나는 테스트를 자동으로 수행하게 할 수 있다는 것입니다.

좋은 테스트 란?

FIRST

  • Fast - 테스팅은 빠르게 동작해야 한다.

  • Independent / Isolated - 독립적이어야 한다.

  • Repeatable - 동일한 인풋의 테스팅의 결과는 항상 동일해야 한다.

  • Self-Validating - 테스트는 완벽히 자동화되어야 한다. 그 결과 자체로 성공과 실패를 알 수 있어야 한다.

  • Timely - 이상적인 테스트 코드는 테스트할 코드를 작성하기 전 작성되어야 한다.

Given, When, Then

Given, When, Then으로 섹션을 나누어 작성하는 습관을 기르자

  • Given - 입력 값을 제공

  • When - 입력 값을 사용해 테스트의 대상이 되는 메소드를 실행

  • Then - 결과 값을 증명 (기대값과 비교)

정리

유닛 테스트에 대해 조금 더 자세히 글을 써보고 싶었지만 첫번째 글이고 아직 많은 공부가 필요한 것 같습니다.

현재까지 이해한 내용들을 정리했습니다.

이것들을 토대로 예제와 설명을 추가해서 또 포스팅하도록 하겠습니다.

글 읽어주셔서 감사합니다.

참고

테스트 주도 iOS 애플리케이션 개발 - 그레이엄 리 지음
https://baked-corn.tistory.com/135