ฉันพบว่าการเขียนโปรแกรมวิทยาศาสตร์ทางคอมพิวเตอร์ของฉันจำนวนมากมีข้อกำหนดการทดสอบที่ไม่ครอบคลุมโดยกรอบการทดสอบมาตรฐาน:
การทดสอบเวลาคำนวณ
- เพื่อให้แน่ใจว่าอัลกอริทึมจะไม่ช้าลง ฉันสามารถทำสิ่งต่าง ๆ ได้เช่นกัน
assureSmallerEqual(RuntimeWrapper(algorithm),53)
แต่ฉันต้องการลดขีด จำกัด 53 วินาทีอย่างต่อเนื่องเนื่องจากฉันกำลังทำงานกับอัลกอริทึมassureSmallerEqual(RuntimeWrapper(algorithm),'previousbest+noisetolerance')
- เพื่อให้แน่ใจว่าอัลกอริทึมจะไม่ช้าลง ฉันสามารถทำสิ่งต่าง ๆ ได้เช่นกัน
การทดสอบประสิทธิภาพ
- เพื่อให้แน่ใจว่าอัลกอริทึมที่ก่อนหน้านี้พบว่าการประมาณค่าที่ดีสำหรับโซลูชันการวิเคราะห์ยังคงหาวิธีการแก้ปัญหาที่อย่างน้อยดีหรือดีกว่า อีกครั้งนี่อาจเป็นแบบจำลองโดยการทดสอบการรวมมาตรฐาน แต่ฉันต้องการความอดทนที่จะลดขนาดลงอย่างต่อเนื่องเนื่องจากอัลกอริทึมดีขึ้นและดีขึ้น คิดว่าการแทนที่
assureAlmostEqual(foo(),1,places=3)
โดยassureAlmostEqual(foo(),1,places='previousbest')
- เพื่อให้แน่ใจว่าอัลกอริทึมที่ก่อนหน้านี้พบว่าการประมาณค่าที่ดีสำหรับโซลูชันการวิเคราะห์ยังคงหาวิธีการแก้ปัญหาที่อย่างน้อยดีหรือดีกว่า อีกครั้งนี่อาจเป็นแบบจำลองโดยการทดสอบการรวมมาตรฐาน แต่ฉันต้องการความอดทนที่จะลดขนาดลงอย่างต่อเนื่องเนื่องจากอัลกอริทึมดีขึ้นและดีขึ้น คิดว่าการแทนที่
การทดสอบข้อกำหนดทางกายภาพ
- เพื่อให้แน่ใจว่าอัลกอริธึมไม่ต้องการหน่วยความจำ / พื้นที่ฮาร์ดดิสก์เพิ่มเติม คล้ายกันมากกับ 1
การทดสอบความต้องการที่เป็นนามธรรม
- เพื่อให้แน่ใจว่าอัลกอริทึมที่ทำงานได้ดีกับการประมาณกำลังสองไม่จำเป็นต้องใช้การประมาณแบบลูกบาศก์หรืออัลกอริทึมที่ทำงานได้ดีในขั้นตอนที่ 0.1 ไม่จำเป็นต้องมีเสถียรภาพ 0.01 ในทันที อีกครั้งสิ่งเหล่านี้อาจถูกจำลองโดยการทดสอบการรวมมาตรฐาน แต่เป้าหมายคือการจำว่าพารามิเตอร์ความต้องการที่เล็กที่สุดนั้นบรรลุเป้าหมายที่แน่นอนดังนั้นสิ่งนี้จะต้องมีการอัปเดตด้วยตนเองจำนวนมาก ตัวอย่างเช่นหาก
foo(10)
ก่อนหน้านี้ไม่มีข้อยกเว้นฉันต้องการให้เฟรมเวิร์กตรวจสอบว่าfoo(10)
ยังใช้งานได้และลองfoo(9)
ตอนนี้ใช้งานได้ (ในกรณีนี้การทดสอบในอนาคตทั้งหมดจะfoo(9)
ยังคงใช้ได้)
- เพื่อให้แน่ใจว่าอัลกอริทึมที่ทำงานได้ดีกับการประมาณกำลังสองไม่จำเป็นต้องใช้การประมาณแบบลูกบาศก์หรืออัลกอริทึมที่ทำงานได้ดีในขั้นตอนที่ 0.1 ไม่จำเป็นต้องมีเสถียรภาพ 0.01 ในทันที อีกครั้งสิ่งเหล่านี้อาจถูกจำลองโดยการทดสอบการรวมมาตรฐาน แต่เป้าหมายคือการจำว่าพารามิเตอร์ความต้องการที่เล็กที่สุดนั้นบรรลุเป้าหมายที่แน่นอนดังนั้นสิ่งนี้จะต้องมีการอัปเดตด้วยตนเองจำนวนมาก ตัวอย่างเช่นหาก
หนึ่งอาจโต้แย้งว่าสิ่งที่ฉันขอไม่ได้อธิบายการทดสอบในแง่ของการทดสอบหน่วย / บูรณาการตั้งแต่ runtimes ที่เพิ่มขึ้นเช่นอาจเป็นที่ยอมรับในทางกลับกันสำหรับการปรับปรุงอื่น ๆ
อย่างไรก็ตามในทางปฏิบัติฉันรู้ว่าฉันจะประหยัดเวลาในการดีบักได้มากถ้าฉันมีฟังก์ชั่นการทดสอบด้านบนเพราะใน 95% ของข้อกำหนดกรณีและประสิทธิภาพลดลงเพราะข้อผิดพลาดที่ฉันแนะนำ แน่นอนฉันรู้ว่ามีข้อบกพร่องมากมายที่ฉันพบ (หลังจากเสียเวลามากในการตรวจสอบรหัสของฉัน) ด้วยห้องสมุดซอฟต์แวร์เชิงตัวเลขภายนอกสามารถหลีกเลี่ยงได้เล็กน้อยหากการทดสอบข้างต้นถูกนำไปใช้อย่างจริงจัง
PS
คำถามที่มีชื่อคล้ายกัน/programming/34982863/framework-for-regression-testing-of-numerical-codeไม่ซ้ำกันเนื่องจากอธิบายการทำงานที่ทำได้ง่ายขึ้นด้วยกรอบการทดสอบการถดถอยมาตรฐาน
คำถามกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาขับเคลื่อนทดสอบขอกลยุทธ์เมื่อเทียบกับกรอบที่ช่วยในการดำเนินการพวกเขา (และกลยุทธ์ที่ขอ / ที่ให้ไว้ในคำตอบนั้นแตกต่างจากสิ่งที่ฉันอธิบายที่นี่ในความคิดของฉัน)