본문 바로가기
IT Trend

테스트 주도 개발(Test-driven development TDD) 개념

by with chu 2021. 4. 2.
728x90

 

 


테스트 주도 개발이란?


 

테스트 주도 개발(Test-driven development TDD) 소프트웨어 개발 프로세스 하나로 매우 짧은 개발 사이클을 반복하는 개발법이다.

1. 개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스 작성한다.

2. 그 테스트 케이스를 통과하기 위한 최소한의 코드 생성한다.

3. 마지막으로 작성한 코드를 표준에 맞도록 리팩토링(refactoring)한다. 리팩토링이란 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함' 뜻한다. 버그를 없애거나 새로운 기능을 추가하는 행위가 아니라 가독성을 높이고 유지보수를 편하게 하는 것이다.

4. 이러한 애자일의 실천법은 피드백 협력을 동시에 증진시킨다.

 

image from Xavier Pigeon @XEngineer

 

 

 

- 테스트 주도 개발의 특징 -

 

1. 리팩토링을 거쳐 Clean Code  지향하기 때문에 코드복잡도가 감소한다.

2. Test Case 통과하는 코드만 만들기 때문에 결함이 감소된다.

3. 테스트 코드를 먼저 작성한다면 명확한 기능과 구조 설계할 있다. 각각의 함수를 정의할 테스트의 용이성을 위해 복잡한 기능을 함수에 모두 구현할 경우 테스트 방식이 복잡해지고 시간이 오래 걸리기 때문이다

4. 코드 수정이 되는 경우 테스트 코드를 재사용할 없게 되기 때문에 자연스럽게 TDD 목적인 코드의 재사용성을 보장하며 코드를 작성하게 된다. 따라서 기본적으로 객체지향적 코드가 되는 것이다.

5. 미리 테스트 시나리오를 작성해봄으로써 코드 개발 기능을 예외 상황들을 미리 조사하게 되는 효과가 발생하여 예외 코드를 작성하기 쉬워진다.

6. TDD 개발로 인해 각각의 단위 테스트 진행하게 된다면 영역을 분할하여 디버깅이 좀더 쉽고 빠르다.

7. TDD를 구현하게 될 경우에 테스팅을 자동화시킴과 동시에 정확한 테스트 근거를 산출해 제공할 수 있다.

 

 

 - 테스트 케이스의 종류 -

 

단계별(step-by-step) 케이스, 매트릭스(matrix) 형식, 자동화된 스크립트(automated script) 케이스 등이 있다.

 

단계별 케이스가 적합한 경우:

  • 일회성의 테스트 케이스, 고유한 트랜잭션이나 규칙
  • 화면에서 화면으로 가는 비즈니스 시나리오
  • 많은 프로세싱 규칙들
  • GUI 인터페이스
  • 매트릭스로 표현하기 힘든 입력과 출력

 

매트릭스(matrix) 또는 형식이 적합한 경우:

  • 하나의 양식이나 동일 필드를 채우는데 있어서 많은 변이가 존재
  • 동일한 입력, 여러 다른 플랫폼이나 브라우저, 여러 다른 형상(configurations)
  • 문자 기반 화면(Character based screens)
  • 매트릭스로 가장 잘 표현되는 입력과 출력

 

자동화된 스크립트(automated script) 형식 적합한 경우:

  • 자동화된 테스팅 사용에 대한 결정은 테스트 되는게 무엇인지 보다는 테스팅을 하는 프로젝트와 조직에 더 관련되어 있음
  • 자동화된 케이스를 작성하는 것이 수동 테스트 보다 더 오래 걸리는 점(수동 테스트가 여전히 앞서 작성되어야 하므로)을 이해해야 함
  • 인터페이스가 안정적인 경우라면 테스트가 레코딩 될 수 있으며, 자동화된 테스팅의 실질적인 플레이백(재생)은 소프트웨어 생명 주기의 유지보수 단계에서 이루어짐

 

 

 

 

 

출처:

위키피디아-테스트주도개발

위키피디아-리팩토링

twitter.com/XEngineer/status/666943798363090944

https://m.blog.naver.com/suresofttech/221569611618

https://grapevine9700.tistory.com/324

https://needjarvis.tistory.com/448

728x90

'IT Trend' 카테고리의 다른 글

블록체인(block chain) 기술의 개념 / 적용 사례  (3) 2021.03.19

댓글