소프트웨어 테스트는 소프트웨어를 배포하기 전 해당 소프트웨어가 정상적으로 작동하는가에 대해 검증하는 단계이다. 테스트의 종류로는 크게 3가지로 나뉘는데, 유닛 테스트(unit test), 통합 테스트(integration test), 인수 테스트(acceptance test)가 있다.
유닛 테스트(unit test)는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다. 즉, 모든 함수와 메소드에 대한 테스트 케이스(test case)를 작성하는 절차를 말한다.
이상적으로, 각 테스트 케이스는 서로 분리되어야 한다. 이를 위해 가짜 객체(Mock Object)를 생성하는 방법을 사용한다.
통합 테스트(integration test)란, 유닛 테스트들을 모아서 테스트하는 것을 의미한다. 모듈들을 모아 테스트하는 방법(상향식 통합 테스트) 외에도 모듈이 있는 것을 가정하고 테스트하는 방법(하향식 통합 테스트)도 있다.
인수 테스트(acceptance test)란, 통합 테스트에서 더 나아가 실제 환경처럼 맞추어 테스트하는 것을 의미한다. 주로 알파 테스트와 베타 테스트로 알려져 있는 테스트들이 이 인수 테스트에 속한다. 알파 테스트는 폐쇄적인 환경에서 개발자가 통제를 하여 테스트를 진행하고, 베타 테스트는 개방적인 환경에서 비교적 자유롭게 테스트를 진행한다.
*코드커버리지 : 테스트가 코드를 얼마나 커버하는지에 대한 정도. 커버리지는 함수(function), 구문(statement), 조건(condition), 분기(branch)로 분류되어 있다.
**최근 테스트 방법론 동향 : TDD
TDD에서는 테스트 코드 작성 -> 개발 -> 리팩토링 방식으로 진행한다.
TDD 방식에서 개발자는 우선 기능이 돌아가게 프로그래밍하여 해당 테스트를 통과하게 만든다. 테스트에 통과하게 만들었다면 그 다음으로 리팩토링하여 기능이 잘 수행될 수 있게 로직을 개선한다.
이처럼 TDD는 테스트 코드를 먼저 작성함으로써 설계한 후, 하드 코딩하여 재빠르게 기능을 구현하고 이를 리팩토링하여 성능 및 안정성을 높인다. agile한 소프트웨어 개발 방법론이 부상함에 따라 TDD 방식이 나타나게 되었다.