TDD 시작하기 - 3

연재




책을 읽기 전에 참고할 것

이해 안되는 문장에 대한 여러 의견

  1. “테스트를 작성하는 동안에는 테스트가 실행되거나 심지어 컴파일되지 않으리라는 사실을 무시하고 테스트 내용에만 집중한다. 즉, 보조적인 역할을 하는 코드로 이미 존재하는 테스트를 실행할 수 있다고 간주한다”
  • 원문은 we act as if the supporting code to let us run the test already exists
  • 구글 번역하면, 우리가 테스트를 실행하게하는 지원 코드가 이미 존재하는 것처럼 행동합니다.
  • 번역하실 때 잘못 띄어 읽으신 것 같음
  1. “캡슐화와 정보은닉이 직교적인 설계 품질을 가리킨다”
  • 번역자의 글
    • 원문은 이렇습니다.
    • “The terms are often used interchangeably but actually refer to two separate, and largely orthogonal, qualities.”
    • 우선 두 용어 ‘캡슐화’와 ‘정보은닉’이 설계의 품질을 나타내는 별개의 개념이라고 생각하시면 됩니다. 그리고 여기서 직교적이라는 표현은 캡슐화와 정보은닉이 서로 독립적인 설계 품질이라는 의미입니다.
  • 참고 : https://justhackem.wordpress.com/2017/02/28/encapsulation-and-information-hiding/
  1. 66페이지 하단,
    “이처럼 ‘가족 같은’ 접근법에서는 각 객체는 자기 역할을 수행하는 데 필요한 만큼 정보를 전달받고 그러한 역할 표현과 부합하는 추상화에 포함된다.”
  • 번역자의 글
    • 원문은 paternalistic이고, 원래는 ‘가족주의적인’으로 번역했었는데, ‘가부장적인’이라는 의미로도 사용되는 표현입니다. 교정/편집 과정을 거치면서 ‘가족 같은’으로 바뀌어서 조금 이해하기 어려워진 것 같네요.
  1. 17페이지 중간,
    “시스템을 그것이 지닌 역학 측면에서 생각해보면,”에서 시스템이 지닌 역학 측면에서 생각한다는 의미
  • 번역자의 글
    • 원문은 이렇습니다. “Thinking of a system in terms of its dynamic, communication structure is a significant mental shift from the static classification that most of us learn when being introduced to objects.” 번역서의 ‘역학’은 이 문장의 dynamic을 옮긴 것인데요, 역학은 국어사전에 “부분을 이루는 요소가 서로 의존적 관계를 가지고 서로 제약하는 현상”이라고 정의돼 있습니다. 따라서 책에서는 시스템을 구성하는 요소들의 관계가 만들어내는 현상으로 이해하시면 될 것 같습니다.
  • 또 다른 어떤 분의 의견
    • 우선 2.3절에 도메인이란 얘기가 나오는데 어느 논문에서의 정의를 빌리면( http://www.springer.com/.../cda.../9783642366536-p1.pdf…) domain is an area of knowledge that uses common concepts for describing phe-
      nomena, requirements, problems, capabilities, and solutions. 이렇다고 합니다. 그리고 도메인 모델이란게 특정 개념과 행동,의사소통 패턴 등을 공유하는 복잡한 지식의 조각들 간에 관계성을 부여해서 추상화시킨 것이라고 본다면 결국 의사소통 패턴에 속한다는 말과 통하는 부분이 있는것 같고요.
    • 그럼 시스템을 역학측면에서 본다는 것을 시스템을 정적인 상태가 아닌 동적인 상태(도메인에 속한 객체나 엑터들이 서로 상호작용 하고 있는 상태)로 보는것이라고 해석해 본다면 동적인 측면에서 보여지는 의사소통 구조는 정적인 측면에서 볼때와 상당히 다르고 더 고차원 적이다라는 의미로 느껴집니다.
    • 다음장에 나오는 게임엔진 예시에서 엔진의 관점과 담당객체의 관점이 믹스될때 상당히 복잡해 보이는 면이 있는데 이것을 앞에서 얘기한 시스템의 정적인 측면과 동적인 측면, 그리고 더 상위의 도메인 모델링으로서 접근으로 나누어 바라보게 되면 시스템의 상태와 관계가 더 명확해 진다는 의미로 어설프게나마 해석이 되는것 같습니다.

그래도 이해 안되는 문장이 있다면

어려운 책이라 번역하신 분도 고생 많으셨을 것 같다. 원래 어떤 의미로 쓰였는지 확인하는 것이 더 이해 잘되는 경우가 종종 있는데, 구글에서 책의 원제와 함께 확실하다고 생각이 되는 단어 몇개를 같이 검색해보면 books.google.co.kr 사이트의 링크를 찾을 수 있다. 이번에도 교재 본문에 나온 “중첩된 피드백 고리”나 이해 안되는 문장 몇가지가 뭘 의미하는지 궁금해서 책 제목(growing object-oriented software guided by tests)와 몇개의 단어를 조합해서 원문을 찾을 수 있었다. 예를 들어, “growing object-oriented software guided by tests nested loop system”라고 검색하면 검색 결과 내에서 이런 링크를 찾을 수 있다. 언제까지 이런 꼼수가 통할 지는 모르겠지만.

발표 자료

“테스트 주도 개발로 배우는 객체 지향 설계와 실천 책”의 서문, 1장, 2장까지의 발표는 내가 했다.

참고 자료

이후 8장까지의 발표자료는 내 것이 아니라서 공유할 수 없지만, 이 과정에서 멤버들과 나누었던 이야기가 참 좋았다. 그것도 공유할 수 없는 것이 아쉽긴 한데, 그 이야기 속에서 언급된 링크라도 남긴다.

  1. 채수원님이 공개하신 “TDD 실천법과 도구”
  • 각 장별로 추가 코멘트를 달아 놓으셨는데, 이 책이나 PDF를 읽으실 때 참고하면 좋다
  1. TypeWars

  2. 위 글에 처음에 나오는 cleancoders 강의를 보고 백명석님이 올린 강의

  1. Testing, Oh my! by Jin-Wook Chung

  2. OKKYCON 2018 정리

  3. 마틴 파울러의 UnitTest를 번역한 글

  4. TDD에서 외부 자원은 격리 대상이어야 하는가

  1. DHH의 TDD is dead. Long live testing. 논란
  1. 객체지향 생활 체조 총정리

  2. DD는 설계 방법론이 아니다

  3. TDD 변절자: TDD는 설계 기법이 아니다

  4. 서비스를 성공적으로 만드는 방법

  5. 협업 SW개발 플랫폼 Yobi 발표

  6. static 메서드 의존을 제거하고 테스트하는 방법

  1. 객체 지향 프로그래밍 입문 - 최범균

  2. AAA vs GWT

  3. 교재를 읽기 위한 정도의 문법은 이 영상을 추천합니다(2시간)

  • Java 문법이 생각이 안난다고 하니 주원님이 추천해주신 영상
  1. 코드스피츠
  • 1회차
    • 객체와 값객체, 단일 책임의 원칙
  • 2회차(1/3)
    • 프로시저의 특징, 변화율을 다루는 방식, 레이어링
  • 4회차
    • 역할과 책임
  1. ATDD

  2. CRC 카드

  3. LoD(Law of Demeter)의 핵심

  • LoD는 O.m() 메서드는 아래 열거한 다섯 가지보다 더 많은 내용을 알아서는 안된다고 가이드합니다.
    • O 자신
    • m의 파라미터
    • m에서 생성된 객체
    • O가 필드로 가진 객체
    • O.m() 스코프에서 접근할 수 있는 전역 변수
  1. 인수테스트, 단위테스트, 통합테스트, 전 구간 테스트

  2. 스터디 모임 방법 몇가지 - 김창준

  3. private method 테스트

  1. postman을 활용한 자동화 테스트
  1. 생각하라, 객체지향처럼

  2. RailsConf 09: Robert Martin, “What Killed Smalltalk Could Kill Ruby, Too”

  3. ports & adapter 패턴

다음 단계는

기초와 이론 부분에 8주를 써버렸기 때문에 앞으로 책을 다 마치려면 한 3달 ~ 4달은 더 해야 끝날 것 같다는 생각이 들었다. 3달을 넘어가는 건 너무 지치는 일이라서 스터디는 일단 멈추기로 했다. 이후는 각자 책을 읽기로 하고 2주 마다 만나서 각자의 업무에서 도입하거나 공부하는 것을 공유하기로 했다.

나는 책을 더 읽기로 결정했는데, 갑자기 바빠져서 책을 전혀 못봤다. 이럴 줄 알았지!

9장부터 코드가 나오기 시작하는데, 역시 쉽지는 않다. 이 블로그 연재도 책을 다 떼면 이어서 쓸텐데…

과연 할 수 있으려나?