การทดสอบหน่วยการเป็นตัวแทนกระดานหมากรุก


9

นี่เป็นคำถามที่ค่อนข้างผิดเพี้ยน

ฉันกำลังเขียนห้องสมุดหมากรุกโดยเริ่มจากศูนย์ คุณสามารถค้นหารหัสได้มากที่นี่ด้วยความตั้งใจที่จะใช้มันสำหรับ GUI และ / หรือเอ็นจิ้น (เกมนี้เป็นเกมหมากรุกแกรนด์ แต่สำหรับวัตถุประสงค์ของคำถามนี้มันไม่สำคัญเลย)

ฉันกำลังเขียนการทดสอบหน่วยเพื่อตรวจสอบว่าฟังก์ชั่นของฉันทำงานได้ตามที่คาดไว้ และฉันสงสัยว่ามีห้องสมุดหรือฐานข้อมูลของตำแหน่งที่แนะนำเพื่อทดสอบที่ฉันสามารถใช้และทำงานได้หรือไม่โดยจัดหมวดหมู่ว่าพวกเขาเป็น Checkmate, Stalemate, Check, Legal, Illegal เป็นต้น

tl; dr ฉันกำลังมองหารายการของตำแหน่งที่จะทดสอบหน่วยรหัสของฉันกับ

คุณสามารถค้นหาการทดสอบปัจจุบันของฉันที่นี่ฉันเพิ่มให้พวกเขาทุกสองสามวัน อย่างไรก็ตามฉันต้องการตรวจสอบให้แน่ใจว่าการทดสอบครบถ้วนสมบูรณ์ก่อนที่ฉันจะทำการดีบักรหัส (ครึ่งหนึ่งของพวกเขาล้มเหลวในขณะนี้)

แก้ไข: ชี้แจง: ฉันไม่ได้มองหาการทดสอบของเครื่องยนต์ ("ย้ายที่ดีที่สุด") ฉันกำลังมองหาการเป็นตัวแทนคณะกรรมการ ("คือตำแหน่งรุกฆาต") การทดสอบ ฉันมีปริศนาอยู่สองสามข้อสำหรับการทดสอบเครื่องยนต์


คุณกำลังเขียนรหัสตัวแปร ชุดหมากรุกมาตรฐานจะไม่ทำงานสำหรับคุณ ดังนั้นฉันจึงกลัวว่าคุณจะอยู่คนเดียว
SmallChess

@ นักเรียนฉันกำลังมองหาสิ่งที่ฉันสามารถเริ่มต้นจาก ฐานข้อมูลปกติจะทำได้ดีเพราะคุณรู้ว่าฉันสามารถแก้ไขได้
asibahi

1
มีชุดทดสอบหลายชุดคุณมีความสุขกับการทำแบบ perft การฝึกยุทธวิธีในหมากรุกมาตรฐานหรือไม่?
SmallChess

@ นักเรียนฉันไม่สามารถหาอะไรผ่าน Google ดังนั้นทำไมฉันถึงถามที่นี่ ข้อมูลใด ๆ จะเป็นประโยชน์
asibahi

สิ่งที่คุณต้องการทดสอบมี tp เล็ก ๆ น้อย ๆ เกี่ยวกับการเป็นตัวแทนของบอร์ด คุณจะต้องทดสอบการเป็นตัวแทนคณะกรรมการหลังจากทำการย้ายหรือถอนการย้ายตำแหน่งหรือนำเข้าตำแหน่ง การตรวจจับคู่ / ทางตันต้องการฟังก์ชั่นการประเมินผลและการทดสอบตำแหน่งเพื่อความถูกต้องตามกฎหมายควรเป็นฟังก์ชั่นของตัวเองซึ่งมีมากขึ้นกว่าการทำเครื่องหมายกระดาน
Queeg

คำตอบ:


1

เมื่ออ่านคำถามของคุณปฏิกิริยาตอบสนองของฉันคือขอบเขตของคุณซับซ้อนเกินไปสำหรับการทดสอบหน่วย ฉันแนะนำให้อ่านอย่างรวดเร็วผ่านการทดสอบหน่วย e-book ฟรีสั้น ๆ อย่างไรก็ตามฉันไม่มีประสบการณ์ในการเขียนรหัสหมากรุก (อาจเป็นกระบวนทัศน์ของคุณแตกต่าง) - แม้ว่าฉันจะทำซอฟต์แวร์เพื่อการใช้ชีวิต

การทดสอบหน่วยควรจะง่ายมากและทดสอบฟังก์ชั่นที่ทำสิ่งเดียว จากนั้นคุณสามารถรวมฟังก์ชั่นเข้ากับความคาดหวังที่สมเหตุสมผลว่าจะใช้งานได้ ตัวอย่างเช่นฉันคาดว่าการทดสอบหน่วยสำหรับแต่ละชิ้นเพื่อตรวจสอบว่าการย้ายเฉพาะถูกกฎหมาย การทดสอบหน่วยสำหรับแต่ละชิ้นเพื่อตรวจสอบว่ามีการวางพระราชาในการตรวจสอบ การทดสอบสำหรับแต่ละชิ้นเพื่อระบุว่ามันถูกโจมตี ฯลฯ

การทดสอบตำแหน่งดูเหมือนเป็นการทดสอบหน่วยที่ซับซ้อนมากและจะทำได้ยากกว่ามาก แทนที่จะเขียนการทดสอบที่เล็กลงสำหรับฟังก์ชั่นที่มีขนาดเล็กแล้วรู้ว่าการทำงานแต่ละอย่าง - การประเมินตำแหน่งเป็นเพียงการวนซ้ำของฟังก์ชั่นที่เรียบง่าย

หากคุณต้องการทดสอบตำแหน่งสำหรับการเคลื่อนที่ที่ดี (ไม่บังคับ) ฉันคิดว่าการทดสอบหน่วยนั้นจะ จำกัด การพัฒนาในระยะยาวและความแข็งแกร่งของเครื่องมือหมากรุกของคุณ ... ผลไบนารีของการทดสอบหน่วยจะบังคับเครื่องยนต์ของคุณให้ทำการทดสอบ ย้ายกันทุกครั้ง

ฉันยังดูที่การเพิ่มการทดสอบหน่วยสำหรับเส้นทางที่ 'ตรงที่สุด' ไปยังเพื่อนด้วย endgames ที่รู้จัก ฉันต้องการเพิ่มหน่วยทดสอบสำหรับการสำรวจผ่านช่องเปิดที่รู้จักเช่นกัน การทดสอบยูนิตเกมกลางจะยากขึ้นมาก - อาจเสียบอยู่ในตำแหน่งและประเมินว่าเอ็นจิ้นสร้างผลลัพธ์ที่ใช้ได้ (ซึ่งเป็นการตอบสนองแบบไบนารี่)

สำหรับคำถามของการประเมินชุดตำแหน่งสำหรับเครื่องยนต์ของคุณคุณสามารถทำได้ดีกว่าวางคำถามนี้ไว้ที่https://stackoverflow.com/ด้วยแท็ก "หมากรุก"


ขอบคุณสำหรับคำตอบ. อย่างไรก็ตามอย่างที่คุณสามารถบอกได้จากการสนทนาความคิดเห็นภายใต้คำถามฉันไม่ต้องการทดสอบอัลกอริทึมของเครื่องยนต์ ฉันยังไม่ได้ไปถึงที่ ฉันต้องการทดสอบว่ารหัสของฉันรับรู้หรือไม่ว่าตำแหน่งที่ยืนอยู่บนกระดานเป็นรุกฆาตหรือจนมุมหรือไม่ซึ่งก็คือ "แค่" การนับการเคลื่อนไหวทางกฎหมายหรือไม่และกษัตริย์อยู่ในการตรวจสอบหรือไม่ ในความเป็นจริงตั้งแต่ฉันโพสต์คำถามที่ฉันไปเพื่อรวบรวมชุดเล็ก ๆ ของตำแหน่งเพื่อใช้เป็นกรณีทดสอบหน่วย ฉันอาจโพสต์นั้นเป็นคำตอบ (ฉันประหลาดใจอย่างสมบูรณ์มีคนเสนอรางวัลสำหรับ tbh นี้.)
asibahi

สิ่งนี้ไม่ตอบคำถาม
SmallChess

1
นอกจากนี้บันทึกเกี่ยวกับการทดสอบหน่วยเป็นเพียงผิด
SmallChess

@asibahi ฉันมีตัวแทนไม่เพียงพอที่จะโพสต์ในส่วนความคิดเห็นนั้นดังนั้นฉันต้องเพิ่มคำตอบ ฉันคิดว่าคุณจะได้รับบริการที่ดีขึ้นในฟอรัมการเขียนโปรแกรม (stackexchange) กับคำถามนี้ แต่ในความคิดเห็นนี้ ... คุณได้ระบุการทดสอบแต่ละหน่วย -> สำหรับการทดสอบแต่ละชิ้นจะมีการเคลื่อนไหวทางกฎหมาย หากวนซ้ำที่ส่งกลับเท็จสำหรับแต่ละชิ้นคุณมีทางตันหรือรุกฆาตถ้าคุณอยู่ในการตรวจสอบ คุณไม่จำเป็นต้องมีตำแหน่งมากมายให้ทำเช่นนั้น ด้วยการทดสอบแต่ละชิ้นแยกกันสำหรับสถานะปัจจุบันคุณสามารถวนซ้ำหลาย ๆ ชิ้นเพื่อประเมินตำแหน่ง
Paul

0

ขณะนี้เป็นคำถามเก่าฉันคิดว่าแนวคิดที่นำเสนอในบล็อกนี้อาจมีประโยชน์: http://scionsoftware.com/blog/write-tests-by-playing-chess

แนวคิดก็คือคุณจะเล่นเกมหมากรุกบน GUI และมีกลไกในการจับภาพสถานะกระดานหมากรุกโดยการทำให้เป็นอนุกรมเป็นไฟล์

คุณสามารถตั้งชื่อไฟล์เหล่านั้นตามกรณีทดสอบและป้อนลงในวิธีทดสอบที่คุณกำหนด: IsCheckmate; IsLegal; IsDraw

หนึ่งในเหตุผลหลักที่คุณต้องการใช้ UI ที่เป็นธรรมชาติเพื่อสร้างกรณีทดสอบเหล่านี้นอกเหนือจากความสะดวกในการสร้างนั่นคือเงื่อนไขที่เพียงพอยังขึ้นอยู่กับจำนวนการเคลื่อนไหว: การขว้าง, การสะกดจิต, การวาดเงื่อนไข


0

ฉันไม่รู้ฐานข้อมูลการทดสอบหน่วยใด ๆ สำหรับโปรแกรมหมากรุก (โดยทั่วไป) และใช่การเขียนการทดสอบหน่วยแบบละเอียดนั้นแทบจะเป็นไปไม่ได้เลย

คุณสามารถสำรวจเทคนิคการทดสอบทางเลือกเช่นการทดสอบตามคุณสมบัติ (QuickCheck ใน Haskell ฉันไม่รู้จักสภาพแวดล้อม F # แต่มีอยู่อย่างนั้นสำหรับ F #) ซึ่งสามารถสร้าง "ตำแหน่ง" จำนวนมากโดยอัตโนมัติและทดสอบพวกเขา ใช้คุณสมบัติที่กำหนดโดยคุณ

หวังว่านี่จะช่วยได้บ้าง :)!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.