ฉันเป็นผู้สนับสนุนอย่างมากในการพัฒนาโดยใช้การทดสอบในการคำนวณทางวิทยาศาสตร์ ยูทิลิตี้ในทางปฏิบัติเป็นเพียงการส่ายและบรรเทาปัญหาคลาสสิกที่นักพัฒนาโค้ดรู้ได้อย่างแท้จริง อย่างไรก็ตามมีปัญหาในการทดสอบรหัสทางวิทยาศาสตร์ที่ไม่พบในการเขียนโปรแกรมทั่วไปดังนั้นข้อความ TDD จึงไม่มีประโยชน์อย่างยิ่งในการสอน ตัวอย่างเช่น:
โดยทั่วไปคุณไม่ทราบคำตอบที่แน่นอนสำหรับปัญหาซับซ้อนที่กำหนดไว้สำหรับนิรนัยดังนั้นคุณจะเขียนข้อสอบได้อย่างไร
ระดับของการเปลี่ยนแปลงขนาน ฉันเพิ่งพบข้อผิดพลาดที่การใช้งาน MPI เนื่องจากผลคูณของ 3 จะล้มเหลว แต่การทำงานหลายอย่างของ 2 รายการ นอกจากนี้กรอบการทดสอบทั่วไปดูเหมือนจะไม่เป็นมิตรกับ MPI มากเนื่องจากธรรมชาติของ MPI - คุณต้องทำการทดสอบไบนารีอีกครั้งเพื่อเปลี่ยนจำนวนงาน
รหัสทางวิทยาศาสตร์มักจะมีชิ้นส่วนที่จับคู่กันอย่างพึ่งพาซึ่งกันและกัน เราทุกคนเห็นรหัสดั้งเดิมและเรารู้ว่าการดึงดูดให้ทำเช่นนั้นคือการสละการออกแบบที่ดีและใช้ตัวแปรระดับโลก
บ่อยครั้งที่วิธีการเชิงตัวเลขอาจเป็น "การทดลอง" หรือ coder ไม่เข้าใจวิธีการทำงานอย่างสมบูรณ์และพยายามเข้าใจมันดังนั้นการคาดการณ์ผลลัพธ์จึงเป็นไปไม่ได้
ตัวอย่างการทดสอบที่ฉันเขียนสำหรับรหัสทางวิทยาศาสตร์:
สำหรับผู้รวบรวมเวลาให้ใช้ ODE แบบง่ายๆด้วยโซลูชันที่แน่นอนและทดสอบว่าผู้รวมระบบของคุณแก้ไขได้ภายในความแม่นยำที่กำหนดและลำดับความแม่นยำนั้นถูกต้องโดยการทดสอบด้วยขนาดขั้นตอนที่แตกต่างกัน
การทดสอบความเสถียรแบบไร้ศูนย์: ตรวจสอบว่าวิธีที่มี 0 ขอบเขต / เงื่อนไขเริ่มต้นยังคงอยู่ที่ 0
การทดสอบการแก้ไข: ให้ฟังก์ชันเชิงเส้นมั่นใจว่าการแก้ไขนั้นถูกต้อง
การตรวจสอบความถูกต้องดั้งเดิม: แยกส่วนของรหัสในแอปพลิเคชันแบบดั้งเดิมที่ทราบว่าถูกต้องและดึงค่าที่ไม่ต่อเนื่องออกมาเพื่อใช้สำหรับการทดสอบ
มันยังคงเกิดขึ้นบ่อยครั้งที่ฉันไม่สามารถหาวิธีทดสอบโค้ดที่กำหนดได้อย่างถูกต้องนอกเหนือจากการทดลองใช้ด้วยตนเองและข้อผิดพลาด คุณสามารถให้ตัวอย่างการทดสอบที่คุณเขียนสำหรับรหัสตัวเลขและ / หรือกลยุทธ์ทั่วไปสำหรับการทดสอบซอฟต์แวร์ทางวิทยาศาสตร์ได้หรือไม่