클린코드 9, 10장

15
클린코드 스터디 9장. 단위 테스트 10장. 클래스 이데아게임즈 손진화

Upload: -

Post on 05-Jan-2017

114 views

Category:

Software


3 download

TRANSCRIPT

Page 1: 클린코드 9, 10장

클린코드 스터디

9장. 단위 테스트 10장. 클래스

이데아게임즈 손진화

Page 2: 클린코드 9, 10장

9장. 단위 테스트

Page 3: 클린코드 9, 10장

TDD

• 테스트 주도 개발(Test-driven development)

기존 방식

TDD http://www.slideshare.net/hoonsbara/tdd-41738171

Page 4: 클린코드 9, 10장

TDD

• 세 가지 법칙

1) 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.

2) 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.

3) 현재 실패하는 테스트를 통과할 정도로만 실제코드를 작성한다

Page 5: 클린코드 9, 10장

TDD

• 장점 –높은 소스 코드 품질

–재설계 비용 절감

–문서화 쉬워짐

–디버깅 시간 절감

• 단점 –테스트 코드를 유지 보수하는데 비용이 많이 들어간다

그래서 테스트 코드를 잘 짜야 한다

Page 6: 클린코드 9, 10장

목록 9-1 ~ 9-2

• 기능 별로 코드 정리 (BUILD-OPERATE-CHECK 패턴)

• 도메인에 특화된 테스트 언어 사용 – Domain Specific Language

–특정한 도메인(산업, 분야 등 특정 영역)에서 발생하는 문제점을 해결하는 것에 중점을 두고 도메인을 기준으로 모든 것을 풀어나가기 위해서 제공되는 언어

– 특정 영역의 해결에는 그 영역에 맞는 특화된 도구를 사용하자는 의미

http://www.fitnesse.org/FitNesse.FullReferenceGuide.UserGuide.WritingAcceptanceTests.AcceptanceTestPatterns.BuildOperateCheck

http://ccambo.blogspot.kr/2014/02/dsl-domain-specific-language-1-dsl.html

Page 7: 클린코드 9, 10장

목록 9-3 ~ 9-6

• 이중 표준 테스트 코드는 표현력이 풍부해야 하지만, 실제 코드 만큼 효율적일 필요는 없다

Page 8: 클린코드 9, 10장

테스트 당 assert 하나

목록 9-7

– Given-when-then

– TEMPLATE METHOD 패턴

상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화한다

테스트 당 개념 하나

목록 9-8

http://martinfowler.com/bliki/GivenWhenThen.html http://copynull.tistory.com/124

Page 9: 클린코드 9, 10장

F.I.R.S.T

깨끗한 테스트 코드를 작성하는 원칙

• Fast

• Independent

• Repeatable

• Self-validating

• Timely

Page 10: 클린코드 9, 10장

결론

• 테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다

• 테스트 코드는 지속적으로 깨끗하게 관리하자

• 테스트 API를 구현해 DSL을 만들어서 테스트 코드를 짜기 쉽도록 하자

Page 11: 클린코드 9, 10장

10장. 클래스

Page 12: 클린코드 9, 10장

클래스 체계

• 변수와 메소드를 일정한 규칙에 따라 서술한다

• 추상화 단계가 순차적으로 내려가도록 한다

클래스는 작아야 한다

• 단일 책임 원칙

목록 10-2 ~ 10-3

‐ Single Responsibility Principle(SRP)

‐ 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다

https://ko.wikipedia.org/wiki/%EB%8B%A8%EC%9D%BC_%EC%B1%85%EC%9E%84_%EC%9B%90%EC%B9%99

Page 13: 클린코드 9, 10장

클래스는 작아야 한다

• 응집도 Cohesion

‐ 프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도

목록 10-4

‐ 응집도가 높은 클래스의 특징 1. 클래스의 목적에 부합하는, 같은 기능영역의 메소드들로

구성되어 있다

2. 메소드의 개수가 상대적으로 작다. 그것은 오로지 자신만이 할 수 있는 책임을 부여 받았다는 뜻이다

3. 혼자 너무 많은 일을 하지 않는다. 다른 클래스와 협력한다

목록 10-5 ~10-8

http://lazineer.tistory.com/93

Page 14: 클린코드 9, 10장

변경하기 쉬운 클래스

• 변경으로부터 격리

‐ 추상클래스를 사용한다

‐ DIP (의존 관계 역전 법칙) ‐ Dependency Inversion Principle

‐ 고차원의 모듈은 저차원의 모듈에 의존하면 안 된다 이 두 모듈 모두 다른 추상화된 것에 의존 해야 한다

‐ 추상화 된 것은 구체적인 것에 의존하면 안 된다 구체적인 것이 추상화된 것에 의존해야 한다

http://vandbt.tistory.com/42

Page 15: 클린코드 9, 10장