nextstep 에서 진행하는 TDD Clean Code with JavaScript 4기 강의를 듣고 정리한 내용입니다.
1 .계산기 : cypress 를 이용하여 E2E 테스트 작성하고 개발하는 경험
2. 로또 : UI 와 도메인 영역 분리하여 테스트
1. 자동차 경주
2. 자판기
채팅 채널 적극적 이용해보자
켄트백이 TDD에서 강조한 것은 “사고 방식”
농구공을 던졌는데 그 공이 들어갔는지 한 달 뒤에 들어갔다고 생각하면 답답하다. 당장 바로 공이 들어갔는지 안들어갔는지 알게 되는게 좋다.
“테스트 코드가 본질을 아니다.”
빠른 피드백은 받는것이 본질
의도치 않은 유용한 “부산물”
Q. 피드백은 보통 누구에게 받는가요?
A. 자동화된 컴퓨터.
Q. TDD를 하면서 개발속도가 빨라질 수 있나요??
A. 불확실성이 높은 상황일 수록 TDD로 개발할 때 빠르게 작성할 수 있다.
Q. E2E 테스트는 유닛테스트에 비해 피드백 주기가 길 것 같은데 싸이프레스로도 유닛테스트가 가능한가요?
A.가능하다. E2E 테스트를 작은 단위로 어떻게 하면 만들 수 있을지 다음 강의 때 같이 고민해보자
내가 해결할 수 있는 가장 작은 영역의 문제부터 풀어나가고 피드백 받기(단, 핵심을 포함하게!)
계산기의 핵심은 무엇일까? → 계산하기 → 동작하기 위한 최소한의 기능은 “2개의 숫자를 다루는 계산기”
best practice라는 결과보다 best practice 로 가는 과정을 느꼈으면 좋겠다.
클린 코드 보다는 클리닝 과정을
“의도가 드러나는 네이밍” → 어려운게 당연하다. → “어떤 과정을 거치면 좋은 네이밍이 나타날까?” 를 중점으로 생각한다.
example)
linearSearchFor: -- indicates how the method works
searchFor: -- 구현을 숨긴다.
includes: -- is even better ( 리턴타입이 boolean )
getLinearSearchPosition: -- indicates how the method works
getPosition: -- 구현을 숨긴다.
indexOf: --( 리턴타입이 idx : number )
어떤 과정을 거쳐서 Test 를 작성해야 작게 쪼갤 수 있을까?
하고 싶은 일을 생각해 보세요.
테스트하는 방법에 대해 생각해보세요
작은 테스트를 작성하면서 원하는 api를 생각해보세요
테스트에 실패할 만큼만 코드를 작성하세요.
실행하고 테스트가 실패하는지 확인하세요.
테스트를 통과할 만큼의 코드만 작성하세요.
실행하고 모든 테스트가 통과하는지 확인하세요.이 때 통과하지 못하면 뭔가 잘못한 것인데, 방금 작성한 부분을 수정하세요.
중복이 있는 경우 제거하고 재사용성을 높이기 위해 리팩토링합니다. 여기에는 결합도 감소 및 및 응집도 증가가 포함됩니다.
테스트를 다시 실행하면 여전히 모든 테스트가 동과해야 하빈다. 빨간색 막대가 표시되면 리팩토링에 실수를 한 것입니다. 그 경우 수정하고 다시 실행해주세요
새 코드를 작성하는 테스트를 더 이상 찾을 수 없을 때까지 위의 단계를 반복합니다.
Q. 공유해주신 자료들과 같은것은 보통 어떤경로로 많이 찾으시나요?
A. 관심있는 엔지니어 덕질은 한다.
Q. TDD 단계에서 왜 실패하는 코드를 먼저 작성해야하나요?
A.내가 무엇에 대해 피드백 받을지를 명확하게 인지하기 위함
Q. 말씀해주신 워드 커닝행의 과정을 그대로 따라가기 보다는 나만의 방식을 먼저 찾아보는게 좋을까요?
A. 나만의 방식을 찾아나가면서 나의 상황에 맞춰보자
Q. 저 또 궁금한게 있는데 테스트를 작성한 후에 코드를 작성하라고 되어있는데 코드를 작성 후 테스트를 작성하는 것과 어떤 점이 다른가요?
A. 테스트를 먼저 작성하게 되면, 테스트를 통과하기 위한 최소한의 코드의 범주가 명확해짐
구현 코드를 먼저 작성학세 되면 피드백을 받기 까지 시간이 더 걸림
Q. TDD로 자신이 짠 코드의 100%의 커버리지를 달성하긴 어렵다고 보는데, 어느정도 범위까지의 테스트를 해야하는지 항상 고민이 될 것 같다고 생각합니다. 이것까지 테스트 해야하나? 하는 등의 의문이 찾아올 수 있다고 생각하는데.. TDD에서의 테스트 작성 범위는 어디까지가 이상적일까요?
A. 정답은 없고 내가 만드는 서비스에 따라서 테스트 커버리지가 천차만별이다.
커버리지가 100%라도 버그가 발생 할 수 있다.
커버리지가 10%라도 적절한 핵심 로직에만 테스트를 잘 쓰고 있다면 좋은 상황
Q. 유의미한 작은 절차는 어떤 기준일까요?
A. 나의 행동을 다르게 하면 다른 결과가 나오는가?를 기점으로 나눈다. (추상적이라서 좀더 고민하는게 좋다)
Q. 커밋은 어떤 기준으로 하는게 좋을 지 궁금합니다
A. 요구사항을 내가 생각했을 떄 더 작게 쪼갤 수 있다면 최대한 작게 쪼개보세요
쪼갠 단위 별로 구현하고, 커밋해보는 연습을 해보시면 도움이 될 것 같아요
와우 !! 멋집니다.
앞으로 8주 함께 파이팅해요~💪🏻