TDD 의 리듬

·2020년 11월 22일
0

방법론

목록 보기
1/1

👩🏻‍💻 TDD 세션 발표자료


느스고님의 TDD 실습해보기 포스팅을 참고하여 TDD 리듬을 알아보기 위한 세션을 준비하였다.

TDD 란?

테스트 주도 개발, 테스트가 개발을 이끌어가는 형태의 개발론

심플한 예제로 TDD 를 경험해보자!

삼각형 각 변의 길이를 나타내는 세 개 정수를 받아서 다음 값을 반환하라

  • 정삼각형 : 1
  • 이등변삼각형 : 2
  • 부등변삼각형 : 3

 

STEP 1 "TDD 는 테스트 먼저 쓰는거랬어! 테스트 코드를 쓰자!"

test 1 () {
	triangle = new Triangle(2, 2, 2)
	expect(triangle).toBeNotNull();    
}

테스트 결과는 '실패'
왜 ? Triangle 이라는 클래스 자체가 만들어지지 않았으니까 😅

TDD 규칙
1. 처음에는 실패하는 코드를 쓴다. 심지어 컴파일이 되지 않을 정도로!

 

STEP 2 "실패한 걸 성공시키도록 코드를 수정해보자!"

class Triangle { 
	constructor(side1, side2, side3){} 
}

test 1 () {
	triangle = new Triangle(2, 2, 2)
	expect(triangle).toBeNotNull();    
}

테스트 결과는 '성공'
왜 ? 이번엔 Triangle 이라는 클래스가 만들어졌으니까

TDD 규칙
1. 처음에는 실패하는 코드를 쓴다. 심지어 컴파일이 되지 않을 정도로!
2. 실패한 다음에는 코드를 바꾸어서 실패했던 테스트를 통과시킨다!

 

STEP 3 "첫 테스트 통과했으니 다른 테스트를 추가해보자!"

test 2 () {
	triangle = new Triangle(2, 2, 2)
	expect(triangle.getType()).toBe(1);
}

테스트 결과는 '실패'
왜 ? getType 이라는 메서드를 정의하지 않았으니까

 

STEP 4 "아까랑 같은 흐름으로, 성공을 시키자!"

class Triangle { 
	constructor(side1, side2, side3)
	getType() { return 1; }
}

test 2 () {
	triangle = new Triangle(2, 2, 2)
	expect(triangle.getType()).toBe(1);
}

테스트 결과는 '성공'
왜 ? getType 을 정의하였으니까

TDD 규칙
1. 처음에는 실패하는 코드를 쓴다. 심지어 컴파일이 되지 않을 정도로!
2. 실패한 다음에는 코드를 바꾸어서 실패했던 테스트를 통과시킨다!
3. 투박하게라도 우선 ‘성공' 시키는게 중요하다!

 

STEP 5 "성공을 확인했으니 조금 리팩토링을 해보자!"

class Triangle { 
	side1; side2; side3;
	constructor(side1, side2, side3) {..}
	getType() { 
		if (side1 === side 2 && side 2 === side 3)
			return 1;
		return -1;
	}
}

테스트 결과는 '성공'

TDD 규칙
1. 처음에는 실패하는 코드를 쓴다. 심지어 컴파일이 되지 않을 정도로!
2. 실패한 다음에는 코드를 바꾸어서 실패했던 테스트를 통과시킨다!
3. 투박하게라도 우선 ‘성공' 시키는게 중요하다!
4. 성공을 확인한 후 리팩토링을 하자, 그리고 테스트를 다시 한 번 통과시키자!

 

위 과정을 반복하여 이등변삼각형, 부등변삼각형에 대한 요건도 충족시켜 나갈 수 있다!

 

TDD 의 리듬을 정리해보면

  1. 테스트를 추가한다
  2. 모든 테스트 실행하고 새로 추가한 것의 실패를 확인한다
  3. 코드를 조금 바꾼다
  4. 모든 테스트를 실행하고 모든 테스트의 성공을 확인한다
  5. 리팩토링을 한다

0개의 댓글