요약
단위 테스트(Unit Test)는 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차입니다.
- 단위 테스트(Unit Test)
응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인
크기는 규격화되지 않았지만 일반적으로 클래스 or 메소드 수준으로 정해집니다.
리팩토링 시 안정성을 확보할 수 있습니다.
TDD(테스트 주도 개발) 과 함께하면 더 좋습니다. - 통합 테스트(Integration Test)
모듈을 통합하는 과정에서 모듈간의 호환성을 확인하기 위해 수행하는 테스트입니다.
애플리케이션은 여러 모듈로 구성이 되고, 모듈끼리 호출되며 연동되는 과정에서 기능을 수행하는데,통합된 모듈들이 올바르게 연계되어 동작하는지 검증해야 합니다. - 인수 테스트(Accepance Test)
사용자 스토리(시나리오) 에 맞추어 수행하는 테스트입니다.
요구사항이 언제 완료되는지를 정의하기 위해 이해당사자들과 프로그래머들이 같이 작성하는 테스트입니다. 목적은 소통, 명확성, 정밀성입니다.
좋은 테스트의 특징
- Fast : 테스트는 빠르고 자주 돌릴 수 있어야 합니다.
- Independent : 각각의 테스트는 독립적이고 의존되지 않아야 합니다.
- Repeatable : 어느 환경에서도 반복 가능해야 합니다.
- Self-Validating : 테스트는 성공 또는 실패로 Bool 값으로 결과를 내어 자체적으로 검증되어야 합니다.
- Timely : 테스트는 적시에 테스트하려는 실제 코드를 구현하기 직전에 구현해야 합니다.
테스트는 빠르게 독립적으로 어느 환경에서든 실행과 검증이 가능해야 합니다.
TDD 테스트 주도개발
테스트 코드를 먼저 작성하는 TDD 개발 방법론을 적용할 수 있습니다. 장점은 다음과 같습니다
- 깔끔한 코드를 작성할 수 있다
- 장기적으로 개발 비용을 절감할 수 있다
- 개발이 끝나고 테스트 코드를 작성하는건 효율적이지 못하다.
TDD의 궁극적인 목표는 깔끔하게 작동하는 코드를 작성하는 것입니다. TDD 개발 단계에는 리팩토링(코드를 다듬는 과정)이 있는데, 이 과정을 통해 중복된 코드를 없애고 복잡한 코드는 깔끔하게 정리할 수 있습니다.
코드를 처음 작성할 때에는 개발을 느리게 한다는 느낌을 받을 수 있지만, 장기적으로 보면 반드시 개발 비용을 절약해 줄 것입니다.
실패 테스트부터 작성해야 합니다. 순차적으로 실패하는 테스트를 먼저 작성하고, 테스트가 실패할 경우에만 새로운 코드를 작성해야 합니다. 그리고 코드가 중복되었을 때 제거를 하는 것이 좋습니다.
참조