체스 판 표현 단위 테스트


9

그래서 이것은 약간 특이한 질문입니다.

본질적으로 처음부터 체스 라이브러리를 작성하고 있습니다. GUI 및 / 또는 엔진에 사용하려는 의도로 여기 에서 많은 코드를 찾을 수 있습니다 . (게임은 그랜드 체스이지만이 질문의 목적 상 실제로는 중요하지 않습니다.)

현재 내 기능이 예상대로 작동하는지 확인하기 위해 단위 테스트를 작성하고 있습니다. 그리고 내가 사용하고 작업 할 수있는 테스트 할 위치에 대한 일종의 라이브러리 또는 데이터베이스가 Checkmate, Stalemate, Check, Legal, Illegal 등으로 분류되어 있는지 궁금합니다.

tl; dr 내 코드를 단위로 테스트 할 위치 목록을 찾고 있습니다.

여기에서 현재 테스트를 찾을 수 있으며 며칠마다 추가됩니다. 그러나 코드를 디버깅하기 전에 테스트가 철저한 지 확인하고 싶습니다. (그들 중 절반은 현재 실패합니다).

편집 : 명확히하기 : 나는 엔진 ( "최고의 이동") 테스트를 찾고 있지 않습니다 . 보드 표현 ( "이 위치 점검"입니다) 테스트를 찾고 있습니다. 엔진 테스트를 위해 몇 가지 퍼즐이 준비되어 있습니다.


변형을 코딩하고 있습니다. 표준 체스 데이터 세트가 작동하지 않습니다. 그래서 당신이 혼자서 두렵습니다.
SmallChess

@StudentT 나는 시작할 수있는 것을 찾고있다. 알다시피, 내가 편집 할 수 있기 때문에 일반 데이터베이스는 잘 작동합니다.
asibahi

1
그러한 테스트 세트가 많이 있습니다. 표준 체스에서의 왜곡, 전술 연습과 같은 것에 만족하십니까?
SmallChess

@StudentT Google을 통해 아무것도 찾을 수 없으므로 여기에 묻는 이유가 있습니다. 모든 정보가 도움이 될 것입니다.
asibahi

테스트하려는 것은 보드 표현과 거의 관련이 없습니다. 이동을하거나 위치를 변경 한 후 보드 표현을 테스트하고 싶을 것입니다. 메이트 / 스탈 메이트를 감지하려면 평가 기능이 필요하며 합법성에 대한 위치 테스트는 보드 표현을 확인하는 것보다 훨씬 더 많은 기능을 수행해야합니다.
Queeg

답변:


1

귀하의 질문을 읽을 때, 내 직감은 단위 테스트에 스코프가 너무 복잡하다는 것입니다. 무료 전자 책 Unit Testing 간결하게 읽어 보는 것이 좋습니다. 그러나 나는 체스 코드를 작성 한 경험이 없다.

단위 테스트는 매우 간단해야하며 단일 작업을 수행하는 기능을 테스트해야합니다. 그런 다음 기능이 작동 할 것이라는 합리적인 기대와 기능을 결합 할 수 있습니다. 예를 들어, 각 부분에 대한 단위 테스트를 통해 특정 이동이 합법적인지 판단 할 수 있습니다. 킹을 점검하고 있는지 확인하기 위해 각 조각에 대한 단위 테스트. 공격하는 위치 등을 결정하기 위해 각 조각에 대한 테스트

위치 테스트는 매우 복잡한 단위 테스트처럼 보이고 철저하게 수행하기가 훨씬 더 어려울 것입니다. 대신 작은 기능에 대해 작은 테스트를 작성한 다음 개별적으로 작동한다는 것을 알고 있습니다. 위치를 평가하는 것은 단순한 기능을 반복하는 것입니다.

좋은 (강제되지 않은) 움직임에 대한 위치를 테스트하려면 단위 테스트가 체스 엔진의 장기 개발 및 강도를 인위적으로 제한 할 것입니다 ... 단위 테스트의 이진 결과는 엔진이 매번 같은 움직임.

또한 알려진 최종 게임을 가진 메이트에게 '가장 직접적인'경로에 대한 단위 테스트를 추가하는 방법도 살펴 봅니다. 알려진 개구부를 통과하는 단위 테스트를 추가하려고합니다. 미드 게임 유닛 테스트는 훨씬 더 어려울 것입니다. 어쩌면 위치를 막고 엔진이 유용한 결과 (이진 반응)를 산출하는지 평가할 수 있습니다.

엔진의 위치를 ​​평가하는 문제에 대해서는 "chess"태그를 사용하여 https://stackoverflow.com/ 에이 질문을 추가하는 것이 훨씬 좋습니다 .


답변 해주셔서 감사합니다. 그러나 질문 아래의 주석 대화에서 알 수 있듯이 엔진 알고리즘을 테스트하지는 않습니다. 나는 아직 그 사람들에게도 도달하지 못했습니다. 나는 내 코드 가 보드스탠딩 포지션 이 체크 메이트인지, 아니면 교착 상태인지, "법적인 움직임을 세는 것"과 왕이 체크하고 있는지 여부를 인식하는지 테스트하려고합니다 . 사실 그 질문을 게시 한 후 단위 테스트 사례로 사용할 소규모 직책을 작성했습니다. 나는 그것을 대답으로 게시 할 수 있습니다. (나는 누군가가 이것에 대한 현상금을 제공하는 것에 놀랐다, tbh.)
asibahi

이것은 질문에 대답하지 않습니다.
SmallChess

1
또한 단위 테스트에 대한 메모는 잘못되었습니다.
SmallChess

@asibahi 나는 그 의견 섹션에 게시 할 충분한 담당자가 없으므로 답변을 추가해야했습니다. 이 질문으로 프로그래밍 포럼 (스택 교환)에서 더 잘 봉사 할 것이라고 생각합니다. 그러나이 의견에서 ... 당신은 이미 개별 단위 테스트를 식별했습니다-> 각 조각 테스트마다 합법적 인 움직임이 있습니다. 반복하여 각 조각에 대해 false를 반환하면 교착 상태이거나 점검중인 검사원입니다. 이를 위해 방대한 직책이 필요하지 않습니다. 각 조각의 현재 상태를 개별적으로 테스트하면 여러 조각을 반복하여 위치를 평가할 수 있습니다.
Paul

0

이것은 오래된 질문이지만이 블로그에 제시된 개념이 유용 할 것이라고 생각했습니다 : http://scionsoftware.com/blog/write-tests-by-playing-chess

아이디어는 GUI에서 체스 게임을하고 파일로 직렬화하여 체스 보드의 상태를 캡처하는 메커니즘을 가지고 있다는 것입니다.

테스트 사례별로 해당 파일의 이름을 지정하고 정의한 테스트 방법에 파일을 제공 할 수 있습니다. IsCheckmate; IsLegal; IsDraw

자연스러운 UI를 사용하여 이러한 테스트 사례를 작성하려는 주된 이유 중 하나는 작성이 용이하지 않은 범위에서 충분한 조건이 이동 계수 (캐스팅, 동반자, 드로우 조건)에 의존하기 때문입니다.


0

나는 체스 엔진 (일반적으로)에 대한 단위 테스트 데이터베이스를 모른다. 그렇다. 완전한 단위 테스트를 작성하는 것은 거의 불가능하다.

속성 기반 테스트 (Haskell의 QuickCheck, F # 환경은 확실하지 않지만 F #의 경우와 유사 함)와 같은 대체 테스트 기술을 탐색하여 대량의 "위치"를 자동으로 생성하고 테스트 할 수 있습니다. 귀하가 정의한 재산 사용.

희망이 조금 도움이 될 것입니다 :)!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.