ฉันควรเก็บข้อมูลทดสอบไว้ที่ไหน?


9

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

ตามโพสต์โปรแกรมเมอร์นี้ฉันควรเก็บข้อมูลทั้งหมดของฉันที่จำเป็นในการทดสอบโครงการในพื้นที่เก็บข้อมูล

วิธีแก้ปัญหาที่ทีมของฉันนำมาใช้คือโครงการมีไฟล์ที่มีเส้นทางไปยังระบบไฟล์ที่เชื่อมต่อกับเครือข่ายที่เก็บข้อมูลการทดสอบของเรา ไฟล์ถูกละเว้น Git

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

ดังนั้นคำถามของฉันคือสองเท่า ข้อมูลที่เก็บในการควบคุมการแก้ไขมีจำนวนข้อมูลเท่าใด

วิธีที่ดีกว่าในการจัดการข้อมูลทดสอบจำนวนมากคืออะไร


1
ข้อมูลการทดสอบมีแนวโน้มที่จะเปลี่ยนแปลงบ่อยแค่ไหน?
Robert Harvey

มันอาจจะไม่เปลี่ยนแปลง แต่อาจมีการเพิ่มข้อมูลมากขึ้นเมื่อเราแก้ไขข้อบกพร่องหรือเพิ่มคุณสมบัติ
AlexLordThorsen

1
บางส่วนของการแลกเปลี่ยนมีการสำรวจที่นี่: stackoverflow.com/q/984707
Robert Harvey

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

การทดสอบหน่วยไม่ควรใช้ข้อมูลจำนวนมาก เป็นไปได้ว่าการทดสอบการรวมอาจ
raptortech97

คำตอบ:


9

วิธีจัดการกับไฟล์ขนาดใหญ่ในสายโซ่บิลด์

ฉันชอบใช้เครื่องมือสร้างที่จัดการการพึ่งพา - เช่น maven หรือ gradle ไฟล์จะถูกเก็บไว้ในที่เก็บเว็บและเครื่องมือจะดูแลการดาวน์โหลดและแคชโดยอัตโนมัติเมื่อพบการพึ่งพา นอกจากนี้ยังกำจัดการตั้งค่าเพิ่มเติม (การกำหนดค่า NAS) สำหรับผู้ที่ต้องการเรียกใช้การทดสอบ และทำให้การรีเฟรชข้อมูลค่อนข้างไม่เจ็บปวด (เป็นเวอร์ชัน)

มีอะไรใหญ่เกินกว่าที่จะควบคุมการแก้ไขได้

มีพื้นที่สีเทาขนาดใหญ่ และถ้าคุณตัดสินใจบางสิ่งไม่ได้อยู่ใน RCS ทางเลือกของคุณคืออะไร? มันเป็นการตัดสินใจที่ง่ายกว่าถ้าคุณ จำกัด ตัวเลือกของคุณระหว่าง RCS และไบนารี repo (สไตล์ Maven)

เป็นการดีที่คุณจะต้องการเฉพาะสิ่ง RCS ที่สามารถแก้ไขเปลี่ยนแปลงได้อย่างมนุษย์หรือที่ที่คุณต้องการติดตามประวัติ อะไรก็ตามที่เป็นผลิตภัณฑ์ของบิลด์หรือระบบอัตโนมัติอื่น ๆ ไม่ได้อยู่ที่นั่นแน่นอน ขนาดเป็นข้อ จำกัด แต่ไม่ใช่ไฟล์หลัก - ไฟล์ต้นฉบับขนาดใหญ่ (การปฏิบัติที่ไม่เหมาะสม) เป็นของตัวควบคุมแหล่งแน่นอน ไบนารีขนาดเล็กที่รวบรวมไม่ได้

พร้อมที่จะประนีประนอมเพื่อความสะดวกของนักพัฒนา


3

เมื่อ NAS ไม่ทำงานช้าหรือลงกว่าที่เราไม่สามารถทำการทดสอบเต็มรูปแบบได้

เห็นได้ชัดว่าสิ่งนี้สามารถแก้ไขได้โดยการคัดลอก 5GB จาก NAS ไปยังไดรฟ์ในเครื่องของคุณ แต่ไม่จำเป็นต้องทำด้วยตนเอง

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

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

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


3

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

ครั้งแรกเพียงแค่มีคำศัพท์ที่สอดคล้องกัน: ชนิดของการทดสอบ (อ้างอิงภายนอกขนาดใหญ่ข้อมูลจริง) นี้มักจะไม่ถือว่าเป็นหน่วยทดสอบ แต่ค่อนข้างบูรณาการหรือระบบการทดสอบ

จากบันทึกที่ใช้งานได้จริง: ฉันคิดว่าเป็นวิธีที่ดีในการแยกการทดสอบหน่วยและการรวมเข้าด้วยกันเพราะพวกเขามีความแข็งแกร่งและจุดอ่อนต่างกัน

  • แยกการทดสอบสองประเภทในรหัส (หลักการตั้งชื่อโครงการแยกต่างหาก ... )
  • จัดหาวิธีในการเรียกใช้ชุดทดสอบหนึ่งในสองชุดเท่านั้น
  • รันเฉพาะการทดสอบหน่วยในระหว่างการสร้างปกติ
  • รันการทดสอบการรวมตามความต้องการและบนเซิร์ฟเวอร์ CI (การรวมต่อเนื่อง)

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

เป็นวิธีการเก็บข้อมูล:

ทางเลือกที่ดีอย่างหนึ่งคือการจัดการสิ่งประดิษฐ์บางอย่างเช่นคำตอบของ ptyx ' อีกก็จะไปนำข้อมูลการทดสอบเป็นที่เก็บแยกต่างหาก ข้อมูลจะไม่ถูกปล่อยออกมาพร้อมกับบิลด์หลักต่อไปและการมี repo แยกต่างหากจะช่วยให้ทุกคนดึงข้อมูลการทดสอบพร้อมกับซอร์สโค้ดได้ กล่าวอีกนัยหนึ่งให้ใช้ repo อันที่สองเป็นการจัดการ artifacdt ของคุณ :-)

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