[WEB] TDD 란 무엇일까
in WEB on Web
1. TDD 란?
테스트 주도 개발(Test-driven development, TDD)은 매우 짧은 개발 사이클을 반복하는 소프트웨어 개발 프로세스 중 하나이다.
개발자는 먼저 요구사항을 검증하는 자동화된 테스트 케이스를 작성한다.
그런 후에, 그 테스트 케이스를 통과하기 위한 최소한의 코드를 생성한다.
마지막으로 작성한 코드를 표준에 맞도록 리팩토링한다.
왜 필요할까?
- 코드를 짜기 전에 놓치는 것이 없도록 코드의 기능에 대한 체크리스트를 만드는 것이다.
- 초기 단계에서 버그를 잡을 수 있다. 개발 단계에서 버그를 잡는 것은 프로덕션 단계에서 버그를 잡는 것보다 비용을 훨씬 절감시켜 준다.
- 예상 시나리오를 미리 돌려보면서 가정들을 실험해 볼 수 있다.
- TDD는 코드 리팩토링을 안전하게 할 수 있게 해준다.(코드를 바꿔도 모든 로직이 정상적으로 작동하는지, 빠트린 건 없는지)
- TDD를 하면 우리는 시스템에 대한 테스트 리포트를 받게 되는데, 이를 통해 프로덕트 오너나 비지니스 애널리스트에게 코드에 대한 시각적 자료를 제공할 수 있게 된다.
2. 단위테스트 (Unit TEST)
왜 필요할까?
- 테스트케이스가 꼼꼼하게 작성되어 있다면, 개발과정 중에 미리 문제를 파악할 수 있다.
- 코드변경시, 변경한 부분으로 인한 영향도를 쉽게 파악할 수 있다.
- 코드 리팩토링을 안심하고 할 수 있다. 테스트케이스들은 내가 가입한 보험들 같다.
- 테스트 자동화를 통해서 항상 딜리버리 가능한 제품을 만들 수 있다.
- 새로운 입력이 팀에 합류했을때, 개발 스타일, 표준, 컨벤션등을 공유하기에 좋다.
- 페어 프로그래밍을 할때, 테스트케이스 작성하고 개발하는 역할 핑퐁을 통해서 개발을 페어로 집중해서 진행할 수 있다.
단위 테스트 작성 전 규칙 정하기
- 독립적(Independent)이어야한다. 어떤 테스트도 다른 테스트에 의존하지 않아야한다.
- 격리(Isolation)되어야한다. Ajax, LocalStorage, UI Event 등 테스트 대상이 의존하는 것을 다른 것으로 대체한다. 이렇게 대체하는 것을 테스트 더블(Dummy, Stub, Fake, Spy, Mock)이라고 한다.
- given, when, then 단계에 따라 테스트 코드를 작성한다.
node.js에 적합한 단위 테스트 도구 - jest
- 페이스북에서 만든 자바스크립트 테스팅 라이브러리이다.
- 테스트 코드의 모양이 직관적이고 문서화가 잘되어 있어 요즘 많이 활용되고 있습니다.
- node.js 환경이라면 “npm install –save-dev jest” 명령어 하나면 간단하게 설치가 가능하다.
- 내가 원하는 function의 반환값을 예상하고 그 실행을 테스트할때 쓰기 좋은 것 같다.
3. API Docs
왜 필요할까?
다른 서비스의 Open API를 사용하려면 무엇을 해야 할까.
사용하려는 서비스의 홈페이지에 들어가서 API 사용 설명서를 읽는 것이 먼저일 것이다.
API 사용자는 API 문서에 의존할 수밖에 없다.
이러한 사용자를 위한 API 이용법을 정리해놓은 것이 API Docs 이다.
Unit test
함수, 메소드의 결과 값이 예상한 결과 값과 일치하는지 즉, 개발자의 의도대로 작동하는지 검사한다.
Black-box
내부 로직에 대한 이해 없이 올바른 입력과 올바르지 않은 입력을 사용해서 올바른 출력을 판별한다.
RESTful API는 UI가 없다!
REST API는 화면이 없다.
API 사용자가 Open API를 사용하기 전에 테스트할 수 있는 방법이 뭐가 있을까?
- API test tool ex) postman, swagger
- HTML/JS로 프로토타입 만들고 테스트
- API 제공자가 Test-bed를 제공
only static docs
open api들이 정적인 형태의 문서로만 작성되어 있고 테스트해볼수가 없다.
test-bed docs
문서만 제공하는 정적인 docs와는 다르게 실제 테스트해볼수 있는 test-bed 를 함께 제공한다.
API-아임포트
해당 사이트가 개발친화적으로 잘 정리되어있다.
Kakao Developers
카카오 또한 api test를 제공하고 있다.
업비트 업비트의 open api 또한 참고 바란다.
4. API 문서화 프레임워크 - swagger
- Swagger의 주된 목적은 RESTful API를 문서화시키고 관리하는 것이다.
- API 문서를 일반 Document로 작성하면 API 변경 시마다 문서를 수정해야 하는 불편함이 있는데, Swagger 같은 Framework를 이용하면 이를 자동화할 수 있다.
- Swagger의 주된 목적은 API 문서의 효율적 작성이지만, 테스트 환경 또한 제공한다.
- Swaager로 API 문서를 만들면 문서 자체가 API에 대한 설명이면서 Test-bed이다.
- 사용자는 API 문서를 읽으면서 바로 해당 API에 대해 테스트를 해볼 수 있다.
5. API TEST 프레임워크 - POSTMAN
- 개발한 API를 테스트하고, 테스트 결과를 공유하여 API 개발의 생산성을 높여주는 플랫폼이다.
- swagger editor로 만든 api 문서(YAML)를 이용하여 postman에서 해당 api 검증을 위한 기본적인 구조를 만들 수 있다.
Swagger에 대한 소개 및 Postman 설치 - Postman을 활용한 API 기능 검증 (1)
swagger 와 postman 의 연계 활용방법이 자세히 설명되어 있으니 참고바란다.