วิธีการทำซ้ำผลลัพธ์ที่เผยแพร่ในบทความของฉันได้อย่างง่ายดายโดยใช้รหัสของฉันเอง


15

ฉันเขียนโปรแกรม / ไลบรารีที่ฉันเคยได้ผลลัพธ์ในบทความ (นี่คือแต่คำถามของฉันคือทั่วไป) ฉันมีการทดสอบที่ฉันใช้เป็นประจำctest(ใช้เวลาไม่กี่นาทีในการทำงาน) ในการทำซ้ำบางตารางหรือตัวเลขในบทความฉันต้องสร้างสคริปต์หรือโปรแกรมควบคุมอย่างง่ายซึ่งอาจใช้เวลาประมาณ 10 นาทีบางครั้งก็มากขึ้นดังนั้นฉันจึงไม่ต้องการมีส่วนหนึ่งของชุดทดสอบปกตินี้ ในเวลาเดียวกันฉันต้องการตรวจสอบให้แน่ใจว่าผลลัพธ์จากบทความสามารถ:

  • ทำซ้ำในภายหลัง
  • ตรวจสอบให้แน่ใจว่าพวกเขายังคงให้ผลลัพธ์เดียวกัน / ถูกต้องหลังจากที่ฉันพัฒนาห้องสมุดต่อไป

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

ฉันยังพยายามมีสคริปต์ Python ที่คำนวณตัวเลข / ตารางที่แน่นอนจากบทความ โดยทั่วไปแล้วสคริปต์ดังกล่าวจะหยุดทำงานหลังจากมีการอัปเดตไลบรารีเนื่องจากไม่ได้ทำงานเป็นประจำ (ใช้เวลานานเกินไป)

วิธีที่ดีที่สุดที่เกิดขึ้นกับฉันคือมีตัวอย่าง Fortran (หรือ C / C ++) ที่จะรวบรวมเป็นประจำ (เป็นส่วนหนึ่งของไลบรารี) แต่ไม่ได้ทำงานในชุดทดสอบปกติ ด้วยวิธีนี้อย่างน้อยฉันก็รู้ว่ามันรวบรวมได้ดี และฉันจะทดสอบตัวอย่างง่ายๆ (เล็กกว่า) เป็นส่วนหนึ่งของชุดทดสอบปกติ

วิธีที่เหมาะสมที่สุดในการจัดการปัญหานี้คืออะไร


2
คำถามที่ดีปฏิกิริยาแรกของฉันคือคุณควรแบ่งการทดสอบของคุณออกเป็นถดถอยอย่างรวดเร็วที่สามารถทำงานได้อย่างรวดเร็วและจะดำเนินการก่อนที่จะกระทำและถอยหลังอีกต่อไปที่คุณต้องการใช้เป็นส่วนหนึ่งของความพยายามในการรวมอย่างต่อเนื่อง คุณเฉพาะในสถานการณ์ที่คุณมีการทดสอบของสายพันธุ์เดิมเท่านั้นและยังไม่ได้แบ่งพวกเขา?
Aron Ahmadia

ฉันมีการทดสอบมากมายที่ทำงานอย่างรวดเร็วดูที่นี่: github.com/certik/hfsolver/tree/master/src/testsแต่ฉันไม่รู้วิธีจัดการกับการคำนวณจริงสำหรับบทความ (เช่น 10 นาทีสำหรับแต่ละตาราง / รูปให้รวมสองสามชั่วโมงได้อย่างง่ายดาย)
OndřejČertík

2
รันการทดสอบแบบยาวโดยอัตโนมัติทุกคืน (หรือรายสัปดาห์รายเดือน ฯลฯ ) โดยใช้เซิร์ฟเวอร์การรวมอย่างต่อเนื่อง เนื่องจากคุณไม่ต้องใส่ใจอะไรเลยนอกจากผลลัพธ์คุณจะไม่สนใจว่าจะต้องใช้เวลานานแค่ไหน
David Ketcheson

คำตอบ:


6

ใน deal.II เรามี testuite ที่ขับเคลื่อนโดย Unix Makefile ปกติ มีเป้าหมายเริ่มต้นที่เรียกใช้การทดสอบตามปกติทั้งหมดและเป้าหมายแยกต่างหากสำหรับการทดสอบราคาแพง การเรียกใช้การทดสอบแต่ละครั้งจะกระทำโดยใช้กฎทั่วไป แต่เป้าหมายเริ่มต้นเรียกกฎทั่วไปสำหรับการทดสอบบางอย่างเท่านั้นและเป้าหมายที่มีราคาแพงเรียกว่าสำหรับการทดสอบที่มีราคาแพง เนื่องจากทั้งหมดใช้กฎทั่วไปจึงต้องเป็นข้อมูลล่าสุดตามเวลาที่กำหนด สิ่งที่อาจล้าสมัยสามารถเป็นรายชื่อการทดสอบเท่านั้น

อัปเดต: ข้อความด้านบนถูกต้องในปี 2012 ตั้งแต่ปี 2014 ข้อตกลง II testsuite นั้นอ้างอิงจาก CTest แต่แนวคิดทั่วไปยังคงใช้ได้


ขอบคุณ! นี่คือลิงค์ไปยังเอกสาร: dealii.org/7.2.0/development/testsuite.html#regression_testsและนี่คือผลลัพธ์ของ "การทดสอบปกติ": dealii.org/cgi-bin/regression_quick.plและนี่คือ "การทดสอบราคาแพง": dealii.org/cgi-bin/regression.plฉันทำให้ถูกต้องหรือไม่ ดังนั้นคุณจึงเรียกใช้ "การทดสอบปกติ" ในการแก้ไขแต่ละครั้งและ "การทดสอบราคาแพง" มีเพียงการแก้ไขสองสามครั้งเท่านั้น
OndřejČertík

ไม่มาก ผลการทดสอบที่แพงมักจะไม่โพสต์ลงในเว็บไซต์
Wolfgang Bangerth

ดังนั้นคุณเรียกใช้พวกเขาด้วยตนเองว่าก่อนแต่ละรุ่น? ใช้เวลานานแค่ไหนในการวิ่ง ฉันชอบแนวทางของคุณ
OndřejČertík

1
ใช่ด้วยตนเอง ทุก ๆ ครั้งก่อนที่จะเผยแพร่อย่างแน่นอน สำหรับบางโครงการพวกเขาใช้เวลาหนึ่งชั่วโมงหรือมากกว่านั้น แต่เนื่องจากพวกเขาทดสอบเฉพาะส่วนเล็ก ๆ ของห้องสมุด (พวกเขาส่วนใหญ่ทดสอบส่วนเสริมของโครงการที่จะจัดการ II) มันไม่คุ้มค่าหรือเป็นไปได้ที่จะดำเนินการแก้ไขทุกครั้ง
Wolfgang Bangerth

คุณมีการทดสอบแบบขนานใด ๆ ที่สามารถทำงานบนซูเปอร์คอมพิวเตอร์ตัวอย่างเช่นการทดสอบขนาดใหญ่ต่อp4estหรือไม่
Aron Ahmadia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.