테스트 주도 개발은 ‘개발 → 테스트’ 사이클에서 벗어나 ‘테스트 → 개발’ 사이클을 지향하는 소프트웨어 개발 방법론입니다.
테스트 주도 개발은 ‘더 깔끔한, 더 완성도 높은 코드’를 작성할 수 있게 해주며 동시에 ‘개발 시간 단축, 소프트웨어 결함 최소화’를 가능하게 합니다.
극단적으로 테스트를 하지 않고 대기업 시스템을 개발하고 배포했을 때 문제가 생긴다면 얼마나 많은 시간과 비용이 소모될까요?
테스트 주도 개발의 목표는 ‘작동하는 깔끔한 코드’입니다. 그리고 이 목표를 위해 두 가지 원칙을 지켜야 합니다.
실시간으로 오류 파악이 가능
(테스트 -> 개발 방식의 도입으로 시스템 결함의 빈도를 효과적으로 줄일 수 있음)
짧은 개발 주기를 통해 고객의 요구사항을 빠르게 수용하고 피드백을 받는 것이 가능하고 진행 상황 파악이 쉬움
자동화 도구를 이용한 TDD 테스트케이스를 단위 테스트로 사용이 가능함
(자바는 JUnit, C와 C++은 CppUnit 등)
개발자가 기대하는 앱의 동작에 관한 문서를 테스트가 제공해줌
기존 개발 프로세스에 테스트 케이스가 추가되므로 테스트 케이스 작성에 시간 투입이 많아짐
테스트의 방향성, 프로젝트 성격에 따른 테스트 프레임워크 선택 등 추가로 고려할 부분의 증가
간단한 알고리즘 문제를 통해 TDD를 익혀봅시다.
출처: 타겟 넘버(dfs)
n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
-1+1+1+1+1 = 3
+1-1+1+1+1 = 3
+1+1-1+1+1 = 3
+1+1+1-1+1 = 3
+1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
numbers | target | return |
---|---|---|
[1, 1, 1, 1, 1] | 3 | 5 |
[4, 1, 2, 1] | 4 | 2 |