클린코드 9, 10장
TRANSCRIPT
클린코드 스터디
9장. 단위 테스트 10장. 클래스
이데아게임즈 손진화
9장. 단위 테스트
TDD
• 테스트 주도 개발(Test-driven development)
기존 방식
TDD http://www.slideshare.net/hoonsbara/tdd-41738171
TDD
• 세 가지 법칙
1) 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.
2) 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.
3) 현재 실패하는 테스트를 통과할 정도로만 실제코드를 작성한다
TDD
• 장점 –높은 소스 코드 품질
–재설계 비용 절감
–문서화 쉬워짐
–디버깅 시간 절감
• 단점 –테스트 코드를 유지 보수하는데 비용이 많이 들어간다
그래서 테스트 코드를 잘 짜야 한다
목록 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
목록 9-3 ~ 9-6
• 이중 표준 테스트 코드는 표현력이 풍부해야 하지만, 실제 코드 만큼 효율적일 필요는 없다
테스트 당 assert 하나
목록 9-7
– Given-when-then
– TEMPLATE METHOD 패턴
상위 클래스에서 처리의 흐름을 제어하며, 하위 클래스에서 처리의 내용을 구체화한다
테스트 당 개념 하나
목록 9-8
http://martinfowler.com/bliki/GivenWhenThen.html http://copynull.tistory.com/124
F.I.R.S.T
깨끗한 테스트 코드를 작성하는 원칙
• Fast
• Independent
• Repeatable
• Self-validating
• Timely
결론
• 테스트 코드는 실제 코드만큼이나 프로젝트 건강에 중요하다
• 테스트 코드는 지속적으로 깨끗하게 관리하자
• 테스트 API를 구현해 DSL을 만들어서 테스트 코드를 짜기 쉽도록 하자
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
클래스는 작아야 한다
• 응집도 Cohesion
‐ 프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도
목록 10-4
‐ 응집도가 높은 클래스의 특징 1. 클래스의 목적에 부합하는, 같은 기능영역의 메소드들로
구성되어 있다
2. 메소드의 개수가 상대적으로 작다. 그것은 오로지 자신만이 할 수 있는 책임을 부여 받았다는 뜻이다
3. 혼자 너무 많은 일을 하지 않는다. 다른 클래스와 협력한다
목록 10-5 ~10-8
http://lazineer.tistory.com/93
변경하기 쉬운 클래스
• 변경으로부터 격리
‐ 추상클래스를 사용한다
‐ DIP (의존 관계 역전 법칙) ‐ Dependency Inversion Principle
‐ 고차원의 모듈은 저차원의 모듈에 의존하면 안 된다 이 두 모듈 모두 다른 추상화된 것에 의존 해야 한다
‐ 추상화 된 것은 구체적인 것에 의존하면 안 된다 구체적인 것이 추상화된 것에 의존해야 한다
http://vandbt.tistory.com/42