'봄싹 3기/퀴즈'에 해당되는 글 6건

  1. 2009.04.09 TDD 퀴즈들 (1)
  2. 2009.03.23 이번 주 연구 과제 (10)
  3. 2009.02.04 세 번째 퀴즈 입니다. 볼링 게임~
  4. 2009.01.14 두 번째 퀴즈: 야구게임 (3)
  5. 2009.01.06 퀴즈 풀 때 주의 할 것 (16)
  6. 2009.01.05 TDD 퀴즈 1. 비디오 샵 (7)
2009. 4. 9. 11:11

TDD 퀴즈들

http://sites.google.com/site/tddproblems/all-problems-1

위 링크에 가시면 TDD 퀴즈들이 올라와 있습니다. 괜찮은 듯 합니다. 심심할 때 마다 하나씩 해보세요~
Trackback 0 Comment 1
  1. is윤군 2009.04.09 11:41 신고 address edit & del reply

    볼링 문제도 있네요 ;;ㅋㅋ

2009. 3. 23. 10:22

이번 주 연구 과제

코딩 퀴즈만 푸는데 너무 지치신 것 같아서 이번엔 다른 퀴즈를 드립니다. 정답은 저도 몰라요. 방금 사부님한테 받은 과제인데 여러분과 함께 고민하고 싶습니다. 이번 주 토요일까지 각자 연구해오고 오프라인에서 각자 연구 결과를 공유해보아요~~~

그럼 대화의 일부분을 그대로 올려드리겠습니다.

tobyilee:
JUnit의 @Before가 왜 필요한지 알아?
백기선: 흠.. @_@
tobyilee: 매 테스트 마다 새로 인스턴스를만드는데
왜 구지 @Before를 써서 초기화 할까?
그냥 인스턴스 변수에 넣거나
백기선: 생성자 역할을 대신하는걸까요
tobyilee: 생성자 써도 되는데
왜일까?
백기선: 생성자를 쓰면 안되는 이유가 있으려나
tobyilee: 니네 스터디에서 한번 토론해 보셧
백기선:
tobyilee: JUnit이 매 테스트마다 인스턴스를 통채로 만드는 건 알지?
백기선: 네 그건 알죠
tobyilee: 근데 왯
@Before를 쓸까나
백기선: 흠..
tobyilee: 이걸 가지고 junit 씹는 인간들도 제법 있지
연구해보셈
백기선:

Trackback 0 Comment 10
  1. is윤군 2009.03.23 14:27 신고 address edit & del reply

    @Before 가 모져? '';; ㅋ

    • 기선 2009.03.23 14:31 신고 address edit & del

      왜이래 아마추어같이..

      public void setUp() 이랑 비슷한거자나.

    • is윤군 2009.03.23 15:34 신고 address edit & del

      헛;; 진지한 답변에.. 완전 아마추어 되버렸네용;;ㅋ OTL... ;;

    • 기선 2009.03.24 08:32 address edit & del

      뭐 이런 시덥잖은 장난을 ㅋㅋㅋ

  2. bluecodea 2009.03.27 10:28 address edit & del reply

    갑자기 처음부터 죄송합니다만..
    매 테스트 마다 새로 인스턴스를만드는데 ->
    @Test 테스트를 시킬때마다 새로운 인스턴트를 만든다는건 아니지요?

    • is윤군 2009.03.27 10:59 신고 address edit & del

      Test 가 실행될때마다 새로이 인스턴스가 생성되욥;

  3. bluecodea 2009.03.28 01:16 address edit & del reply

    어허라 그렇네요.. 생성자에 쓰질 않아서 아무생각 없었는데...
    그럼 상속관계에서 After와 함께 쓸때 호출순서가 지켜지니 편리하다 정도밖에 모르겠네요..
    토론 결과 나오면 올려주시면 감사하겠습니닷~~

  4. 박성철 2009.03.30 10:49 address edit & del reply

    질문의 요지가 생성자를 쓰지 않고 Setup()또는 @Before를 쓰는 이유인가요? 테스트를 독립적으로 격리 시키는 것으로 TDDBE에 설명되어 있는 것 말고 다른 뭔가가 있나요? 그냥 그렇게만 생각하고 암 생각없이 쓰고 있는... -_-);

    • 기선 2009.03.30 14:27 신고 address edit & del

      @Before를 쓴다고 해서 테스트가 격리 되지는 않죠. ^^;

      이미 JUnit의 내부 구조가 테스트를 별도의 인스턴스로 격리되어 있기 때문에 생성자를 쓰거나 필드에서 new를 사용해서 초기화 해도 @Before를 사용하는 것과 비슷한 효과가 나는데, 굳이 @Before를 사용해야 하는 이유가 무얼까에 대한 고민이었습니다.

  5. 박성철 2009.04.01 10:16 address edit & del reply

    생성나 필드 초기화를 쓰면 인스턴스 생성시 1회 초기화가 일어나기 때문에 테스트간 격리가 안된다는 뜻으로 테스트 격리를 말씀 드린 것인데... 뭔가 이 말은 너무 기초적이고 논점은 다른 곳에 있나봐요? -_-)a (앞으로는 지각하지 말아야지...)

2009. 2. 4. 20:50

세 번째 퀴즈 입니다. 볼링 게임~

목표

볼링점수를 계산하는 프로그램을 작성

볼링점수계산

계산법참고

  • Stike인 경우는 다음 두번 투구수의 점수를 합한다. 따라서 이후 두번 더 투구할 때까지 strike한 프레임의 점수는 계산되지 않는다.
  • Spare인 경우는 다음 한번 투구스의 점수를 합한다. 따라서 이후 한번 더 투구할 때까지 spare한 프레임의 점수는 계산되지 않는다.
  • 마지막 프레임의 경우는 위의 두가지 조건을 만족하기 위해서 Stike이면 2번, Spare면 한번의 투구가 가능하다.

요구사항

  • 볼링게임(BowlingGame)클래스의 인스턴스를 만들면 새 게임이 시작한 것으로 간주한다.(명시적인 start는 필요없음)
  • 현재 몇번째 프레임의 몇번째 투구(첫번~세번째)를 할 차례인 조회해 볼 수 있다. 게임이 끝났으면 GameOverException을 던진다.
    (Frame번호 + 그 프레임의 시도횟수)
  • 현재까지 진행된 프레임결과와 각 프레임 점수를 보여준다. 확정되지 않은 점수는 표시하지 않아도 된다.
    결과는 현재프레임을 포함해서 진행한 프레임(Frame)갯수만큼의 리스트를 리턴하도록 한다.
    각 프레임에는 프레임번호와 결과스트링(X/-1~9)과 그 프레임의 점수를 돌려준다.

ex)
Frame(1, 08, 8)
Frame(2, X, 15)
Frame(3, 5-, 5)
...
Frame(10, XXX, 30)

기호)
Stike : X
Spare : /
Gutter: -
그외 : 0~9

  • 한번 투구를 하는 메소드(roll)를 만들고 쓰러뜨린 핀의 수를 파라메터로 넘긴다. 게임이 끝났으면 GameOverException을 던진다.
Trackback 0 Comment 0
2009. 1. 14. 22:26

두 번째 퀴즈: 야구게임

목적

숫자야구게임용 엔진개발

숫자야구게임룰

컴퓨터는 미리 3개의 1~9사이의 숫자를 가지고 있다. (ex. 1 3 5)
사용자는 컴퓨터가 가지고 있는 숫자를 정확히 맞춰야 한다.
사용자는 미리 지정된 만큼의 횟수동안 시도할 수 있다. 지정된 횟수까지 시도해서도 맞추지 못하면 "out"이다.
사용자는 매번 3개의 숫자를 넣고 컴퓨터는 미리 가지고 있는 3개의 숫자와 비교해서 다음의 응답을 해야한다.
1) 3개의 숫자가 맞고 위치도 맞으면 "hit"
2) 1)이 아닐경우 입력한 숫자가 컴퓨터가 가지고 있는 숫자 중의 하나이고 그 위치도 맞으면 strike가 1씩 올라간다.
예를 들어 컴퓨터의 숫자가 1 3 5인데 사용자가 입력한 숫자가 2 3 4이면 "1 strike"이고 2 3 5를 입력했다면 "2 strikes"이다.
3) 숫자는 맞으나 위치가 다르면 ball이 1씩 올라간다. "1 ball", "2 balls", "3 balls"

예) 컴퓨터의 숫자 1 3 5
1 2 3 => "1 strike 1 ball"
5 1 3 => "0 strike 3 balls"
1 5 3 => "1 strike 2 balls"
6 7 8 => "0 strike 0 ball"
1 3 6 => "2 strikes 0 ball"
1 3 5 => "hit"

요구사항

  • BaseballGame클래스를 메인클래스로 작성한다. 완성된 코드는 여러개의 클래스로 구성해도 상관없다.
  • 게임은 여러번 진행할 수 있다.
  • 게임을 시작하기 위해서는 컴퓨터가 가진 숫자와 최대 시도횟수가 등록되어있어야 한다.
  • 게임이 시작되면 이번에 몇번째 게임인지 정보를 돌려준다.
  • 2번째 게임부터의 컴퓨터의 숫자는 이전 게임에서 사용한 것과 동일한 것을 쓸 수 없다. 단 최대 시도횟수는 같아도 상관없다.
  • 게임이 종료되는 것은 "hit" 또는 "out"되었을 때이다.
  • 게임이 종료된 후 다시 게임을 시작하기 전에는 게임을 시도할 수 없다.
  • 게 임 중에는 게임의 현재 상태를 요청할 수 있다. 게임상태는 최대시도가능 횟수, 현재 시도한 횟수, 그리고 현재까지의 최고기록의 정보를 돌려준다. 최고기록은 strike는 3점, ball은 1점으로 계산해서 그 중 최고점수를 가진 시도의 정보(몇번째시도 와 시도한 숫자)를 돌려준다. 최고기록이 같은 경우가 2번이상 있으면 모두 돌려준다.
  • 게임의 최고기록을 요청하면 지금까지 진행된 게임중 가장 적은 시도로 맞춘 결과(시도횟수)를 보여준다. 게임의 최고기록을 요청하는 것은 게임이 종료된 이후에만 가능하며 한번도 게임을 시도하지 않았으면 결과를 요청할 수 없다.
  • 모든 단서조항(...한다, ...할 수 없다, ...일경우는)에 위배되는 경우는 적절한 Exception을 던져야 한다.
  • 각 결과는 적절한 형태로(String 또는 임의의 Object) 리턴되면 된다(화면에 출력될 필요는 없다. 엔진이니까. UI는 이번 엔진을 이용해서 나중에 따로 개발할 것이다)

야구게임 엔진을 만든다는 기분으로...
Trackback 0 Comment 3
  1. is윤군 2009.01.14 23:21 신고 address edit & del reply

    난이도가 올라가 보이네욥;;ㅋㅋ

  2. 김재진 2009.01.15 08:17 신고 address edit & del reply

    야구게임이라 예전에 ibm dw 에서 물개선생님 글을 보고 시도해 볼 까 몇번 생각했던 거네요 야구게임 ㅎㅎ 어려울 것 같지만 재밌겠네요.. 리뷰 끝내고 시작해야겠습니다 ㅎ

  3. 소내기 2009.01.17 22:50 address edit & del reply

    http://sonegy.egloos.com/tag/%EC%95%BC%EA%B5%AC%EA%B2%8C%EC%9E%84 예전에 한번 풀어봤는데요. 블로그에는 다 정리를 못했네요. 이번에 한번 다시 처음부터 해봐야겠네요.

2009. 1. 6. 09:46

퀴즈 풀 때 주의 할 것

1. task 먼저 작성할 것.

- 미리 자신이 테스트 하고자 하는 것을 한 문장으로 작성하세요. 그걸로 작업 단위를 조절할 수 있습니다. 미리 모든 task를 정리하진 않으셔도 됩니다. 조금씩 계속 점진적으로 수정하고 추가해 나가세요.

- 퀴즈에 있는 요구 사항이 task로 1:1로 맵핑 되진 않습니다. 각자가 요구 사항을 읽고 자신만의 task를 만들어 보세요.

2. 절대로 머리속으로 미리 설계하지 않는다.

- 테스트를 성공시키기 위한 코드만 작성하세요. 그리고나서 리팩터링을 하다보면 자연스럽게 멋진 설계가 나온다나... 어쩐다나~

- 그래야 TDD의 묘미를 맛 볼 수 있다고 하네요. 아마 이 것이 가장 힘든 일이 아닌가 싶습니다. 기존에 경험이 많으신 분들은 딱 보면 딱 뭔가 떠오르기 때문에.. 생각을 많이 하지 않는 연습이 필요할 것 같습니다.

3. 한 task가 끝나면 커밋한다.

- 그래야 과정을 볼 수 있습니다. 중간 중간 어떤 단위로 작업을 했는지 코드가 어떤 식으로 발전했는지 말이죠. 물론 더 세세하게 커밋을 해도 됩니다. 테스트 코드만 작성한 다음 커밋한다던지.. 리팩터링 하기 전이랑 후의 코드를 볼 수 있게 커밋한다던지..

- 어쨋든 최소한 한 task 마다 커밋 한 번은 꼭 해주세요.

4. 퀴즈를 여러번 풀어보세요.

- 매번 비슷하지만 약간 다른 코드가 나오거나 전혀 다른 코드가 나올 수도 있습니다. 피드백을 받은 다음에 다시 해봐도 좋지만 그 전에도 여러번 해보면 해볼 수록 새로운 맛을 느낄 수 있을 겁니다.

5. 퀴즈를 다 풀었다!

- 글을 올려주세요. 요즘 댓글이 너무 많이 달려서 댓글을 다 챙겨보기가 힘듭니다. 아예 새로운 글을 올려서 자신이 어떤 퀴즈를 풀었으며 느낌이 어땠는지 저장소 주소가 어떻게 되며 프로젝트 이름은 무엇인지 프로젝트 빌드에 필요한 정보가 있다면 그런 정보도 알려주시면 좋겠죠?(메이븐 프로젝트라면 메이븐이 필요하다고 알려주시구요. 프로젝트에서 사용한 인코딩이 무엇인지 UTF-8인지 EUC-KR인지. 등등)


Trackback 0 Comment 16
  1. 김재진 2009.01.06 09:54 신고 address edit & del reply

    하루치분량을 커밋했는데 커밋단위를 잘게 쪼개야 겠네요 리뷰하는 분들을 생각을 못했네요 -_-;

    • 기선 2009.01.06 09:57 신고 address edit & del

      그럴땐 지우고 다시 해야 돼. 알았지? 캬캬캬캬

    • is윤군 2009.01.06 10:19 신고 address edit & del

      규칙위반..ㅋㅋ 지우삼..ㅋㅋ

    • 김재진 2009.01.06 10:23 신고 address edit & del

      아직 진도가 많이 나간건 아니니 그냥 가지 머..안되나 ?응응응응?

    • 기선 2009.01.06 10:26 신고 address edit & del

      농담이지 그냥 가..ㅋ

  2. Hoyeol 2009.01.06 10:12 신고 address edit & del reply

    마침 오늘 아침에 버스에서 그생각을 하면서 왔습니다.
    TDD를 해보고 결과물은 리팩토링이 되어서 최종본 소스코드만 본다면 의미가 좀 떨어질수 있겠다는, 그러니까 과정이 중요한데 그걸 넘겨버릴수 있다는 생각이 들었었는데
    기선이형이 바로 해당이슈를 정리해서 올려주셨네요~ ㅎㅎ

  3. is윤군 2009.01.06 10:18 신고 address edit & del reply

    TDDBE책 머니 예제게 끝나고 정리 하는 장 보면 ... Junit 로그를 남겨서 나중에 통계도 보던데;;ㅋ
    우리도 ~ ㅋㅋ 다음 퀴즈부터 테스트 한 로그까지 남기고 .. ㅋ 로그까지 같이 올리는건 어떨지.. ;ㅋ
    기선이형네 회사 서버 빵빵하다고 들었는데;;ㅋㅋ로그까지는 무린가 ?ㅋㅋ

    • 기선 2009.01.06 10:25 신고 address edit & del

      나 그거 어떻게 하는지 모르는데??
      블로그에 포스팅 좀 해봐봐~

  4. kwlee 2009.01.06 21:18 신고 address edit & del reply

    2. 절대로 머리속으로 미리 설계하지 않는다.
    전 이게 너무 어렵네요...
    무의식중에 머리속에 그려진대로 테스트를 그에 맞춰가고 있는듯 하네요...
    경험도 많지 않은데 왜이렇지..--;;
    이렇다 보니
    4. 퀴즈를 여러번 풀어보세요.
    이게 필요할듯 하네요...
    과연 시간이 허락 될 지는 모르겠지만...

    퀴즈 풀다보니 내용이 아주 공감대서 글좀 남겨봤어요..^^

    • 기선 2009.01.07 10:10 신고 address edit & del

      넹 이런 느낀점들을 공유하는 것도 이번 스터디의 일부죠.

    • is윤군 2009.01.07 13:09 신고 address edit & del

      머리속으로 미리 설계를 하지 않는다라는 말은..
      분석/설계 -> 개발 이런형태의 설계를 의미 하는 거겠죠?ㅋ 미리 전체를 다 설계 해놓고~ 거기 설계에 맞춰서하지말라는 거 아닐까요 ?ㅋ TODO를 작성하면서 머리속으로 목표와 나아가야 할 방향은 생각하며 작성해야 할 듯한데욥;; ㅋ 혹시 머리속에 그려진게;; ㅋ 목표와 방향이 맞다면~ 대박 나실듯;;ㅋㅋ

  5. 김재진 2009.01.07 13:37 신고 address edit & del reply

    머리속에 미리 설계를 하지 않는다. 그리고 task를 먼저 작성한다. 이게 가장어렵네요. 나도 모르게 테스트 보단 클래스를 생각하고 있습니다. 부실한 todo list는 부적합한 클래스로 바로 드러나네요.기존의 작업을 백업하고 todo list 자체를 리팩토링 해서 퀴즈를 다시 풀어야겠어요.

    • is윤군 2009.01.07 14:12 신고 address edit & del

      우와~ 벌써 하나는 한번 다 풀었다는것인가? 대박인데~; 난 아직 시작도 못했는데ㅋ TDD문서보다가 파이썬에 혹해서;;ㅋ 달려달려~;;ㅋ

    • is윤군 2009.01.07 18:45 신고 address edit & del

      다지웠네 ㅡㅡ;; 님좀짱인듯;;

    • 김재진 2009.01.07 18:47 신고 address edit & del

      다 못풀었어 ㅋㅋ
      60%정도 했다 생각했는데 리팩토링을 할려고 보니 리팩토링을 한다 해도 이게 TDD에 맞나 싶어서 todolist부터 제대로 작성하는 습관을 고쳐애 겠다 싶어서..

    • is윤군 2009.01.07 19:16 신고 address edit & del

      그래도 하는게 어디야;;ㅋ 시작도 못한 사람도 있는데ㅜㅜ 그나저나 리뷰를 준비하는 분들은 ;; 언제 리뷰준비를 시작 할 수 있을까나-? 리뷰하는 분을 위해서 1주만에 문제를 풀어야 하는건가;;ㅋㅋ

2009. 1. 5. 09:34

TDD 퀴즈 1. 비디오 샵

목적

비디오방에서 고객이 대여하는 비디오의 대여정보를 조회할 수 있는 프로그램을 작성

요구사항

  • 고객(Customer)은 이름을 가지고 있다.
  • 고객은 한번에 여러개의 비디오를 대여할 수 있으나 각각의 대여(Rental)기간은 다를 수 있다.
  • 비디오(Video)는 영화,스포츠,다큐멘타리의 세종류가 있다.
  • 각각의 비디오는 독립적인 일일 대여요금을 가지고 있다.
  • 영화는 대여기간이 2일 이상되면 3일째 부터는 대여요금이 1/2로 할인된다.
  • 다큐멘타리는 3일 이상 대여하면 4일째 부터는 1/3로 할인된다.
  • 스포츠는 장기대여 할인이 없다.
  • 비디오 1개 대여할 때 마다 보너스포인트는 1포인트씩 올라간다. 단, 스포츠는 2포인트씩 올라간다.
  • 과거의 대여기록을 가지고 있을 필요는 없으나 고객이 얻은 총 보너스 포인트 정보는 알고 있어야 한다.
  • 고객(Customer)의 현재 대여정보를 구할 수 있는 기능을 작성하라
    • 총 대여비디오 수
    • 대여정보: 비디오(종류 + 제목 + 가격), 대여기간 리스트
    • 총대여가격
    • 현재 대여하고 있는 비디오로 인해서 추가된 포인트수

조건

  • 예외상황에 대한 처리는 필요없다.
  • 반드시 TDD의 순서에 따라서 작업할 것
  • 테스트할 목록을 직접 정의한다(txt파일에 정리할 것)
  • 한개의 테스트 메소드 작업이 끝날때마다 commit하도록 한다. 이때 테스트 목록에서 작업한 내용은 체크해서 올린다.



Trackback 0 Comment 7
  1. 기선 2008.12.28 17:10 신고 address edit & del reply

    이 글은 비공개입니다. 아직 원저자에게 허락을 못 받았습니다. 퍼가지 말아주세요~

    • 기선 2009.01.05 09:36 신고 address edit & del

      공개 허락을 받았습니다.
      이제 열심히 풀어주세요. 아.. 저장소 세팅해야겠군요.

  2. is윤군 2008.12.28 21:39 신고 address edit & del reply

    쿄쿄;; 갑자기 라이브코딩을 하려니;; 의외로 머리가 멍해지더라구요;;ㅋ
    오늘 몇개의 TODO 리스트 ㅋㅋ 잼났네요~ㅋㅋ 3기 스터디 .. 기대 기대;;ㅋ

  3. Hoyeol 2008.12.28 22:02 신고 address edit & del reply

    그저 덜덜덜..;;
    스터디는 제게 항상 자극이 됩니다 ㅋㅋ

  4. 김재진 2008.12.29 08:50 신고 address edit & del reply

    드디어 이번주 부터 TDD로 스터디가 전환됬나 보네요 ~ 화이팅입니다.

  5. dazzi 2009.01.08 09:49 신고 address edit & del reply

    이거 다 풀었다고.. 칼부림 부탁한다고.. 어디에다 개시하면 될까나요? ㅡㅡㅋ
    "퀴즈풀었어요~" 카테고리 하나 만들어 주심도 괜찮을것 같아요. ㅎㅎ

    • 기선 2009.01.08 10:02 신고 address edit & del

      리뷰요청 카테고리 만들었어요.
      거기에 올려주세요~