00002 20180718 1장 테스트주도개발 Test Driven Development - doortts/blog GitHub Wiki

number: 2
id: 2677
title: 1장 - 테스트주도개발 Test Driven Development
type: ISSUE_POST
author:
  loginId: doortts
  name: doortts
  email: [email protected]
createdAt: '2018-07-18T19:46:43+0900'
updatedAt: '2022-02-04T09:38:08+0900'
owner: doortts
projectName: blog
state: OPEN
labels:
  - labelName: TDD 실천법과 도구
    labelColor: '#00bcd4'
    category: 기술
refUrl: 'https://repo.yona.io/doortts/blog/issue/2'
attachments:
  - id: 3920
    name: 01-테스트주도개발.pdf
    hash: d163da93468de31e552dc2d4d6c4d993526ce94f5b5b6546d326c280dbc74aab
    containerType: ISSUE_POST
    mimeType: application/pdf
    size: 2527777
    containerId: '2677'
    createdDate: 1531910555000
    ownerLoginId: doortts
  - id: 3921
    name: 269-20187-18-1916-38.png
    hash: 7136c2207d4dae08b1fbb6195e771b79d5cba2864ba20801d8c7ada7ca8ce11d
    containerType: ISSUE_POST
    mimeType: image/png
    size: 139772
    containerId: '2677'
    createdDate: 1531910586000
    ownerLoginId: doortts
  - id: 3922
    name: 33-20187-18-1916-56.png
    hash: bbd7c286ef9fff31676a1ec71c91ab0a2751b5eaf40bb8742a0d2f00e129a678
    containerType: ISSUE_POST
    mimeType: image/png
    size: 187004
    containerId: '2677'
    createdDate: 1531910589000
    ownerLoginId: doortts
  - id: 3923
    name: 704-20187-18-1923-47.png
    hash: 445588ece5690170ee7020908c6dc65e8c64b31d1112ba38606b8a40736dc0b7
    containerType: ISSUE_POST
    mimeType: image/png
    size: 16079
    containerId: '2677'
    createdDate: 1531910608000
    ownerLoginId: doortts
  - id: 3924
    name: 830-20187-18-1925-40.png
    hash: 3ee7ccc36aca79658a4973aeb90eb7b424301b6f70226e5afdf919c4feb13d4b
    containerType: ISSUE_POST
    mimeType: image/png
    size: 56532
    containerId: '2677'
    createdDate: 1531910618000
    ownerLoginId: doortts
  - id: 3925
    name: 919-20187-18-1929-24.png
    hash: e7211fd0c20a7d3f365819edbf1325cc8a92f3821cf439b5dabd2cda03e60501
    containerType: ISSUE_POST
    mimeType: image/png
    size: 57636
    containerId: '2677'
    createdDate: 1531910629000
    ownerLoginId: doortts
  - id: 3926
    name: 246-20187-18-1933-35.png
    hash: d47b18188a4a75ae93e03e62d593a9a08ebdb16a3b952e021fe5e0361eb4e5af
    containerType: ISSUE_POST
    mimeType: image/png
    size: 16042
    containerId: '2677'
    createdDate: 1531910645000
    ownerLoginId: doortts
  - id: 3927
    name: 306-20187-18-1932-50.png
    hash: 823bde47d968cd6ee4e2d909dc4802971c935b889c750a9c98d6d163bbcb61c2
    containerType: ISSUE_POST
    mimeType: image/png
    size: 116392
    containerId: '2677'
    createdDate: 1531910657000
    ownerLoginId: doortts
  - id: 3928
    name: 83-20187-18-1946-10.png
    hash: b738ebe8948294376986d4bcffb9f1c09136436c38e2d69d320ded4745d4383f
    containerType: ISSUE_POST
    mimeType: image/png
    size: 12795
    containerId: '2677'
    createdDate: 1531910690000
    ownerLoginId: doortts
  - id: 3929
    name: 889-20187-18-1947-12.png
    hash: 119bf10330af4a4457c19be43d893e8d31f7f6c35a4b5bf170b30c91300482b9
    containerType: ISSUE_POST
    mimeType: image/png
    size: 119711
    containerId: '2677'
    createdDate: 1531910753000
    ownerLoginId: doortts
comments:
  - id: 10737
    author:
      loginId: psy099
      name: 박상영
      email: [email protected]
    createdAt: '2019-09-14T13:24:13+0900'
    body: 읽고 더 나은 개발자가 되겠습니다. 귀중한 자료 감사드립니다
  - id: 20689
    author:
      loginId: tkrk1226
      name: 정의진
      email: [email protected]
    createdAt: '2022-02-04T09:38:08+0900'
    body: "좋은 책을 공유해주셔서 정말 감사합니다 TDD가 어떤 것인지 몰라 찾던 중 올리신 자료를 보게 됐습니다. \r\n\r\n저 또한 제 지식을 아낌없이 나눠줄 수 있는 개발자가 되기 위해 노력하겠습니다.\r\n\r\n다시 한 번 자료를 올려주심에 감사드립니다!"
  - id: 4102
    author:
      loginId: skystarmin
      name: 황보민
      email: [email protected]
    createdAt: '2018-07-25T09:11:02+0900'
    body: '감사합니다. 잘 보겠습니다. :)'
  - id: 4087
    author:
      loginId: mjpark03-yona
      name: 박미정
      email: [email protected]
    createdAt: '2018-07-24T11:03:35+0900'
    body: "- 디자인패던 > 디자인패턴\r\n- **자신이 얼마나 설계를 못하고 의존적이며 즉흥적인 코딩을 하고 있는지 (=엉터리 개발자인지) 알게 된다.** 많이 찔렸습니다! pdf 업데이트 감사합니다 :))"
  - id: 8955
    author:
      loginId: ahn.assari
      name: Taejoon Ahn
      email: [email protected]
    createdAt: '2019-04-11T16:47:23+0900'
    body: 귀중한자료 감사드립니다! 잘 보겠습니다!
  - id: 17276
    author:
      loginId: ssoju2827
      name: thiporia
      email: [email protected]
    createdAt: '2020-09-15T18:12:48+0900'
    body: "`자신이 얼마나 설계를 못하고 의존적이며 즉흥적인 코딩을 하고 있는지 (=엉터리 개발자인지) 알게 된다.`\r\n가슴에 와닿았습니다. 글 감사합니다. pdf 감사히 보겠습니다!"
  - id: 11213
    author:
      loginId: comseong
      name: JJ Lee
      email: [email protected]
    createdAt: '2019-10-04T16:33:50+0900'
    body: 한국 개발문화 성숙과 확산을 위해 기끼어 자기 자산을 나누시는 귀하께 감사와 존경을 드립니다!

이전: "TDD 실천법과 도구" 책 전체를 PDF 공개합니다 다음: 2장 - JUnit and Hamcrest

안내: 본문을 읽지 않고 아래의 코멘터리만 읽는 걸 가정해서 작성하진 않았습니다.

1장 본문

01-테스트주도개발.pdf

읽기전에

우선 목차에 있던 어떻게 읽을 것인가를 보고 자신이 어떤식으로 읽어야 시간절약이 될 지 확인 필요합니다.

269-20187-18-1916-38.png 33-20187-18-1916-56.png

  • 편하고 빠르게 읽기를 바랍니다.
  • TDD에 대한 필요성과 의욕이 확실하다면 skip scan 으로 읽으세요.
  • TDD를 배우는 사람 입장이라면 1장의 계좌(Account) 예제는 눈으로 그냥 읽는 것과 실제 타이핑해가면서 실행해서 보는것과의 차이가 극단적으로 매우 큰 예제입니다.

도전과제

  • Javascript나 TypeScript로 실습을 따라갑니다

보충 설명

각 장마다 첫 페이지에 실패에 관한 격언들을 담았습니다. 그 당시 좋아했던 문장이었던 지금은 흑역사의 감독이 되어버린 우디 앨런의 문장으로 시작했습니다.

만일 당신이 때때로 실패하지 않는다면, 그건 안이하게 살고 있다는 확실한 증거다.
- 우디 앨런

이 장에서는 TDD의 아주 기본적인 접근 법을 소개 하고 있습니다.

현재의 흔한 개발방식의 문제점과 TDD가 좋다는 식으로 표현하고 있는데, 어떻게 보면 이 인간 약을 팔고 있구나!라고 생각이 들 수도 있습니다. 좋다는 이야기와 약판다는 이야기 둘 다 틀린이야기는 아닌데요 다시 쓴다면 강조하는 관점을 좀 다르게 둘 것 같습니다.

이를테면..

좀 더 개발을 잘 하기 위해 우리는 다양한 노력을 하고 있습니다. 그리고 개발자 자신도 스스로를 다양한 방식으로 진화시키기 위해 노력하고 있죠.

그 와중에 소위 발하는 개발 실천법(practice)이라는 이름으로 여러가지 기법이나 방식들이 등장했습니다. 익숙해짐과는 별개로 우선 바로 배워서 시작할 수 있는 실천법들로는

  • 디자인패턴(Design Patterns)
  • 리팩터링(Refactoring)
  • 객체지향 설계분석(OOAD, Object-oriented analysis and design)
  • CI(Continuous Integration)
  • 코드리뷰(Code Review)
  • 짝 프로그래밍(Pair Programming)
  • 종이 프로토타이핑(Paper Prototyping)
  • 종이와 연필 설계(Pen & Paper design)

등등이 있습니다. 그리고 그 중간 어딘가쯤에 마찬가지로 자동화된 유닛테스트(Automated Unit Test)와 TDD(Test Driven Development)가 포함되어 있다고 생각하시면 좋겠습니다.

즉, TDD를 (잘) 한다는 것이 곧 좋은 SW를 만들어 낸다던가 뛰어난 개발자가 되는/된 척도가 되는건 아니라는 거죠. 그냥 practice 중 하나이고 다른것보다 좀 더 어렵고 대신 조금 더 강력하게 동작할 수 있는 기법일 뿐입니다.

좀 더 강조 되었어야 했다고 생각하는 부분

  • 아주 간단한 sum 에 대한 예제에서도 사전설계가 먼저 되었고 요구사항을 확인해서 무언가 문서로 만들었다는 점에 주목해주세요
    • 이 부분에 관한 이야기는 뒷 챕터에서 좀 더 자세히 이야기 할게요
  • TDD의 목표는 TDD 하는 개발자가 아니다. 704-20187-18-1923-47.png
  • 은행잔고 예제가 너무 쉽고 비현실적이라고 생각하실 수 있습니다만 목표를 보셔야 합니다. 830-20187-18-1925-40.png
    • 개인적으로 지금은 IntelliJ로 전환한지 오래되었.
  • 작성된 테스트를 기반으로 계속 정제하고 있다는 점
  • 그리고 테스트가 만들어졌으면 더럽더라도 무조껀! 최대한! 빨리! 테스트를 통과시키는 연습을 해야 합니다.
    • 그래야 리팩터링과 다음 코드 작성으로 이어지는 부분을 더 리듬감 있게 진행할 수 있습니다.
  • 저자 한마디를 놓치지 마세요. TDD를 떠나 매우 중요한 내용입니다. 919-20187-18-1929-24.png

생각이 살짝 바뀐 부분

246-20187-18-1933-35.png

  • 자신이 얼마나 설계를 못하고 의존적이며 즉흥적인 코딩을 하고 있는지 (=엉터리 개발자인지) 알게 된다.

깨알

306-20187-18-1932-50.png

2장 예고. JUnit과 Hamcrest

83-20187-18-1946-10.png 889-20187-18-1947-12.png

⚠️ **GitHub.com Fallback** ⚠️