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
안내: 본문을 읽지 않고 아래의 코멘터리만 읽는 걸 가정해서 작성하진 않았습니다.
우선 목차에 있던 어떻게 읽을 것인가를 보고 자신이 어떤식으로 읽어야 시간절약이 될 지 확인 필요합니다.
- 편하고 빠르게 읽기를 바랍니다.
- 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 하는 개발자가 아니다. - 은행잔고 예제가 너무 쉽고 비현실적이라고 생각하실 수 있습니다만 목표를 보셔야 합니다.
- 개인적으로 지금은 IntelliJ로 전환한지 오래되었.
- 작성된 테스트를 기반으로 계속 정제하고 있다는 점
- 그리고 테스트가 만들어졌으면 더럽더라도 무조껀! 최대한! 빨리! 테스트를 통과시키는 연습을 해야 합니다.
- 그래야 리팩터링과 다음 코드 작성으로 이어지는 부분을 더 리듬감 있게 진행할 수 있습니다.
- 저자 한마디를 놓치지 마세요. TDD를 떠나 매우 중요한 내용입니다.
- 자신이 얼마나 설계를 못하고 의존적이며 즉흥적인 코딩을 하고 있는지 (=엉터리 개발자인지) 알게 된다.