doortts / blog star
07-18
Open
#2 1장 - 테스트주도개발 Test Driven Development star
07-18 Open
Tasks

이전: "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

Issue Sharer
Comment 2

    • Markdown help
    • Header
    • Text Style
    • Link
    • List
    • Checklist
    • Image
    • Blockquote
    • Code
    • Table
    • Short Link
    • Markdown Input
      Markdown Output
      # This is an H1
      ## This is an H2
      ### This is an H3
      
      # This is an H1 ## This is an H2 ### This is an H3
    • Markdown Input
      Markdown Output
      *This is an italic*
      **This is an bold**
      ~~This is an strike~~
      
      *This is an italic* **This is an bold** ~~This is an strike~~
    • Markdown Input
      Markdown Output
      - Red
          1. White
          2. Blue
      - Green.
      
      - Red 1. White 2. Blue - Green
    • Markdown Input
      Markdown Output
      - [ ] Todos
          - [x] To do A
          - [ ] To do B
          - [ ] To do C
                          
      • Todos
        • To do A
        • To do B
        • To do C
    • Markdown Input
      Markdown Output
      ![title](https://repo.yona.io/assets/images/ico-like-small.png "Yobi")
      
      ![title](/assets/images/ico-like-small.png "Yobi")
    • Markdown Input
      Markdown Output
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
      >
      > Aenean commodo ligula eget dolor.
      
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. > > Aenean commodo ligula eget dolor.
    • Markdown Input
      Markdown Output
      `function test() {console.log("hello world");}`
      
      ```javascript
      function test() {
        console.log("hello world");
      }
      ```
      
      `function test() {console.log("hello world");}` ```javascript function test() { console.log("hello world"); } ```
    • Markdown Input
      Markdown Output
      | Default      | Align center | Align right |
      | ------------ | :----------: | ------: |
      | Carrot       | Red          | 1,000   |
      | Banana       | Yellow       | 32,000  |
      
      | Default | Align center | Align right | | ------------ | :----------: | ------: | | Carrot | Red | 1,000 | | Banana | Yellow | 32,000 | Also, you can copy & paste table from excel sheet
    Tasks
    • 디자인패던 > 디자인패턴
    • 자신이 얼마나 설계를 못하고 의존적이며 즉흥적인 코딩을 하고 있는지 (=엉터리 개발자인지) 알게 된다. 많이 찔렸습니다! pdf 업데이트 감사합니다 :))
    Reply
    • Markdown help
    • Header
    • Text Style
    • Link
    • List
    • Checklist
    • Image
    • Blockquote
    • Code
    • Table
    • Short Link
    • Markdown Input
      Markdown Output
      # This is an H1
      ## This is an H2
      ### This is an H3
      
      # This is an H1 ## This is an H2 ### This is an H3
    • Markdown Input
      Markdown Output
      *This is an italic*
      **This is an bold**
      ~~This is an strike~~
      
      *This is an italic* **This is an bold** ~~This is an strike~~
    • Markdown Input
      Markdown Output
      - Red
          1. White
          2. Blue
      - Green.
      
      - Red 1. White 2. Blue - Green
    • Markdown Input
      Markdown Output
      - [ ] Todos
          - [x] To do A
          - [ ] To do B
          - [ ] To do C
                          
      • Todos
        • To do A
        • To do B
        • To do C
    • Markdown Input
      Markdown Output
      ![title](https://repo.yona.io/assets/images/ico-like-small.png "Yobi")
      
      ![title](/assets/images/ico-like-small.png "Yobi")
    • Markdown Input
      Markdown Output
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
      >
      > Aenean commodo ligula eget dolor.
      
      > Lorem ipsum dolor sit amet, consectetuer adipiscing elit. > > Aenean commodo ligula eget dolor.
    • Markdown Input
      Markdown Output
      `function test() {console.log("hello world");}`
      
      ```javascript
      function test() {
        console.log("hello world");
      }
      ```
      
      `function test() {console.log("hello world");}` ```javascript function test() { console.log("hello world"); } ```
    • Markdown Input
      Markdown Output
      | Default      | Align center | Align right |
      | ------------ | :----------: | ------: |
      | Carrot       | Red          | 1,000   |
      | Banana       | Yellow       | 32,000  |
      
      | Default | Align center | Align right | | ------------ | :----------: | ------: | | Carrot | Red | 1,000 | | Banana | Yellow | 32,000 | Also, you can copy & paste table from excel sheet
    Tasks

    감사합니다. 잘 보겠습니다. :)

    Reply
Add a comment
New subtask
Assignee
No assignee
Due date
No due date