[TDD] 01 - TDD 및 React-native의 개요

스터디 개요

모든 코드가 이 책의 예제만큼 분명하고 직접적인 프로그램 세상
복잡한 해법이란 없고 단지 외관 상 복잡해보이는 문제에 대해 신중히 사고하면 되는 그런 곳
TDD는 그런 사고가 가능하도록 당신을 도와 줄 수 있다.

TDD에 대한 중요성과 공부해야겠다는 인식은 이미 오래전에 확인한 사실이었다.
그럼에도 부지런하지 못하고 자꾸만 현실에 안주하려는 게으름 탓에 미뤄두었던 공부를 시작하려고 한다.

개발자와 비즈니스맨 사이의 관계에서 어쩌면 이러한 테스트는 그다지 중요하지 않을 수 있다.
테스트를 통해서 직접적인 이윤 창출을 기대하긴 힘들다.
하지만 이러한 습관이 분명 그 비즈니스의 가치를 높일 것이라고 믿는다.

스터디 자료

Test-Driven Development: By Example [Kent Beck]

TDD의 개념과 간단한 예제를 통한 이해를 도울 수 있는 자료로 사용한다.

TDD 개발 방법론을 활용한 React-native 개발 [인프런-박동호]

실무와 연계하여 수강이 가능할 것 같다는 생각으로 결제했다.
React-native의 To-do 앱을 TDD 개발 방법론을 통해 개발한다.
짧은 강의이지만 나에게 임팩트가 있을 것 같다.

TDD (Test Driven Development)

개요

Clean code that works (작동하는 깔끔한 코드)

테스트 주도 개발은 프로그래밍하면서 나타나는 두려움을 관리하는 방법이다.
여기서 말하는 두려움이란 어려운 문제 앞에서 정확한 규모를 추산하는 것이 어려운 것을 말한다.

이 추산에 용기를 불어 넣어줄 수 있는 것이 바로 작동하는 깔끔한 코드인데
이것이 테스트 주도 개발의 궁극적인 목표이다.

이러한 코드를 얻기 위해 우리는 다음과 같은 자동화된 테스트로 개발을 이끌어 나가야한다.

  • 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다.
  • 중복을 제거한다.

이런 식으로 코드의 결함률을 극적으로 낮추고, 코드가 깔끔해져서 팀원 누구나 알아볼 수 있는 좋은 품질의 코드가 생산된다면, 실패하는 테스트를 통과시키기 위해 필요한 만큼만 코딩하는 것의 의미는 더욱 커진다.

  • 결합 밀도를 충분히 낮출 수 있다면, 품질 보증을 수동적인 작업에서 능동적인 작업으로 전환 가능
  • 예외 상황의 숫자를 충분히 낮출 수 있다면, PM이 정확히 추산 가능해지고 고객을 매일의 개발 과정에 참여시킬 수 있음
  • 기술적 대화의 주제가 충분히 분명해진다면, 개발자들은 일일 혹은 주 단위의 협력 대신 분 단위의 협력이 가능해짐.
  • 이를 통해 한번 더 결합 밀도가 충분히 낮아진다면, 새 기능의 선적 가능한 소프트웨어를 갖게 되고 이를 통해 새로운 비즈니스를 창출할 수 있음.

구성

재빨리 테스트를 하나 추가한다.
모든 테스트를 실행하고 새로 추가한 것이 실패하는지 확인한다.
코드를 조금 바꾼다.
모든 테스트를 실행하고 전부 성공하는지 확인한다.
리팩토링을 통해 중복을 제거한다.

01. Describe it

RDD (Readme Driven Development)
간단하게 어떤 요구사항인지 어떤 기술이 필요한지 기술하는 단계

02. Make it fail

가장 중요한 부분이다.
실제로 테스트 코드를 작성하는 단계
테스트 코드가 실패하도록 작성하는 단계

테스트 코드를 많이 작성하는 것과 TDD의 차이

03. Make it green

작성한 테스트 코드가 정상적으로 수행되도록 실제로 코딩하는 단계

04. Refactoring (Optional)

3단계에서 발생한 여러 중복을 배제하는 단계
개발 전반적으로 수행되어야 하는 단계


React Native

개요

React-nativeReactJS를 기반으로 출발한 프레임워크이다. ReactJS는 웹 페이지와 웹앱을 만들기 위한 라이브러리로 출발했다. 이 라이브러리를 통해서 네이티브앱을 만들기 위해 시작된 것이 React-native이다.

React-core를 공유하기 때문에 ReactJSReact-native의 개발 방법은 비슷하지만 화면의 개념이 다르다.

웹 컴포넌트 vs 네이티브 컴포넌트

웹에서는 div , 네이티브에서는 View 라는 개념을 사용한다.

개발 옵션

TDD가 주도적인 개발 방법론으로 자리 잡음에 따라 React-native에도 TDD를 통한 개발이 가능하도록 여러 라이브러리들이 개발되었다.

Expo

순수 JS만으로도 네이티브앱을 개발하는 것이 가능하며, 개발 머신에 별도의 환경 설정 없이도 테스트가 가능한 구조이다.
덕분에 쉽고 빠르게 개발 환경을 구축하고 시도해볼 수 있는 좋은 옵션이다.

하지만 Expo LauncherDetox(E2E Lib)가 호환이 되지 않는 이유로 TDD의 주요한 테스트가 진행되지 않는다.
앱 구동의 인식이 불가능하기 떄문에 이 옵션은 강의에서 사용하지 않는다.

React-native-Cli

그렇기 때문에 이 커맨드 툴을 통해서 TDD 스터디를 진행한다.

공유하기