1 분 소요

근 2주 만에 포스팅이네요. 최근 이직 준비와 퇴사 준비로 너무 바쁘다는 변명을…크흠
오늘의 주제는 BDD입니다.
단순히 BDD가 어떤 거고 보다는 개인적인 경험으로 이걸 써서 좋은 점과 어떤 프로젝트에 더 잘 어울리는지에 대해 적어 볼까 합니다.

그래서 BDD란 무엇인가?

Behaviour-Driven Development약자이다.
단어를 그대로 번역하자면 행동 주도 개발이라는 뜻입니다.
좀 더 이해하기 쉽게 풀어쓰자면 시나리오 중심의 테스트 방법론입니다.
개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장합니다.
보통 테스트 코드에서 다음과 같은 주석을 많이 보실수 있습니다.

//given 어떤 행동이 진행되기 위한 필요한 값

//when 진행!

//then 완료된 이후의 검증

보시면 어떠한 값으로(given) 실행시켯을때(when) 이러한 결과(then)가 나와야한다의 구조로 보시면 편합니다.
아주 간단한 예제 코드입니다.

public class test{
    
    public int plus(int i, int k){
        return i+k;
    }
    
    @Test
    void plusTest(){
        //given
        int i = 1;
        int k = 11;
        
        //when
        int result = plus(i,k);
        
        //then
        assertThat(result).isEqualTo(12); // i+k 같은 서비스로직과 연관있는 방식으로 검증은 최대한 피합니다.
    }
}

추가로 보통 then에 오는 결과 값은 하드코딩으로 직접 값을 예측한 값을 입력하는 게 좋습니다.
이유는 안에 있는 로직을 검사하기 위한 then의 검증부인데 똑같은 방식으로 검증한다면 의미가 많이 퇴색됩니다.


BDD를 적용하기 가장 추천하는 프로젝트

제 생각엔 BDD는 일정 시간마다 수행되어야 하는 Batch 프로젝트에 가장 적용하기 좋은 테스트 방법론 같습니다.

물론 REST API 같은 프로젝트에서도 테스트가 가독성이 좋아지는 장점만으로도 충분히 채택 할 만합니다.

하지만 제 경험상 Batch 프로젝트의 경우 BDD의 효과가 훨씬 더 많이 체감되었습니다.

Batch프로젝트들은 QA하기가 굉장히 까다로웠습니다. (다른 방법 알고 계신다면 알려주세요.)

Batch성 프로젝트들의 특성상 사용자의 동작에 따라 실행되는 것이 아닌 일정 시간, 혹은 특정 조건에서 실행되기 때문에, BDD를 적용하면 어떤 데이터 세팅인지, 어떠한 결과 값을 기대하는지를 가독성 있게 작성할 수 있게 됩니다.

이러한 특성 때문에 다른 프로젝트에서는 타 부서 분들이 QA를 지원해주셔서 테스트가 좀 더 원활하게 종료가 가능하였지만 Batch프로젝트에서 굉장히 애먹은 기억이 납니다.

그리고 이때 BDD의 필요성을 느꼈습니다. 추후 맡은 정기 결제 시스템은 최대한 BDD 스타일로 통합테스트를 구성하였습니다.

댓글남기기