ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JUnit] JUnit 5를 사용한 BDD
    DEV/JUnit 2025. 2. 25. 21:37

    BDD (behavior-driven development) ?

    행위주도개발, 테스트 보다는 기능 자체에 중점을 두고 기능이 예상대로 동작하는지 확인한다. 비즈니스 요구사항과 목표를 소프트웨어의 동작과 기능으로 변환하는 개발 방법론을 말한다.

     

    TDD가 제대로동작하는 소프트웨어를 만드는 데 도움이된다면,

    BDD는 비즈니스적 가치를 제공하는 소프트웨어를 만드는 데 도움이 된다.

     

    BDD 주요 원칙

    1. 공통 언어 사용

    BDD에서는 모든 이해관계자가 이해할 수 있는 공통된 언어를 사용한다. 주로 Gherkin이라는 문법을 사용한다.

    • Gherkin 문법: "Given-When-Then" 구조를 따르는 문법으로, 시나리오를 작성할 때 자주 사용
      • Given(주어진 상황): 초기 상태나 전제 조건을 기술
      • When(행동): 수행할 동작이나 이벤트를 기술
      • Then(결과): 예상되는 결과나 상태를 기술

    2. 행동에 집중

    시스템이 어떻게 동작해야 하는지에 초점을 맞춘다. 이는 단순히 코드의 구현이 아니라 사용자가 시스템을 어떻게 사용할 것인지에 대한 행동을 정의하는 것이다.

     

    3. 예제기반 접근

    구체적인 시나리오를 통해 요구사항을 명확히 한다. 추상적인 설명보다 실제 예제를 통해 이해도를 높인다.

     

    TDD와 BDD의 차이점

    특성 TDD (Test-Driven Development) BDD (Behavior-Driven Development)
    접근 방식 테스트를 먼저 작성하고 코드를 구현 행동을 기술하고 이를 기반으로 테스트 작성
    초점 코드의 기능 검증 사용자 행동과 비즈니스 가치에 초점
    언어 기술적이고 개발자 중심의 언어 비즈니스 도메인 언어 사용

     

    BDD 이점

    - 사용자 요구 충족 : 사용자는 구현에 신경을 덜 쓰고 애플리케이션의 기능에 더 집중할 수 있다.

    - 명확성 제공 : 시나리오는 소프트웨어가 수행해야하는 작업을 명확히 한다.

    - 변경 대응 : 시나리오는 소프트웨어 문서의 일부로서 새 변경 사항을 확인하는데 도움을 준다.

    - 자동화 지원 : 시나리오의 단계가 이미 정의되어 있으므로 시나리오를 자동화된 테스트로 변환할 수 있다.

    - 비즈니스 가치에 집중 : 쓸데없는 기능이 추가되는 것을 막고 기능의 우선순위를 정하는 데에도 사용할 수 있다.

    - 비용 절감 : 기능의 중요도에 따라 우선순위를 정하고 불필요한 기능을 만들지 않는다면 리소스가 낭비되는 일 없이 필요한 작업에만 리소스를 집중 할 수 있다.

     

    BDD 과제

    - 많은 참여, 강력한 협업, 상호작용, 직접적인 의사소통, 지속적인 피드백 등이 필요하다.

     

    BDD 적용 방법

    1. 요구사항을 시나리오로 작성

    ex)

    Feature: 계산기 기능
    
      Scenario: 두 수를 더한다
        Given 계산기에 2와 3을 입력하고
        When 더하기를 수행하면
        Then 결과는 5가 되어야 한다

     

    2. 자동화된 테스트 코드 작성 : 프레임워크를 활용하여 테스트 코드 작성

    ex) Python - Behave

    from behave import given, when, then
    
    @given('계산기에 {a:d}와 {b:d}을 입력하고')
    def step_given_input_numbers(context, a, b):
        context.a = a
        context.b = b
    
    @when('더하기를 수행하면')
    def step_when_add(context):
        context.result = context.a + context.b
    
    @then('결과는 {expected:d}가 되어야 한다')
    def step_then_check_result(context, expected):
        assert context.result == expected, f"Expected {expected}, but got {context.result}"

     

    3. 개발 및 테스트 반복

    테스트가 실패하면 해당 기능을 구현하거나 수정하고, 테스트를 다시 실행한다. 모든 테스트가 성공할 때까지 이 과정을 반복한다.

     

    BDD 프레임워크

    1. Cucumber

    - Gherkin(걸킨) 이라는 언어를 사용하여 시나리오를 일반적인 자연어로 기술한다.

    - feature파일에 시나리오나 구체적인 예시를 사용하여 요구사항을 기술한다.

    - 시나리오는 일련의 step으로 정의할 수 있다.

    - 시나리오에 해당하는 코드를 실행하고, 소프트웨어가 이러한 요구사항을 잘 따르는지 검증한다.

    - 시나리오의 성공 또는 실패를 기술한 리포트를 생성한다.

     

    2. JBehave

    - 스토리 파일을 가지고 원하는 행동을 나타내는 시나리오를 정의한다.

    - 스토리 : 하나 이상의 시나리오를 포함하며 자동으로 실행할 수 있는 동작을 나타낸다.

    - 시나리오 : 애플리케이션과 상호작용하는 실제상황을 말한다.

    - 스텝 : 전통적인 BDD 개념어인 Given, When, Then을 사용하여 정의한다.

     

     

     

    참고 :

    https://yoongrammer.tistory.com/115

     

    효과적인 소프트웨어 개발을 위한 BDD(Behavior-Driven Development) 소개

    소프트웨어 개발 방법론은 시간이 지남에 따라 진화해 왔습니다.그 중에서도 행동 주도 개발(Behavior-Driven Development, BDD)은 개발자와 비즈니스 이해관계자 간의 협업을 강화하고 소프트웨어의 품

    yoongrammer.tistory.com

     

    댓글

Designed by Tistory.