일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 책스터디
- Kotlin
- 헥사고날아키텍처
- 테스트
- 조영호
- Java
- Thymeleaf
- 아키텍처
- template
- 객체지향의사실과오해
- 도메인 주도 개발 시작하기
- 만들면서배우는클린아키텍처
- GrokkingFunctionalProgramming
- TDD
- 개발방법론
- 개발서적
- 함수형프로그래밍
- Boot Legacy 차이점
- 유지보수
- 코틀린
- web
- 테스트주도개발
- 스터디
- Spring
- 클린아키텍처
- DDD
- 이펙티브코틀린
- FP
- 추상화 설계
- 계층형아키텍처
- Today
- Total
목록TDD (29)
김동형수 개발기
31장 리팩토링 TDD에서는 리팩토링을 특이한 방법으로 사용한다. 일반적으로 리팩토링은 어떤 상황에서도 프로그램의 의미론을 변경해서는 안 된다. 하지만 TDD에서 우리가 신경 쓰는 부분은 현재 이미 통과한 테스트들뿐이다. 예를 들어 TDD에서는 상수를 변수로 바꾸고 양심에 거리낌 없이 이를 리팩토링이라고 부른다. 왜냐하면 이 행위가 통과하는 테스트의 집합에 아무 변화도 주지 않기 때문이다. ‘관측상의 동치성’이 성립되려면 충분한 테스트를 가지고 있어야 한다. 충분한 테스트란, 현재 가지고 있는 테스트들에 기반한 리팩토링이 추측 가능한 모든 테스트에 기반한 리팩토링과 동일한 것으로 여겨질 수 있는 상태를 말한다. 차이점 일치시키기 추론 과정이 길어지면 지금 고치려고 하는 부분이 결과에 영향을 주지 않을 거..
30장 디자인 패턴 패턴의 주요한 통찰이 하나 있으니, 우리가 언제나 완전히 다른 문제들을 해결하는 것 같지만 우리가 푸는 문제 대다수는 사용하는 도구에 의해 생기는 것이지 직면한 외부의 문제 때문에 생기는 것이 아니라는 점이다. 이런 이유로, 심지어 외부적 문제 해결 컨텍스트가 엄청나게 다양하더라도 공통의 해결책을 가진 공통의 문제를 발견할 것을 기대할 수 있다. 디자인 패턴의 엄청난 성공은 객체 프로그래머들이 보는 공통성에 대한 증거다. TDD에서는 설계를 디자인 패턴과는 조금 다른 관점으로 본다. -커맨드:계산 작업에 대한 호출을 메시지가 아닌 객체로 표현한다. -값 객체:객체가 생성된 이후 그 값이 절대로 변하지 안헥 하여 별칭 문제가 발생하지 않게 한다. -널 객체:계산 작업의 기본 사례를 객체..
27장 테스트 패턴 자식 테스트 작은 테스트 케이스를 작성하고 그 작은 테스트 케이스가 실행되도록 하라. 그 후에 다시 원래의 큰 테스트 케이스를 추가하라. 빨강/초록/리팩토링 리듬은 성공이 지속되는데 중요하다. 나는 큰 테스트를 작성하고 나면 우선 교훈을 찾기 위해 노력한다. 왜 테스트가 그렇게 컸을까? 어떤 다른 방식을 취했더라면 좀더 작게 만들 수 있었을까? 모의 객체 비용이 많이 들거나 복잡한 리소스에 의존하는 객체를 테스트하려면 어떻게 해야 할까? 상수를 반환하게끔 만든 속임수 버전의 리소스를 만들면 된다. 마치 데이터베이스인 것처럼 행동하지만 실제로는 메모리에만 존재하는 객체를 통해 작성될 수 있다. 성능과 견고함 이외에 모의 객체의 또 다른 가치는 가독성에 있다. 모의 객체는 당신이 모든 객..
29장 xUnit 패턴 단언(assertion) 불리언(boolean) 수식을 작성해서 여러분 대신 프로그램이 자동으로 코드가 동작하는지에 대한 판단을 수행하도록 하라. 테스트를 완전히 자동화하려면 결과를 평가하는 데 개입되는 인간의 판단을 모조리 끄집어내야 한다. 버튼을 누르면 컴퓨터가 실행하는 코드의 작동이 올바른지 검증하는 데 필요한 모든 판단이 되어야 하는 것이다. -판단 결과가 불리언 값이어야 한다. 일반적으로 참 값은 모든 테스트가 통과했음을 의미하고, 거짓 값은 뭔가 예상치 못했던 일이 발생했음을 의미한다. -이 불리언 값은 컴퓨터에 의해 검증되어야 한다. 단언은 구체적이어야 한다. 코드가 제대로 작동하는지를 판다낳기 위한 용도로 변수를 사용하길 원한다면 언제나 설계를 향상할 수 있는 기회가..
28장 초록 막대 패턴 코드가 테스트를 통과하게 만들기 위해 이 패턴을 사용하라. 가짜로 구현하기(진짜로 만들기 전까지만) 실패하는 테스트를 만든 후 첫 번째 구현은 어떻게 하는 게 좋을까? 상수를 반환하게 하라. 일단 테스트가 통과하면 단계적으로 상수를 변수를 사용하는 수식으로 변형한다. 가짜로 구현하기를 강력하게 만드는 두 가지 효과 -심리학적:확신을 갖고 거기부터 리팩토링해 갈 수 있다. -범위 조절:하나의 구체적인 예에서 시작해서 일반화하게 되면, 쓰잘데기 없는 고민으로 때 이르게 혼동하는 일을 예방할 수 있다. 삼각측량 추상화 과정을 테스트로 주도할 때 어떻게 최대한 보수적으로 할 수 있겠는가? 오로지 예가 두 개 이상일 때에만 추상화를 하라. 삼각측량이 매력적인 이유는 그 규칙이 매우 명확하기..
26장 빨간 막대 패턴 이 패턴들은 테스트를 언제 어디에 작성할 것인지, 테스트 작성을 언제 멈출지에 대한 것이다. 한 단계 테스트 목록에서 다음 테스트를 고를 때 무엇을 기준으로 할 것인가? 여러분에게 새로운 무언가를 가르쳐줄 수 있으며, 구현할 수 있다는 확신이 드는 테스트를 고를 것. 각 테스트는 우리를 최종 목표로 한 단계 진전시켜 줄 수 있어야 한다. 다음 테스트 목록 중 무엇을 고르는게 좋을까? 더하기 빼기 곱하기 나누기 비슷한 것 더하기 동치성(equals) 널과의 동치성(equals null) 널 환전 한 개의 통화를 환전하기 두 개의 통화를 환전하기 환시세 정답은 없다. 이 목록에서 한 단계 전진을 나타낼 만한 것을 못 찾았다면 직접 하나 추가해 보기 바란다. 전체 계산 중 간단한 하나의..
3부 테스트 주도 개발의 패턴 TDD트릭, 디자인 패턴, 리펙토링에 대해서 이야기한다. 25장. 테스트 주도 개발 패턴 테스트 전략에 관한 질문 테스트한다는 것은 무엇을 뜻하는가? 테스트를 언제 해야 하는가? 테스트할 로직을 어떻게 고를 것인가? 테스트할 데이터를 어떻게 고를 것인가? 테스트 보통의 사람들은 작은 변화가 있으면 테스트하지 않고 릴리즈 하지 않는다. 스타일의 영향도 노드 사이의 화살표는 첫번째 노드가 높아지면 두번째 노드도 같이 높아지게 된다는걸 의미하고 동그라미가 그려진 화살표는 첫 번째 노드가 높아지면 반대로 두 번째 노드가 낮아지게 된다는 것을 의미한다. 스트레스가 증가하면 어떻게 될까? 스트레스가 많아지면 테스트는 더 뜸하게 되고 에러는 점점 많아질 것이다. 에러가 많아지면 스트레스..
23장 얼마나 달콤한지 테스트 메서드 호출하기 먼저 setUp 호출하기 나중에 tearDown 호출하기 테스트 메서드가 실패하더라도 tearDown 호출하기 여러 개의 테스트 실행하기 수집된 결과를 출력하기 WasRun에 로그 문자열 남기기 실패한 테스트 보고하기 setUp 에러를 잡아서 보고하기 TestSuite를 다루지 않고는 xUnit을 떠날 수 없다. TestCaseTest 하단에 테스트를 나열하는 모양새는 좋아보이지 않는다. 여러 테스트를 실행할 수 있는 TestSuite를 구현한다. 구조는 TestSuite에서 test를 배열로 가지고 있고 for loop를 수행하면서 실행한다. TestCase.run에 매개변수를 추가하게되면 TestSuite.run에도 매개변수를 추가해야하는데 대안으로 3가..