TDD&BDD

devoks·2021년 6월 15일
0
post-thumbnail

테스트 기반 개발을 위한 개념 정리


TDD (Test Driven Development)

  • 개념 : 테스트 주도 개발
    • 테스트 상황 및 케이스를 먼저 정의 및 확정한 뒤에, 그 테스트를 통과하기 위한 코드를 작성하고, 개발을 하는 방법.
    • 테스트 코드의 작성, 최소한의 구현 코드 작성, 구현된 코드에 대한 리팩토링 순으로 짧은 주기를 주기적으로 반복하며 점진적으로 개발한다.
  • TDD 장단점

    • 장점
      1. 좋은 설계를 할 수 있도록 하는 밑바탕이 되고, CI/CD에도 적용하여 테스트 자동화 가능.
      2. 다양한 케이스(Status,Data)를 먼저 생각하고 개발하면 코드작성시 더 간결하고 좋은 코드 작성이 가능.
      3. 수정된 코드의 빠른 검증으로 , 테스트에 대한 부담 감소 및 수정에 대한 심리적 안정감.
      4. 축적된 테스트 코드, 높아진 테스트 커버리지로 버그 수정 및 리팩토링이 수월 해, 결국 유지보수가 매우 쉬워 진다.
    • 단점
      1. 테스트 코드를 작성하기 위한 런닝커브가 존재. (Junit,Espresso등의 API 학습 필요)
      2. 테스트코드작성에 대한 시간이 필요. 플랫폼에 적합한 테스트코드 작성 및 시나리오 TC 작성등의 코드 생산이 필요.
      3. 기획변경에 따른 코드 수정 뿐만 아니라 지속적으로 변경된 시나리오에 따른 TC도 수정이 되어야 함.
  • 테스트 범위

    1. SmallTest : 한 번에 한 클래스씩 앱 동작의 유효성을 검사하는 단위 테스트입니다.
    2. MediumTest : 모듈 내의 스택 수준 간 상호작용 또는 관련 모듈 간 상호작용의 유효성을 검사하는 통합 테스트입니다.
    3. Large Test : 앱의 여러 모듈에 걸쳐 사용자 여정의 유효성을 검사하는 엔드 투 엔드 테스트입니다.
  • 테스트 코드 작성 위한 도구들 for 안드로이드

    • Local Unit Test : JVM환경 - Junit, Mockito , Robolectric
    • Instrumented Unit Test : Espresso, UI Automator (Android)
    • AndroidX Test : Junit4 규칙 세트의 사용
    • Google Truth / hamcrest: 어설션 라이브러리 , 가독성 향상위한 도구
    • AndroidJUnitRunner : JUnit 테스트 실행기 - JUnit 3 테스트만 지원하는 InstrumentationTestRunner 클래스를 대체
  • TDD 작성 초안

    1. Util - statiuc 유틸리티 테스트 코드
    2. MVC ,MVVM - 아키텍쳐에 맞는 BL 테스트 코드
    3. UI 테스트 - Input(Data/Click) → Output (Data/View) 이 검증 가능한 테스트 코드
  • 샘플 코드

    • oklab으로 TDD작성 샘플 테스트중

      TBD


BDD (Behavior Driven Development)

  • 개념 : 시나리오 기반(유저 행동 기반)의 테스트 케이스 작성 및 개발

    • 이미 작성된 요구사항이나 기획서를 기반으로 테스트 케이스르 작성하고, 각 메소드위주의 테스트가 아닌 , 유저액션 시나리오 기반으로 테스트를 진행한다.
    • BDD가 무조건 TDD를 대체하는것은 아니다. 상호 보완적으로 사용하는것이 좋다.
    • BDD로 기획적인 시나리오 검증을 하고, 해당 시나리오에서 사용하는 각 모듈들을 TDD의 TC를 테스트함으로써( 물론, 반복되거나 이중으로 테스트되지 않아야 겠고, 코드 결함 확인이 보증되는 수준으로서 TC를 완성해 가야한다. )
  • Android BDD

  • KoTest : https://kotest.io/

    https://github.com/kotest/kotest-android

    https://github.com/kotest/kotest-android-samples

  • kakao : https://github.com/agoda-com/Kakao

  • Cucumber, Spek등 존재,..

Reference



profile
[Android] Software Engineer

0개의 댓글