Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] exercise_자동차 경주게임 실습 #118

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/exercise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: exercise issue template
about: 실습 업데이트용 이슈 템플릿.

---
## Description
//언제, 어디서, 무엇을
- 20190000~20190000 오전에 자동차경주게임 실습하고 회고 중심으로 이야기 나눈 로그

## Reference
// 책, article link
- [책 - TDD 실천법과 도구, 채수원 저](https://repo.yona.io/doortts/blog/issue/1)
- [책 - 테스트 주도 개발 - 켄트 벡 저](http://www.insightbook.co.kr/book/ppp-시리즈/테스트-주도-개발)

## CheckList
- [ ] issue title 형식 지킴? (log_간략주제 , e.g. log_3장_로그 / 책 읽고 로그 남기는 내용은 책 진도 단위로 함)
- [ ] assignees , labels 확인하기
- [ ] issue body는 issue body만 확인하고도 모르는 사람도 내용을 파악할 수 있을 정도로 적었는가? (무엇을,언제,어디서)
- [ ] reference가 있을 경우 해당 정보를 적었는가?
- [ ] PR 하지않고 바로 작업했을 경우 commit hash값을 comment해서 해당 작업내용을 기록 // 해당되지 않으면 이 항목 삭제
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/log.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ about: 로그 업데이트용 이슈 템플릿.
---
## Description
//언제, 어디서, 무엇을
- 20180000~20180000 오전에 TDD- 켄트벡 책 00장 읽고 이야기 나눈 로그
- 20190000~20190000 오전에 TDD- 켄트벡 책 00장 읽고 이야기 나눈 로그

## Reference
// 책, article link
Expand Down
3 changes: 2 additions & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## Description
// 어떤 PR인지 설명_언제, 어디서, 무엇을
- 20180000 오전에 TDD- 켄트벡 책 00장 읽고 이야기 나눈 로그
- 20190000 오전에 TDD- 켄트벡 책 00장 읽고 이야기 나눈 로그
- 20190000 오전에 자동차 경주게임 실습 로그

## Related Tickets
// 관련 issue 넘버 적어주세요 (#00)
Expand Down
80 changes: 80 additions & 0 deletions target/classes/racingCar/blueprint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
## 요구사항

### 기능 요구사항
- 초간단 자동차 경주 게임을 구현한다.
- 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.
- 사용자는 몇 대의 자동차로 몇 번의 이동을 할 것인지를 입력할 수 있어야 한다.
- 전진하는 조건은 0에서 9 사이에서 random 값을 구한 후 random 값이 4이상일 경우이다.
- 자동차의 상태를 화면에 출력한다. 어느 시점에 출력할 것인지에 대한 제약은 없다.

### 프로그래밍 요구사항
- 메소드가 너무 많은 일을 하지 않도록 분리하기 위해 노력해 본다.
- 규칙 2: else 예약어를 쓰지 않는다.
- 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외
- naming convention을 지키면서 프로그래밍한다.

### 요구사항 분석
- 주어진 횟수 입력
- n대의 자동차 입력
- 전진 옵션
- 멈춤 옵션
- 각 자동차마다 횟수당 random값(0~9) = 전진조건값 만듦
- random값 출력
- 전진조건값 >= 4 : 전진
- 전진조건값 < 4 : 멈춤(머물러있음)
- 자동차의 상태를 화면에 출력한다.
//20180913 목 여기까지 했습니다 뀨
- 어느 시점에 출력할 것인지에 대한 제약은 없다.
- 출력은 현재 자동차의 전진상태를 나타냄
- 자동차 레인은 바뀌지 않음
- 자동차는 번호를 가지고 있지 않음
- 각 회차의 경주결과는 `--` 으로 나눔

### 테스트케이스 리스트
- [ ] 전진값을 주어졌을떄 자동차의 현재 위치값이 변경됨
- goCar(3) -> car.coord =+ 3
- [ ] 멈춤값을 주어졌을떄 자동차의 현재 위치값이 변경되지 않음
- goCar(0)? stopCar()?
- [ ] 전진조건값이 4이상일때 전진값이 맞게 주어지는지 확인
- int random = 4 -> goCarValue = 1
- 전진조건값이 4미만일때 전진값이 맞게 주어지는지 확인
- int random = 3 -> goCarValue = 0
- 입력받은 차 수만큼 car 객체를 생성하는지 확인
- //TODO 생성된 차가 각 회차마다 전진조건값을 전달받는지 확인
- 전달받는지 확인이 이상하다 그건 우리가 확인못하는뎅
- ~자동차 수만큼 랜덤값을 만듦~
- 랜덤값은 테스트할 수 없음
- ~랜덤값이 0~9 사이인지 범위확인~
- 우린 랜덤값 확인 못함
- 테스트케이스를 만들려면 언제나 일정한 값이 나와야 옳은 테스트케이스인지 확인가능
- 예를 들어 잘못만들어서 2만 계속 나와도 이 테스트케이스는 통과가 되어버림






### 실행 결과
위 요구사항에 따라 3대의 자동차가 5번 움직였을 경우 프로그램을 실행한 결과는 다음과 같다.
자동차 대수는 몇 대 인가요?
3
시도할 회수는 몇 회 인가요?
5
실행 결과
-
-
-

--

-
--
---
--
---
----
---
----
----
----
-----
52 changes: 52 additions & 0 deletions target/classes/racingCar/requirement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
진행 방법

자동차 경주 게임에 대한 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
실행 결과
-
-
-
--
-
--
---
--
---
----
---
----
----
----
-----
1 / 2
50 changes: 50 additions & 0 deletions target/classes/stringCaculator/blueprint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
## 요구사항
* 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환
- (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
* 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다.
- 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
- 예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
* 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다.

## 1.요구사항 분석
- 쉼표(,) 또는콜론(:)을구분자로가지는문자열
- 구분자를기준으로분리한각숫자의합을반환
- 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다

### 옵션 구현
- 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//” 와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다.

## 2. 테스트케이스 리스트 작성
- [x] 문자열에 쉼표나 콜론이 존재하는지 확인
- [x] 구분자_형식이_맞지_않으면_RuntimeException을_던지는지_확인
- [x] 구분자를 제외한 문자열이 숫자가_아닌_문자면_RuntimeException을_던지는지_확인
- [x] 숫자이외의 값 또는 음수가 입력문자열인 경우 RuntimeException 예외를 throw하는지 확인(가:나:다)
- [x] 구분자 형식이 맞는지 (3:::2:4) (위 테스트케이스로 통합됨 )
- [x] 기본 구분자문자열에서 숫자를 제대로 파싱하는지 확인
- [x] 덧셈을 제대로 하는지 확인
- [x] 입력값에 대한 덧셈계산을 제대로 하는지 확인(인수테스트)
- [x] parseValidation_입력문자열이 null일때 RuntimeException을 throw하는지 확인
- 입력문자열이 뭐여? String input = null; ~String[] intputs = null;~
- parsing할떄 입력문자열 validation : isBAsicParse(null) -> validation

### 옵션구현
- [ ] 커스텀 구분자 양식이 맞는지 확인
- “//;\n1;2;3” 형태인지 확인
- [ ] 입력한 커스텀구분자를 제대로 인식하는지 확인
- “//;\n1;2;3” -> ';' 나오는지 확인
- [ ] 커스텀 구분자를 맞게 파싱했는지 확인
- inputs 숫자배열 나오는지 확인
- [ ] 커스텀구분자 외 입력문자열이 숫자이외의 값 또는 음수가 입력문자열인 경우 RuntimeException 예외를 throw하는지 확인
- [ ] parseValidation_커스텀구분자가 숫자이면 RuntimeException 예외를 throw하는지 확인












18 changes: 11 additions & 7 deletions tddExercise/test/stringCaculator/AddCaculationTest.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
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;
Expand Down Expand Up @@ -62,7 +61,7 @@ public void tearDown() throws Exception {
public void 기본_구분자문자열에서_숫자String를_제대로_파싱하는지_확인_정상값() {
String inputs = "3,4,3";
String[] inputParseResult = ac.isBasicParseNumber(inputs);

assertArrayEquals(new String[] { "3", "4", "3" }, inputParseResult);
}

Expand All @@ -77,14 +76,19 @@ public void tearDown() throws Exception {
String[] inputs = ac.isBasicParseNumber("3,4,5");
assertEquals(12, ac.sum(inputs));
}

@Test(expected = java.lang.RuntimeException.class)
public void parseValidation_입력문자열이_null일때_RuntimeException을_throw하는지_확인() {
String[] inputs = null;
ac.isBasicParseNumber(null);
}




@Test
public void 브랜치테스트(){
assertEquals(1,1);
}




}