มีวิธีทดสอบเกมอัตโนมัติหรือไม่
ประสบการณ์ที่เฉพาะเจาะจงได้รับการชื่นชมพร้อมกับข้อมูลที่เกี่ยวข้องเกี่ยวกับโครงการเช่นแพลตฟอร์มและประเภทของเกมหากมีส่วนช่วยในการชี้แจง
มีวิธีทดสอบเกมอัตโนมัติหรือไม่
ประสบการณ์ที่เฉพาะเจาะจงได้รับการชื่นชมพร้อมกับข้อมูลที่เกี่ยวข้องเกี่ยวกับโครงการเช่นแพลตฟอร์มและประเภทของเกมหากมีส่วนช่วยในการชี้แจง
คำตอบ:
เกมอิสระหนึ่งคน มันเป็นเกมรถถังที่มีผู้เล่นหลายคนพร้อมภูมิประเทศที่สามารถทำลายได้และภูมิประเทศที่สามารถทำลายได้และรหัสการชนพิสูจน์ได้ว่าค่อนข้างไม่สม่ำเสมอ
ฉันลงเอยด้วยการตั้งค่าพื้นฐาน AIs แบบใบ้ (โดย "โง่" ฉันหมายถึง "งี่เง่าอย่างแน่นอน" - พวกเขาจะสุ่มเลือก "ขับไปยังรถถังศัตรู", "ขับออกจากถังศัตรู" และ "ขับในทิศทางสุ่ม "ในขณะที่ยิงอาวุธหลักแบบสุ่ม) และเล่นเกมด้วยอัตราเฟรมสูงสุดขณะบันทึกปุ่มกด ฉันได้เวลาจริงประมาณ 10-15 เท่า รหัสถูกยืนยันอย่างหนักดังนั้นหากมีสิ่งใดผิดพลาดมันจะทิ้งบันทึกการกดคีย์ทั้งหมดไปยังดิสก์พร้อมกับรายงานข้อผิดพลาดและการสุ่มเริ่มต้น จากนั้นฉันสามารถไปและเล่นบันทึกการกดแป้นซ้ำเพื่อทำซ้ำสถานะอย่างแน่นอนหรือเพียงแค่ดีบักจากรายงานข้อผิดพลาด
ฉันปล่อยให้มันทำงานอย่างต่อเนื่องเป็นเวลาหลายเดือน ในตอนแรกมันแทบจะไม่ได้ชั่วโมงเลยโดยไม่ต้องหยุดทำ - ฉันต้องนั่งที่นั่นและดูแลมันเป็นเวลาหนึ่งสัปดาห์ฆ่าแมลงที่คลุมเครือหลายครั้งต่อวัน ในที่สุดมันก็มาถึงจุดที่มันใช้งานเป็นเวลาหนึ่งสัปดาห์ระหว่างความล้มเหลวซึ่งแปลว่าประมาณ 1,500 ชั่วโมงผู้เล่นต่อความผิดพลาด
มันมีค่ามากและฉันก็แนะนำอย่างเต็มที่
สำหรับ MMO ที่ฉันทำงาน (นักพัฒนา 100ish เน้นไปที่พีซี) เราพยายามเพิ่มการทดสอบอัตโนมัติที่หลากหลายด้วยความสำเร็จที่แตกต่างกัน นี่คือสิ่งที่ทำงาน:
สิ่งที่ไม่ทำงาน:
ทำงานในเกมกลยุทธ์ 4x พร้อมการต่อสู้ 3 มิติ (คิดว่าโฮมเวิร์ลดพบกับ Masters Of Orion) ที่น่าเสียดายที่ไม่เคยเห็นแสงสว่างของวันเมื่อ บริษัท หมดเงินทุน ..
ฉันมั่นใจเสมอว่าคุณสามารถเล่นเกมได้โดยไม่ต้องมีผู้เล่นที่เป็นมนุษย์ดังนั้นเราจึงสามารถออกจากเกมได้ในชั่วข้ามคืน
เราสามารถปิดการต่อสู้ 3 มิติ (ลดความซับซ้อนลงเป็นผลการสุ่ม) และเราออกจากเครื่องมือกลยุทธ์ AI ที่เล่นด้วยตัวเอง พบข้อบกพร่องและปัญหามากมาย ไม่เพียง แต่แสดงข้อบกพร่องของตัวหยุด แต่ข้อผิดพลาดด้านกลยุทธ์ที่กลยุทธ์ AI (เช่น) จะได้รับการหยุดชะงักและใช้จ่าย 1,000 รอบของการไม่ทำ "สิ่งที่ถูกต้อง" การเรียงลำดับของข้อบกพร่องเหล่านี้ยากที่จะมองเพียงแค่ "เล่นเกม"
สำหรับนักกีฬาคนแรกที่ฉันทำงาน (Descent 3 - linux / mac / windows, ประมาณ 30 คนในทีมในปี 1999) ความสามารถในการบันทึก / สาธิตการเล่นกลายเป็นประโยชน์อย่างมาก ฉันสร้างตัวเลือกที่คุณสามารถเล่นการสาธิตได้อย่างเร็วที่สุดเท่าที่เกมจะทำการเรนเดอร์เฟรมและนั่นก็เป็นวิธีที่ยอดเยี่ยมในการตรวจสอบประสิทธิภาพหลังจากสิ่งต่าง ๆ เปลี่ยนไป
นอกจากนี้ยังใช้รหัสจำนวนมากนอกเหนือจากระบบการแสดงผลดังนั้นจึงเป็นการตรวจสอบที่ดี หลังจากทำการเปลี่ยนแปลงมากมายฉันก็สามารถเล่นการสาธิตการเล่นเกม 10 นาทีของการเล่นเกม หลายครั้งที่มันจะจับแมลงในบริเวณที่ฉันไม่คิดว่าจะตรวจสอบตัวเอง
เรามีปืน openworld (x360, PS3, PC) ที่ใช้ smoketest อย่างรวดเร็วบน build server - มันโหลดเกมก้าวผ่านส่วนหน้าวิ่งไปทางด้านหน้าส่งภาพหน้าจอแล้วออก หาก cctray ตรวจพบว่าการออกจากระบบอย่างสมบูรณ์การสร้างนั้นสำเร็จ
เราวิ่งมาประมาณปีสุดท้ายของโครงการและมีขนาดทีมประมาณ 100 devs
มันมีประสิทธิภาพในการจับบั๊ก showstopping แต่มันง่ายที่จะสร้างบิลด์ที่ผ่าน smoketest แต่ล้มเหลวในระดับ "ของจริง" ส่วนใหญ่หรือใช้งานไม่ได้กับผู้เล่นหลายคนหรือเป็น AI ที่ยอดเยี่ยมดังนั้นจึงไม่สมบูรณ์ มันคุ้มค่าที่จะทำอย่างแน่นอน
ฉันได้ยินมาตั้งแต่ฉันออกจากพวกเขาเริ่มใช้ smoketests ขนาดใหญ่ออกไปทำไร่ไถนากับพีซีหลายเครื่อง เห็นได้ชัดว่าการบำรุงรักษา smoketests เป็นปัญหาและมีทีมเล็ก ๆ ที่ทุ่มเทให้กับการสร้างเซิร์ฟเวอร์และซอฟต์แวร์ที่ได้รับการดูแลดังนั้นฉันไม่สามารถบอกได้ว่ามันประสบความสำเร็จหรือไม่
ประสบการณ์ของฉันกับการทดสอบอัตโนมัติในระหว่างการพัฒนา Crysis 2 มีให้ที่นี่: http://yetanothergameprogrammingblog.blogspot.com/2010/06/aaa-automated-testing.html
สรุป:
การพัฒนาเกมเป็นจริงหนึ่งในกรณีที่การทดสอบหน่วยดูเหมือนจะเหมาะสมสำหรับฉันเพราะปฏิสัมพันธ์ระหว่างระบบแยกเป็นเรื่องธรรมดา แน่นอนการออกแบบโดยสัญญาเป็นส่วนหนึ่งของเรื่องนี้และควรได้รับการวางแผนตั้งแต่วันแรกของการพัฒนา แต่ฉันไม่เห็นว่าทำไมมันไม่สามารถนำมาใช้ในภายหลังได้โดยสมมติว่าสิ่งที่มีอยู่นั้นมีอยู่จริง
ส่วนที่ยากคือการทดสอบบูรณาการ มีเกมจำนวนมากที่สามารถทดสอบได้โดยสาธิตการวนลูปหรืออะไรบางอย่าง แต่สิ่งนั้นเป็นแนวคิดที่ค่อนข้างง่ายในการแก้ไขข้อบกพร่อง - ที่ฉันสนใจมากขึ้นในการใช้เวลาของฉันคือการเปิดเผยข้อบกพร่องที่จะเกิดขึ้นเมื่อผู้เล่นทำอะไรบางอย่าง ด้วยความคิดที่ว่าบั๊กที่ผู้เล่นไม่เคยเห็นนั้นมีความสำคัญน้อยกว่าบั๊กที่ผู้เล่นทำ
ซึ่งค่อนข้างยากแน่นอน กลยุทธ์ที่ใช้กับแอปพลิเคชั่นอื่น ๆ (fuzzing, คาดการณ์ผ่าน / คาดหวังล้มเหลว ฯลฯ ) ทำงานได้ไม่ดีที่นี่ ในระบบที่ใช้สคริปต์ดูเหมือนว่าการสร้างชุดทดสอบสคริปต์เพื่อจำลองผู้เล่นเป็นวิธีที่จะไป (ดูคำตอบของ JZig) แต่การทดสอบเป็นพิเศษสำหรับสิ่งที่ผู้เล่นอาจพบได้โดยตรงทำให้ฉันเป็นสถานที่ที่ดีที่สุดในการมุ่งเน้นเวลาของคุณสำหรับการทดสอบทั้งแบบมนุษย์และแบบอัตโนมัติ