테스트 주도 개발로 배우는 객체지향 설계와 실천 - 1부 서론 정리
테스트 주도 개발의 핵심은 무엇인가?
학습 과정으로서의 소프트웨어 개발
개발자들은 항상 존재하는 불확실성을 극복하기 위해 성장해야 한다.
그러기 위한 프로세스가 필요하다.
피드백은 가장 기본적인 도구다
각 주기마다 프로젝트를 배포하여 피드백 소요 시간을 최소화한다.
피드백은 중첩된 고리형 시스템으로 구성한다.
시스템은 언제나 통합된 상태이며 배포할 준비가 돼있다.
변화를 돕는 실천법
- 수동테스트를 자주 하는것은 비실용적이므로 테스트를 자동화한다.
- 꾸준히 리팩터링해 코드를 단순하게 유지한다.
개발자들은 코드를 작성하는 것보다 코드를 읽는데 훨씬 더 많은 시간을 보낸다.
- 코드 작성 전에 테스트를 먼저 작성한다.
테스트하기 쉽도록 만들면 더 깔끔하고 모듈화된 코드가 만들어지기도 한다.
테스트 주도 개발 간단 정리
실패하는 단위 테스트 작성 -> 테스트 통과시키기 -> 리팩터링 -> 실패하는 단위 테스트 작성 ...
장점
- 다음 작업에 대한 인수 조건이 명확해진다. 작업이 끝나는 시점을 파악할 방법을 스스로 알아내야 하기 때문이다.
- 느슨하게 결합된 구성 요소를 작성할 수 있게 되어 격리된 상태에서 더 높은 수준으로, 모두 결합된 상태로 구성 요소를 손쉽게 테스트할 수 있다.
- 코드가 하는 일에 대한 실행 가능한 설명이 더해진다.
- 완전한 회귀 스위트가 늘어난다.
- 콘텍스트를 선명하게 인지하는 동안 오류를 탐지한다.
- 언제 작업이 충분히 완료됐는지 알게 되어 금도금하듯 과도한 최적화를 하거나 불필요한 기능을 더하지 않게 된다.
실패하는 테스트 없이는 새 기능을 작성하지 말라.
국부적으로 생각하고 국부적으로 행동하라.
리팩터링은 기존 코드의 작동 방식을 바꾸지 않은 채로 기존 코드의 내부 구조를 변경하는 것을 의미한다.
리팩터링의 핵심은 코드가 구현하는 기능의 표현을 개선해 코드를 좀 더 유지 보수할 수 있게 만드는 것이다.
리팩터링은 작은 규모의 개선 사항을 찾아내는 식으로 진행되는 미시적 기법이다. 경험상 리팩터링의 여러 작은 단계를 엄격하고 지속하게 적용해야만 커다란 구조적 개선으로 이어질 수 있다.
리팩터링은 재설계와 같은 활동이 아니다. 재설계에서는 프로그래머가 큰 규모의 구조를 변경할 때 의식적인 결정을 내린다. 팀에서 재설계 결정을 취했을 때로 리팩터링 기법을 이용해 새로운 설계로 점진적이고 안전하게 나아갈 수 있다.
3부의 예제에서는 상당히 많은 리팩터링을 보게 될 것이다. 그러한 개념에 관한 표준 교재는 마틴 파울러의 [Flower 99]이다.
좀 더 큰 그림
테스트 코드 작성을 어디서 시작해야 할까?
그것보다 더 중요한 것은 언제 코드 작성을 멈춰야 하느냐다.
우리는 어떤 기능을 구현할 때 인수 테스트(acceptance test)를 작성하는것으로 시작한다. 여기서 인수 테스트란 만들고자 하는 기능을 시험하는 테스트를 말한다. 인수 테스트는 그것이 실패하는 동안 시스템이 아직까지 그 기능을 구현하지 않았다는 사실을 보여주고, 인수 테스트가 통과하면 그 작업이 끝난다.
인수 테스트는 통과하는데 시간이 걸리기도 하므로, 보통 현재 작업중인 인수 테스트와 작업을 마친 기능에 대한 인수 테스트를 구분한다.
전 구간 테스트
테스트의 수준
외부 품질과 내부 품질
'책' 카테고리의 다른 글
Real World HTTP (0) | 2021.06.09 |
---|---|
테스트 주도 개발로 배우는 객체지향 설계와 실천 10장 동작하는 골격 (0) | 2021.04.28 |
테스트주도 개발로 배우는 객체 지향 설계와 실천 목차 (0) | 2021.04.19 |
[스마트한 시간관리 인생관리 습관] 생산성 올리는 방법 : 짧은 분출 (마감효과) (0) | 2021.03.10 |
[객체지향] 오브젝트 3장 - 역할, 책임, 협력 (0) | 2021.03.03 |