Heestory

기술 대비 ) TDD(Test-Driven Development) 본문

개발(~국비)/기술면접

기술 대비 ) TDD(Test-Driven Development)

까만밀가루 2022. 8. 18. 15:41

매우 짧은 개발 사이클의 반복에 의존하는 개발 프로세스로, 개발자는 우선 요구되는 기능에 대한 테스트 케이스와 코드를 작성하고 상황에 맞게 리팩토링 하는 테스트 주도 개발 방식을 의미합니다.

새로운 기능을 추가하기 전 테스트를 먼저 작성한다. 테스트를 작성하기 위해 개발자는 해당 기능의 요구사항과 명세를 분명히 이해하고 있어야 하기 때문에 요구사항에 집중 할 수 있게 하고 새로운 기능이 제대로 작동함과 동시에 기존의 기능들이 작 작동하는지 테스트를 통해 확인할 수 있다.

이러한 테스트를 통해 계속해서 리팩토링을 진하고, 리팩토링 속도도 빨라지고 코드의 리티도 향상시켜 보다 객체지향적이고 확장 가능이 용이한 코드, 재설계의 시간을 단축시킬 수 있는 코드, 디버깅 시간이 단축되는 코드가 생성될 수 있다.

 

1. Junit4와 Junit5의 차이점에 대해 설명해주세요

  • 카테고리: [JAVA]
  • 문제 난이도: [NEW, JUNIOR]

Junit4는 junit 라이브러리만 정의하면 되지만 junit5는 3가지의 모듈을 정의해야 한다

- junit platform : 테스트를 실행해주는 런처를 제공(일종의 컨텍스트), TestEngine API 제공(실제 구현체는 별도)

- junit jupiter : TestEngine API 구현체

- junit vintage : Junit4와 3을 지원하는 TestEngine 구현체

로 나눠져 있습니다.

 

 참고로 Spring Boot 2.2.0 버전부터 JUnit5가 기본으로 채택


Junit4는 자바5이상, Junit5는 자바 8이상 사용가능


https://dncjf64.tistory.com/397

 

2022/01/03 망나니개발자 기술면접 - 1

https://mangkyu.tistory.com/200 [기술면접] CS 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!) 1. 기술 면접 준비를 위한 문제 구독 서비스(신청하세요!) [ 서비스 소개 ] 개발자가 되기 위해 또

dncjf64.tistory.com

의문점들

Q. 코드 생산성에 문제가 있지는 않나?

두 배는 아니더라도 분명 코드량이 늘어난다. 비즈니스 로직, 각종 코드 디자인에도 시간이 많이 소요되는데, 거기에다가 테스트 코드까지 작성하기란 여간 벅찬 일이 아닐 것이다. 코드 퀄리티보다는 빠른 생산성이 요구되는 시점에서 TDD 는 큰 걸림돌이 될 수 있다.

Q. 테스트 코드를 작성하기가 쉬운가?

이 또한 TDD 라는 개발 방식을 적용하기에 큰 걸림돌이 된다. 진입 장벽이 존재한다는 것이다. 어떠한 부분을 테스트해야할 지, 어떻게 테스트해야할 지, 여러 테스트 프레임워크 중 어떤 것이 우리의 서비스와 맞는지 둥 여러 부분들에 대한 학습이 필요하고 익숙해지는데에도 시간이 걸린다. 팀에서 한 명만 익숙해진다고 해결될 일이 아니다. 개발은 팀 단위로 수행되기 때문에 팀원 전체의 동의가 필요하고 팀원 전체가 익숙해져야 비로소 테스트 코드가 빛을 발하게 되는 것이다.

Q. 모든 상황에 대해서 테스트 코드를 작성할 수 있는가? 작성해야 하는가?

세상에는 다양한 사용자가 존재하며, 생각지도 못한 예외 케이스가 존재할 수 있다. 만약 테스트를 반드시 해봐야 하는 부분에 있어서 테스트 코드를 작성하는데 어려움이 발생한다면? 이러한 상황에서 주객이 전도하는 상황이 발생할 수 있다. 분명 실제 코드가 더 중심이 되어야 하는데 테스트를 위해서 코드의 구조를 바꿔야 하나하는 고민이 생긴다. 또한 발생할 수 있는 상황에 대한 테스트 코드를 작성하기 위해 배보다 배꼽이 더 커지는 경우가 허다하다. 실제 구현 코드보다 방대해진 코드를 관리하는 것도 쉽지만은 않은 일이 된 것이다.

모든 코드에 대해서 테스트 코드를 작성할 수 없으며 작성할 필요도 없다. 또한 테스트 코드를 작성한다고 해서 버그가 발생하지 않는 것도 아니다. 애초에 TDD 는 100% coverage 와 100% 무결성을 주장하지 않았다.

 

https://osy0907.tistory.com/61

 

TDD 란 무엇이며 어떠한 장점이 있는가

TDD 란 무엇인가 Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성

osy0907.tistory.com