1. 테스트 주도 개발(TDD, Test Driven Development)
: 프로그램을 구현하기 전에 기획 의도를 가능한 한 단순하고 읽기 편하게 만들어 테스트로 제시한다.
프로그램을 설계하기 전에 먼저 테스트를 설계한다면?
프로그램의 모든 단일 함수가 그 동작을 검증하는 테스트를 갖게 된다.
➡️ 새로운 기능을 구현할 때 기존의 기능을 망가뜨린다면 테스트를 통해 그 사실을 알려준다.(빠른 에러 발견)
➡️ 호출 관점에 관심을 가지게 되면서 편리하게 호출할 수 있는 소프트웨어 설계를 할 수 있다. (설계의 개선)
➡️ 소프트 웨어가 호출 가능하고 테스트 가능해지려면 주위 환경에서 분리되어야 한다. (모듈화, 아키텍처의 개선)
➡️ 모호하지 않은 언어로 테스트를 작성하며 컴파일 및 실행 가능한 문서 작성 (신뢰성 있는 문서화)
* 테스트의 기능 : 프로그램을 설명 한느 컴파일 가능하고 실행 가능한 문서
2. 단위 테스트와 테스트 분리
- 단위 테스트 : 응용 프로그램에서 테스트 가능한 가장 작은 소프트웨어를 실행하여 예상대로 동작하는지 확인하는 테스트
- 필수적으로 실행되어야 한다.
- 시스템의 작은 구성 요소가 기대한 대로 동작하는지 여부 검증
- 개별적인 메커니즘을 검증하는 화이트 박스 테스트
➡️ 작은 단위에서 뛰어난 설계 의사결정을 할 수 있게 만든다. - 테스트 분리 : 운영 코드를 만들기 위해 테스트를 먼저 작성할 경우, 소프트웨어를 먼저 나누고 분리하여 단위 테스트를 진행할 수 있다. 또한, 적절한 값이 출력되는지 검증을 해야 하는데 메서드가 네트워크, 데이터베이스 등에 의존하고 있어 단일 테스트가 어렵다.
이렇게 테스트를 위해 다른 상위 또는 하위 클래스가 필요한 경우, 의사 객체(MOCK OBJECT) 패턴을 이용한다.
* Mock Object Pattern : 종속성을 깨고, 종속 개체를 더 쉽게 테스트할 수 있도록 가짜 모듈을 작성하는 디자인 패턴 중 하나.
➡️ 테스트에서 모듈 분리에 대한 필요성은 프로그래머가 프로그램 전체 구조에 이득이 되는 방식으로 분리 작업을 하도록 한다.
3. 인수 테스트
인수 테스트 : 시스템이 실제 운영 환경에서 사용될 준비가 되었는지 최종적으로 확인하는 단계
- 시스템이 전체로서 제대로 작동하는지 검증
- 고객의 요구사항이 충족되고 있는지를 검증하는 블랙박스 테스트
- 내부 메커니즘을 알지 못하는 고객이나 고객과 연결된 기술 인력(QA)이 작성
- 실행 가능한 형태(파일 또는 API를 통한 XML) 형식이어야 함
➡️ 큰 단위에서 뛰어난 아키텍처 의사결정을 할 수 있게 만든다.
3. 느낀 점
실제 프로젝트에서 테스트 케이스를 작성하고, 이를 통한 CI/CD 구현은 굉장히 유용하고, 장기적으로 견고한 개발을 하는데에 큰 도움이 된다. 최근에 뵙게 된 멘토님들은 하나같이 테스트의 중요성에 대해 강조한다. 그만큼 테스트가 실무에서 개발 전 과정에 얼마나 중요한지를 얘기해 주는 듯하다. 실제로 오류를 일찍 발견할수록 드는 유지보수 비용도 훨씬 줄어든다고 한다.
테스트 케이스를 독립적으로 '잘' 설계하는 것이 쉽지 않지만 계속해서 노력해야 할 부분인 것 같다.
http://www.yes24.com/Product/Goods/39497990
해당 포스트는 로버트 C. 마틴의 클린 소프트웨어의 책을 읽고 리뷰를 작성한 글입니다.
클린 소프트웨어 - YES24
소프트웨어 개발을 위한 사려 깊은 조언으로 가득한 책!『클린 코드』를 비롯한 베스트셀러 저자이자 소프트웨어 개발 전문가로 저명한 로버트 C. 마틴은 이 책을 통해 소프트웨어 개발자, 프로
www.yes24.com
'BOOK Review > 클린 소프트웨어' 카테고리의 다른 글
[Book Review] 클린 소프트웨어 #1 - 애자일 실천 방법 (0) | 2022.02.24 |
---|