คำถามติดแท็ก testing

คำถามเกี่ยวกับการทดสอบและการตรวจสอบวิธีการคำนวณ

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

17
มีตัวแก้ปัญหาการเขียนโปรแกรมแบบไม่เชิงเส้นคุณภาพสูงสำหรับ Python หรือไม่?
ฉันมีปัญหาการเพิ่มประสิทธิภาพทั่วโลกที่ไม่ท้าทายเพื่อแก้ปัญหา ปัจจุบันผมใช้กล่องเครื่องมือเพิ่มประสิทธิภาพของ MATLAB (โดยเฉพาะfmincon()กับอัลกอริทึม = 'sqp') ซึ่งมีประสิทธิภาพมาก อย่างไรก็ตามรหัสของฉันส่วนใหญ่อยู่ใน Python และฉันก็ชอบที่จะเพิ่มประสิทธิภาพใน Python ด้วยเช่นกัน มีตัวแก้ NLP ที่มีการผูก Python ที่สามารถแข่งขันได้fmincon()หรือไม่ มันจะต้อง สามารถรับมือกับความไม่เสมอภาคและความไม่เท่าเทียมกันได้ ไม่ต้องการให้ผู้ใช้จัดหายาโคบ ไม่เป็นไรหากไม่รับประกันว่าจะมีประสิทธิภาพระดับโลก ( fmincon()ไม่) fmincon()ฉันกำลังมองหาบางสิ่งบางอย่างที่ทนทานลู่ไปยังท้องถิ่นที่เหมาะสมแม้สำหรับความท้าทายปัญหาและแม้ว่ามันจะช้ากว่าเล็กน้อย ฉันได้พยายามแก้หลายที่ให้บริการผ่าน OpenOpt และพบว่าพวกเขาจะด้อยกว่าของ fmincon/sqpMATLAB เพียงเพื่อเน้นฉันมีสูตรเวิ้งว้างและแก้ปัญหาที่ดี เป้าหมายของฉันคือการเปลี่ยนภาษาเพื่อให้เวิร์กโฟลว์มีความคล่องตัวมากขึ้น เจฟฟ์ชี้ให้เห็นว่าคุณลักษณะบางอย่างของปัญหาอาจเกี่ยวข้องกัน พวกเขาคือ: 10-400 ตัวแปรการตัดสินใจ 4-100 ข้อ จำกัด ความเท่าเทียมกันของพหุนาม (ดีกรีพหุนามมีช่วงตั้งแต่ 1 ถึงประมาณ 8) จำนวนข้อ จำกัด ของความไม่เท่าเทียมกันที่มีเหตุผลเท่ากับจำนวนตัวแปรการตัดสินใจประมาณสองเท่า ฟังก์ชั่นวัตถุประสงค์เป็นหนึ่งในตัวแปรการตัดสินใจ ชาวจาโคเบียนแห่งข้อ จำกัด ความเท่าเทียมมีความหนาแน่นสูงเช่นเดียวกับชาวจาโคเบียนแห่งข้อ จำกัด …

18
ที่หนึ่งสามารถรับชุดข้อมูล / ปัญหาการทดสอบที่ดีสำหรับการทดสอบอัลกอริทึม / กิจวัตร?
ในการประเมินคุณภาพของซอฟต์แวร์ที่คุณกำลังใช้ (ไม่ว่าจะเป็นสิ่งที่คุณเขียนหรือแพคเกจบรรจุกระป๋อง) ในการคำนวณมันมักจะเป็นความคิดที่ดีที่จะดูว่าชุดข้อมูลหรือปัญหามาตรฐานทำงานได้ดีเพียงใด ที่หนึ่งอาจได้รับการทดสอบเหล่านี้สำหรับการตรวจสอบขั้นตอนการคำนวณ? (หนึ่งเว็บไซต์ / หนังสือต่อคำตอบโปรด)

5
ฐานข้อมูลผลลัพธ์สำหรับรหัสตัวเลข
ในวรรณคดีวิธีการเชิงตัวเลขงานวิจัยจำนวนมากประกอบด้วยคำอธิบายของการเปลี่ยนแปลงอัลกอริธึมใหม่ตามด้วยปัญหาการทดสอบเล็กน้อยเปรียบเทียบวิธีการใหม่กับวิธีการหนึ่งหรือสองวิธีที่มีอยู่ ทำให้ยากต่อการพิจารณา วิธีการใหม่ในการแก้ไขปัญหาอื่น ๆ ที่น่าสนใจ วิธีการเปรียบเทียบวิธีการใหม่กับวิธีการอื่น ๆ ที่มีอยู่ แน่นอนว่าคำถามเหล่านี้มักจะสำคัญสำหรับผู้ที่ตัดสินใจว่าจะใช้วิธีการใหม่หรือไม่ เพื่อที่จะปรับปรุงสถานการณ์นี้ถ้าเป็นไปได้ขอให้ผู้คนใช้ชุดทดสอบขนาดใหญ่ ( ดูคำถามนี้ ) ด้วยวิธีการของพวกเขาและทำรายการผลลัพธ์ในฐานข้อมูลเพื่อเปรียบเทียบกับวิธีอื่น นักวิทยาศาสตร์หรือวิศวกรสามารถสืบค้นฐานข้อมูลซึ่งอาจบ่งบอกถึงลักษณะการแก้ปัญหา / ปัญหาที่สำคัญที่สุดสำหรับพวกเขา (ความถูกต้องประสิทธิภาพคุณสมบัติเชิงคุณภาพ ฯลฯ ) และได้รับการเปรียบเทียบเชิงปริมาณของประสิทธิภาพของวิธีการทั้งหมดในฐานข้อมูล ฉันตระหนักว่ามีความยากลำบากหลายอย่างในการใช้ความคิดนี้ (ส่วนใหญ่คือการให้ผู้คนใช้งานปัญหาเหล่านั้นทั้งหมดและวัดค่าใช้จ่ายในการคำนวณ) แต่คำถามของฉันคือ: มีฐานข้อมูลของผลลัพธ์หรือไม่ (พูดในสาขาย่อยบางแห่ง) หรือมีวิธีการเช่นนี้ถูกนำไปใช้ที่ไหนก็ได้? คำตอบทั้งสองที่โพสต์แล้วนั้นเกี่ยวกับฐานข้อมูลของปัญหา ฉันถามเกี่ยวกับฐานข้อมูลของผลลัพธ์
17 pde  testing 

3
กลยุทธ์การเขียนโปรแกรมใดที่ฉันสามารถแก้ไขพารามิเตอร์อัลกอริทึมได้อย่างง่ายดาย
การพัฒนาอัลกอริธึมทางวิทยาศาสตร์เป็นกระบวนการที่ต้องทำซ้ำบ่อย ๆ ซึ่งเกี่ยวข้องกับการเปลี่ยนแปลงพารามิเตอร์จำนวนมากที่ฉันต้องการจะเปลี่ยนแปลงไม่ว่าจะเป็นส่วนหนึ่งของการออกแบบการทดลองของฉันหรือเป็นส่วนหนึ่งของประสิทธิภาพอัลกอริธึม tweaking ฉันสามารถใช้กลยุทธ์ใดในการจัดโครงสร้างพารามิเตอร์เหล่านี้เพื่อให้ฉันสามารถเปลี่ยนแปลงได้อย่างง่ายดายระหว่างการทำซ้ำและเพื่อให้สามารถเพิ่มพารามิเตอร์ใหม่ได้อย่างง่ายดาย

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

4
คำแนะนำใด ๆ สำหรับกรอบการทดสอบหน่วยเข้ากันได้กับรหัส / ไลบรารีที่ใช้ MPI
โดยปกติฉันเขียนรหัสซีเรียลและเมื่อฉันฉันเขียนการทดสอบหน่วยด้วยกรอบการทดสอบแบบ xUnit (MATLAB xUnit, PyUnit / nose หรือกรอบการทดสอบ C ++ ของ Google) จากการค้นหาโดยคร่าวๆของ Google ฉันไม่เห็นว่าโค้ดทดสอบหน่วยผู้ปฏิบัติงานที่ใช้ MPI มากน้อยเพียงใด มีวิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งนั้นหรือไม่? เปรียบเทียบกับกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาที่ขับเคลื่อนด้วยการทดสอบฉันกำลังมองหาคำตอบที่เกี่ยวข้องกับซอฟต์แวร์ที่ฉันควรใช้สำหรับกรอบการทดสอบ (ถ้ามี) คำตอบอาจเป็น "ม้วนรหัสของคุณเอง" ซึ่ง ตัวอย่างกรณีของรหัสการทดสอบที่กำหนดเองจะเป็นประโยชน์) สิ่งที่ฉันกำลังมองหาเพื่อทดสอบส่วนใหญ่คือการประเมินฟังก์ชั่นทางด้านขวาและกิจวัตรประจำวันของ Jacobian matrix สำหรับเวลาที่จะรวม PDEs แบบกึ่งแยกส่วน ฉันจะใช้ PETSc ดังนั้นถ้ามีอะไรเฉพาะ PETSc ที่จะเป็นประโยชน์นอกเหนือไปจากกรอบการทดสอบทั่วไปมากขึ้น ชี้แจงการแก้ไข: ตัวอย่างจะอยู่ใน${PETSC_DIR}/src/ts/examples/tutorials/ex2.cที่ที่ฉันต้องการทดสอบบางสิ่งเช่นRHSFunction(การประเมินฟังก์ชั่นด้านขวา) และRHSJacobian(การประเมินเมทริกซ์จาโคเบียน) ฉันจะทดสอบกับค่าที่ทราบสำหรับด้านขวาที่ประกอบและเมทริกซ์ Jacobian ที่ประกอบขึ้น ฉันสามารถรับค่าเหล่านี้ในเชิงวิเคราะห์สำหรับอินสแตนซ์ปัญหาง่ายๆ ฟังก์ชั่นเหล่านี้เป็นฟังก์ชั่นเฉพาะแอปพลิเคชันที่จะไม่ใช้งานฟังก์ชั่นระดับแอปพลิเคชันอื่น ๆ แต่พวกเขาสามารถเรียก MPI ถ้าการประกอบเวกเตอร์หรือเมทริกซ์จะทำภายในฟังก์ชัน (เช่นในตัวอย่าง PETSc ที่เชื่อมโยงด้านบน) …

4
ชุดทดสอบสำหรับแอปพลิเคชันตัวเลขใน C ++?
เมื่อเร็ว ๆ นี้ฉันได้ผลักดันกลุ่มของฉันให้รวมการทดสอบเพิ่มเติมเมื่อเขียนรหัสของพวกเขา มีข้อบกพร่องที่สำคัญหลายอย่างที่ใช้เวลานานกว่าที่จะพูดมากกว่านั้นเป็นสิ่งจำเป็นเพราะเราไม่มีระบอบการทดสอบที่ดี อย่างไรก็ตามฉันสงสัยว่าการมีเครื่องมือที่เหมาะสมในการทำให้กระบวนการเป็นอัตโนมัติ (หรือช่วยปรับปรุงประสิทธิภาพ) นั้นจะมีประโยชน์อย่างแน่นอน ในทางกลับกันฉันไม่ทราบตัวเลือกต่างๆสำหรับชุดทดสอบ C ++ และวิธีการตัดสินใจระหว่างกัน มีแนวทางสำหรับสิ่งที่ต้องค้นหา - และมีสิ่งใดบ้างที่มุ่งเน้นไปที่แอปพลิเคชันตัวเลขโดยเฉพาะหรือไม่
13 testing 

1
มีกรอบการทดสอบสำหรับการพัฒนาซอฟต์แวร์เชิงตัวเลขหรือไม่
ฉันพบว่าการเขียนโปรแกรมวิทยาศาสตร์ทางคอมพิวเตอร์ของฉันจำนวนมากมีข้อกำหนดการทดสอบที่ไม่ครอบคลุมโดยกรอบการทดสอบมาตรฐาน: การทดสอบเวลาคำนวณ เพื่อให้แน่ใจว่าอัลกอริทึมจะไม่ช้าลง ฉันสามารถทำสิ่งต่าง ๆ ได้เช่นกัน 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)ยังคงใช้ได้) หนึ่งอาจโต้แย้งว่าสิ่งที่ฉันขอไม่ได้อธิบายการทดสอบในแง่ของการทดสอบหน่วย / บูรณาการตั้งแต่ runtimes ที่เพิ่มขึ้นเช่นอาจเป็นที่ยอมรับในทางกลับกันสำหรับการปรับปรุงอื่น ๆ อย่างไรก็ตามในทางปฏิบัติฉันรู้ว่าฉันจะประหยัดเวลาในการดีบักได้มากถ้าฉันมีฟังก์ชั่นการทดสอบด้านบนเพราะใน 95% ของข้อกำหนดกรณีและประสิทธิภาพลดลงเพราะข้อผิดพลาดที่ฉันแนะนำ แน่นอนฉันรู้ว่ามีข้อบกพร่องมากมายที่ฉันพบ (หลังจากเสียเวลามากในการตรวจสอบรหัสของฉัน) ด้วยห้องสมุดซอฟต์แวร์เชิงตัวเลขภายนอกสามารถหลีกเลี่ยงได้เล็กน้อยหากการทดสอบข้างต้นถูกนำไปใช้อย่างจริงจัง PS คำถามที่มีชื่อคล้ายกัน/programming/34982863/framework-for-regression-testing-of-numerical-codeไม่ซ้ำกันเนื่องจากอธิบายการทำงานที่ทำได้ง่ายขึ้นด้วยกรอบการทดสอบการถดถอยมาตรฐาน คำถามกลยุทธ์สำหรับการทดสอบหน่วยและการพัฒนาขับเคลื่อนทดสอบขอกลยุทธ์เมื่อเทียบกับกรอบที่ช่วยในการดำเนินการพวกเขา (และกลยุทธ์ที่ขอ / ที่ให้ไว้ในคำตอบนั้นแตกต่างจากสิ่งที่ฉันอธิบายที่นี่ในความคิดของฉัน)
10 testing 

3
การทดสอบการถดถอยของแบบจำลองเชิงตัวเลข
เมื่อเรามีแบบจำลองเชิงตัวเลขที่แสดงถึงระบบร่างกายจริงและแสดงความโกลาหล (เช่นแบบจำลองพลศาสตร์ของไหลแบบจำลองสภาพภูมิอากาศ) เราจะรู้ได้อย่างไรว่าแบบจำลองนั้นทำงานได้ดีเท่าที่ควร เราไม่สามารถเปรียบเทียบเอาท์พุทแบบจำลองสองชุดได้โดยตรงเนื่องจากแม้แต่การเปลี่ยนแปลงเพียงเล็กน้อยในสภาวะเริ่มต้นจะเปลี่ยนผลลัพธ์ของการจำลองแบบบุคคลอย่างมาก เราไม่สามารถเปรียบเทียบโมเดลเอาต์พุตกับการสังเกตโดยตรงได้เนื่องจากเราไม่สามารถรู้รายละเอียดเงื่อนไขเริ่มต้นของการสังเกตได้อย่างเพียงพอและการประมาณเชิงตัวเลขจะทำให้เกิดความแตกต่างเล็กน้อยที่จะแพร่กระจายผ่านระบบ คำถามนี้ได้รับแรงบันดาลใจบางส่วนจากคำถามของ David Ketcheson เกี่ยวกับการทดสอบหน่วยทางวิทยาศาสตร์ : ฉันสนใจเป็นพิเศษในการทดสอบการถดถอยสำหรับแบบจำลองดังกล่าว หากการเปลี่ยนแปลงเงื่อนไขเริ่มต้นเล็กน้อยสามารถนำไปสู่การเปลี่ยนแปลงที่สำคัญ (ซึ่งอาจยังเป็นตัวแทนที่เพียงพอของความเป็นจริง) แล้วเราจะแยกการเปลี่ยนแปลงเหล่านั้นออกจากการเปลี่ยนแปลงที่เกิดจากการปรับเปลี่ยนพารามิเตอร์หรือการใช้งานรูทีนตัวเลขใหม่ได้อย่างไร
10 testing  numerics 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.