TDD(Test Driven Development)
테스트 주도 개발 기법
- 프로그램의 설계와 구현, 사고의 흐름을 테스트 중심으로 생각하는 개발방법
- 개발 순서의 변화
- as-is: 구현한다 -> 테스트 한다 (기존의 방식)
- to-be: 테스트를 만든다-> 테스트를 통과하는 기능을 구현한다 (TDD의 방식은 기존의 방식과 반대)
- 주요 키워드: 익스트림 프로그래밍(XP), 애자일, 폭포수 모델, Test-First Programming
RED-GREEEN- REFACTOR (TDD 개발 사이클)
- RED:(실패하는)테스트를 짬(요구사항의 명세)
- GREEN: 테스트를 성공시킨다(구현)
- REFACTOR: 구현 코드를 고도화(리팩토링)한다
이순서를 계속 반복된다고 생각하면된다.
Given-When-Then
테스트의 구조를 표현하는 방법(aka AAA(3A) , Arrange- Act- Assert)
- Given(Arrange): 상태(State)의 정의- 테스트를 수행할 때 전제 조건
- When(Act): 동작- 테스트 실행
- Then(Assert): 검증-동작의 결과(actual) vs. 예상값(expected)
WHY TDD? WHY TEST (강사님의 생각)
왜 이걸 해야할까?
- 내가 지금 뭘 하려는지 명확히 안다는 사실을, 스스로 지속적으로 확인한다.
* 개발이 지연되는 이유는 막막해서 멍을 때리기 때문에
- 내가 지금 뭘 하려고 하는지 안다는 사실을 동료와 소스 코드로 공유하고 소통(코드 리뷰)함
* as-is 1: 개발 계획을 별도의 문서로 공유(TDD가 아닌 기존의 개발방식)
- as-is 2: 개발 계획을 구현 코드로 공유함 (TDD가 아닌 기존의 개발방식)
- 구현 코드를 까서 봤는데 구현된 코드와 개발자의 의도가 일치 하지 않을(논리 오류일 경우) 경우가 있기때문에 강사님의 생각에서는 TDD와 Test가 나왔다고 생각하셨다.
- to-be: 개발 계획을 테스트 코드로 공유함 (TDD)
- 테스트코드로 공유한 경우 명세의 포커스에 맞췄기때문에 구현에 포커스를 맞춘 구현코드와 다르다
- 구현코드의 제 1 목표는 동작(구현)이다
- 테스트코드는 테스트코드를 읽는 사람에게 이 기능의 의도를 전달하는데 목적을 가진다
최고의 효율로 테스트 개발을 하려면
테스트 설게 흐름에 익숙해 져야한다
- 사람의 요구항을 프로그램이 할 수 있는 기능으로 변환해야함
- 기능을 단위 기능으로 세분화
- 기능의 관계와 상호작용을 설계하기
- 테스트 작성 기술에 익숙해져야한다.
좋은 내용이네요~퍼가요~^^