티스토리 뷰

이론

BDD vs TDD

절취선 2022. 2. 26. 21:09
반응형

TDD(Test Driven Development) ?

애자일 방법론 중 하나인 eXtream Programming(XP)의 'Test-First' 개념에 기반을 둔 단순한 설계방법이다.

TDD와 일반적인 개발 방식의 가장 큰 차이점은 *한다는 점이다.
설계 단계에서 프로그래밍 목적을 반드시 미리 정의해야만 하고, 정의테스트 케이스 작성해야만 한다.
테스트 코드를 작성하는 도중에 발생하는 예외 사항(버그, 수정사항)들은 테스트 케이스에 추가하고 설계를 개선한다.
이후 테스트가 통과된 코드만을 코드 개발 단계에서 실제 코드로 작성한다.

🍀 TDD 개발 방식의 장점

보다 튼튼한 객체 지향적인 코드 생산

  • TDD는 코드의 재사용 보장을 명시하므로 TDD를 통한 소프트웨어 개발 시 기능 별 철저한 모듈화가 이뤄진다. 이는 종속성과 의존성이 낮은 모듈로 조합된 소프트웨어 개발을 가능하게 하며 필요에 따라 모듈을 추가하거나 제거해도 소프트웨어 전체 구조에 영향을 미치지 않게 된다.

재설계 시간의 단축

  • 테스트 코드를 먼저 작성하기 때문에 개발자가 지금 무엇을 해야하는지 분명히 정의하고 개발을 시작하게 된다. 또한 테스트 시나리오를 작성하면서 다양한 예외사항에 대해 생각해볼 수 있다. 이는 개발 진행 중 소프트웨어의 전반적인 설계가 변경되는 일을 방지할 수 있다.

디버깅 시간의 단축

  • 이는 유닛 테스팅을 하는 이점이기도 하다. 예를 들면 사용자의 데이터가 잘못 나온다면 DB의 문제인지, 비즈니스 레이어의 문제인지 UI의 문제인지 실제 모든 레이러들을 전부 디버깅 해야하지만, TDD의 경우 자동화 된 유닛테스팅을 전재하므로 특정 버그를 손 쉽게 찾아낼 수 있다.

테스트 문서의 대체 가능

  • 주로 SI 프로젝트 진행 과정에서 어떤 요소들이 테스트 되었는지 테스트 정의서를 만든다. 이것은 단순 통합 테스트 문서에 지나지 않는다. 하지만 TDD를 하게 될 경우 테스팅을 자동화 시킴과 동시에 보다 정확한 테스트 근거를 산출할 수 있다.

추가 구현의 용이함

  • 개발이 완료된 소프트웨어에 어떤 기능을 추가할 때 가장 우려되는 점은 해당 기능이 기존 코드에 어떤 영향을 미칠지 알지 못한다는 것이다. 하지만 TDD의 경우 자동화된 유닛 테스팅을 전제하므로 테스트 기간을 획기적으로 단축시킬 수 있다.
public class Calculator {
    public int plus(int a, int b) {
        return a + b;
    };
}

public class CalculatorTest {
    Calculaotr calc = new Calculator();

    @Test
    void plus() {
        int a = 10;
        int b = 20;
        int result = calc.plus(a, b);

        assertEquals(result, a + b);
    }
}

BDD(Behavior Driven Development) ?

어플리케이션 행동에 기반하여 공통된 이해를 구성하는 방법이다.

그리고 BDD는 TDD를 수행하려는 어떠한 행동과 기능을 개발자가 더 이해하기 쉽게하는 것이 목적이다.

시라리오 형식으로 테스트를 주도하는 방식인 만큼 Given / When / Then 3가지로 구성하여 테스트한다.

  • Given

    • 테스트를 위해 주어진 상태
    • 테스트 대상에게 주어진 조건
    • 테스트가 동작하기 위해 주어진 환경
  • When

    • 테스트 대상에게 가해진 어떠한 상태
    • 테스트 대상에게 주어진 어떠한 조건
    • 테스트 대상의 상태를 변경시키기 위한 환경
  • Then

    • 앞선 과정의 결과

예제

public class Calculator {
    public int plus(int a, int b) {
        return a + b;
    };
}

public class CalculatorTest {
    Calculaotr calc = new Calculator();

    @Test
    void plus() {
        // given
        int a = 10;
        int b = 20;

        // when
        int result = calc.plus(a, b);

        // then
        assertEquals(result, a + b);
    }
}

BDD vs TDD

TDD는 개발 코드의 완성이 목적으로 코드 자체에 집중한 테스트 코드를 작성하고

BDD는 개발 결과의 결과 검증이 목적으로 시나리오를 패턴화 해서 테스트 코드를 통해 검증할 수 있도록 한다.

이름 Based 핵심 라이브러리
TDD 시나리오 기반 테스트 주도 JUnit5, Mockito
BDD 행동기반 자연어와 유사하게 BDDMockito

🧾Reference

  1. wonit
  2. 개발개발 울었다.
반응형

'이론' 카테고리의 다른 글

Ajax vs Axios  (0) 2022.02.26
DB암호화 기법  (0) 2022.02.26
비동기 데이터 전송 ajax  (0) 2022.02.26
웹 암호화 종류  (0) 2022.02.26
Session_and_Token  (0) 2022.02.26
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함