Home 9장 자주 접하게 되는 질문들, FQA
Post
Cancel

9장 자주 접하게 되는 질문들, FQA

이미 충분히 많은 기능 테스트를 하고 있는데 따로 단위 테스트 케이스를 만들 필요가 있을까?

기능 테스트와는 별개로 단위 테스트 케이스는 만들어야 한다. 기능 테스트는 사용자 쪽에 더 가깝고, 단위 테스트는 애플리케이션이 동작하는 플랫폼에 더 가깝게 위치한다. 기능 테스트는 내부 클래스 동작 자체에는 크게 관여하지 않는다. 기능 테스트는 현상적으로 애플리케이션의 외부 동작 위주로 진행되기 때문이다.

개발시 결과값을 미리 예상할 수 없는 경우에는 어떻게 TDD를 진행하나?

TDD는 개발자가 특정 메소드를 호출했을 때 어떤 값이 리턴될지 알고 있다는 것이 사전조건으로 가정되어 있다. 질문의 경우 같은 상황이라면 임의의 값을 만들어 실패를 만들고 실패때 나온 값을 결과 값으로 만들어서 현재 상태가 올바름을 알 수 밖에 없다.

팀 내에 TDD를 통한 단위 테스트를 작성하지 않고도 높은 수준의 코드를 작성하고 있다면?

단위 테스트 케이스는 현재 소스코드가 정상적으로 동작함을 보장하는 방법 중 하나다. 현재에만 주목하지 말고 미래에 투자하자

단위 테스트 케이스를 작성하기 어렵다 어떻게 해야하나?

TDD를 진행할 때, 억지로 테스트를 작성하는 것은 잘못된 접근이다. 테스트를 작성하기 쉽게 코드를 작성하는 것이 맞다. 테스트를 만들기가 어렵다면 기본적으로 만들어진 코드 설계를 다시 살펴보자

private 메소드도 테스트 케이스를 만들어야 하나?

private 접근 제한자는 외부에 알리고 싶지 않은 부분이라는 전제하에 만든다. 따라서 근래에는 private 메소드는 테스트하지 않아도 무방하다는 것이 주류이고, 굳이 테스트 케이스 수행을 원한다면 리플렉션 등을 이용할 수는 있다.

TDD를 적용하기 어려운 대표적인 이유는?

작성해야할 기능이 있으면 코드를 작성하기 전에 테스트 케이스를 작성해서 진행하는 것이 일반적인 순서이다. 그런데 기능이나 기능 리스트가 명확하지 않으면 테스트 코드를 작성하기가 매우 어려워진다. 또 개발자들의 연습이 되어 있지 않으면 예제 코드의 수준이 현업의 업무 상황이나 레벨과 차이가 나는 경우가 많다.

따라서 선행 설계는 반드시 필요하고, 요구사항 도출 정련 기법과 기본 설계 개념에 대해서는 미리 어느 정도 이상의 지식이 있어야 한다.

SI에서 TDD를 적용하는 것이 바람직 할까?

SI는 전통적으로 개발과 유지보수가 분리되어 있다. 대개 개발은 납기일자와 비용이 미리 정해져 있다. 기일을 맞추기만 했다고 해서 성공적인 프로젝트라고 할 수 있을까? TDD는 제품의 품질을 증가시키고 제품 자체의 오류 감소, 변경 비용 감소 같은 비용 감소 효과를 가진다. 이렇듯 TDD가 줄 수 있는 것이 무엇인지 생각해볼 필요가 있다.

TDD를 하면 TDD를 하지 않은 경우에 비해 확실히 품질도 높아지고, 개발도 빨라지는 것인가?

TDD를 사용하면 확실히 결함이 적은 우수한 품질의 소프트웨어를 만들어낼 수 있고, 지속적으로 개선할 수 있는 바탕을 마련해준다는 데에는 대부분 동의를 하나 개발 진척이 다소 늦어지는 거 같다고 말을 한다. 테스트 케이스를 작성하고 유지하는데는 노력이 들어가기 때문이다.

TDD 도입시 초반에 어떤 활동을 같이 하면 좋을까?

TDD를 도입하면 초반에 개발자들이 익숙해질 때까지는 다 함께 코드 리뷰를 진행할 것을 권장한다. 또 새로운 기능을 추가하거나 버그를 찾을 때 테스트 케이스를 먼저 만들도록 어느정도 강제할 필요가 있다. TDD는 습관이 중요하다.

void 메소드를 테스트 가능하게 만들려면 어떻게 해야 할까?

void는 리턴 값이 없다는 의미로 로직의 절차를 기술했거나 기능 위임 작업을 목표로 하겠다는 의미이다. 즉 void 메소드의 이름이 의미하는 작업을 그 메소드에서 끝을 내겠다는 뜻이다. 이럴땐 행위 기반 테스트를 해야한다. 간단한 방법은 상태를 확인할 수 있는 다른 메소드의 결과를 테스트하는 방법이 있다.

TDD와 단위테스트 둘이 같은 뜻인가?

TDD는 개발 방식을 의미하고, 단위 테스트는 자동화된 테스트 케이스를 말한다. 보통 단위 테스트는 TDD로 개발한 작업의 부산물이 된다.

정리

TDD는 소프트웨어 개발에 있어 결코 절대적인 해법은 아니나 소프트웨어 개발 전쟁에서 사용할 수 있는 매우 유용한 무기이다. TDD는 개인에게나 팀에게나 매우 유용한 기술이고 보탬이 되는 기법이다.

This post is licensed under CC BY 4.0 by the author.

8장 TDD에 대한 다양한 시각

1장 컴퓨터 내부의 언어체계