Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 실패율
- 프로그래머스
- 패스트캠퍼스
- stopPropagation
- HTML
- eventcapturing
- 수강료0원챌린지
- JavaScript
- 연결리스트생성
- 코딩테스트
- 패캠챌린지
- MVMM
- 패캠인강후기
- ios
- 이벤트캡처링
- 이벤트버블링
- 스위프트
- hig
- 패스트캠퍼스후기
- 자료구조
- swift
- 연결리스트삭제
- 직장인인강
- 연결리스트삽입
- 오공완
- eventbubbling
- Components
- 환급챌린지
- 사이드프로젝트10개기술스택으로구현하는풀스택서버리스프로젝트withReact
- 직장인자기계발
Archives
- Today
- Total
날쌘 개발자
프로젝트 설계(9) - TDD 본문
728x90
패스트캠퍼스 환급챌린지
14일차 화이팅!
TDD
"Test-Driven Development" 의 약자
한국어로는 "테스트 주도 개발"
"디자인 -> 로직 구현 -> 테스트" X
"디자인 -> 테스트 코드 -> 로직 구현" O
소프트웨어를 동작시키기 위한 로직을 구현하기 전에 테스트 코드를 먼저 구현하는 것을 프로세스화 한 개발 방법.
반복 테스트를 이용한 소프트웨어 방법론.
테스트 코드가 왜 중요할까?
- 작성한 코드가 의도적으로 동작하는지 수시로 빠르게 검증할 수있음. 매번 서버를 돌려서 수동적으로 input/output을 검증하는 비효율적인 방법에서 벗어날 수 있음.
- 리팩토링을 할 때 -> 리팩토링 후에도 소프트웨어가 여전히 같은 기능을 제공할 수 있도록 안정망 역할
- 잘 작성된 테스트 코드는 소프트웨어의 명세서가 되기도함.
- 매 배포 전, 전체 테스트 코드를 돌려 품질이 보증된 소프트웨어를 일정하게 제공할 수 있음.
그렇다면 TDD는 왜 중요할까?
- 테스트 코드를 먼저 작성하지 않으면, 의식의 흐름대로, 기능 단위로, 혹은 이곳 저곳 방대한 양의 코드를 작성해나가기 시작함. 문제가 발생시 확인해야 할 코드의 범위가 넓어진다
- 테스트 코드를 먼저 작성하면, 예외적인 상황을 미리 고민하고 정리하는 과정을 통해 버그가 생기는 것을 사전에 방지 할 수 있다. 즉, 버그를 만들 확률이 낮아짐.
- 객체 지향적 설계도 가능. 각 객체를 테스트하는 관점에서 특정 객체가 어떻게 동작해야 할지, 객체 간 어떻게 메시지를 주고받아야 할지 먼저 논리적으로 생각해볼 수 있기 때문
- 테스트 코드를 작성하는 과정에서 기능 구현을 위한 설계 요소를 고민하게 되며 구조적으로 더 나은 코드를 생산할 수 있음.
- 테스트 코드가 추가될 때마다 검증되는 범위가 넓어지므로, 소프트웨어의 품질을 높일 수 있음.
TDD를 어떻게 사용할까?
1. 실패하는 테스트 작성
- 테스트 시나리오를 메소드화 한다는것에 초점을 맞춤
- 테스트 메소드명은 '어떤 것을 테스트하고자 하는지' 목적을 담자
- 핵심 로직을 검증하는 단계가 아니므로, 우선 테스트는 실패하도록 함.
2. 테스트 통과 시키기
- 테스트를 통과 시킬 만큼의 코드만 구현하는 과정
- 목(Mock) 객체 활용 (가짜 객체)
- 소프트웨어란 결국, 객체 간의 통신을 통해 사용자에게 기능을 제공하는 것
- 한 객체를 테스트하기위해서 엮인 모든 객체를 다 initialize하고 기능을 테스트하기는 비효율적
- 객체간의 의존성을 모두 충족 시키는 것에 집중하다 보면 실제 객체의 기능 테스트 본질도 흐려짐
- 따라서 대상 객체에서 직접 참조하는 객체들은 mock객체로 대체 -> 발생하는 이벤트에 대해 대상 객체가 mock객체와 어떻게 소통할 지 직접 지정할 수 있음. -> 대상 객체를 테스팅 하는데에만 집중 가능
3. 리팩토링
- 프로덕션 코드의 구조를 개선하는 과정
- 2번 까지는 테스트를 통과시키기 위해 최소한의 코드를 작성 했을 것. 이제는 객체 지향적으로, 가독성을 높일 수 있도록 하기 위해 구조적 개선을 하는데에 집중
- 리팩토링 틈틈이 테스트 코드를 돌려 계속 성공 시킴으로써, 리팩토링 후에도 동일한 기능을 제공 보장
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
728x90
'web > 챌린지' 카테고리의 다른 글
프로젝트 구현(1) - 개발환경 구축 + 레이아웃 구현(1) (0) | 2023.03.07 |
---|---|
프로젝트 설계(10) - 테스트 작성의 정석 (0) | 2023.03.06 |
프로젝트 설계(8) - 기술 소개 : JEST (0) | 2023.03.04 |
프로젝트 설계(7) - 기술 소개 : Styled Components, RTL (0) | 2023.03.03 |
프로젝트 설계(6) - 기술 소개 : React Router , Recoil (0) | 2023.03.02 |