2009-01-07 5 views
2

나에게서 TDD에 대한 또 다른 질문. 나는 TDD에 관한 몇 가지 기사와 책의 장을 읽었으며 TDD를 사용해야하는 이유와 간단한 예제를 이해할 수 있지만, 현실 세계에서 이것을 시도 할 때 나는 매우 쉽게 붙어있는 것처럼 보인다.TDD Spider Solitaire

Windows Vista와 함께 제공되는 잘 알려진 Spider Solitaire를 프로그래밍하려면 간단한 TDD 예제를 제공 할 수 있습니까? 어떤 테스트를 시작할 것인가?

답변

0
  1. 목록 거미 카드 점의 특징은 [내가 카드 게임을 재생되지 않습니다]
  2. 당신이 각각
  3. 기능 테스트 할 방법을 설명합니다 당신에 대해 요구하고 그것을
3

음을 수행 스파이더 카드 놀이를위한 TDD는 기본적으로 그런 게임을 어떻게 디자인해야 하는지를 묻습니다. 테스트는 설계 결정의 결과 일 것입니다. 솔리테어는 단순한 게임이지만 처음부터 그러한 게임을 디자인하는 것은 결코 쉬운 일이 아닙니다 (여러 가지 방법이 있습니다).

숫자 추측 게임 (시스템에서 임의의 숫자를 생성하고 가능한 한 적은 횟수 만 추측하려고하는 경우)처럼 훨씬 간단하게 설계를 시작하는 것이 좋습니다. 이러한 간단한 게임의

일부 기능은 다음과 같습니다

  1. 기능은 1과 10 사이에 무작위로 비밀 번호를 생성하는 새 번호를 생성하는 새로운 게임을 시작합니다.
  2. 기능은 (플레이어의 입력이 숫자보다 높거나 낮은 지 여부 비교, 또는 추측 잘
  3. 기능에 있는지 추측
  4. 당신이이 테스트를 시도 할 수 있다는에서

의 수를 계산 조잡한 예제이지만 쉽게 코드화 할 수 있습니다.)

  1. 발전기를 1000 번 실행하십시오. 매번 secret_number >= 1 && secret_number <= 10을 확인하십시오.
  2. 숫자 세트 (무작위로 생성됨)의 경우 number > secret_number 일 때 "HIGH"를 반환하고 number < secret_number 일 경우 "LOW"를 반환하고 number == secret_number 일 때 "WIN"을 반환합니까?
  3. 이전 테스트를 반복하되 테스트하는 항목의 수를 추적하십시오. "WIN"이 반환되면 카운터 기능이 테스트의 항목 수와 일치하는지 확인하십시오.

이것은 매우 대략적인 개요이며 결코 완료되지 않습니다. 그러나 영어 설명을 보면 코드 예제가 더욱 장황해질 것입니다. 더 구체적인 답변을 원한다면 좀 더 구체적인 질문을해야한다고 생각합니다.

+0

"secret_number> = 1"이 아니어야합니까? – guerda

3

카드 놀이에는 카드가 관련되어 있습니다.

그래서 카드 클래스를 생각해보십시오. 개별 Card 객체에 대한 몇 가지 테스트를 작성합니다. 카드 클래스를 작성하여 테스트를 통과하십시오.

레이아웃을 뒤섞어 다루는 데크가 필요합니다. 당신은 Deck 클래스와 셔플 알고리즘을 생각하고 처리 상태를 어떻게 유지하는지 생각해보십시오. 셔플하고 거래하는 덱에 대한 몇 가지 테스트를 작성합니다. 시험에 합격하기 위해 덱 클래스를 작성합니다. [참고로, 실제로 무작위가 아닌 모의 난수 생성기가 필요합니다.]

솔리테어 게임에는 공백과 카드가있는 레이아웃이 포함됩니다. 규칙의 일부 빈 공간 (왕만 또는 에이스 전용). Solitaire 게임에는 때로는 갑판의 잔존물이 포함됩니다.

그래서 카드 용 공백이있는 레이아웃 클래스를 생각해보십시오. 레이아웃에 대한 몇 가지 테스트를 작성하고 다양한 카드를 넣습니다. 테스트를 통과하기 위해 Layout 클래스를 작성합니다.

그런 다음 레이아웃에서 어떤 카드를 이동할 수 있는지에 대한 규칙이 있습니다. 전체 스택, 하위 스택, 최고 카드 등. AllowedMove 또는 GameState 또는 이러한 클래스가 있습니다. 같은 훈련. 대략하는 일을 정의하고, 시험을 치고, 반을 끝내십시오.

사용자 인터페이스 및 표시 장치가 있습니다. 드릴은 동일합니다.

  1. 대략적인 클래스입니다.

  2. 테스트를 정의하십시오.

  3. 클래스를 마칩니다.

나는 OO Design에 관한 책에서 자세하게 다루 등.

2

먼저 엔진과 GUI를 분리해야합니다 (). GUI를 TDDing하는 것은 가장 어려운 부분이므로 가능한 한 GUI 레이어를 얇게 유지해야합니다. "겸손한 대화 상자"에 대한 Google은 tddui list on Yahoo! groups을 읽습니다.

엔진 계층은 게임 규칙을 구현합니다.

  • 당신은 할 수 있습니다 여기에

    내가부터 시작됩니다 초기 테스트 목록입니다 : 내가 스파이더 카드 놀이는 고대 일인 어떻게 다른지 확실하지 않다 (즉 윈도우 3.1에서)하는 나는 다음을 기반으로 항상 카드를 빈 스택으로 이동
  • 카드에 값이 있고 카드와 비교할 수 있습니다.
  • 맨 위에있는 카드가 이동 된 카드보다 낮 으면 비어 있지 않은 스택으로 만 카드를 이동할 수 있습니다
  • 항상 여러 카드를 빈 스택으로 이동할 수 있습니다.
  • 상단의 카드가 이동 된 카드보다 낮을 때만 비어 있지 않은 스택으로 이동할 수 있습니다.
  • 모든 카드를 스택에서 옮기면 맨 위 카드를 반환 할 수 있습니다 자동 도크에서 첫 번째 카드를 취할 수
  • )? 반환에 넣어에 any 스택 (?)

I'me이 규칙에 대한 확신이 점점하지만이 얻을 정도로 생각 아이디어.

마지막으로, 가장 간단한 테스트로 시작하거나, 새로운 테스트 아이디어가있을 때 목록에 테스트를 추가하거나 자신이 질문하는 것을 발견했을 때 어떻게됩니까?