[dW리뷰]코드 품질 향상을 위해: 행위 주도 개발의 모험

원문기사: http://www.ibm.com/developerworks/kr/library/j-cq09187/

TDD(Test-Driven Development)와 비슷하지만 좀 더 직관적인 개념을 적용하기 위해 관점을 살짝 바꾼 BDD(Behavior-Driven Development)에 대한 글입니다. 루비에서는 rspec, 자바에서는 JBehave라는 프레임워크를 사용합니다.

이 튜토리얼에서는 JBehave를 사용해 자바 프로그래밍에서 BDD를 활용하는 방법을 설명하고 있습니다.


public void shouldReturnNullOnPeekWithoutPush() throws Exception{
Ensure.that(stStack.peek(), m.is(null));
}

JUnit 써보셨으면 위의 코드도 대충 감이 올 것이라 생각합니다만..

솔직히 저는 should를 test로, Ensure를 Assert로 바꾸면 그냥 똑같은 게 아닌가 싶은데요 ^^ deepblue군이 언급한 BDD 이야기를 보니 차이를 알듯 말듯 합니다. TDD는 구현된 클래스의 메소드에 대한 최소한의 테스트를 하는 것이고, BDD는 동작해야할 명세를 기준으로 테스트를 하는 것인가 봅니다.

그래도 여전히 좀 궁금한건 이미 JUnit으로도 testValidResultWithNoParameter 같은 식으로 기본적인 Use Case를 구현하여 테스트를 하고 있는데, (오히려 메소드 단위 테스트는 귀찮아서 잘 안해요-,.-) 굳이 이름 규칙 바꾸려고 JUnit 대신 JBehave를 써야할지는 잘 모르겠네요. 물론 정확한 의도를 전달하기 위한 이름이 중요하긴 합니다만, 오히려 TDD를 잘못 이해해서 그냥 BDD 스타일로 JUnit을 쓰고 있던건가 싶기도 하구요.

어쨌든 BDD 때문에 이클립스/Maven 등의 JUnit 지원을 포기하기엔 좀 아쉽네요.. Annotation 도입으로 테스트 메소드 명명이 자유로운 JUnit 4를 사용하면서 TDD/BDD를 혼용하여 적절한 네이밍을 하는게 제일 좋지 않을까 싶습니다. 적절한 조언 주시면 감사하겠습니다~

뭐 JUnit을 사용하든 JBehave를 사용하든 개념은 동일하게 적용할 수 있으니 TDD/BDD를 처음 접하신다면 튜토리얼의 내용이 도움이 될 것입니다.