From 332589c1dcfe275c90b1537f9de816ddbdbafa3f Mon Sep 17 00:00:00 2001 From: ksno Date: Wed, 27 Jun 2018 17:09:41 +0900 Subject: [PATCH 01/25] Add Tdd practice metting --- meeting_log.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/meeting_log.md b/meeting_log.md index a1be0ca..239e725 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -10,6 +10,76 @@ * [이야기](#이야기) * [참고. 이전 이야기 - 20180613 - 9장. 우리가 사는 시간 그 외 논의 참고](#참고-이전-이야기---20180613---9장-우리가-사는-시간-그-외-논의-참고) * [회고](#회고) +* [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---TDD-실습-어떻게-진행할-것인가?) + * [이야기](#이야기) + * [30분안에 TDD 해결 방법](#30분안에-TDD-해결-방법) + * [방안들](#1.오프라인에서-페어-프로그래밍하고) + * [회고](#회고) + +----- + +## 20180623 - TDD 실습 어떻게 진행할 것인가? +### 이야기 +- (Rudia)짧은 코드들을 짧게짧게 해보는 것, 30분 안에 해보고 뿌듯함을 느낄 수 있었으면 좋겠다. +- (ohahohah)아침 시간에 진행을 한다면 어떻게 진행 되야 할지 모르겠다 +- (ohahohah)라이브 코딩은 포푸아저씨 영상을 올려놨다. 그것을 보면서 감을 잡아보는 건 어떨까? +- (ohahohah)자바지기 요구사항를 베이스로 하는 것은 어떨까? +- (ohahohah)일주일에 한 문제를 하는것(3단계 존재) +- (Rudia)어떤 것을 기준으로 TDD를 적용할 수 있을 지 모르겠어서,. +- (kimsunoh)자바지기아저씨가하는 얘기 볼링핀, 이런 예시들을 한개만 해봐도 괜찮지않을까? +- (Rudia)계산기 문제를 해보는 것은 어떨까? +- (ohahohah)하는 과정에서 얘기를 나눌 수 있을 것이라 생각된다 +- (kimsunoh)실습을 모여서하는게 맞는지/ 30분이 짧은데 같은 스텝이라는 말이 주제에대한 속도가 다를텐데 그게 커뮤니케이션이 가능할지 +- (ohahohah)하루에 할 수 있는거 하고 프로젝트에서 가져갈수있는 것만 가져가자라는 개념으로. +- (ohahohah)아침에만 하는거라서 할 수 있던거. +- (kimsunoh)30분안에 하는게 부담. +- (ohahohah)자바지기에게 자문구하기 + - 스터디방식을 알려드리고 틈틈히 궁금증 할때 pr 날리라고 가르침 받음. +*30분안에 TDD 해결 방법* +- (Rudia)코드리뷰로 가야하지 않을까? +- (ohahohah) 1명을 더 구해서 페어프로그래밍 어떄요? +- (Rudia) 3명이 페어 프로그래밍은 안되나요? +- (ohahohah) 할수 있다. 3명 페어프로그래밍 : 한명은 A4용지 2명 네비게이터방식이 로테이션 +- (ohahohah) 괜찮은 방법을 여러번 해보는것. 각각의 방식 시도하면서 장단점 찾기로. +- (ohahohah) 25분(실습) + 5분(코드리뷰) 나눠서 했었는데 시도 필요. 각자 코딩이라는 의미 있을까? +- (ohahohah) 사람마다 코딩스타일이 달라서 비교필요. +- (Rudia) 지금 사람을 늘리는 것은 부담이 될 것 같다. 일단 괜찮은 방법을 찾아가 보는 것이 좋을 것 같다 +- (Rudia) 짧은 것을 해보는 것, 3명 페어해서 해보는 것. 문제는 쉽게 방법은 다양하게 해보는 것을 해보고 싶다 +- (kimsunoh) 문제 쉽게 다양하게 하면서 방법 찾는것에 동의 페어/각자실습 공유와 문제들 공유 + - 페어를 처음 하는 날에는 실습 오래걸려서 해보는건 어떨지. + - 페어 얼굴을 맡대고 있지 않는 상태에선 거부감 생김. + - 온라인페어 가능할지 +(ohahohah,Rudia)지금하고 있는데, 변질되었다. +- (ohahohah) 온라인으로 페어프로그래밍이 되는가?, +1. 오프라인에서 페어 프로그래밍하고 + 1) 오프라인에서 셋 페어프로그래밍해보고, + 2) 온라인으로 페어프로그래밍을 해보자 + 3) 2명이선 진행 +2. 온라인페어 +- (Rudia) 왜 쉬운 문제를 하는 것이 의미가 있는가하면, 어려운 문제를 푸는 것보다 TDD에 목적이 있는 것이여서 +- (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? +- (ohahohah) 개발을하고 코드리뷰를 아침에 하는 것 +- (Rudia) 의견 없습니다. +- (kimsunoh) 페어 해보고 2번째방법 해봐요. 페어해보고 정해요. +- (ohahohah) 월요일 오프라인 만나는 것은 궁극적 목표가 만나는 것은 아니므로, 둘씨 +월요일(시영, 선오) 화요일(혜영, 선오), 수요일(선오 혜영), 목요일(혜영,시영), 토요일저녁 1시간(선오, 시영, 혜영) +아침엔 TDD 진행해요. 슬랙에서 문제 공유해요. + +### 회고 +**ohahohah** +맞춰나가는 과정이 재밌을것 같다 +다들 적극적으로 의견을 내는 좋은 스터디인것 같다. 힘을 항상 받는다 +다음주에 방법을 못찾더라도, 언젠간 답을 찾을 꺼라고 생각한다 +중간에 초조해지더라도 다같이 계속하다보면 결과가 있을꺼 같다. + +**rudia** +시영님 계속 저만 시키는게 부담스러워요 +방식 나눠지는것 재미있다. + +**ksno** +우리들의 케미가 늘어가는 것이 느껴져서 좋았다. +오프라인으로 둘이 만난다니 두근두근했다 +실습이 기대된다 -------------------------------- From c8cc738d84fd2a45f7b82b40995edfd6053769a6 Mon Sep 17 00:00:00 2001 From: SiYoungOh Date: Wed, 27 Jun 2018 17:39:30 +0900 Subject: [PATCH 02/25] Update 20180623 log --- meeting_log.md | 93 +++++++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/meeting_log.md b/meeting_log.md index 239e725..5eddb0b 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -22,64 +22,65 @@ ### 이야기 - (Rudia)짧은 코드들을 짧게짧게 해보는 것, 30분 안에 해보고 뿌듯함을 느낄 수 있었으면 좋겠다. - (ohahohah)아침 시간에 진행을 한다면 어떻게 진행 되야 할지 모르겠다 -- (ohahohah)라이브 코딩은 포푸아저씨 영상을 올려놨다. 그것을 보면서 감을 잡아보는 건 어떨까? -- (ohahohah)자바지기 요구사항를 베이스로 하는 것은 어떨까? -- (ohahohah)일주일에 한 문제를 하는것(3단계 존재) -- (Rudia)어떤 것을 기준으로 TDD를 적용할 수 있을 지 모르겠어서,. -- (kimsunoh)자바지기아저씨가하는 얘기 볼링핀, 이런 예시들을 한개만 해봐도 괜찮지않을까? -- (Rudia)계산기 문제를 해보는 것은 어떨까? -- (ohahohah)하는 과정에서 얘기를 나눌 수 있을 것이라 생각된다 +- (ohahohah) 코드리뷰 라이브 영상은 포프김꺼 채널에 올려놨다. 그것을 보면서 감을 잡아보는 건 어떨까? +- (ohahohah) 클린코드 강의의 TDD 실습 프로젝트의 요구사항 괜찮았음. 참고해보자. 일주일에 한 단계씩 총 3단계의 요구사항으로 차례차례 구현하도록 되어있었음 +- (Rudia)어떤 것을 기준으로 TDD를 적용할 수 있을 지 모르겠어서. +- (kimsunoh) 자바지기아저씨가하는 얘기 볼링핀, 이런 예시들을 한개만 해봐도 괜찮지않을까? +- (Rudia) 계산기 문제를 해보는 것은 어떨까? +- (ohahohah) 어떤 걸 선택하든 실습해보고 문제를 고르는 과정 필요. - (kimsunoh)실습을 모여서하는게 맞는지/ 30분이 짧은데 같은 스텝이라는 말이 주제에대한 속도가 다를텐데 그게 커뮤니케이션이 가능할지 -- (ohahohah)하루에 할 수 있는거 하고 프로젝트에서 가져갈수있는 것만 가져가자라는 개념으로. -- (ohahohah)아침에만 하는거라서 할 수 있던거. -- (kimsunoh)30분안에 하는게 부담. -- (ohahohah)자바지기에게 자문구하기 - - 스터디방식을 알려드리고 틈틈히 궁금증 할때 pr 날리라고 가르침 받음. -*30분안에 TDD 해결 방법* -- (Rudia)코드리뷰로 가야하지 않을까? -- (ohahohah) 1명을 더 구해서 페어프로그래밍 어떄요? +- (ohahohah) 그 수업에서도 진도를 따라가는데 초점이 아니라, 하나의 프로젝트를 하더라도 프로젝트에서 배울 수 있는 것 확실하게 배우자 였음. 다 구현하고 나서 PR이 아니라 궁금증이 생길때 틈틈이 PR하라고 함. 우리도 스터디하는 날 모든 요구사항을 다 완료하는게 아니라 하루에 할 수 있는 만큼만 구현하고 계속 리뷰하고 발전시켜나가자. +- (ohahohah) 진도에만 초점을 맞추지 말자. 그리고 그렇게 되면 부담이 너무 커진다. 부담이 크면 지속할 수 없다. TDD도 아침에 시간을 내면 할 수 있는 분량이라 지속할 수 있었음. +- (kimsunoh) 30분안에 하는게 부담. +- (ohahohah) 클린코드 강의자에게 자문구하기? - 지금 스터디방식 정보 함께 + + +#### 1. 30분안에 TDD 실습페어 프로그래밍을 어떻게 할까 +- (Rudia) 코드리뷰로 가야하지 않을까? +- (ohahohah)아님 1명을 더 구해서 페어프로그래밍 어떄요? - (Rudia) 3명이 페어 프로그래밍은 안되나요? -- (ohahohah) 할수 있다. 3명 페어프로그래밍 : 한명은 A4용지 2명 네비게이터방식이 로테이션 -- (ohahohah) 괜찮은 방법을 여러번 해보는것. 각각의 방식 시도하면서 장단점 찾기로. -- (ohahohah) 25분(실습) + 5분(코드리뷰) 나눠서 했었는데 시도 필요. 각자 코딩이라는 의미 있을까? -- (ohahohah) 사람마다 코딩스타일이 달라서 비교필요. +- (ohahohah) 할 수 있다. 3명 페어프로그래밍하는 방법을 들음. 한명은 A4용지에 무얼 할ㅈ 적고, 2명은 페어로. 한명이 네비게이터. 한명이 드라이버로 로테이션하면서. +- (ohahohah) 어떻게 시도할지 괜찮을 것 같은 방법을 리스트업 해보고ㅡ 각각의 방식 시도하면서 장단점 찾으면서 발전시켜나가자. +- (ohahohah) 사람마다 코딩스타일이 달라서 페어프로그래밍도 서로 맞춰나가는 게 필요. - (Rudia) 지금 사람을 늘리는 것은 부담이 될 것 같다. 일단 괜찮은 방법을 찾아가 보는 것이 좋을 것 같다 -- (Rudia) 짧은 것을 해보는 것, 3명 페어해서 해보는 것. 문제는 쉽게 방법은 다양하게 해보는 것을 해보고 싶다 -- (kimsunoh) 문제 쉽게 다양하게 하면서 방법 찾는것에 동의 페어/각자실습 공유와 문제들 공유 - - 페어를 처음 하는 날에는 실습 오래걸려서 해보는건 어떨지. - - 페어 얼굴을 맡대고 있지 않는 상태에선 거부감 생김. - - 온라인페어 가능할지 -(ohahohah,Rudia)지금하고 있는데, 변질되었다. -- (ohahohah) 온라인으로 페어프로그래밍이 되는가?, -1. 오프라인에서 페어 프로그래밍하고 - 1) 오프라인에서 셋 페어프로그래밍해보고, - 2) 온라인으로 페어프로그래밍을 해보자 - 3) 2명이선 진행 -2. 온라인페어 +- (Rudia) 짧은 것을 해보는 것, 3명 페어해서 해보는 것. **문제는 쉽게 방법은 다양하게** 해보는 것을 해보고 싶다 - (Rudia) 왜 쉬운 문제를 하는 것이 의미가 있는가하면, 어려운 문제를 푸는 것보다 TDD에 목적이 있는 것이여서 -- (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? -- (ohahohah) 개발을하고 코드리뷰를 아침에 하는 것 -- (Rudia) 의견 없습니다. +- (kimsunoh) 문제 쉽게 다양하게 하면서 방법 찾는것에 동의. 페어르 찾고, 각자 실습할 문제 공유 + - 페어를 처음 하는 날에는 실습 오래걸려서 해보는건 어떨지. + - 페어 얼굴을 맞대고 있지 않는 상태에선 거부감 생김. + - 온라인 페어프로그래밍 가능할지 +(ohahohah,Rudia) 지금 우리느 사이드 프로젝트 같은 부분 담당학 있는데 그거 개발할때 페어프로그래밍으로 학습하고 있음. 근데 게임처럼 하느라 컴페티션처럼 하고 있음. +(ohahohah) 온라인으로 페어프로그래밍이 되는가?라는 ksno 의 질문에 답하자면, 일단 두 부분으로 나누어서 접근해야할듯. +1. 오프라인에서 둘씩 페어프로그래밍해보고, +2. 오프라인으로 셋이서 페어프로그래밍 해보고 +3. 온라인으로 페어프로그래밍을 해보자 + +#### 2.구현실습 + 코드리뷰 +- (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? 미리 구현실습을 하고, 아침에는 다같이 모여 코드리뷰를 하는 것 +- 아니면 15분(실습) + 15분 코드리뷰. 근데 다같이 모여서 각자 15분 실습하는게 의미가 있나. - (kimsunoh) 페어 해보고 2번째방법 해봐요. 페어해보고 정해요. -- (ohahohah) 월요일 오프라인 만나는 것은 궁극적 목표가 만나는 것은 아니므로, 둘씨 -월요일(시영, 선오) 화요일(혜영, 선오), 수요일(선오 혜영), 목요일(혜영,시영), 토요일저녁 1시간(선오, 시영, 혜영) -아침엔 TDD 진행해요. 슬랙에서 문제 공유해요. + +#### Action 일정정하기 +(셋이 다 되는 일정을 찾아봄. 안됨.) +- (ohahohah) 둘 씩 나눠 하죠. 모두 오프라인에서 만나는 게 목표가 아니니까. +(각자 이번 페어로 되는 시간 정하고, 셋이 다같이 만나는 시간 정함) +- 그리고 이번주에 아침엔 TDD 진행해요. 슬랙에서 페어 풀 문제 공유해요. ### 회고 **ohahohah** -맞춰나가는 과정이 재밌을것 같다 -다들 적극적으로 의견을 내는 좋은 스터디인것 같다. 힘을 항상 받는다 -다음주에 방법을 못찾더라도, 언젠간 답을 찾을 꺼라고 생각한다 -중간에 초조해지더라도 다같이 계속하다보면 결과가 있을꺼 같다. +- 맞춰나가는 과정이 재밌을것 같다 +- 다들 적극적으로 의견을 내는 좋은 스터디인것 같다. 항상 힘이 난다 +- 만약 다음주에 방법을 못찾더라도, 이렇게 하다보면 우린 언젠간 답을 찾을 꺼라고 생각한다 +- 중간에 초조해지더라도 다같이 계속하다보면 결과가 있을꺼 같다. **rudia** -시영님 계속 저만 시키는게 부담스러워요 -방식 나눠지는것 재미있다. +- 시영님 계속 저만 시키는게 부담스러워요 +- 방식 나눠지는것 재미있다. **ksno** -우리들의 케미가 늘어가는 것이 느껴져서 좋았다. -오프라인으로 둘이 만난다니 두근두근했다 -실습이 기대된다 +- 우리들의 케미가 늘어가는 것이 느껴져서 좋았다. +- 오프라인으로 둘이 만난다니 두근두근했다 +- 실습이 기대된다 -------------------------------- From 16792d05b37d371878dbffe254066e636768ad62 Mon Sep 17 00:00:00 2001 From: ksno Date: Wed, 27 Jun 2018 21:48:33 +0900 Subject: [PATCH 03/25] Update meeting_log.md --- meeting_log.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meeting_log.md b/meeting_log.md index 5eddb0b..662de9f 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -12,8 +12,9 @@ * [회고](#회고) * [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---TDD-실습-어떻게-진행할-것인가?) * [이야기](#이야기) - * [30분안에 TDD 해결 방법](#30분안에-TDD-해결-방법) - * [방안들](#1.오프라인에서-페어-프로그래밍하고) + * [1. 30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#1.-30분안에-TDD-실습페어-프로그래밍을-어떻게-할까) + * [2.구현실습 + 코드리뷰](#2.구현실습-+-코드리뷰) + * [Action 일정정하기](#Action-일정정하기) * [회고](#회고) ----- From ffce7b824ffe5ea35698efcb76fcc6edb3a29158 Mon Sep 17 00:00:00 2001 From: ksno Date: Thu, 28 Jun 2018 09:11:29 +0900 Subject: [PATCH 04/25] =?UTF-8?q?Docs=20meeting=5Flog=20INDEX=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meeting_log.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/meeting_log.md b/meeting_log.md index 662de9f..d49c151 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -10,11 +10,11 @@ * [이야기](#이야기) * [참고. 이전 이야기 - 20180613 - 9장. 우리가 사는 시간 그 외 논의 참고](#참고-이전-이야기---20180613---9장-우리가-사는-시간-그-외-논의-참고) * [회고](#회고) -* [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---TDD-실습-어떻게-진행할-것인가?) +* [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---tdd-실습-어떻게-진행할-것인가?) * [이야기](#이야기) - * [1. 30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#1.-30분안에-TDD-실습페어-프로그래밍을-어떻게-할까) - * [2.구현실습 + 코드리뷰](#2.구현실습-+-코드리뷰) - * [Action 일정정하기](#Action-일정정하기) + * [30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#30분안에-tdd-실습페어-프로그래밍을-어떻게-할까) + * [구현실습 + 코드리뷰](#구현실습-+-코드리뷰) + * [Action 일정정하기](#action-일정정하기) * [회고](#회고) ----- @@ -36,7 +36,7 @@ - (ohahohah) 클린코드 강의자에게 자문구하기? - 지금 스터디방식 정보 함께 -#### 1. 30분안에 TDD 실습페어 프로그래밍을 어떻게 할까 +#### 30분안에 TDD 실습페어 프로그래밍을 어떻게 할까 - (Rudia) 코드리뷰로 가야하지 않을까? - (ohahohah)아님 1명을 더 구해서 페어프로그래밍 어떄요? - (Rudia) 3명이 페어 프로그래밍은 안되나요? @@ -56,7 +56,7 @@ 2. 오프라인으로 셋이서 페어프로그래밍 해보고 3. 온라인으로 페어프로그래밍을 해보자 -#### 2.구현실습 + 코드리뷰 +#### 구현실습 + 코드리뷰 - (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? 미리 구현실습을 하고, 아침에는 다같이 모여 코드리뷰를 하는 것 - 아니면 15분(실습) + 15분 코드리뷰. 근데 다같이 모여서 각자 15분 실습하는게 의미가 있나. - (kimsunoh) 페어 해보고 2번째방법 해봐요. 페어해보고 정해요. From 587370cd4a27109cc6be4b53dad2508de2c2909d Mon Sep 17 00:00:00 2001 From: ksno Date: Thu, 28 Jun 2018 09:13:25 +0900 Subject: [PATCH 05/25] Docs meeting_log modify sub title for indexing --- meeting_log.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meeting_log.md b/meeting_log.md index d49c151..4cfe3b4 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -13,7 +13,7 @@ * [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---tdd-실습-어떻게-진행할-것인가?) * [이야기](#이야기) * [30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#30분안에-tdd-실습페어-프로그래밍을-어떻게-할까) - * [구현실습 + 코드리뷰](#구현실습-+-코드리뷰) + * [구현실습 & 코드리뷰](#구현실습-&-코드리뷰) * [Action 일정정하기](#action-일정정하기) * [회고](#회고) @@ -56,7 +56,7 @@ 2. 오프라인으로 셋이서 페어프로그래밍 해보고 3. 온라인으로 페어프로그래밍을 해보자 -#### 구현실습 + 코드리뷰 +#### 구현실습 & 코드리뷰 - (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? 미리 구현실습을 하고, 아침에는 다같이 모여 코드리뷰를 하는 것 - 아니면 15분(실습) + 15분 코드리뷰. 근데 다같이 모여서 각자 15분 실습하는게 의미가 있나. - (kimsunoh) 페어 해보고 2번째방법 해봐요. 페어해보고 정해요. From 821ede1c962cc0b7cd1de18cd3db70a1d9034066 Mon Sep 17 00:00:00 2001 From: ksno Date: Thu, 28 Jun 2018 09:16:11 +0900 Subject: [PATCH 06/25] Docs 180623 log sub title modify --- meeting_log.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meeting_log.md b/meeting_log.md index 4cfe3b4..282d19e 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -13,7 +13,7 @@ * [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---tdd-실습-어떻게-진행할-것인가?) * [이야기](#이야기) * [30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#30분안에-tdd-실습페어-프로그래밍을-어떻게-할까) - * [구현실습 & 코드리뷰](#구현실습-&-코드리뷰) + * [구현실습과 코드리뷰 논의](#구현실습과-코드리뷰-논의) * [Action 일정정하기](#action-일정정하기) * [회고](#회고) @@ -56,7 +56,7 @@ 2. 오프라인으로 셋이서 페어프로그래밍 해보고 3. 온라인으로 페어프로그래밍을 해보자 -#### 구현실습 & 코드리뷰 +#### 구현실습과 코드리뷰 논의 - (ohahohah) 두번째 방법으로 아침에 코드리뷰를 하는것은 어떻게 진행하는 것이 좋을까요? 미리 구현실습을 하고, 아침에는 다같이 모여 코드리뷰를 하는 것 - 아니면 15분(실습) + 15분 코드리뷰. 근데 다같이 모여서 각자 15분 실습하는게 의미가 있나. - (kimsunoh) 페어 해보고 2번째방법 해봐요. 페어해보고 정해요. From 69a374dc311d52a96d0f8e5835fb37142c688aff Mon Sep 17 00:00:00 2001 From: SiYoungOh Date: Thu, 28 Jun 2018 10:15:46 +0900 Subject: [PATCH 07/25] Fix Toc link --- meeting_log.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meeting_log.md b/meeting_log.md index 282d19e..563fc4c 100644 --- a/meeting_log.md +++ b/meeting_log.md @@ -10,7 +10,7 @@ * [이야기](#이야기) * [참고. 이전 이야기 - 20180613 - 9장. 우리가 사는 시간 그 외 논의 참고](#참고-이전-이야기---20180613---9장-우리가-사는-시간-그-외-논의-참고) * [회고](#회고) -* [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---tdd-실습-어떻게-진행할-것인가?) +* [20180623 - TDD 실습 어떻게 진행할 것인가?](#20180623---TDD-실습-어떻게-진행할-것인가) * [이야기](#이야기) * [30분안에 TDD 실습페어 프로그래밍을 어떻게 할까](#30분안에-tdd-실습페어-프로그래밍을-어떻게-할까) * [구현실습과 코드리뷰 논의](#구현실습과-코드리뷰-논의) From 797a98f4f6d954c81e703d6f62452228f46566de Mon Sep 17 00:00:00 2001 From: ohahohah Date: Sat, 15 Sep 2018 09:21:29 +0900 Subject: [PATCH 08/25] =?UTF-8?q?Fix=20=EC=9D=B8=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/stringCaculator/AddCaculationTest.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tddExercise/test/stringCaculator/AddCaculationTest.java b/tddExercise/test/stringCaculator/AddCaculationTest.java index fdee09e..70c27bc 100644 --- a/tddExercise/test/stringCaculator/AddCaculationTest.java +++ b/tddExercise/test/stringCaculator/AddCaculationTest.java @@ -1,15 +1,11 @@ -package stringCaculator; +package stringCaculator; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; import org.junit.After; import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.*; + public class AddCaculationTest { AddCaculation ac = null; From a78d8ad64d05488ecb7f31813ff20813411aec81 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Sat, 15 Sep 2018 09:21:45 +0900 Subject: [PATCH 09/25] =?UTF-8?q?Add=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EA=B2=BD=EC=A3=BC=EA=B2=8C=EC=9E=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/RaceCar.java | 10 ++++++++++ tddExercise/src/racingCar/RacingGame.java | 17 +++++++++++++++++ tddExercise/test/racingCar/RaceCarTest.java | 10 ++++++++++ tddExercise/test/racingCar/blueprint.md | 18 +++++++++--------- 4 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 tddExercise/src/racingCar/RacingGame.java diff --git a/tddExercise/src/racingCar/RaceCar.java b/tddExercise/src/racingCar/RaceCar.java index 9ffbe58..e4f54dd 100644 --- a/tddExercise/src/racingCar/RaceCar.java +++ b/tddExercise/src/racingCar/RaceCar.java @@ -1,4 +1,14 @@ package racingCar; public class RaceCar { + + +// public int inputCarNum(int inputCarNum) { +//// List carList = new ArrayList<>(); +//// for(int i = 0 ; i< inputCarNum ; i++){ +//// ((ArrayList) carList).add(new Car()); +//// } +//// return ((ArrayList) carList).size() +////// return 0; +// } } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java new file mode 100644 index 0000000..c0a21f6 --- /dev/null +++ b/tddExercise/src/racingCar/RacingGame.java @@ -0,0 +1,17 @@ +package racingCar; + +import java.util.ArrayList; +import java.util.List; + +public class RacingGame { + + List rc; + + public RacingGame(int carNum) { + rc = new ArrayList<>(); +// TODO 생성과 동시에 초기화 java8 사용해서 + for (int i = 0; i < carNum; i++) { + rc.add(new RaceCar()); + } + } +} diff --git a/tddExercise/test/racingCar/RaceCarTest.java b/tddExercise/test/racingCar/RaceCarTest.java index c92547d..7ca332f 100644 --- a/tddExercise/test/racingCar/RaceCarTest.java +++ b/tddExercise/test/racingCar/RaceCarTest.java @@ -2,6 +2,9 @@ import org.junit.After; import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; public class RaceCarTest { @@ -12,4 +15,11 @@ public void setUp() throws Exception { @After public void tearDown() throws Exception { } + + @Test + public void 입력받은_차_수만큼_car_객체를_생성하는지_확인() { + int inputCarNum = 3; + RacingGame racingGame = new RacingGame(3); + assertEquals(inputCarNum, racingGame.rc.size()); + } } \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 2fbdd20..455de6f 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -23,7 +23,6 @@ - 전진조건값 >= 4 : 전진 - 전진조건값 < 4 : 멈춤(머물러있음) - 자동차의 상태를 화면에 출력한다. -//20180913 목 여기까지 했습니다 뀨 - 어느 시점에 출력할 것인지에 대한 제약은 없다. - 출력은 현재 자동차의 전진상태를 나타냄 - 자동차 레인은 바뀌지 않음 @@ -31,28 +30,29 @@ - 각 회차의 경주결과는 `--` 으로 나눔 ### 테스트케이스 리스트 + +RaceCar = 경주에 나온 car 객체 +RacingGame = + +- [ ] 입력받은 차 수만큼 car 객체를 생성하는지 확인 - [ ] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 - [ ] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 - goCar(0)? stopCar()? - [ ] 전진조건값이 4이상일때 전진값이 맞게 주어지는지 확인 - int random = 4 -> goCarValue = 1 -- 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 +- [ ] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 -- 입력받은 차 수만큼 car 객체를 생성하는지 확인 - //TODO 생성된 차가 각 회차마다 전진조건값을 전달받는지 확인 - 전달받는지 확인이 이상하다 그건 우리가 확인못하는뎅 + +#### 불필요 - 삭제 - ~자동차 수만큼 랜덤값을 만듦~ - 랜덤값은 테스트할 수 없음 - ~랜덤값이 0~9 사이인지 범위확인~ - 우린 랜덤값 확인 못함 - 테스트케이스를 만들려면 언제나 일정한 값이 나와야 옳은 테스트케이스인지 확인가능 - - 예를 들어 잘못만들어서 2만 계속 나와도 이 테스트케이스는 통과가 되어버림 - - - - - + - 예를 들어 잘못만들어서 2만 계속 나와도 이 테스트케이스는 통과가 되어버림 ### 실행 결과 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. From 70c0b94cc5fbb4e9853a1b15f5570a8358a50f74 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Mon, 7 Jan 2019 21:27:36 +0900 Subject: [PATCH 10/25] =?UTF-8?q?20190107=20Morning=20TDD=20/=20Racing=20c?= =?UTF-8?q?ar=20-=20=EA=B8=B0=EC=A1=B4=20=ED=8E=98=EC=96=B4=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=9E=98=EB=B0=8D=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=84=A4=EA=B3=84=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20-=20=EC=A0=84=EC=A7=84=EA=B0=92=EC=9D=84?= =?UTF-8?q?=5F=EC=A3=BC=EC=96=B4=EC=A1=8C=EC=9D=84=EB=96=84=5F=EC=9E=90?= =?UTF-8?q?=EB=8F=99=EC=B0=A8=EC=9D=98=5F=ED=98=84=EC=9E=AC=5F=EC=9C=84?= =?UTF-8?q?=EC=B9=98=EA=B0=92=EC=9D=B4=5F=EB=B3=80=EA=B2=BD=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/RaceCar.java | 18 ++++++ tddExercise/test/racingCar/RaceCarTest.java | 14 +++- tddExercise/test/racingCar/blueprint.md | 2 +- tddExercise/test/racingCar/requirement.md | 72 +++++++++++---------- 4 files changed, 71 insertions(+), 35 deletions(-) diff --git a/tddExercise/src/racingCar/RaceCar.java b/tddExercise/src/racingCar/RaceCar.java index e4f54dd..f7f50c1 100644 --- a/tddExercise/src/racingCar/RaceCar.java +++ b/tddExercise/src/racingCar/RaceCar.java @@ -2,6 +2,24 @@ public class RaceCar { + int currentCoord; + + public RaceCar() { + this.currentCoord = 0; + } + + public RaceCar(int currentCoord) { + this.currentCoord = currentCoord; + } + + public int getCurrentCoord() { + return currentCoord; + } + + public void goCar(int forwadNum) { + this.currentCoord += forwadNum; + } + // public int inputCarNum(int inputCarNum) { //// List carList = new ArrayList<>(); diff --git a/tddExercise/test/racingCar/RaceCarTest.java b/tddExercise/test/racingCar/RaceCarTest.java index 7ca332f..8201b22 100644 --- a/tddExercise/test/racingCar/RaceCarTest.java +++ b/tddExercise/test/racingCar/RaceCarTest.java @@ -19,7 +19,19 @@ public void tearDown() throws Exception { @Test public void 입력받은_차_수만큼_car_객체를_생성하는지_확인() { int inputCarNum = 3; - RacingGame racingGame = new RacingGame(3); + RacingGame racingGame = new RacingGame(inputCarNum); assertEquals(inputCarNum, racingGame.rc.size()); } + + @Test + public void 전진값을_주어졌을떄_자동차의_현재_위치값이_변경됨() { + // - goCar(3) -> car.coord =+ 3 + int forwadNum = 1; + int currentCoord = 3; + + RaceCar rc = new RaceCar(currentCoord); + + rc.goCar(forwadNum); + assertEquals(forwadNum+currentCoord, rc.getCurrentCoord()); + } } \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 455de6f..06c95a0 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -32,7 +32,7 @@ ### 테스트케이스 리스트 RaceCar = 경주에 나온 car 객체 -RacingGame = +RacingGame = Game 객체 - [ ] 입력받은 차 수만큼 car 객체를 생성하는지 확인 - [ ] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 diff --git a/tddExercise/test/racingCar/requirement.md b/tddExercise/test/racingCar/requirement.md index bdfa059..91d3e17 100644 --- a/tddExercise/test/racingCar/requirement.md +++ b/tddExercise/test/racingCar/requirement.md @@ -1,39 +1,45 @@ -진행 방법 - -자동차 경주 게임에 대한 github 저장소를 기반으로 실습을 진행한다. -요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다. -코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다. -모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. -요구사항 - -기능 요구사항 - -초간단 자동차 경주 게임을 구현한다. -주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. -사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. -전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. -자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. -프로그래밍 요구사항 - -메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다. -규칙 2: else 예약어를 쓰지 않는다. -모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외 -naming convention을 지키면서 프로그래밍한다. -Naming Convention - -자바는 낙타 표기법(Camel Case)를 따른다. -클래스명은 대문자로 시작, 변수 메소드는 소문자로 시작 -클래스 이름 예 : Rectangle, LaundryList, StudentDirectory -변수 이름 예 : firstName, description, mediaController -메소드 이름 예 : getFirstName(), cancelOrder(), isDeleted() -실행 결과 - -위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. +## 진행 방법 + +- 자동차 경주 게임에 대한 github 저장소를 기반으로 실습을 진행한다. +- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다. +- 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다. +- 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. + +## 요구사항 + +### 기능 요구사항 + +- 초간단 자동차 경주 게임을 구현한다. +- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. +- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. +- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. + +### 프로그래밍 요구사항 + +- 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다. +- 규칙 2: else 예약어를 쓰지 않는다. +- 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외 +- naming convention을 지키면서 프로그래밍한다. + - Naming Convention + - 자바는 낙타 표기법(Camel Case)를 따른다. + - 클래스명은 대문자로 시작, 변수 메소드는 소문자로 시작 + - 클래스 이름 예 : Rectangle, LaundryList, StudentDirectory + - 변수 이름 예 : firstName, description, mediaController + - 메소드 이름 예 : getFirstName(), cancelOrder(), isDeleted() + +## 실행 결과 +- 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. +``` 자동차 대수는 몇 대 인가요? 3 시도할 회수는 몇 회 인가요? 5 -실행 결과 +``` + +### 실행 결과 + +``` - - - @@ -49,4 +55,4 @@ Naming Convention ---- ---- ----- -1 / 2 \ No newline at end of file +``` \ No newline at end of file From d1b8abf5aa153d0038f1e3a041941a7c0cf5ba2e Mon Sep 17 00:00:00 2001 From: ohahohah Date: Wed, 9 Jan 2019 07:38:26 +0900 Subject: [PATCH 11/25] =?UTF-8?q?Tdd=20Racing=20game-=20=EC=A0=84=EC=A7=84?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=20=ED=99=95=EC=9D=B8=20/=2020190108=20Mornin?= =?UTF-8?q?g=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/RaceCar.java | 11 ++---- tddExercise/test/racingCar/RaceCarTest.java | 41 +++++++++++++++++++-- tddExercise/test/racingCar/blueprint.md | 10 ++--- 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/tddExercise/src/racingCar/RaceCar.java b/tddExercise/src/racingCar/RaceCar.java index f7f50c1..3c78b5e 100644 --- a/tddExercise/src/racingCar/RaceCar.java +++ b/tddExercise/src/racingCar/RaceCar.java @@ -20,13 +20,8 @@ public void goCar(int forwadNum) { this.currentCoord += forwadNum; } + public int getForwardCoord(int randomVal) { -// public int inputCarNum(int inputCarNum) { -//// List carList = new ArrayList<>(); -//// for(int i = 0 ; i< inputCarNum ; i++){ -//// ((ArrayList) carList).add(new Car()); -//// } -//// return ((ArrayList) carList).size() -////// return 0; -// } + return randomVal >=4? 1:0; + } } diff --git a/tddExercise/test/racingCar/RaceCarTest.java b/tddExercise/test/racingCar/RaceCarTest.java index 8201b22..a921f79 100644 --- a/tddExercise/test/racingCar/RaceCarTest.java +++ b/tddExercise/test/racingCar/RaceCarTest.java @@ -25,13 +25,46 @@ public void tearDown() throws Exception { @Test public void 전진값을_주어졌을떄_자동차의_현재_위치값이_변경됨() { - // - goCar(3) -> car.coord =+ 3 - int forwadNum = 1; + int forwardNum = 1; int currentCoord = 3; RaceCar rc = new RaceCar(currentCoord); - rc.goCar(forwadNum); - assertEquals(forwadNum+currentCoord, rc.getCurrentCoord()); + rc.goCar(forwardNum); + assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); + } + + @Test + public void 멈춤값이_주어졌을떄_자동차의_현재_위치값이_변경되지_않음() { + int forwardNum = 0; + int currentCoord = 3; + + RaceCar rc = new RaceCar(currentCoord); + + rc.goCar(forwardNum); + assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); + + } + + @Test + public void 전진조건값이_4이상일때_전진값이_맞게_주어지는지_확인() { + int randomNum = 4; + int expectedGoCarVal = 1; + + RaceCar rc = new RaceCar(); + + assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); + + } + + @Test + public void 전진조건값이_4미만일때_전진값이_맞게_주어지는지_확인() { + int randomNum = 3; + int expectedGoCarVal = 0; + + RaceCar rc = new RaceCar(); + + assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); + } } \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 06c95a0..c664243 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -34,12 +34,12 @@ RaceCar = 경주에 나온 car 객체 RacingGame = Game 객체 -- [ ] 입력받은 차 수만큼 car 객체를 생성하는지 확인 -- [ ] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 +- [x] 입력받은 차 수만큼 car 객체를 생성하는지 확인 +- [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 -- [ ] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 - - goCar(0)? stopCar()? -- [ ] 전진조건값이 4이상일때 전진값이 맞게 주어지는지 확인 +- [x] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 + - goCar(0) +- [x] 전진조건값이 4이상일때 전진값이 맞게 주어지는지 확인 - int random = 4 -> goCarValue = 1 - [ ] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 From 3d89927298d2fddbb29e3f258195b70a97f482cb Mon Sep 17 00:00:00 2001 From: ohahohah Date: Wed, 9 Jan 2019 08:50:48 +0900 Subject: [PATCH 12/25] Rename Class name for matching ClassDiagram --- tddExercise/src/racingCar/{RaceCar.java => Car.java} | 6 +++--- tddExercise/src/racingCar/RacingGame.java | 4 ++-- .../test/racingCar/{RaceCarTest.java => CarTest.java} | 11 +++++------ 3 files changed, 10 insertions(+), 11 deletions(-) rename tddExercise/src/racingCar/{RaceCar.java => Car.java} (81%) rename tddExercise/test/racingCar/{RaceCarTest.java => CarTest.java} (88%) diff --git a/tddExercise/src/racingCar/RaceCar.java b/tddExercise/src/racingCar/Car.java similarity index 81% rename from tddExercise/src/racingCar/RaceCar.java rename to tddExercise/src/racingCar/Car.java index 3c78b5e..1b57684 100644 --- a/tddExercise/src/racingCar/RaceCar.java +++ b/tddExercise/src/racingCar/Car.java @@ -1,14 +1,14 @@ package racingCar; -public class RaceCar { +public class Car { int currentCoord; - public RaceCar() { + public Car() { this.currentCoord = 0; } - public RaceCar(int currentCoord) { + public Car(int currentCoord) { this.currentCoord = currentCoord; } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index c0a21f6..7727196 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -5,13 +5,13 @@ public class RacingGame { - List rc; + List rc; public RacingGame(int carNum) { rc = new ArrayList<>(); // TODO 생성과 동시에 초기화 java8 사용해서 for (int i = 0; i < carNum; i++) { - rc.add(new RaceCar()); + rc.add(new Car()); } } } diff --git a/tddExercise/test/racingCar/RaceCarTest.java b/tddExercise/test/racingCar/CarTest.java similarity index 88% rename from tddExercise/test/racingCar/RaceCarTest.java rename to tddExercise/test/racingCar/CarTest.java index a921f79..9caae45 100644 --- a/tddExercise/test/racingCar/RaceCarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -6,7 +6,7 @@ import static org.junit.Assert.assertEquals; -public class RaceCarTest { +public class CarTest { @Before public void setUp() throws Exception { @@ -28,7 +28,7 @@ public void tearDown() throws Exception { int forwardNum = 1; int currentCoord = 3; - RaceCar rc = new RaceCar(currentCoord); + Car rc = new Car(currentCoord); rc.goCar(forwardNum); assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); @@ -39,7 +39,7 @@ public void tearDown() throws Exception { int forwardNum = 0; int currentCoord = 3; - RaceCar rc = new RaceCar(currentCoord); + Car rc = new Car(currentCoord); rc.goCar(forwardNum); assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); @@ -51,7 +51,7 @@ public void tearDown() throws Exception { int randomNum = 4; int expectedGoCarVal = 1; - RaceCar rc = new RaceCar(); + Car rc = new Car(); assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); @@ -62,9 +62,8 @@ public void tearDown() throws Exception { int randomNum = 3; int expectedGoCarVal = 0; - RaceCar rc = new RaceCar(); + Car rc = new Car(); assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); - } } \ No newline at end of file From 5a9228fa0fc99819635cd8863d9021b200ce1244 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Wed, 9 Jan 2019 08:51:17 +0900 Subject: [PATCH 13/25] =?UTF-8?q?=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81=20/=2020190109?= =?UTF-8?q?=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/test/racingCar/blueprint.md | 15 +++-- tddExercise/test/racingCar/requirement.md | 71 ++++++++++++++++------- 2 files changed, 60 insertions(+), 26 deletions(-) diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index c664243..79d7308 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -3,9 +3,12 @@ ### 기능 요구사항 - 초간단 자동차 경주 게임을 구현한다. - 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. -- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- 사용자는 각 자동차에 이름을 붙일 수 있음 (자동차 이름은 쉼표(,)를 기준으로 구분) +- 자동차들이 총 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. - 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. -- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. +- 자동차의 상태를 화면에 출력한다. + - 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. + - 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. ### 프로그래밍 요구사항 - 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다. @@ -28,7 +31,11 @@ - 자동차 레인은 바뀌지 않음 - 자동차는 번호를 가지고 있지 않음 - 각 회차의 경주결과는 `--` 으로 나눔 - + + +### 도메인 설계 +- scapple로 하는 중 + ### 테스트케이스 리스트 RaceCar = 경주에 나온 car 객체 @@ -41,7 +48,7 @@ RacingGame = Game 객체 - goCar(0) - [x] 전진조건값이 4이상일때 전진값이 맞게 주어지는지 확인 - int random = 4 -> goCarValue = 1 -- [ ] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 +- [x] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 - //TODO 생성된 차가 각 회차마다 전진조건값을 전달받는지 확인 - 전달받는지 확인이 이상하다 그건 우리가 확인못하는뎅 diff --git a/tddExercise/test/racingCar/requirement.md b/tddExercise/test/racingCar/requirement.md index 91d3e17..37268e4 100644 --- a/tddExercise/test/racingCar/requirement.md +++ b/tddExercise/test/racingCar/requirement.md @@ -5,18 +5,27 @@ - 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다. - 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다. +- 각 자동차에 이름을 부여할 수 있다. 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. +- 자동차 이름은 쉼표(,)를 기준으로 구분한다. +- 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. + ## 요구사항 ### 기능 요구사항 - - 초간단 자동차 경주 게임을 구현한다. - 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다. -- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. +- 사용자는 각 자동차에 이름을 붙일 수 있음 (자동차 이름은 쉼표(,)를 기준으로 구분) +- 자동차들이 총 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다. - 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다. -- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다. +- 자동차의 상태를 화면에 출력한다. + - 전진하는 자동차를 출력할 때 자동차 이름을 같이 출력한다. + - 자동차 경주 게임을 완료한 후 누가 우승했는지를 알려준다. 우승자는 한명 이상일 수 있다. -### 프로그래밍 요구사항 +### 요구사항 분석 및 설계 +- 요구사항 분석을 통해 대략적인 설계 - 객체 추출 +- UI, DB 등과 의존관계를 가지지 않는 핵심 도메인 영역을 설계 +### 프로그래밍 요구사항 - 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다. - 규칙 2: else 예약어를 쓰지 않는다. - 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외 @@ -27,32 +36,50 @@ - 클래스 이름 예 : Rectangle, LaundryList, StudentDirectory - 변수 이름 예 : firstName, description, mediaController - 메소드 이름 예 : getFirstName(), cancelOrder(), isDeleted() + +### TDD 시작하기 +- 막연하다면 Out => In 방식으로 접근한다. 사용자가 어떠 어떠한 값을 입력할 때 어떤 결과가 나와야 한다에서 시작한다. +(Out => In 방식의 경우 시작 단계는 세세한 구현보다는 전체 구조에 대한 대략적인 틀을 잡는데 집중한다.) +- 객체의 상태(속성)보다는 행위에 집중한다 ## 실행 결과 - 위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. + ``` -자동차 대수는 몇 대 인가요? -3 -시도할 회수는 몇 회 인가요? +경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). +pobi,crong,honux + +시도할 회수는 몇회인가요? 5 ``` ### 실행 결과 ``` -- -- -- --- -- --- ---- --- ---- ----- ---- ----- ----- ----- ------ +실행 결과 +pobi : - +crong : - +honux : - + +pobi : -- +crong : - +honux : -- + +pobi : --- +crong : -- +honux : --- + +pobi : ---- +crong : --- +honux : ---- + +pobi : ----- +crong : ---- +honux : ----- + +pobi : ----- +crong : ---- +honux : ----- + +pobi, honux가 최종 우승했습니다 ``` \ No newline at end of file From 6a068d4cdce542d7209f00196b0296893e015f6d Mon Sep 17 00:00:00 2001 From: ohahohah Date: Fri, 11 Jan 2019 09:09:19 +0900 Subject: [PATCH 14/25] =?UTF-8?q?Add=20=EA=B0=9D=EC=B2=B4=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/test/racingCar/blueprint.md | 53 +++++++++++++++---------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 79d7308..42b6207 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -14,32 +14,45 @@ - 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다. - 규칙 2: else 예약어를 쓰지 않는다. - 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외 -- naming convention을 지키면서 프로그래밍한다. +- naming convention 을 지키면서 프로그래밍한다. ### 요구사항 분석 +- 게임 참여할 자동차 입력받음 (자동차 이름은 쉼표(,)를 기준으로 구분) - 주어진 횟수 입력 -- n대의 자동차 입력 -- 전진 옵션 -- 멈춤 옵션 -- 각 자동차마다 횟수당 random값(0~9) = 전진조건값 만듦 -- random값 출력 -- 전진조건값 >= 4 : 전진 -- 전진조건값 < 4 : 멈춤(머물러있음) -- 자동차의 상태를 화면에 출력한다. -- 어느 시점에 출력할 것인지에 대한 제약은 없다. - - 출력은 현재 자동차의 전진상태를 나타냄 - - 자동차 레인은 바뀌지 않음 - - 자동차는 번호를 가지고 있지 않음 - - 각 회차의 경주결과는 `--` 으로 나눔 - +- random Value에 따라 자동차의 위치가 변함 (전진,그대로 유지 옵션) + - 각 자동차마다 횟수당 random값(0~9)을 받음 = 전진조건값 만듦 + - 전진조건값 >= 4 : 전진 + - 전진조건값 < 4 : 멈춤(머물러있음) +- 자동차의 회차당 전진 상태를 화면에 출력 +- 게임 완료 후, 우승자 알려주기 ### 도메인 설계 -- scapple로 하는 중 +<> 게임 객체 ++ List Cars 레이싱게임에 참가하는 자동차들 ++ turn 전진횟수 ++ winner ++ startGame() //TODO 동사명 리팩토링 ++ doTurn() 해당 회차 게임 진행 ++ doGame() ++ printResult() ++ turnResult() -### 테스트케이스 리스트 +<> 자동차 경주에 참여하는 자동차 객체 +constructor: name ++ name ++ coord 현재 자동차 좌표 +- goCar() -RaceCar = 경주에 나온 car 객체 -RacingGame = Game 객체 + +### 테스트케이스 리스트 +- 게임 참여할 자동차 입력받음 (자동차 이름은 쉼표(,)를 기준으로 구분) +- 주어진 횟수 입력 +- random Value에 따라 자동차의 위치가 변함 (전진,그대로 유지 옵션) + - 각 자동차마다 횟수당 random값(0~9)을 받음 = 전진조건값 만듦 + - 전진조건값 >= 4 : 전진 + - 전진조건값 < 4 : 멈춤(머물러있음) +- 자동차의 회차당 전진 상태를 화면에 출력 +- 게임 완료 후, 우승자 알려주기 - [x] 입력받은 차 수만큼 car 객체를 생성하는지 확인 - [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 @@ -50,8 +63,6 @@ RacingGame = Game 객체 - int random = 4 -> goCarValue = 1 - [x] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 -- //TODO 생성된 차가 각 회차마다 전진조건값을 전달받는지 확인 - - 전달받는지 확인이 이상하다 그건 우리가 확인못하는뎅 #### 불필요 - 삭제 - ~자동차 수만큼 랜덤값을 만듦~ From a6fc13b35492724a08e6dc745ec02939c494a34d Mon Sep 17 00:00:00 2001 From: ohahohah Date: Fri, 11 Jan 2019 09:10:14 +0900 Subject: [PATCH 15/25] =?UTF-8?q?Update=20testcase=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=EC=9A=B4=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EA=B2=8C=20/=2020190111=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/test/racingCar/CarTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index 9caae45..0633e0c 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -16,9 +16,12 @@ public void setUp() throws Exception { public void tearDown() throws Exception { } + + //TODO 이름 입력받은 만큼으로 변경 @Test public void 입력받은_차_수만큼_car_객체를_생성하는지_확인() { - int inputCarNum = 3; + int inputCarNum = 3; //inputCar 입력함수로 변경? + RacingGame racingGame = new RacingGame(inputCarNum); assertEquals(inputCarNum, racingGame.rc.size()); } From 95428657e5815d8e5b2f33ccf31ae75a97eee754 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Mon, 14 Jan 2019 20:22:52 +0900 Subject: [PATCH 16/25] =?UTF-8?q?Update=20=EC=B6=94=EA=B0=80=20=EC=9A=94?= =?UTF-8?q?=EA=B5=AC=EC=82=AC=ED=95=AD=20/=2020190114=20Mornint=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/Car.java | 4 +- tddExercise/test/racingCar/CarTest.java | 31 +++++++------- tddExercise/test/racingCar/blueprint.md | 55 ++++++++++++++----------- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index 1b57684..c4b48d4 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -2,9 +2,11 @@ public class Car { + String name; int currentCoord; - public Car() { + public Car(String name) { + this.name = name; this.currentCoord = 0; } diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index 0633e0c..c6d0e00 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -8,12 +8,16 @@ public class CarTest { + Car rc = null; + @Before public void setUp() throws Exception { + rc = new Car("testCar"); } @After public void tearDown() throws Exception { + rc = null; } @@ -28,25 +32,26 @@ public void tearDown() throws Exception { @Test public void 전진값을_주어졌을떄_자동차의_현재_위치값이_변경됨() { - int forwardNum = 1; - int currentCoord = 3; + int firstForwardNum = 1; + int secondForwardNum = 3; - Car rc = new Car(currentCoord); + rc.goCar(firstForwardNum); + assertEquals(firstForwardNum, rc.getCurrentCoord()); - rc.goCar(forwardNum); - assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); + rc.goCar(secondForwardNum); + assertEquals(firstForwardNum+secondForwardNum, rc.getCurrentCoord()); } @Test public void 멈춤값이_주어졌을떄_자동차의_현재_위치값이_변경되지_않음() { - int forwardNum = 0; - int currentCoord = 3; - - Car rc = new Car(currentCoord); + int firstForwardNum = 0; + int secondForwardNum = 0; - rc.goCar(forwardNum); - assertEquals(forwardNum+currentCoord, rc.getCurrentCoord()); + rc.goCar(firstForwardNum); + assertEquals(firstForwardNum, rc.getCurrentCoord()); + rc.goCar(secondForwardNum); + assertEquals(firstForwardNum+secondForwardNum, rc.getCurrentCoord()); } @Test @@ -54,8 +59,6 @@ public void tearDown() throws Exception { int randomNum = 4; int expectedGoCarVal = 1; - Car rc = new Car(); - assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); } @@ -65,8 +68,6 @@ public void tearDown() throws Exception { int randomNum = 3; int expectedGoCarVal = 0; - Car rc = new Car(); - assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); } } \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 42b6207..ddadde7 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -31,7 +31,7 @@ + List Cars 레이싱게임에 참가하는 자동차들 + turn 전진횟수 + winner -+ startGame() //TODO 동사명 리팩토링 ++ setupGame() + doTurn() 해당 회차 게임 진행 + doGame() + printResult() @@ -43,7 +43,6 @@ constructor: name + coord 현재 자동차 좌표 - goCar() - ### 테스트케이스 리스트 - 게임 참여할 자동차 입력받음 (자동차 이름은 쉼표(,)를 기준으로 구분) - 주어진 횟수 입력 @@ -54,7 +53,10 @@ constructor: name - 자동차의 회차당 전진 상태를 화면에 출력 - 게임 완료 후, 우승자 알려주기 -- [x] 입력받은 차 수만큼 car 객체를 생성하는지 확인 +- [ ] 입력받은 차 수만큼 car 객체를 생성하는지 확인 + - string 자동차 이름들(`name01,name02,name03` 형태)로 자동차 정보 입력받음 +- [ ] 입력받은 차 이름으로 car 객체를 생성하는지 확인 //TODO 위 케이스와 중복되는지 고민 +- [ ] 주어진 횟수만큼 게임을 진행하는지 확인 - [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 - [x] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 @@ -65,6 +67,8 @@ constructor: name - int random = 3 -> goCarValue = 0 #### 불필요 - 삭제 +- 자동차의 회차당 전진 상태를 화면에 출력 // 출력 테스트 불가 +- 게임 완료 후, 우승자 알려주기 // 출력 테스트 불가 - ~자동차 수만큼 랜덤값을 만듦~ - 랜덤값은 테스트할 수 없음 - ~랜덤값이 0~9 사이인지 범위확인~ @@ -73,26 +77,31 @@ constructor: name - 예를 들어 잘못만들어서 2만 계속 나와도 이 테스트케이스는 통과가 되어버림 ### 실행 결과 -위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다. -자동차 대수는 몇 대 인가요? -3 -시도할 회수는 몇 회 인가요? -5 +``` 실행 결과 -- -- -- +pobi : - +crong : - +honux : - + +pobi : -- +crong : - +honux : -- + +pobi : --- +crong : -- +honux : --- + +pobi : ---- +crong : --- +honux : ---- + +pobi : ----- +crong : ---- +honux : ----- --- +pobi : ----- +crong : ---- +honux : ----- -- --- ---- --- ---- ----- ---- ----- ----- ----- ------ \ No newline at end of file +pobi, honux가 최종 우승했습니다 +``` \ No newline at end of file From cd3feafed4d7533f303d50abcca8917de37e522d Mon Sep 17 00:00:00 2001 From: ohahohah Date: Tue, 15 Jan 2019 08:12:34 +0900 Subject: [PATCH 17/25] =?UTF-8?q?Update=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20/=2020190115=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/test/racingCar/blueprint.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index ddadde7..2f4bbee 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -65,6 +65,8 @@ constructor: name - int random = 4 -> goCarValue = 1 - [x] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 +- [ ] 주어진 게임 회차만큼 진행하는지 확인 +- [ ] 게임 완료 후 우승자 정보를 맞게 가져오는지 확 #### 불필요 - 삭제 - 자동차의 회차당 전진 상태를 화면에 출력 // 출력 테스트 불가 From 5a534d86a838523866ca56bf68a5fd586272e526 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Tue, 15 Jan 2019 08:14:39 +0900 Subject: [PATCH 18/25] =?UTF-8?q?Add=20=EC=9E=85=EB=A0=A5=EB=B0=9B?= =?UTF-8?q?=EC=9D=80=20=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=EB=93=A4=EB=A7=8C=ED=81=BC=20=EC=9E=90=EB=8F=99=EC=B0=A8=20?= =?UTF-8?q?=EA=B0=9D=EC=B2=B4=20=EC=83=9D=EC=84=B1=20=ED=99=95=EC=9D=B8=20?= =?UTF-8?q?/=2020190115=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/test/racingCar/CarTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index c6d0e00..3e4222d 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -21,13 +21,12 @@ public void tearDown() throws Exception { } - //TODO 이름 입력받은 만큼으로 변경 @Test - public void 입력받은_차_수만큼_car_객체를_생성하는지_확인() { - int inputCarNum = 3; //inputCar 입력함수로 변경? + public void 입력받은_차_이름만큼_car_객체를_생성하는지_확인() { + String carNames = "car01,car02,car03"; - RacingGame racingGame = new RacingGame(inputCarNum); - assertEquals(inputCarNum, racingGame.rc.size()); + RacingGame racingGame = new RacingGame(carNames); + assertEquals(carNames.split(",").length , racingGame.carList.size()); } @Test From 5077cbc0d0dc821082066ef6670736fbbe5fd0a5 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Tue, 15 Jan 2019 08:15:39 +0900 Subject: [PATCH 19/25] =?UTF-8?q?Add=20=EC=83=9D=EC=84=B1=EC=9E=90,=20Refa?= =?UTF-8?q?ctoring=20name=20/=2020190115=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/RacingGame.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 7727196..6be4969 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -5,13 +5,18 @@ public class RacingGame { - List rc; + List carList; - public RacingGame(int carNum) { - rc = new ArrayList<>(); -// TODO 생성과 동시에 초기화 java8 사용해서 - for (int i = 0; i < carNum; i++) { - rc.add(new Car()); + public RacingGame(String carsName) { + carList = new ArrayList<>(); + + for(String carName : splitCarsName(carsName)){ + carList.add(new Car(carName)); } } + + private String[] splitCarsName(String carsName) { + String nameDelim = ","; + return carsName.split(nameDelim); + } } From 512ce946fcd8a144e81da380ae13c9ca423575b2 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Wed, 16 Jan 2019 08:05:29 +0900 Subject: [PATCH 20/25] Add testcase / 20190116 Morning TDD --- tddExercise/src/racingCar/Car.java | 6 +++++ tddExercise/src/racingCar/RacingGame.java | 14 +++++++++++ tddExercise/test/racingCar/CarTest.java | 30 ++++++++++++++++++++--- tddExercise/test/racingCar/blueprint.md | 6 +++-- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index c4b48d4..066d598 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -14,10 +14,16 @@ public Car(int currentCoord) { this.currentCoord = currentCoord; } + public String getName() { + return name; + } + public int getCurrentCoord() { return currentCoord; } + + public void goCar(int forwadNum) { this.currentCoord += forwadNum; } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 6be4969..53bc672 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -6,15 +6,29 @@ public class RacingGame { List carList; + int numOfSingleGame; public RacingGame(String carsName) { carList = new ArrayList<>(); + for(String carName : splitCarsName(carsName)){ + carList.add(new Car(carName)); + } + } + + public RacingGame(String carsName, int numOfSingleGame) { + this.numOfSingleGame = numOfSingleGame; + + carList = new ArrayList<>(); for(String carName : splitCarsName(carsName)){ carList.add(new Car(carName)); } } + public int getNumOfSingleGame() { + return numOfSingleGame; + } + private String[] splitCarsName(String carsName) { String nameDelim = ","; return carsName.split(nameDelim); diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index 3e4222d..a29a19c 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -23,10 +23,34 @@ public void tearDown() throws Exception { @Test public void 입력받은_차_이름만큼_car_객체를_생성하는지_확인() { - String carNames = "car01,car02,car03"; + String carsName = "car01,car02,car03"; + + RacingGame racingGame = new RacingGame(carsName); + assertEquals(carsName.split(",").length , racingGame.carList.size()); + } + + @Test + public void 입력받은_차_이름으로_car_객체를_생성하는지_확인() { + String carsName = "car01,car02,car03"; + RacingGame racingGame = new RacingGame(carsName); + + String[] carNames = carsName.split(""); + + for(int i = 0; i < carNames.length; i++){ + assertEquals(carNames[i],racingGame.carList.get(i).getName()); + } + } + + @Test + public void 주어진_횟수만큼_게임을_진행하는지_확인() { + int numberOfSingleGame = 3; + + String carsName = "car01,car02,car03"; + RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); + + assertEquals(numberOfSingleGame,racingGame.getNumOfSingleGame()); + - RacingGame racingGame = new RacingGame(carNames); - assertEquals(carNames.split(",").length , racingGame.carList.size()); } @Test diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index 2f4bbee..f6cbaa3 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -53,9 +53,9 @@ constructor: name - 자동차의 회차당 전진 상태를 화면에 출력 - 게임 완료 후, 우승자 알려주기 -- [ ] 입력받은 차 수만큼 car 객체를 생성하는지 확인 +- [x] 입력받은 자동차 이름 수만큼 car 객체를 생성하는지 확인 - string 자동차 이름들(`name01,name02,name03` 형태)로 자동차 정보 입력받음 -- [ ] 입력받은 차 이름으로 car 객체를 생성하는지 확인 //TODO 위 케이스와 중복되는지 고민 +- [x] 입력받은 차 이름으로 car 객체를 생성하는지 확인 - [ ] 주어진 횟수만큼 게임을 진행하는지 확인 - [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 @@ -68,6 +68,8 @@ constructor: name - [ ] 주어진 게임 회차만큼 진행하는지 확인 - [ ] 게임 완료 후 우승자 정보를 맞게 가져오는지 확 +//TODO CarTest 와 RacingGameTest 구분 + #### 불필요 - 삭제 - 자동차의 회차당 전진 상태를 화면에 출력 // 출력 테스트 불가 - 게임 완료 후, 우승자 알려주기 // 출력 테스트 불가 From 75c2264715eefd032854188bf9ff516411481076 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Mon, 21 Jan 2019 10:06:23 +0900 Subject: [PATCH 21/25] Update testcase / 20190121 Morning TDD --- tddExercise/src/racingCar/Car.java | 13 ++++++++--- tddExercise/src/racingCar/RacingGame.java | 11 ++++----- tddExercise/test/racingCar/CarTest.java | 27 +++++++++++++++++------ tddExercise/test/racingCar/blueprint.md | 8 +++++-- 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index 066d598..f13ddc2 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -23,12 +23,19 @@ public int getCurrentCoord() { } + public void goCar() { + this.currentCoord += calForwardCoord(getRandomVal()); + } + + public void goCar(int randomVal) { + this.currentCoord += calForwardCoord(randomVal); + } - public void goCar(int forwadNum) { - this.currentCoord += forwadNum; + private int getRandomVal() { + return (int)(Math.random() * 8 + 1); } - public int getForwardCoord(int randomVal) { + public int calForwardCoord(int randomVal) { return randomVal >=4? 1:0; } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 53bc672..25b67c1 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -8,13 +8,6 @@ public class RacingGame { List carList; int numOfSingleGame; - public RacingGame(String carsName) { - carList = new ArrayList<>(); - for(String carName : splitCarsName(carsName)){ - carList.add(new Car(carName)); - } - } - public RacingGame(String carsName, int numOfSingleGame) { this.numOfSingleGame = numOfSingleGame; @@ -29,6 +22,10 @@ public int getNumOfSingleGame() { return numOfSingleGame; } + + + + private String[] splitCarsName(String carsName) { String nameDelim = ","; return carsName.split(nameDelim); diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index a29a19c..7f422e4 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -22,19 +22,22 @@ public void tearDown() throws Exception { @Test - public void 입력받은_차_이름만큼_car_객체를_생성하는지_확인() { + public void 입력받은_자동차_이름_수만큼_car_객체를_생성하는지_확인() { String carsName = "car01,car02,car03"; + int gameNum = 2; - RacingGame racingGame = new RacingGame(carsName); + RacingGame racingGame = new RacingGame(carsName,2); assertEquals(carsName.split(",").length , racingGame.carList.size()); } @Test public void 입력받은_차_이름으로_car_객체를_생성하는지_확인() { String carsName = "car01,car02,car03"; - RacingGame racingGame = new RacingGame(carsName); + int gameNum = 2; - String[] carNames = carsName.split(""); + RacingGame racingGame = new RacingGame(carsName,2); + + String[] carNames = carsName.split(","); for(int i = 0; i < carNames.length; i++){ assertEquals(carNames[i],racingGame.carList.get(i).getName()); @@ -42,17 +45,27 @@ public void tearDown() throws Exception { } @Test - public void 주어진_횟수만큼_게임을_진행하는지_확인() { + public void 입력한_횟수만큼_게임진행회차정보를_가지는지_확인() { int numberOfSingleGame = 3; String carsName = "car01,car02,car03"; RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); assertEquals(numberOfSingleGame,racingGame.getNumOfSingleGame()); + } + + @Test + public void 주어진_게임_회차만큼_진행하는지_확인() { + + int numberOfSingleGame = 3; + assertEquals(numberOfSingleGame,3); + } + //TODO 게임전진 구현 + @Test public void 전진값을_주어졌을떄_자동차의_현재_위치값이_변경됨() { int firstForwardNum = 1; @@ -82,7 +95,7 @@ public void tearDown() throws Exception { int randomNum = 4; int expectedGoCarVal = 1; - assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); + assertEquals(expectedGoCarVal,rc.calForwardCoord(randomNum)); } @@ -91,6 +104,6 @@ public void tearDown() throws Exception { int randomNum = 3; int expectedGoCarVal = 0; - assertEquals(expectedGoCarVal,rc.getForwardCoord(randomNum)); + assertEquals(expectedGoCarVal,rc.calForwardCoord(randomNum)); } } \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index f6cbaa3..d0b9625 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -56,7 +56,10 @@ constructor: name - [x] 입력받은 자동차 이름 수만큼 car 객체를 생성하는지 확인 - string 자동차 이름들(`name01,name02,name03` 형태)로 자동차 정보 입력받음 - [x] 입력받은 차 이름으로 car 객체를 생성하는지 확인 -- [ ] 주어진 횟수만큼 게임을 진행하는지 확인 + +- [ ] 주어진 게임 회차만큼 진행하는지 확인 + - [ ] 입력한_횟수만큼_게임진행회차정보를_가지는지_확인 + - [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 - [x] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 @@ -65,9 +68,10 @@ constructor: name - int random = 4 -> goCarValue = 1 - [x] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 -- [ ] 주어진 게임 회차만큼 진행하는지 확인 - [ ] 게임 완료 후 우승자 정보를 맞게 가져오는지 확 + + //TODO CarTest 와 RacingGameTest 구분 #### 불필요 - 삭제 From 585209d0e7ff98c94ab72c93082851368147a469 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Wed, 23 Jan 2019 16:34:28 +0900 Subject: [PATCH 22/25] Update testcase(ing) / 20190123 Morning TDD --- tddExercise/src/racingCar/RacingGame.java | 17 ++++++ tddExercise/test/racingCar/CarTest.java | 63 +++++++++++++---------- 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 25b67c1..a24a3ac 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -8,6 +8,13 @@ public class RacingGame { List carList; int numOfSingleGame; +////+ winner +////+ setupGame() +//+ doTurn() 해당 회차 게임 진행 +//+ doGame() +//+ printResult() +//+ turnResult() + public RacingGame(String carsName, int numOfSingleGame) { this.numOfSingleGame = numOfSingleGame; @@ -22,8 +29,18 @@ public int getNumOfSingleGame() { return numOfSingleGame; } + public void doGame(){ + for(int i = 0; i Date: Thu, 24 Jan 2019 08:10:17 +0900 Subject: [PATCH 23/25] =?UTF-8?q?Update=20=EA=B2=8C=EC=9E=84=EC=A7=84?= =?UTF-8?q?=ED=96=89,=EC=B6=9C=EB=A0=A5=20=EA=B5=AC=ED=98=84=20/=202019012?= =?UTF-8?q?4=20Morning=20TDD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/Car.java | 1 + tddExercise/src/racingCar/RacingGame.java | 32 ++++++++++++++++------- tddExercise/test/racingCar/CarTest.java | 26 ++++++++++++++++-- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index f13ddc2..5196751 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -27,6 +27,7 @@ public void goCar() { this.currentCoord += calForwardCoord(getRandomVal()); } + //TODO remove this public void goCar(int randomVal) { this.currentCoord += calForwardCoord(randomVal); } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index a24a3ac..1011a8b 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -8,13 +8,6 @@ public class RacingGame { List carList; int numOfSingleGame; -////+ winner -////+ setupGame() -//+ doTurn() 해당 회차 게임 진행 -//+ doGame() -//+ printResult() -//+ turnResult() - public RacingGame(String carsName, int numOfSingleGame) { this.numOfSingleGame = numOfSingleGame; @@ -30,16 +23,35 @@ public int getNumOfSingleGame() { } public void doGame(){ - for(int i = 0; i Date: Fri, 25 Jan 2019 09:18:06 +0900 Subject: [PATCH 24/25] =?UTF-8?q?Add=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EA=B2=BD=EC=A3=BC=EA=B2=8C=EC=9E=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EA=B5=AC=ED=98=84=20-?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BC=80=EC=9D=B4=EC=8A=A4=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EB=B6=84=EB=A6=AC=20,=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20-=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20-=20TODO=EB=A1=9C=20=EC=A7=88=EB=AC=B8=20?= =?UTF-8?q?=EB=82=A8=EA=B8=B0=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tddExercise/src/racingCar/Car.java | 21 ++-- tddExercise/src/racingCar/RacingGame.java | 66 +++++++--- tddExercise/test/racingCar/CarTest.java | 93 ++------------ .../test/racingCar/RacingGameTest.java | 118 ++++++++++++++++++ tddExercise/test/racingCar/blueprint.md | 21 ++-- 5 files changed, 200 insertions(+), 119 deletions(-) create mode 100644 tddExercise/test/racingCar/RacingGameTest.java diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index 5196751..97059fa 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -1,9 +1,12 @@ package racingCar; +/** + * 자동차 경주에 참여하는 자동차 + */ public class Car { - String name; - int currentCoord; + private String name; + private int currentCoord; public Car(String name) { this.name = name; @@ -14,11 +17,11 @@ public Car(int currentCoord) { this.currentCoord = currentCoord; } - public String getName() { + String getName() { return name; } - public int getCurrentCoord() { + int getCurrentCoord() { return currentCoord; } @@ -27,8 +30,7 @@ public void goCar() { this.currentCoord += calForwardCoord(getRandomVal()); } - //TODO remove this - public void goCar(int randomVal) { + void goCar(int randomVal) { this.currentCoord += calForwardCoord(randomVal); } @@ -36,8 +38,13 @@ private int getRandomVal() { return (int)(Math.random() * 8 + 1); } - public int calForwardCoord(int randomVal) { + int calForwardCoord(int randomVal) { return randomVal >=4? 1:0; } + +// // TODO test용 생성 +// public void setCurrentCoord(int currentCoord) { +// this.currentCoord = currentCoord; +// } } diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 1011a8b..097815c 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -3,58 +3,86 @@ import java.util.ArrayList; import java.util.List; +/** + * 자동차 경주 게임 + */ public class RacingGame { List carList; - int numOfSingleGame; + private int turn; + private List winnersName; // TODO - car 객체가 더 나은지, 아니면 이름만? - public RacingGame(String carsName, int numOfSingleGame) { + public RacingGame(String carsName, int turn) { - this.numOfSingleGame = numOfSingleGame; + this.turn = turn; carList = new ArrayList<>(); - for(String carName : splitCarsName(carsName)){ + for (String carName : splitCarsName(carsName)) { carList.add(new Car(carName)); } } - public int getNumOfSingleGame() { - return numOfSingleGame; + int getTurn() { + return turn; } - public void doGame(){ - for(int i = 0; i < numOfSingleGame; i++){ - doSingleGame(); + public void doGame() { + for (int i = 0; i < turn; i++) { + doTurnGame(); } + + this.winnersName = calWinner(); //TODO - Is it better to use calWinner Void type? + printResult(); } - void doSingleGame() { - for(int i = 0; i < carList.size(); i++){ + void doTurnGame() { + for (int i = 0; i < carList.size(); i++) { carList.get(i).goCar(); } + printTurnResult(); } + List calWinner() { + + int maxCoord = 0; + List winnerNames = new ArrayList<>(); + + for (Car car : carList) { + if (car.getCurrentCoord() > maxCoord) { + maxCoord = car.getCurrentCoord(); + + winnerNames.clear(); // TODO test- vs new ArrayList() Is element size same compare to before ? + winnerNames.add(car.getName()); + + } else if (car.getCurrentCoord() == maxCoord) { + winnerNames.add(car.getName()); + } + } + + return winnerNames; + } + + private void printResult() { + System.out.println(String.join(", ", winnersName) + "가 최종우승했습니다."); + } + private void printTurnResult() { - for(int i = 0; i < carList.size(); i++){ + for (int i = 0; i < carList.size(); i++) { System.out.print(carList.get(i).getName() + " : "); printCurrentCoordLine(carList.get(i).getCurrentCoord()); - System.out.println(""); + System.out.println(); } - System.out.println(""); + System.out.println(System.lineSeparator()); } private void printCurrentCoordLine(int currentCoord) { - for(int i = 0; i < currentCoord; i++) { + for (int i = 0; i < currentCoord; i++) { System.out.print("-"); } } - private void printResult() { - } - - private String[] splitCarsName(String carsName) { String nameDelim = ","; return carsName.split(nameDelim); diff --git a/tddExercise/test/racingCar/CarTest.java b/tddExercise/test/racingCar/CarTest.java index ad4c0c5..4607e85 100644 --- a/tddExercise/test/racingCar/CarTest.java +++ b/tddExercise/test/racingCar/CarTest.java @@ -2,111 +2,43 @@ import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import static org.junit.Assert.assertEquals; public class CarTest { - Car rc = null; - int fowarddRandomVal = 5; - int stopRandomVal = 2; - int goOnceVal = 1; + private Car rc = null; + + private int fowarddRandomVal = 5; + private int stopRandomVal = 2; + private int goOnceVal = 1; @Before - public void setUp() throws Exception { + public void setUp() { rc = new Car("testCar"); } @After - public void tearDown() throws Exception { + public void tearDown() { rc = null; } - - @Test - public void 입력받은_자동차_이름_수만큼_car_객체를_생성하는지_확인() { - String carsName = "car01,car02,car03"; - int gameNum = 2; - - RacingGame racingGame = new RacingGame(carsName,2); - assertEquals(carsName.split(",").length , racingGame.carList.size()); - } - - @Test - public void 입력받은_차_이름으로_car_객체를_생성하는지_확인() { - String carsName = "car01,car02,car03"; - int numberOfSingleGame = 3; - - RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); - - String[] carNames = carsName.split(","); - - for(int i = 0; i < carNames.length; i++){ - assertEquals(carNames[i],racingGame.carList.get(i).getName()); - } - } - - @Test - public void 입력한_횟수만큼_게임진행회차정보를_가지는지_확인() { - int numberOfSingleGame = 3; - - String carsName = "car01,car02,car03"; - RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); - - assertEquals(numberOfSingleGame,racingGame.getNumOfSingleGame()); - } - - -//TODO 주어진_게임_회차만큼_진행하는지_확인 - @Test - @Ignore - public void 주어진_게임_회차만큼_진행하는지_확인() { - - int numberOfSingleGame = 3; - - assertEquals(numberOfSingleGame,3); - - } - - @Test - public void testDoGame() { - int numberOfSingleGame = 3; - - String carsName = "car01,car02,car03"; - RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); - - racingGame.doGame(); - - } - - @Test - public void testDoSingleGame() { - int numberOfSingleGame = 3; - - String carsName = "car01,car02,car03"; - RacingGame racingGame = new RacingGame(carsName,numberOfSingleGame); - - racingGame.doSingleGame(); - - } - @Test public void 전진조건값이_4이상일때_전진값이_맞게_주어지는지_확인() { - int randomNum = 4; + int randomNum = 4; int expectedGoCarVal = 1; - assertEquals(expectedGoCarVal,rc.calForwardCoord(randomNum)); + assertEquals(expectedGoCarVal, rc.calForwardCoord(randomNum)); } @Test public void 전진조건값이_4미만일때_전진값이_맞게_주어지는지_확인() { - int randomNum = 3; + int randomNum = 3; int expectedGoCarVal = 0; - assertEquals(expectedGoCarVal,rc.calForwardCoord(randomNum)); + assertEquals(expectedGoCarVal, rc.calForwardCoord(randomNum)); } @Test @@ -121,7 +53,7 @@ public void testDoSingleGame() { rc.goCar(fowarddRandomVal); int secondCurrentCoord = rc.getCurrentCoord(); - assertEquals(firstCurrentCoord + goOnceVal,secondCurrentCoord); + assertEquals(firstCurrentCoord + goOnceVal, secondCurrentCoord); } @Test @@ -138,5 +70,4 @@ public void testDoSingleGame() { assertEquals(firstCurrentCoord + 0, secondCurrentCoord); } - } \ No newline at end of file diff --git a/tddExercise/test/racingCar/RacingGameTest.java b/tddExercise/test/racingCar/RacingGameTest.java new file mode 100644 index 0000000..f093956 --- /dev/null +++ b/tddExercise/test/racingCar/RacingGameTest.java @@ -0,0 +1,118 @@ +package racingCar; + +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; + +public class RacingGameTest { + + private RacingGame racingGame = null; + + // TODO - Question - 공통 testcase value를 class field로 두어도 괜찮나? + private String carsName = "car01,car02,car03"; + private int turn = 3; + + @Before + public void setUp() { + racingGame = new RacingGame(carsName, turn); + } + + @After + public void tearDown() { + } + + + @Test + public void 입력받은_자동차_이름_수만큼_car_객체를_생성하는지_확인() { + + assertEquals(carsName.split(",").length, racingGame.carList.size()); + } + + @Test + public void 입력받은_차_이름으로_car_객체를_생성하는지_확인() { + + String[] carNames = carsName.split(","); + + for (int i = 0; i < carNames.length; i++) { + assertEquals(carNames[i], racingGame.carList.get(i).getName()); + } + } + + @Test + public void 입력한_횟수만큼_게임진행회차정보를_가지는지_확인() { + + assertEquals(turn, racingGame.getTurn()); + } + + + //TODO 주어진_게임_회차만큼_진행하는지_확인 + @Test + @Ignore + public void 주어진_게임_회차만큼_진행하는지_확인() { + + int numberOfSingleGame = 3; + + assertEquals(numberOfSingleGame, 3); + + } + + @Test + public void testDoGame() { + + racingGame.doGame(); + } + + @Test + public void testDoSingleGame() { + + racingGame.doTurnGame(); + } + + @Test + public void 우승자_정보를_맞게_가져오는지_확인_우승자_두명() { + AddCarsCoord(3, 2, 3); + List winners = Stream.of(racingGame.carList.get(0).getName(), racingGame.carList.get(2).getName()).collect(Collectors.toList()); + + assertEquals(winners, racingGame.calWinner()); + } + + @Test + public void 우승자_정보를_맞게_가져오는지_확인_우승자_한명() { + AddCarsCoord(1, 2, 3); + List winners = Stream.of(racingGame.carList.get(2).getName()).collect(Collectors.toList()); + + assertEquals(winners, racingGame.calWinner()); + } + + @Test + public void 우승자_정보를_맞게_가져오는지_확인_우승자_세명() { + AddCarsCoord(3, 3, 3); + List winners = Stream.of(racingGame.carList.get(0).getName(), racingGame.carList.get(1).getName(), racingGame.carList.get(2).getName()).collect(Collectors.toList()); + + assertEquals(winners, racingGame.calWinner()); + } + + private void AddCarsCoord(int firstCarCoord, int secondCarCoord, int thirdCarCoord) { + + int randomValForward = 5; + + for (int i = 0; i < firstCarCoord; i++) { + racingGame.carList.get(0).goCar(randomValForward); + } + + for (int i = 0; i < secondCarCoord; i++) { + racingGame.carList.get(1).goCar(randomValForward); + } + + for (int i = 0; i < thirdCarCoord; i++) { + racingGame.carList.get(2).goCar(randomValForward); + } + } +} \ No newline at end of file diff --git a/tddExercise/test/racingCar/blueprint.md b/tddExercise/test/racingCar/blueprint.md index d0b9625..660532e 100644 --- a/tddExercise/test/racingCar/blueprint.md +++ b/tddExercise/test/racingCar/blueprint.md @@ -29,11 +29,11 @@ ### 도메인 설계 <> 게임 객체 + List Cars 레이싱게임에 참가하는 자동차들 -+ turn 전진횟수 -+ winner -+ setupGame() -+ doTurn() 해당 회차 게임 진행 -+ doGame() ++ numOfSingleGame 전진횟수 ++ winner 우승자들 이름 + ++ doGame() ++ doTurnGame() 해당 회차 게임 진행 + printResult() + turnResult() @@ -53,13 +53,15 @@ constructor: name - 자동차의 회차당 전진 상태를 화면에 출력 - 게임 완료 후, 우승자 알려주기 +#### RacingGame Test - [x] 입력받은 자동차 이름 수만큼 car 객체를 생성하는지 확인 - string 자동차 이름들(`name01,name02,name03` 형태)로 자동차 정보 입력받음 - [x] 입력받은 차 이름으로 car 객체를 생성하는지 확인 - - [ ] 주어진 게임 회차만큼 진행하는지 확인 - - [ ] 입력한_횟수만큼_게임진행회차정보를_가지는지_확인 + - [x] 입력한_횟수만큼_게임진행회차정보를_가지는지_확인 +- [x] 우승자 정보를 맞게 가져오는지 확인 +#### Car Test - [x] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨 - goCar(3) -> car.coord =+ 3 - [x] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음 @@ -68,11 +70,6 @@ constructor: name - int random = 4 -> goCarValue = 1 - [x] 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인 - int random = 3 -> goCarValue = 0 -- [ ] 게임 완료 후 우승자 정보를 맞게 가져오는지 확 - - - -//TODO CarTest 와 RacingGameTest 구분 #### 불필요 - 삭제 - 자동차의 회차당 전진 상태를 화면에 출력 // 출력 테스트 불가 From cc88f85539afc602db5649cb0dfc74be57d769a2 Mon Sep 17 00:00:00 2001 From: ohahohah Date: Sat, 16 Feb 2019 10:44:42 +0900 Subject: [PATCH 25/25] [WIP] Add racing car TDD --- tddExercise/src/racingCar/Car.java | 9 ++--- tddExercise/src/racingCar/Race.java | 5 +++ tddExercise/src/racingCar/RacingGame.java | 20 +++++++++++ .../test/racingCar/RacingGameTest.java | 33 +++++++++++-------- 4 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 tddExercise/src/racingCar/Race.java diff --git a/tddExercise/src/racingCar/Car.java b/tddExercise/src/racingCar/Car.java index 97059fa..42959cc 100644 --- a/tddExercise/src/racingCar/Car.java +++ b/tddExercise/src/racingCar/Car.java @@ -35,16 +35,11 @@ void goCar(int randomVal) { } private int getRandomVal() { - return (int)(Math.random() * 8 + 1); + return (int) (Math.random() * 8 + 1); } int calForwardCoord(int randomVal) { - return randomVal >=4? 1:0; + return randomVal >= 4 ? 1 : 0; } - -// // TODO test용 생성 -// public void setCurrentCoord(int currentCoord) { -// this.currentCoord = currentCoord; -// } } diff --git a/tddExercise/src/racingCar/Race.java b/tddExercise/src/racingCar/Race.java new file mode 100644 index 0000000..707b2b5 --- /dev/null +++ b/tddExercise/src/racingCar/Race.java @@ -0,0 +1,5 @@ +package racingCar; + +public class Race { + +} diff --git a/tddExercise/src/racingCar/RacingGame.java b/tddExercise/src/racingCar/RacingGame.java index 097815c..9edf315 100644 --- a/tddExercise/src/racingCar/RacingGame.java +++ b/tddExercise/src/racingCar/RacingGame.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Scanner; /** * 자동차 경주 게임 @@ -27,6 +28,12 @@ int getTurn() { } public void doGame() { + + String carNamee = scanCarNames(); + int turn = scanTurn(); +// 경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분). +// 시도할 회수는 몇회인가요? + for (int i = 0; i < turn; i++) { doTurnGame(); } @@ -36,6 +43,19 @@ public void doGame() { printResult(); } + private int scanTurn() { + return 0; + } + + private String scanCarNames() { + Scanner scan = new Scanner(System.in); // 문자 입력을 인자로 Scanner 생성 + System.out.println("경주할 자동차 이름을 입력하세요(이름은 쉼표(,)를 기준으로 구분)."); + + System.out.println("메시지를 입력하세요:"); + + return scan.nextLine(); + } + void doTurnGame() { for (int i = 0; i < carList.size(); i++) { carList.get(i).goCar(); diff --git a/tddExercise/test/racingCar/RacingGameTest.java b/tddExercise/test/racingCar/RacingGameTest.java index f093956..ccbafb6 100644 --- a/tddExercise/test/racingCar/RacingGameTest.java +++ b/tddExercise/test/racingCar/RacingGameTest.java @@ -4,20 +4,36 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import static org.junit.Assert.assertEquals; +@RunWith(Parameterized.class) public class RacingGameTest { + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[][]{ + {"car01,car02,car03", 3}}); + } + private RacingGame racingGame = null; - // TODO - Question - 공통 testcase value를 class field로 두어도 괜찮나? - private String carsName = "car01,car02,car03"; - private int turn = 3; + private String carsName; + private int turn; + + public RacingGameTest(String carsName, int turn) { + this.carsName = carsName; + this.turn = turn; + + } @Before public void setUp() { @@ -52,24 +68,15 @@ public void tearDown() { } - //TODO 주어진_게임_회차만큼_진행하는지_확인 @Test @Ignore - public void 주어진_게임_회차만큼_진행하는지_확인() { - - int numberOfSingleGame = 3; - - assertEquals(numberOfSingleGame, 3); - - } - - @Test public void testDoGame() { racingGame.doGame(); } @Test + @Ignore public void testDoSingleGame() { racingGame.doTurnGame();