TDD(Test-driven development)
TDD란 개발 (코드 작성 전) 테스트 코드를 먼저 작성하는 개발 방식!
플러터에서 테스트를 이야기할 때 단위, 통합, 위젯 테스트 3가지를 말하는데 TDD는 단위 테스트를 기반으로 한다.
진행 방식은 아래와 같다.
- 코드 작성 전 특정 기능에 한해 (기능 세분화) 딱 하나의 케이스에 대해 테스트 작성
- 이 테스트가 통과할 만큼의 코드만 작성해서 성공하면 코드를 작성
- 다음 기능으로 이동
즉, 테스트 조금, 기능 조금, 테스트 조금, 기능 조금 하면서 개발하는 것이다.
왜 TDD 방식으로 개발을 해야할까?
모든 요구사항에 대해 점검이 가능하고, 구현 보다는 인터페이스에 집중해서 코드 작성하니 퀄리티가 향상되기 때문이라고 한다.
사실 이렇게만 들으면 이해가 잘 안가긴 하는데 생각해보면 나도 이전에 프로젝트를 할 때 인터페이스만 만들고 테스트 코드를 짠 후 개발을 진행한 적이 있었다.
당시 테스트를 먼저 진행을 해서 좋았던건 복잡한 구조 속에서 에러를 찾으러 다녀야 하는 상황에 덜 처할 수 있다는 점? 이었던 것 같다. 에러의 위치는 찾을 수 있으나 어떻게 이 에러가 생긴 건지 확인할 때 작은 단위로 테스트를 하니 더 효율적이었다. 그리고 기능에 대한 이해도 자체가 올라가서 전체 프로젝트 비즈니스 로직 구현을 하는데 도움이 된 경험이 있다:)
Flutter의 3가지 테스트 방법
위에서 언급한 플러터의 3가지 테스트 방법을 더 살펴보자
1. 단위 테스트 (Unit tests)
- 메서드나 클래스의 동작을 확인하는 테스트
ex) 개별 함수, 메서드, 클래스의 기능을 테스트하며 비즈니스 로직이나 데이터 처리와 같은 특정 기능을 대상으로 테스트
- 특정 코드 단위를 분리하여 테스트하기 때문에 다른 부분의 영향을 받지 않고 메서드나 클래스가 잘 작동하는지 확인할 수 있다.
- 목적: 특정 코드 단위의 동작을 확인하여 코드의 품질을 개선하고 버그를 방지하는 목적
- TDD란 바로 단위 테스트 기반이다!
- UI 요소의 개별 동작을 테스트한다.
- 버튼이 제대로 클릭이 되는지 텍스트 필드에 입력이 제대로 반영이 되는지 등을 확인한다. (주로 위젯의 렌더링, 상태 변화, 사용자 입력 등을 테스트)
3. 통합 테스트 (Integration tests)
- 앱의 여러 부분을 통합하여 전체 앱의 동작을 테스트한다.
- ex) 여러 위젯이나 화면 간의 상호 작용 및 전환, 데이터 흐름 등
- 단위 테스트와 위젯 테스트와는 다르게 통합 테스트는 실제 디바이스나 시뮬레이터, 에뮬레이터를 실행하여 앱의 실제 환경에서 테스트를 진행하고, 이후 작성한 테스트 시나리오대로 테스트를 진행하게 된다.
- 내가 회사에서 했던 유저 QA가 보통 통합 테스트였던 것 같다.
출처: https://www.youtube.com/watch?v=Npi21gLIEZM
출처: https://day0404.tistory.com/52 [Dev Day:티스토리]