[Test_Note] 1.TDD와 BDD


TDD



TDD(Test Driven development)란 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나입니다.

1999년 XP(eXtreme Programing)이라는 애자일(Agile) 기반의 방법론이 자리잡을 때 처음 소개된 개발론입니다!


image



그 이후로 소프트웨어 회사 약 77.5% 이상이 TDD를 적용하고 있습니다~!


TDD는 다음과 같은 방식으로 진행됩니다!


image



먼저, 무엇을 테스트할 것인지를 정해서 테스트부터 작성합니다!

그리고 테스트 실패한 부분(처음엔 아무런 코드가 없기에 당연히 실패겠죠~)을 하나씩 해결해 가면서 소스를 작성합니다!

실패하는 테스트가 없어진다면 코드를 정제화시킵니다!

이렇게 하나의 기능을 구현하면, 또 다시 다른 기능을 구현하기 위해 테스트를 작성하고 위의과정을 되풀이합니다!


처음엔 테스트부터 작성하는데 시간이 엄청걸릴지도 모르지만, 익숙해진다면 오히려 더 빠른 개발을 가능케합니다~!


TDD 개발의 장점은 다음과 같습니다~!


image




TDD의 3원칙


  • 실패하는 테스트를 작성하기 전에는 절대로 제품 코드를 작성하지 않는다!


  • 실패하는 테스트 코드를 한 번에 하나 이상 작성하지 않는다.


  • 현재 실패하고 있는 테스트를 통과하는 기준을 넘어서는 제품 코드를 작성하지 않는다.




테스트를 위한 모듈은 언어에 따라 JUnit(Java), pyUnit(python), qUnit(javascript) 등이 있습니다!




BDD



BDD(Behaviour Driven Development)는 TDD와 유사한 개발 프로세스 중 하나입니다!

TDD 는 테스트를 먼저 작성하고 그 테스트를 통과시키는 코드를 작성하는 흐름을 기본으로 합니다. 게다가 테스트 단위도 함수 단위로 매우 작아서 작성하는 거의 모든 함수가 테스트 대상에 포함됩니다. 그렇기에 현업에서 매끄럽게 사용하는 것이 힘이 들 수도 있습니다.


BDD는 함수 단위 테스트를 권장하지 않고 시나리오를 기반으로 테스트 케이스를 작성합니다. 이 시나리오는 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 수준입니다. 하나의 시나리오는 Given, When, Then 구조를 가지는 것을 기본 패턴으로 권장하며 각 절의 의미는 다음과 같습니다.


Feature : 테스트에 대상의 기능/책임을 명시한다.

Scenario : 테스트 목적에 대한 상황을 설명한다.

Given : 시나리오 진행에 필요한 값을 설정한다.

When : 시나리오를 진행하는데 필요한 조건을 명시한다.

Then : 시나리오를 완료했을 때 보장해야 하는 결과를 명시한다.



위의 내용을 개발 측면에서 더 간략하게 정리하면 테스트 대상의 상태 변화를 테스트하는 것입니다!

테스트 대상은 A 상태에서 출발하며(Given) 어떤 상태 변화를 가했을 때(When) 기대하는 상태로 완료되어야 합니다. (Then)


아직까지 TDD와 BDD를 이용해서 개발을 해본 적이 없어서 그런지 아직 감이 잘 안오네요~

앞으로 공부하면서 더 깨닫는 것이 있으면 포스팅하도록 하겠습니다~!