본문 바로가기
메모하는 습관

TDD 단위테스트_단위테스트를 해야하는 이유와 방법 (feat. Clean Clode)

by Love of fate 2024. 3. 23.
728x90
반응형

단위단스트 유닛테스트

 

TDD 단위테스트_단위테스트를 해야하는 이유와 방법

내 얘기를 하자면 애자일 프로젝트를 했을때 당시 단위테스트를 진행하지 못했었다. 

간단한  API TASK기능을 만들때는 테스트코드를 작성하여 실행 후 작성한 적도 있지만 그것 마저도 잘 짰다고 할 수 없다

고 느꼈다. 왜냐하면 단위로 구분하여 짜지 않고 한 함수에 테스트 코드를 모두 짰었기 때문이다. 

테스트 코드와 실제코드 모두 잘 짜지 못했음을 인지하는 것도 중요하지만 

그 이후 어떻게 개선할 것인가를 고려하지 않으면 좋은 개발자가 될 수 없다는 것을 알기에 

 

단위테스트의 중요성과 단위테스트를 진행할때 유의할 점을 찾아보았다.

 

※ 아래의 정리한 내용은 Clean Code 책에서 발췌한 글입니다. 

 

단위 테스트란

단위 테스트란 유닛 테스트라고도 불리며,  단위테스트는 컴퓨터 프로그래밍에서 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차를 일컫는다.


단위테스트를 해야하는 이유

- 테스트는 유연성, 유지보수성,  재사용성을 제공한다. 

- 테스트 케이스가 없다면 모든 변경이 잠정적인 버그다.

- 아키텍처가 아무리 유연하더라도, 설계를 아무리 잘 나눴더라도, 테스트 케이스가 없으면 개발자는 변경을 주저한다. 버그가 숨어들까 두렵기 때문이다.

 

테스트코드를 짜지 않고 실제 코드를 짜게 되면 실제 코드가 테스트가 불가능 하도록 실제 코드를 설계 할지도 모르고 어떤코드는 테스트하기 너무 어렵다고 판명날 지도 모른다.

또한 테스트코드를 만들면 실제코드가 테스트하기 어렵다는 사실을 발견할지도 모른다. 

테스트 코드가 방칭되어 망가지면 실제코드도 망가진다. 

 

테스트코드를 깨끗하게 유지해야 실제 코드도 깨끗하게 유지된다.


반응형

 

단위테스트 방법

1. 단위 테스트 TDD 법칙 세가지

첫째 법칙 : 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 

둘째 법칙 : 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위테스트를 작성한다.

셋째법칙 : 현재 실패하는 테스트를 통과할 정도로만 실제코드를 작성한다.

 

테스트 코드는 실제 코드 못지 않게 중요하다 

테스트코드는 사고와 설계와 주의가 필요하다.

실제코드 못지 않게 깨끗하게 짜야한다.

 

2. 테스트 당 Assert 하나 

- assert 문이 단 하나인 함수는 결론이 하나라서 코드를 이해하기 쉽고 또한 빠르다.

 

3. 테스트당 개념  하나

- 새 개념을 한 함수로 몰아넣으면 독자가 각 절이 거기에 존재해야하는 이유와 각 절이 테스트하는 개념을 모두 이해해야한다.

 

728x90

4. F.I.R.S.T

- 빠르게 (Fast) 

  - 테스트는 빨라야 한다. 테스트가 느리면 자주 돌릴 엄두를 못낸다. 자주 돌리지 않으면 초반에 문제를 찾아내 고치지 못하기 때문이다. 

 

- 독립적으로 (Independent)

  - 각 테스트는 서로 의존하면 안된다.

    각 테스트는 독립적으로 그리고 어떤 순서로 실행해도 괜찮아야 한다. 

    테스트가 서로에게 의존하면 하나가 실패할 때 나머지도 잇달아 실패하므로 원인을 진단하기 어려워지며 후반 테스트가 찾아야내야 할 결함이 숨겨진다. 

 

- 반복가능하게 (Repeatable) 

  - 테스트는 어던 환경에서도 반복 가능해야한다.

 

- 자가 검증하는 (selft-validating)

  - 테스트는 부울 bool 값으로 결과를 내야한다. 네스트가 스스로 성공과 실패를 가늠하지 않으면 판단은 주관적이 되어 지루한 수작업 평가가 필요하게 된다. 

 

- 적시에 (Timely) 

  - 테스트는 적시에 작성해야 한다. 단위 테스트는 테스트 ㅎ하려는 실제 코드를 구현하기 직전에 구현한다. 실제 코드를 구현한 다음에 테스트 코드를 만들면 실제 코드가 테스트하기 어렵다는 사실 발견할지도 모른다. 또는 실제 코드를 테스트가 불가능하도록 설계할지도 모른다. 

 


 

[내 코드가 좋은 코드인지 알고 싶다면? ]

[메모하는 습관] - [업무관리 : Clean Code] 깨끗한 코드 : 내가 쓰는 코드는 좋은 코드 ? 나쁜 코드 ?

 

[업무관리 : Clean Code] 깨끗한 코드 : 내가 쓰는 코드는 좋은 코드 ? 나쁜 코드 ?

[깨끗한 코드 : 내가 쓰는 코드는 좋은 코드 ? 나쁜 코드 ?] 코드란 ? : 요구사항을 상세하게 표현하는 수단이다. 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세하게 표현하기 불가능하다.

itstart-190126.tistory.com

728x90
반응형