TDD 주기 1. 테스트 작성 2. 실행 가능하게 만들기 3. 올바르게 만들기
Test 테스트 한다는 것과 테스트가 있다라는 것은 의미하는 바가 다르다. 테스트 한다: 테스트 코드를 가지지 않고 수작업으로 기능을 테스트 하는 것. 테스트가 있다: 자동화된 테스트가 존재 한다는 것. (아마도)모든 개발자는테스트를 한다. 하지만 (아마도) 많은 개발자의 프로젝트에 테스트가 있지 않다. >테스트는 두려움을 지루함으로 바꿔주는 효험이 있...
한 단계 테스트 수직적 메타포 보다는 성장하는 방식으로 방향성이 필요하다면 아는 것에서 모르는 것으로 시작 테스트 테스트의 시작은 오퍼레이션이 아무 것도 하지 않는 테스트.(-> 쉽고 빠르게 통과 가능) 빨강, 초록, 리팩토링의 사슬이 빠르게 돌 수 있게 뭔가를 가르쳐주면서 빠르게 구현 가능한 테스트를 우선적으로 작성 설명 테스트 다른 사람에게 TDD를...
자식 테스트 큰 테스트 케이스가 깨질 경우: 깨진 부분에 대해 작은 테스트 케이스를 작성하고 통과시킨 후 원래의 테스트 케이스를 복구 큰 테스트 코드의 처리법: 삭제하고 단계별 작은 테스트 케이스를 추가 실행되지 않도록 해놓고 작은 테스트 케이스를 추가 >삭제하지 않을 경우 작은 테스트 케이스를 작성하고 통과 시키는 동안 작동하지 않는 테스트가 두 개...
코드가 테스트를 통과하게 만들기 위해 사용할 수 있는 패턴들
단언(assertion) 판단 결과가 boolean 이어야 한다. 이 boolean 값은 컴퓨터에 의해 검증되어야 한다. (assert() 메서드를 통해) 픽스처(fixture) 픽스처(fixture): 테스트에서 사용하기 위해 세팅 된 객체 픽스처 사용을 통해 중복을 제거 하고 테스트 작성 속도를 높힐 수 있다. 단, 픽스처에 대해 기억하지 못한다면 코드...
커맨드 계산 작업에 대한 호출을 메시지가 아닌 객체로 표현한다. 값 객체 객체가 생성된 이후 그 값이 절대 변하지 않게 하여 별칭 문제가 발생하지 않게 한다. 널 객체 계산 작업의 기본 사례를 객체로 표현한다. 템플릿 메서드 계산 작업의 변하지 않는 순서를 여러 추상 메서드로 표현한다. 이 추상 메서드들은 상속을 통해 특별한 작업을 수행하게끔 구체화된...
차이점 일치시키기 >비슷해 보이는 두 코드 조각을 합치려면 어떻게 해야 할까? 두 코드가 단계적으로 닮아가게끔 수정한다. 이 둘이 완전히 동일해지면 둘을 합친다. 변화 격리하기 >- 객체나 메서드의 일부만 바꾸려면 어떻게 해야 할까? 일단, 바꿔야 할 부분을 격리한다. >- 코드에 메서드가 하나 더 명시되는 비용과 또 하나의 개념이 명시되는 가치, 이 양...
어떤 것들을 테스트 해야할까? 조건문 반목문 연산자 다형성 설계 문제가 있음을 알려주는 테스트의 속성 긴 셋업 코드 셋업 중복 실행 시간이 오래 걸리는 테스트 깨지기 쉬운 테스트 e2e 테스트를 하다 보면 자주 발생하는 문제들. 나눌수도 없는데 어쩔 수 없는 걸까? MTBF(Min Time Between Failures) 작성해야할 테스트의 갯수는 실...
소프트웨어 아키텍처의 목표는 필요한 시스템을 만들고 유지보수하는데 투입되는 인력을 최소화하는 데 있다.
구조적 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍
SRP, OCP, LSP, ISP, DIP
컴포넌트 응집도, 컴포넌트 결합
아키텍처란 시스템을 구축했던 사람들이 만들어낸 시스템의 형태다.
중요사항(업무 규칙)과 세부사항(인프라)를 파악하고 분리해야 한다.
기술을 습득하고 수련하는 것은 사람에게 천성은 아니며 그것 자체가 수련해야 할 또 하나의 기술이다. -워드 커닝햄-
Chapter 1. 리팩터링: 첫 번째 예시 (2022.01.02) 프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가 선 테스트 코드, 후 리팩토링 작은 단계로 나눠 진행하기 컴퓨터가 이해하는 코드가 아닌 사람이 이해하는 코드 작성하기 항상 코드베이스를 작업 시작 전보다 건강하...
당신에게는 스스로의 행동을 직접 결정할 수 있는 힘이 있다.