Web/techTalk

[Test Code] Unit Test, Integration Test, Acceptance Test

레에몽 2022. 3. 6. 13:36

TestCode란?

1. TestCode는 왜 작성해야 할까요?

1.1 신뢰성 측면

TestCode를 통해서 우리는 우리의 코드가 잘 작동하는지 확인할 수 있습니다. 자신의 코드가 신뢰할 수 있고, 다른사람들에게 어떤식으로 작동하고 사용할 수 있는지 알려주는 지표가 됩니다.

1.2 시간성 측면

TestCode를 작성하면 오히려 개발이 빠르게 진행될 수가 있습니다. “급할수록 돌아가라”라는 말은 Test를 진행할 때에도 마찬가지입니다.

TestCode를 작성하지 않으면 초반에 더 빠르게 개발이 될 수 있겠지만, 나중에 디버깅하는 과정에서 더 시간이 잡아먹게 되고 더 오랜 시간이 걸릴 수 있습니다.

TestCode 작성 전 테스트 과정은 다음과 같습니다.

  1. 코드를 수정합니다.
  2. 서버를 동작하고, 테스트 데이터를 DB에 입력합니다.
  3. 브라우저를 통해 테스트 동작을 실행합니다.
  4. DB데이터를 정리합니다.
  5. 반복합니다.

TestCode 작성 후 테스트 과정입니다.

  1. 코드를 수정합니다.
  2. 테스트 코드를 실행합니다.
  3. 반복합니다.그렇다면 TestCode는 어떤식으로 작성해야 할까요? 모든 함수마다 TestCode를 작성해야 하나요? 아니면 서버 호출에서 TestCode를 작성해야 하나요?
  4. 서버에 배포를 하기 위해서는 안정적인 측면이 가장 중요합니다. TestCode가 아니더라도 실제로 작동이 잘 되는지 QA작업도 많이 실행해야 합니다. 이런 측면을 TestCode가 줄일 수 있다는 것입니다.

2. 테스트의 단위는 어떻게 해야 하나요?

테스트의 단위는 크게 단위 테스트(Unit Test), 통합 테스트(Integration Test), 인수 테스트(Acceptance Test)로 나눌 수 있습니다.

2.1 단위 테스트(Unit Test)

단위 테스트는 응용 프로그램에서 테스트 가능한 가장 작은 소프트 웨어를 실행하여 예상대로 동작하는지 확인하는 테스트입니다.

단위 테스트에서 테스트 대상 단위의 크기는 정해져있지 않습니다. 일반적으로는 클래스 또는 메서드 수준으로 정해지며, 단위의 크기가 작을수록 단위의 복잡성이 낮아집니다.

소프트웨어를 개발할 때 단위 테스트는 개발자의 관점입니다. 소프트웨어 자체를 이해하고 있어야 하며, 어떤식으로 동작할지 세세하게 나눌 수 있어야 합니다. 각 단위 테스트를 실행한 코드들이 모인다면 안정적인 코드라고 자부할 수 있습니다. 단위테스트는 특히 TDD를 할 때 빛을 발휘합니다.

장점으로는 메서드들을 안정적으로 만들 수 있으며, 에러가 발생했을 때 어디서 발생했는지 알기 쉽습니다.

단점으로는 모든 메서드를 하기는 시간상으로 어려운 문제가 있습니다.

2.2 통합 테스트(Integration Test)

통합 테스트는 단위 테스트보다 더 큰 동작을 달성하기 위해 여러 모듈들을 모아 이들이 의도대로 잘 상호작용하는지 확인하는 테스트입니다.

통합 테스트는 단위 테스트와 다르게 개발자가 변경할 수 없는 부분까지 묶어 검증할 때 사용합니다. 데이터베이스에 접근하거나, 외부 라이브러리까지 한 환경에서 잘 작동하는지 확인하는 과정입니다. 통합 테스트는 작동이 되는지는 확인할 수 있어도, 완전하게 작동된다는 것을 증명하지는 않습니다.

통합 테스트의 장점은 단위 테스트에서 발견하기 어려운 버그를 찾을 수 있습니다. 단위 테스트에서 잘 작동했던 코드가 브라우저의 환경에 따라서 잘 안되는 경우가 있을 수도 있습니다.

대신 단점으로, 어디서 에러가 발생했는지 쉽게 확인하기가 어렵습니다.

2.3 인수 테스트(Acceptance Test)

인수 테스트는 사용자 스토리(시나리오)에 맞추어서 수행하는 테스트입니다.

앞선 두 테스트와는 다르게, 비즈니스에 초점을 둡니다. 특정한 시나리오를 만들고, 개발자는 시나리오에 맞추어서 테스트 코드를 작성합니다. 개발자는 다른 의사소통 집단으로부터 시나리오를 받아 개발합니다.

인수 테스트는 애자일 개발 방법론에서 탄생했으며, 시나리오가 정상적으로 작동하는지 확인하는 테스트입니다.

해당 테스트의 장점은 클라이언트가 요구한 요구사항이 잘 작동하는지 확인할 수 있다는 것입니다.