프로젝트를 개발할 때, 여러가지 개발 방법론이 있다. 에자일, 폭포수, TDD 등등...
요즘은 TDD 방법론을 많이 쓴다고 들었다. 나도 인프런을 통해서 스프링 부트 강의를 들을 때, 기능을 하나 개발하고, 테스트 코드를 작성, 테스트를 수행하는 구조의 과정이 있었는데 지금와서 생각해보니 딱 TDD....
왜 테스트 주도 개발이 나왔냐고 하니, 소프트웨어 개발은 너무 유동적이고, 요구 사항 또한 계속 바뀌고, 프로젝트 자체가 하나의 거대한 작업이 되어버리면서 소프트웨어 위기(Software Crisis)에 봉착하는 경우가 많다고 한다.
TDD(Test Driven Development) - 테스트 주도 개발은 3가지 과정이 담겨 있고, 이 과정은 짧은 사이클을 반복하면서 나아간다.
- 먼저 어떤 기능에 대해서 실패하는 코드를 만든다.
- 그 기능에 대한 성공하는 코드를 만든다.
- 그 기능의 효율성 개선과 리펙토링을 한다. 이후 1로 되돌아가 반복한다.
이렇게 짧은 주기를 가진 TDD는 아래와 같은 장점을 얻을 수 있다.
- 코드의 유지 보수가 용이해짐.
- 프로그래밍 시간이 단축 됨.
- 소스코드 기록이 뛰어남.
- 단기적인 목표와 장기적인 목표를 뚜렷하게 제시
- 개발하고 있는 코드의 문제점을 빠르게 잡아낼 수 있음.
나도 제대로 된 TDD를 해 본 적은 없지만, 오히려 테스트 코드를 작성하는 것이 프로그래밍 시간이 단축된다고 한다.
이유는 디버깅에 걸리는 시간을 TDD를 통해 한 번에 체크할 수 있기 때문이라고 한다.
코드의 유지보수와 기록은 테스트 기록 그 자체가 기능의 실패와 성공을 염두해 테스트 하는 것이니, 자연스레 가질 수 있는 장점이라고 생각한다.
이렇게 테스트 환경이 구축된다면, 프로그래머들 사이에서도 협업이 쉬워지고, 문제점을 빠르게 찾을 수 있다는 것.
개인적으로 정말 놀라운 점은 내가 개인적으로 배웠던 강화학습의 Q-Learning을 생각나게 한다는 것이다.
어느 한 에이전트가 환경에 맞춰 최적의 수행을 학습해 나가는 것처럼, TDD 또한 어느 한 기능을 만들 때 실패와 성공을 경험하면서 코드를 더 견고하게 만들어 준다는 점이 비슷해서이다.
어쨌든 요즘은 TDD 방법론을 많이 쓰고 있다고 하고, 나도 대규모 프로젝트나 작업에서 TDD로 개발을 경험해 봤으면 좋겠다.
'프로그래밍과 자료구조' 카테고리의 다른 글
[프로그래밍] JVM의 Garbage Collection (0) | 2020.10.23 |
---|---|
[프로그래밍] JVM 의 구조 (0) | 2020.09.17 |