ฉันสามารถเข้าใจข้อกังวลนี้ได้อย่างชัดเจนในพื้นที่ที่คุณครอบคลุมฮาร์ดแวร์ทุก ๆ นิ้วเช่นเกมเอ็นจิ้น AAA ยุคหน้าแบบมัลติเธรดซึ่งใช้ซีพียูคอร์ทุกตัว, ซิมภายใน, GPU, GPGPU และอื่น ๆ ในขณะที่ส่งข้ามแพลตฟอร์ม สินค้า
ในกรณีดังกล่าวฝันร้ายที่เลวร้ายที่สุดของคุณมักจะเป็นกรณีที่การทดสอบของคุณ (หน่วยและการรวม) จะผ่านสำหรับ 5,000 เครื่องแรก / แพลตฟอร์มที่ทดสอบแตกต่างกัน แต่ล้มเหลวสำหรับ 5,001 เนื่องจากข้อบกพร่องของไดรเวอร์สำหรับรุ่น GPU ที่คลุมเครือ เกี่ยวกับสิ่งนี้ทำให้ฉันมีอาการสั่น - คุณอาจไม่สามารถทดสอบหรือคาดการณ์ล่วงหน้าได้
โดยเฉพาะอย่างยิ่งถ้าคุณเขียน GPU shaders คุณสามารถจบลอตเตอรี่ย้อนกลับโดยที่โค้ดครึ่งหนึ่งที่คุณเขียนจะก่อให้เกิดพฤติกรรมที่ไม่ได้กำหนดเนื่องจากมีการรับประกันมาตรฐานแบบพกพาจำนวนน้อยที่บังคับใช้โดยทุกรุ่น / ไดรเวอร์ของ GPU ที่เกี่ยวข้อง ในขณะที่มันได้รับน้อยลงและน้อยเช่นการเล่นเรือกวาดทุ่นระเบิดวันนี้นี้ควรให้คนที่ความคิดบางอย่างhttp://theorangeduck.com/page/writing-portable-opengl การลองสิ่งนี้ในช่วงปลายยุค 90 และต้นยุค 2000 นั้นน่ากลัวจริงๆและมันก็เป็นเรือกวาดทุ่นระเบิดไปตลอดทาง
สำหรับเหล่านี้ชนิดของกรณีคุณมักจะต้องทีม 10,000 ทดสอบด้วยจริงๆกว้างช่วงของฮาร์ดแวร์และระบบปฏิบัติการจริงๆแข็งผลิตภัณฑ์และรู้สึกมั่นใจเกี่ยวกับเรื่องนี้ก่อนที่จะมีการเปิดตัวที่มีเสถียรภาพ ไม่ใช่ทุก บริษัท ที่สามารถมีฐานการทดสอบที่กว้างและไม่มีระเบียบที่จะทำ (ทุกประเด็นที่เห็นได้ชัดเจนควรได้รับการแก้ไขก่อนที่จะมีผู้ทดสอบจำนวนมากในบางช่วง pre-alpha / alpha ภายในหรืออื่น ๆ รายงานซ้ำซ้อนที่ท่วมท้นสามารถทำให้นักพัฒนาตื่นตระหนกได้
สิ่งที่ฉันแนะนำในกรณีนี้คือสิ่งที่คนอื่นแนะนำให้มุ่งเน้นไปที่ชุดการทดสอบการรวมกลุ่มแบบกระจาย คุณสามารถรวมโปรแกรมติดตั้งเข้าด้วยกันโดยกำหนดให้ผู้ใช้ผ่านการตรวจสอบวินิจฉัยขั้นพื้นฐานด้วยความระมัดระวังในการให้รายละเอียดว่าเหตุใดการติดตั้งจึงล้มเหลว
อีกสิ่งหนึ่ง (ถ้าคุณสามารถโน้มน้าวใจเจ้านาย) ก็คือการมีฮาร์ดแวร์ที่หลากหลายเพื่อทำการเชื่อมต่ออย่างต่อเนื่อง ความหลากหลายมากขึ้นในคอมโบฮาร์ดแวร์ / ระบบปฏิบัติการ, merrier คุณต้องการแม้กระทั่งฮาร์ดแวร์ crap ที่หลากหลายซึ่งจำลองแบบข้อกำหนดขั้นต่ำของฮาร์ดแวร์ขั้นต่ำสำหรับเซิร์ฟเวอร์ CI ของคุณ: คุณไม่มีทางรู้
แต่มีอีกอย่างที่ฉันขอแนะนำ:
เข้าสู่ระบบ
หากคุณกำลังเผชิญกับสิ่งต่าง ๆ เช่นสถานการณ์ที่ฉันได้อธิบายไว้ข้างต้นบ่อยครั้งที่คุณไม่สามารถทดสอบสิ่งเหล่านี้ซึ่งมีแนวโน้มว่าจะเป็นปัญหามากที่สุด (gotchas ที่เลวร้ายที่สุดที่เป็นไปได้ซึ่งปรากฏขึ้นในเวลาที่เลวร้ายที่สุด ชุดการทดสอบที่ครบถ้วนสมบูรณ์ที่สุดเนื่องจากเป็นปัญหาที่เกิดขึ้นกับคอมโบฮาร์ดแวร์ / ระบบปฏิบัติการที่เจาะจงมาก)
แต่ปัญหาเหล่านั้นส่วนใหญ่เช่นความไม่ลงรอยกันของฮาร์ดแวร์ที่คลุมเครือหรือความผิดพลาดของไดรเวอร์ทันทีหรือการเชื่อมโยงกับ dylib ที่ผิด (ฉันไม่เคยเผชิญกับข้อกังวลนี้จริง ๆ ) จะไม่ทำให้คุณเริ่มต้นซอฟต์แวร์ โดยทั่วไปแล้วจะมีปัญหาและเขียนได้ไม่นานนักพูดอย่างหยาบคาย
ฉันขอแนะนำเพื่อความมีเหตุผลเพื่อโอบกอดสิ่งที่หลีกเลี่ยงไม่ได้ คุณไม่สามารถทำอะไรเกี่ยวกับสิ่งเหล่านี้ได้คุณไม่สามารถทดสอบได้อย่างครอบคลุม อย่าพยายามป้องกันพายุเฮอริเคน (เป็นไปไม่ได้) แต่ขึ้นหน้าต่างเหล่านั้น
โดยทั่วไปที่นี่สิ่งที่ดีที่สุดที่เราสามารถทำได้คือค้นหาปัญหาโดยเร็วที่สุดเท่าที่จะเป็นไปได้ซึ่งจะเกิดรายละเอียดมากที่สุด (เพื่อ จำกัด รายชื่อผู้ต้องสงสัยของเรา) และแก้ไขปัญหาโดยเร็วที่สุดหลังจากรายงานแล้ว
ในกรณีนี้การบันทึกอาจเป็นเครื่องช่วยชีวิต สำหรับฟิลด์ประเภทนี้คุณสามารถสร้างบันทึกทางเทคนิคสแปมที่ไม่มีใครเคยอ่าน บ่อยครั้งที่มีความเกี่ยวข้องเป็นเพียงบรรทัดสุดท้ายที่บันทึกไว้ในบันทึกก่อนที่ผู้ใช้จะพบกับความผิดพลาดเนื่องจากความผิดพลาดของไดรเวอร์เช่นคุณสามารถเขียนกระบวนการภายนอกหรือเบ็ดซึ่งตรวจสอบการล่มแล้วแสดงบรรทัดสุดท้ายของบันทึกที่ผู้ใช้สามารถคัดลอก และวางให้คุณเช่นนอกเหนือจากการถ่ายโอนข้อมูลความผิดพลาด
เนื่องจากสิ่งนี้มักต้องการข้อมูลที่ละเอียดและพื้นที่ที่อ่อนไหวที่สุดในรหัสสำหรับปัญหาเกี่ยวกับฮาร์ดแวร์ / แพลตฟอร์ม / ไดรเวอร์เหล่านี้จึงเป็นเรื่องที่สำคัญต่อประสิทธิภาพการทำงานจึงมีปัญหาที่น่าอึดอัดใจที่การบันทึกอาจเกิดขึ้นในอัตราที่บ่อยครั้ง ลงซอฟต์แวร์
เคล็ดลับที่มีประโยชน์ในกรณีนี้คือการพึ่งพาข้อสันนิษฐานว่าบางสิ่งที่ถูกประหารชีวิตจะดำเนินการสำเร็จในครั้งที่สองครั้งที่สามเป็นต้นซึ่งไม่ใช่ข้อสันนิษฐานที่ดีที่สุด . ด้วยสิ่งนี้คุณสามารถใช้สถานะภายนอกเล็กน้อยเพื่อติดตามว่ามีบางสิ่งที่ถูกบันทึกไว้แล้วและข้ามความพยายามที่ตามมาเพื่อเข้าสู่ระบบสำหรับกรณีที่ละเอียดมากซึ่งรหัสจะถูกเรียกซ้ำในลูป
อย่างไรก็ตามฉันหวังว่านี่จะช่วยได้ ฉันเคยเจอสิ่งล่อใจแบบนี้ในอดีตและมีความหวาดระแวงรอบ ๆ การเข้ารหัส GPU (GPGPU และ shaders) ซึ่งเป็นผลมาจากประสบการณ์ที่ผ่านมาระหว่างตัวฉันและทีมของฉัน (บางครั้งแค่เห็นสมาชิกในทีมจัดการกับสิ่งเหล่านี้จริงๆ ปลายและโพสต์ปล่อยให้ฉันครีพเหมือน ATI ความผิดพลาดในรูปแบบเฉพาะของ Radeon ซึ่งจะผิดพลาดในการแสดงเส้น antialiased รายงานในภายหลังและทำเครื่องหมายว่าเป็นปัญหาที่รู้จักกันด้วยวิธีแก้ปัญหาที่มีอยู่เท่านั้น)
การบันทึกเป็นสิ่งที่ช่วยรักษาก้นของเราที่นั่นทำให้เรามักจะเห็นปัญหาในเครื่องต้นแบบที่คลุมเครือครั้งที่ 10,001 ด้วย GPU ออนบอร์ดที่เราไม่เคยได้ยินด้วยรหัสบรรทัดสุดท้ายทันทีทำให้เราเห็นจุดที่ความล้มเหลวลดลงเหลือ 2 หรือรหัส 3 บรรทัดเป็นที่น่าสงสัยเช่นหากอยู่ใน shader ที่ซับซ้อนเราก็เป็น SOL เพราะเราไม่สามารถเข้าสู่ GPU shader ได้ แต่อย่างน้อยเราก็สามารถใช้การบันทึกเพื่อดูว่า shader ใดมีปัญหาในทันที เพื่อเริ่มการสอบสวน