본문 바로가기
까망 동네/까망

TDD (Test Driven Development)란?

by 까망 하르방 2021. 11. 6.
반응형

테스트 주도 개발」로 "테스트가 개발을 이끌어 나간다"

① [Red] 실패하는 테스트 코드 먼저 작성

② [Green]테스트 코드를 성공시키기 위한 프로덕션 코드 작성

③ [Black] 중복 코드 제거, 일반화 등의 리팩토링

 

📌 Test Engineer와 Quality Assurance 차이

 

Test Engineer(TE)와 Quality Assurance(QA) 차이

SW가 보다 복잡해지는 동시에 품질이 중요해지는 만큼 검증 Coverage에 관심이 커지고 있다. 「QA」와 「TE」 목적은 "제품이 결함없이 만들어졌는지" 확인하는 불량 검사라고 볼 수 있으며,, 더 나

zoosso.tistory.com

 

TDD 프로세스

Test Code 작성 → Test 실패 확인 

② 구현 코드 작성

③ 코드 실행 → 성공 시 ①로 이동하여 테스트 추가

(모든 테스트 성공시) 코드 리팩토링 

※ TDD가 아닌 개발 프로세스로는 아래와 같을 것이다.

    디자인(분석설계) → 개발  테스트 → 리팩토링 → 배포

 

Q) 테스트 코드를 선행 작업하면서 보는 효과는 무엇일까?

테스트 코드를 먼저 작성하는 것은 단기적인 관점에서

개발 시간이 더 소요된다고 볼 수 있다.

하지만 테스트 코드를 미리 작성해두면서 구현 코드의 신뢰성을 높일 수 있다.

 

하나의 함수가 잘 동작하는 것은 Unit Test로 확인할 수 있지만

End - To - End 까지 잘 되는지 통합테스트 분석은 쉽지 않다.

이때, Unit Test로 최소 단위 Pass를 보장하는 것이 중요하다.

TDD 개발은 그러한 테스트를 우선시한다고 보면 된다.

 

흔히 알고리즘 문제 사이트에서 제출하면 볼 수 있다.

알고리즘에서는 크게 아래 기준에서 테스트가 진행됩니다.

• 문제 풀이를 위해 작성한 코드에서 모든 Test Case를 커버하는지.

• 실행속도가 얼마나 되는지

• 공간 복잡도(용량)는 얼마나 되는지

 

이때 문제 조건을 보다 복잡하게 재구성했을 때,

기존 Test가 모두 통과하는지 혹은 제외할 테스트가 있는지 확인할 수 있습니다.

다른 사람이 문제 검수를 할 때도 만들어진 테스트를 하면 유지보수가 쉽게 되는거죠.

• 알고리즘 문제 풀 때, 메모리 제한? (feat. 구조체 메모리 계산)

• 알고리즘 문제에서 시간 복잡도는 어떻게 하는걸까?

• 코딩 테스트 문제 풀 때, 시간 복잡도 계산해보기

 

TDD 장점

 Code 변경시 조기 결합 발견 ↑ (무결성  영향도 파악)

    ex) 기존 기능이 정상적으로 동작하는지 확인

 테스트 코드만으로 자체 피드백 되기에 개발 생산성 

 사용된 Unit 테스트 자체만으로 하나의 문서로써 유지보수 비용 절감할 수 있다.

    ex) 다른 사람이 구현한 코드를 보다 빠르게 이해할 수 있다. 

 리팩토링을 위한 Clean Code 지향

cf) 전통적 개발 방식은 테스트를 위해서 완성된 제품 코드가 필요했고,

     완성 코드인 만큼 모듈관 의존성이 증가하고 복잡하기에 테스트 수행이 어려움

 

Q) TDD를 하면 무조건 좋을까?

TDD 프로세스상 테스트 코드를 먼저 작성해야 하는데,

이는 개발 초기 생산 비용이 높다는 점을 의미한다.

일정 마감이 정해진 SI 프로젝트상 무조건 적용하기는 쉽지 않다.

 

또한 테스트 코드를 먼저 작성하는 것은 결코 쉽지 않다.

혼자만 잘하기 보다는 팀 문화로 정착되어야 한다.

결과적으로 회사마다 개발 환경이 적합한 개발 방법을 연구해야한다.

 

TDD 관련 프레임워크

• CUnit / CppUnit (C / C++) 

• JUnit (Java) 

• PyUnit (Python)

• DBUnit (DB) 

• NUnit (.net)

• PHPUnit (PHP)

 

 

📌 [예시] TDD 방식으로 개발 해보기

 

[예시] TDD 방식으로 개발 해보기

해당 포스팅에서는 TDD 개발 방식으로 [소수 찾기] 알고리즘을 검증해 볼 것이다. 📌 TDD (Test Driven Development) 란? TDD (Test Driven Development)란? 「테스트 주도 개발」로 "테스트가 개발을 이끌어 나간

zoosso.tistory.com

반응형

댓글