TDD, Test-driven development

김동현·2023년 5월 17일

CS

목록 보기
4/4

Contents

개요
What is TDD?
Why use TDD?

출처 : https://www.ibm.com/garage/method/practices/code/practice_test_driven_development/

개요

TDD는 extreme programming에서 기인한 방법으로, 팀과 함께 코드가 특정 동작이나 사례에서 예상대로 동작하도록 하는 것입니다. 첫번째 시도에서 최적 해, optimum solution을 찾는 것이 아니라 코드와 테스트가 반복적으로 함께 built 구축됩니다. 개발 팀은 TDD를 통해 test coverage를 보장하고 코드 품질을 향상시키며, delivery pipeline의 기초를 다지고 지속적인 delivery를 지원합니다.

test coverage vs code coverage test Coverage는 S/W test에서 얼마나 많은 코드가 테스트되었는지 측정하는 지표입니다. Test Suite의 실행을 통해 어떤 부분이 테스트되었는지 확인합니다. code coverage는 실행된 코드의 평가로, test에 의하여 실행된 라인의 수 등 양적 측정입니다. test coverage는 test case가 전체 기능 요구 사항을 포함하는지 여부를 평가하기 위해 사용됩니다. 핵심목표는 모두 응용 프로그램 코드의 품질 평가입니다. 출처 : https://testsigma.com/blog/code-coverage-vs-test-coverage/ Dynamic Code Coverage Dynamic Code Coverage(동적 코드 커버리지)는 팀이 S/W 코드의 untested portions을 식별가능하도록 합니다. 이 방법은 더 효과적인 S/W testing입니다. Effective software testing은 S/W 품질의 기본요소이며, DCC를 사용함으로서 팀은 즉시 코드 품질을 향상시킬 수 있습니다. DCC는 시장의 다른 테스트 도구와 근본적으로 다릅니다. recompile이 필요하지 않고 상세한 coverage measurement 제공 개발, 테스트 및 production enviroments 운영 환경에서는 프로세스의 모든 함수를 측정하며, 단일 모듈뿐만 아니라 제3자(3rd party) 코드도 측정 출처 : redhat

What is TDD?

TDD의 기본 concept은 모든 production code가 testcase에 대한 response로 작성되어야 한다는 것입니다. Uncle Bob라고 알려진, Robert C. Martin은 아래의 세가지 법칙으로 TDD를 설명합니다.

  1. You are not allowed to write any production code unless it is to make a failing unit test pass.
  2. You are not allowed to write any more of a unit test than is sufficient to fail
  3. you are not allowed to write any more production code than is sufficient to pass the failing unit test
해석 1. 실패중인 test를 통과하기 전까지 어떠한 production code도 작성할 수 없습니다 2. 필요 이상으로 많은 unit 테스트를 작성하지 않아야 합니다 3. unit test에 해당하는 만큼씩만 production code를 작성해야 합니다 Javier Saldana는 아래의 두가지 규칙을 제시합니다

fail할 만큼만 단위 검정을 작성합니다

실패한 unit test를 통과할 수 있을 만큼만 production code를 작성합니다


## Why use TDD? TDD는 아래와 같은 이점을 제공합니다
  1. 코드가 robust, 견고하게 작성되어 빠른 혁신과 지속적인 전달이 가능합니다
  2. 코드를 유연하고 확장가능하게 합니다. refactoring 되거나 이동할 때 코드가 손상될 위험을 최소화합니다.
  3. 테스트들 자체도 테스트되었습니다. 테스트의 핵심 특성은 fail 가능하다는 것이며, 개발 팀은 새로운 test들이 fail 가능한지 확인합니다
  4. 테스트하기 쉬운 코드들을 만들어냅니다
  5. 필요한 기능만이 구현되기에 낭비되는 노력이 없습니다.

## Key practices for TDD tdd의 핵심 실천 방법 1. project leadership(프로젝트를 주도하는 리더나 상위 관리자)에게 buy-in(지지, 동의)를 얻으세요 2. 개발 팀이 TDD를 이해하게 ensure하세요. test를 작성하는 것이 때때로 code를 작성하는 것보다 더 많은 노력을 필요로 합니다. 3. 개발된 모든 테스트를 development pipeline에 부분적으로 Run하세요. 실패하는 테스트는 파이프라인을 중단하세요. 4. TDD로 얻은 value를 측정하고 모니터링 하세요
profile
nice to meet you:)

0개의 댓글