ฉันไม่ใช่วิศวกรซอฟต์แวร์ ฉันเป็นนักเรียนปริญญาเอกในสาขาธรณีศาสตร์
เกือบสองปีที่แล้วฉันเริ่มเขียนโปรแกรมซอฟต์แวร์เชิงวิทยาศาสตร์ ฉันไม่เคยใช้การรวมอย่างต่อเนื่อง (CI) ส่วนใหญ่เป็นเพราะในตอนแรกฉันไม่รู้ว่ามันมีอยู่จริงและฉันเป็นคนเดียวที่ทำงานกับซอฟต์แวร์นี้
ในขณะนี้เนื่องจากฐานของซอฟต์แวร์กำลังเรียกใช้คนอื่นเริ่มสนใจและต้องการมีส่วนร่วมกับซอฟต์แวร์ แผนดังกล่าวคือบุคคลอื่น ๆ ในมหาวิทยาลัยอื่นกำลังนำส่วนเพิ่มเติมไปใช้กับซอฟต์แวร์หลัก (ฉันกลัวว่าพวกเขาสามารถแนะนำข้อบกพร่อง) นอกจากนี้ซอฟต์แวร์นั้นค่อนข้างซับซ้อนและยากที่จะทดสอบและฉันก็วางแผนที่จะทำงานต่อไป
ด้วยเหตุผลสองประการนี้ฉันจึงคิดจะใช้ CI มากขึ้นเรื่อย ๆ เนื่องจากฉันไม่เคยมีการศึกษาวิศวกรซอฟต์แวร์และไม่มีใครรอบตัวฉันเคยได้ยินเกี่ยวกับ CI (เราเป็นนักวิทยาศาสตร์ไม่มีโปรแกรมเมอร์) ฉันพบว่ามันยากที่จะเริ่มต้นสำหรับโครงการของฉัน
ฉันมีคำถามสองสามข้อที่ฉันต้องการคำแนะนำ:
ก่อนอื่นคำอธิบายสั้น ๆ เกี่ยวกับการทำงานของซอฟต์แวร์:
ซอฟต์แวร์ถูกควบคุมโดยไฟล์. xml ไฟล์เดียวที่มีการตั้งค่าที่จำเป็นทั้งหมด คุณเริ่มซอฟต์แวร์โดยเพียงแค่ส่งพา ธ ไปยังไฟล์. xml เป็นอาร์กิวเมนต์อินพุตและรันและสร้างไฟล์สองสามไฟล์ที่มีผลลัพธ์ การวิ่งครั้งเดียวสามารถใช้เวลา ~ 30 วินาที
มันเป็นซอฟต์แวร์ทางวิทยาศาสตร์ ฟังก์ชั่นเกือบทั้งหมดมีพารามิเตอร์อินพุตหลายค่าซึ่งชนิดส่วนใหญ่เป็นคลาสที่ค่อนข้างซับซ้อน ฉันมีไฟล์. txt หลายไฟล์ที่มีแค็ตตาล็อกขนาดใหญ่ซึ่งใช้สร้างอินสแตนซ์ของคลาสเหล่านี้
ตอนนี้มาคำถามของฉัน:
การทดสอบหน่วยการทดสอบบูรณาการการทดสอบแบบครบวงจร? : ซอฟต์แวร์ของฉันมีโค้ดประมาณ 30,000 บรรทัดพร้อมฟังก์ชั่นนับร้อยและ ~ 80 คลาส ฉันรู้สึกแปลก ๆ ที่เริ่มเขียนการทดสอบหน่วยสำหรับฟังก์ชั่นนับร้อยที่นำไปใช้แล้ว ดังนั้นฉันจึงคิดถึงการสร้างกรณีทดสอบ เตรียมไฟล์. xml ที่แตกต่างกัน 10-20 ไฟล์แล้วปล่อยให้ซอฟต์แวร์ทำงาน ฉันเดาว่านี่คือสิ่งที่เรียกว่าการทดสอบแบบครบวงจร? ฉันมักจะอ่านว่าคุณไม่ควรทำสิ่งนี้ แต่อาจเป็นการเริ่มต้นถ้าคุณมีซอฟต์แวร์ที่ใช้งานได้หรือไม่ หรือเป็นเพียงความคิดโง่ ๆ ที่พยายามเพิ่ม CI ให้กับซอฟต์แวร์ที่ใช้งานได้
คุณจะเขียนการทดสอบหน่วยได้อย่างไรถ้าพารามิเตอร์ฟังก์ชั่นยากที่จะสร้าง? ถือว่าผมมีฟังก์ชั่น
double fun(vector<Class_A> a, vector<Class_B>)
และมักจะผมจะต้องอ่านครั้งแรกในไฟล์ข้อความต่างๆเพื่อสร้างวัตถุชนิดและClass_A
Class_B
ฉันคิดเกี่ยวกับการสร้างฟังก์ชั่นจำลองบางอย่างClass_A create_dummy_object()
โดยไม่ต้องอ่านในไฟล์ข้อความ ผมยังคิดว่าเกี่ยวกับการใช้ชนิดของอนุกรม (ฉันไม่ได้วางแผนที่จะทดสอบการสร้างคลาสอ็อบเจ็กต์เนื่องจากขึ้นอยู่กับไฟล์ข้อความหลายไฟล์เท่านั้น)จะเขียนแบบทดสอบได้อย่างไรถ้าผลลัพธ์มีความผันแปรสูง ซอฟต์แวร์ของฉันใช้การจำลอง monte-carlo ขนาดใหญ่และทำงานซ้ำ ๆ โดยปกติคุณจะมีการทำซ้ำประมาณ 1,000 ครั้งและทุกๆครั้งที่ทำซ้ำคุณกำลังสร้างอินสแตนซ์ของวัตถุประมาณ 500-20,000 รายการตามการจำลองของมอนเตคาร์โล หากหนึ่งผลลัพธ์ของการทำซ้ำหนึ่งครั้งจะแตกต่างกันเล็กน้อยการทำซ้ำที่กำลังจะเกิดขึ้นทั้งหมดนั้นจะแตกต่างกันโดยสิ้นเชิง คุณจัดการกับสถานการณ์นี้อย่างไร ฉันเดาว่านี่เป็นประเด็นใหญ่สำหรับการทดสอบแบบ end-to-end เนื่องจากผลลัพธ์ที่ได้คือตัวแปรที่สูงมาก?
คำแนะนำอื่น ๆ ของ CI นั้นได้รับการชื่นชมอย่างมาก