คำถามติดแท็ก integration-tests

การทดสอบการรวมเป็นขั้นตอนในการทดสอบซอฟต์แวร์ที่แต่ละโมดูลซอฟต์แวร์จะรวมกันและทดสอบเป็นกลุ่ม ไม่จำเป็นต้องใช้ mocks หรือ stubs; ทุกอย่างผ่านการทดสอบเช่นเดียวกับในการผลิต

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

3
จะทำให้การทดสอบอัตโนมัติเป็นที่นิยมได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ฐานรหัสของเราเติบโตขึ้นเป็นเวลา 20 ปีแล้ว เราทำงานประมาณ 10 devs + sqa กับ 500kloc เมื่อไม่นานมานี้ทีมเล็ก ๆ ของเรา (2 devs หนึ่งจาก sqa) เริ่มทำงานกับโปรแกรมทดสอบอัตโนมัติ ปัจจุบันการวิ่งหนึ่งครั้งใช้เวลา 11 ชั่วโมงและเป็นการทดสอบการรวมระบบ เรากำลังดำเนินการเพื่อแก้ไขปัญหานี้และลดผลบวกปลอมและกำลังดำเนินการต่อไป แต่รายละเอียดไม่สำคัญ มันใช้งานได้โอเคและเราก็ทำการปรับปรุงต่อไป พวกเรา (ทีมเล็ก) ชอบมันมาก ถ้าเราทำลายบางสิ่งบางอย่างเราจะสังเกตเห็นอีกหนึ่งวันต่อมาและไม่ใช่ 2 เดือนต่อมาเมื่อ sqa ดู นอกจากนี้ผู้จัดการของเรา (dev + sqa) ชอบความคิด แต่คนอื่น ๆ ในทีมเพียงแค่เพิกเฉยผลการทดสอบ ในใจของพวกเขาหากการทดสอบล้มเหลวหลังเช็คอินมันเป็นปัญหาของการทดสอบไม่ใช่การเปลี่ยนรหัสและเป็นเพียงโครงการของเล่นของเรา เรามีการหารือหลายครั้งหากการทดสอบที่ล้มเหลวเป็นข้อผิดพลาดจริง เวลาส่วนใหญ่มันเป็น …

2
ฉันควรกำหนดหน่วยการทดสอบอีกครั้งเมื่อฉันแยกคลาสออกจากระบบภายใต้การทดสอบหรือไม่
ฉันเขียนคลาสนี้ที่ทำบางสิ่ง (บางทีนี่อาจเป็นการละเมิดหลักการความรับผิดชอบเดี่ยว) ตอนนี้ฉันรู้แล้วว่าบางส่วนของโครงการต้องการตรรกะชิ้นหนึ่งและวิธีที่ฉันจะเปิดเผยก็คือการดึงคลาสออกจากระบบเดิมภายใต้การทดสอบของฉัน ฉันคาดหวังว่าจะสามารถทำได้โดยไม่ต้องเปลี่ยนรหัสทดสอบใด ๆ แต่เมื่อฉันเสร็จคุณสามารถยืนยันว่าการทดสอบไม่ใช่การทดสอบหน่วยอีกต่อไป มันจะทำการทดสอบคลาสเดิมและคลาสที่ฉันแยกออกมา กล่าวอีกนัยหนึ่งฉันจะมีหนึ่งกรณีทดสอบ แต่สองระบบภายใต้การทดสอบ ฉันควร refactor รหัสทดสอบของฉันหลังจากที่ฉันทำเสร็จแล้ว? IE: สร้าง ExtractedClassTest และย้ายการทดสอบที่เกี่ยวข้องทั้งหมดจาก OriginalClassTest ลงไปหรือไม่ ดูเหมือนว่าอาจมีความเสี่ยงเล็กน้อย: ฉันอาจสูญเสียความครอบคลุมบางส่วนในกระบวนการอาจไม่ง่ายเหมือนการย้ายการทดสอบและฉันสิ้นสุดการเขียนรหัสการทดสอบบางอย่างที่ฉันรู้ว่าเคยทำงาน แต่อาจไม่ได้อีกต่อไป เป็นต้น ในทางกลับกันถ้าฉันปล่อยให้ OriginalClassTest ตามเดิมฉันสามารถเห็นว่านี่เป็นปัญหาการบำรุงรักษาทดสอบ มันจะสับสนเล็กน้อยในการค้นหาที่การทดสอบของ ExtractedClass ความประทับใจแรกของคุณก็คือมันไม่มีอยู่จริง เมื่อเวลาผ่านไปด้วยการปรับโครงสร้างรหัสการผลิตจำนวนมากสิ่งนี้อาจกลายเป็นปัญหาร้ายแรง ฉันใหม่สำหรับ TDD ดังนั้นฉันต้องการคำแนะนำจากผู้เชี่ยวชาญ ขอบคุณ!

4
การเลือกชื่อสำหรับการทดสอบการรวม
ด้วยการทดสอบหน่วยโดเมนมีขนาดค่อนข้างเล็กดังนั้นจึงง่าย ฉันใช้methodName_conditions_result()รูปแบบของ Osherove และพบว่าชัดเจนมาก แต่ด้วยการทดสอบการรวมตัวฉันรู้สึกว่ามันจะทำให้ชื่อยาวมากและฉันจะแทนที่methodNameอะไร? ฉันจะตั้งชื่อคลาสทดสอบรวมได้อย่างไร ยินดีต้อนรับสู่ตัวอย่างการใช้งานจริงของชื่อการทดสอบการรวมระบบ ฉันหวังว่าคำตอบจะช่วยให้ฉันเข้าใจการทดสอบเหล่านี้ได้ดีขึ้น

1
มีการศึกษาเกี่ยวกับความสัมพันธ์ระหว่างการทดสอบซอฟต์แวร์กับประสิทธิภาพของนักพัฒนาหรือไม่? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา มีการศึกษาเกี่ยวกับความสัมพันธ์ระหว่างการทดสอบซอฟต์แวร์ (หน่วยและ / หรือการทดสอบการรวม) และการพัฒนาของนักพัฒนาหรือไม่?

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

3
ฉันจะวาดเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการรวมได้อย่างไร พวกเขาควรจะแยกจากกัน?
ฉันมีกรอบ MVC ขนาดเล็กที่ฉันทำงานอยู่ มันคือฐานรหัสไม่ใช่เรื่องใหญ่ แต่มันก็ไม่ได้มีแค่สองสามชั้น ในที่สุดฉันก็ตัดสินใจที่จะกระโดดและเริ่มเขียนแบบทดสอบ (ใช่ฉันรู้ว่าฉันควรจะทำอย่างนั้นมาตลอด แต่มันก็ API ไม่เสถียรอย่างยิ่งจนถึงตอนนี้) อย่างไรก็ตามแผนของฉันคือทำให้ง่ายมากในการทดสอบรวมถึงการทดสอบการรวม ตัวอย่างการทดสอบการรวมตัวจะเป็นไปตามบรรทัดเหล่านี้: วัตถุคำขอ HTTP ปลอม -> กรอบงาน MVC -> วัตถุตอบกลับ HTTP -> ตรวจสอบว่าการตอบสนองนั้นถูกต้อง เพราะนี่เป็นสิ่งที่ทำได้โดยไม่ต้องใช้เครื่องมือพิเศษ (เบราว์เซอร์อัตโนมัติเป็นต้น) ฉันสามารถทำได้ด้วยกรอบการทดสอบตามปกติ (ฉันใช้ NUnit) ตอนนี้คำถามใหญ่ ฉันจะวาดเส้นแบ่งระหว่างการทดสอบหน่วยและการทดสอบการรวมได้ที่ไหน ฉันควรทดสอบทีละชั้น (มากที่สุดเท่าที่จะทำได้) ด้วยการทดสอบหน่วย? ควรวางการทดสอบการรวมในโครงการทดสอบเดียวกันกับโครงการทดสอบหน่วยของฉันหรือไม่

2
ประเมินว่าจะเขียนการทดสอบหน่วยหรือการทดสอบการรวมครั้งแรกในโครงการท้องฟ้าสีฟ้า / ต้นแบบ
สิ่งที่ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้คือเมื่อฉันทำโครงการประเภทต่อไปนี้: เมื่อเริ่มต้นโครงการ ทำงานกับ MVP / เครื่องต้นแบบ การเพิ่มคุณสมบัติที่ไม่ได้กำหนดไว้ทั้งหมด ทำงานในโครงการขนาดเล็ก สำหรับการอ้างอิงฉันกำลังทำงานในโครงการ Python ซึ่งปัจจุบันมีรหัส ~ 1k บรรทัดรวมถึงความคิดเห็นและช่องว่างทั้งหมด ฉันพบว่ามันง่ายขึ้นอย่างมากในการเขียนการทดสอบการรวมการทำงานครั้งแรกทำงานบนรหัสและจากนั้นเมื่อ API ค่อนข้างแข็งจริง ๆ แล้วสามารถเพิ่มการทดสอบหน่วยได้ ประเภทของการทดสอบที่ฉันสามารถเรียกใช้ในmainฟังก์ชั่นของฉันดังนั้นพูดและมี "จบสิ้น" มากกว่าสิ่งอื่นใด เนื่องจากการทดสอบหน่วยนั้นน่ารำคาญจริง ๆ เมื่อ API มีการเปลี่ยนแปลงอย่างรวดเร็วค่อนข้างบ่อยซึ่งเป็นกรณีเมื่อทำงานกับโครงการที่ตรงกับเกณฑ์ใด ๆ หรือส่วนใหญ่ข้างต้น วิธีนี้เป็นแนวทางที่ดีหรือไม่และเกณฑ์ใดที่ควรพิจารณาเมื่อทำการตัดสินใจว่าจะเริ่มต้นด้วยการทดสอบหน่วยหรือการรวมเข้าด้วยกันเป็นครั้งแรกสำหรับโครงการประเภทนี้หรือไม่? ฉันขาดคุณค่าของการทดสอบหน่วยของโครงการประเภทนี้ก่อนที่ API จะแข็งตัวมากขึ้นหรือไม่

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

1
การทดสอบการรวมในโครงการ OSS - วิธีจัดการกับบุคคลที่สามด้วยการรับรองความถูกต้อง?
หนึ่งในโปรเจ็กต์อดิเรก (โอเพ่นซอร์ส) ของฉันคือเครื่องมือสำรองซึ่งทำให้การสำรองข้อมูลออฟไลน์ของที่เก็บจาก GitHub, Bitbucket เป็นต้น มันเรียก API ของ hosters เพื่อรับรายการที่เก็บข้อมูล ดึงที่เก็บไปยังเครื่องคอมพิวเตอร์ ดังนั้นฉันจึงมีการทดสอบการรวมที่ฉันเรียก GitHub API ด้วยการตรวจสอบ (และเมื่อคุณสมบัติการโคลน / ดึงเสร็จอาจมีการทดสอบว่าที่เก็บโคลนจาก GitHub และต้องรับรองความถูกต้องด้วย) ฉันสร้างผู้ใช้และองค์กรโดยเฉพาะสำหรับใช้ในการทดสอบการรวมกลุ่มเหล่านี้ ปัญหา: ฉันไม่สามารถเข้ารหัสรหัสผ่านที่ยากที่ไหนสักแห่งในซอร์สโค้ดได้เนื่องจากเป็นโอเพ่นซอร์สและรหัสนั้นเป็นสาธารณะใน GitHub สิ่งที่ฉันทำตอนนี้ ในการทดสอบฉันได้รับชื่อผู้ใช้รหัสผ่านและชื่อที่เก็บจากตัวแปรสภาพแวดล้อมทั้งหมด นี่คือตัวอย่าง : config.Name = TestHelper.EnvVar("GithubApiTests_Name"); config.Password = TestHelper.EnvVar("GithubApiTests_PW"); ( TestHelper.EnvVarเป็นวิธีตัวช่วยซึ่งรับค่าของตัวแปรสภาพแวดล้อมและส่งข้อยกเว้นเมื่อไม่มีอยู่) จากนั้นฉันมีไฟล์แบตช์ซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเหล่านั้น ตัวจริง ( environment-variables.bat) เรียกในสคริปต์สร้างของฉันและก่อนที่จะดำเนินการทดสอบ แต่ละเว้นในการควบคุมแหล่งที่มาดังนั้นจึงไม่ได้อยู่ในที่เก็บจริงของฉัน สิ่งที่อยู่ในการควบคุมแหล่งที่มาenvironment-variables.bat.sampleซึ่งตั้งค่าตัวแปรสภาพแวดล้อมเดียวกัน แต่ใช้รหัสผ่านปลอม: rem copy/rename this file to …

1
การทดสอบช่องว่างระหว่างหน่วยและการรวม: การรวมในการทดสอบส่วนประกอบขนาดเล็กการรวมหน่วย
ในช่วงสองสามสัปดาห์ที่ผ่านมาฉันได้ครุ่นคิดและค้นคว้าวิธีเติมช่องว่างในวิธีการทดสอบของเรา ในการทดสอบหน่วยคำศัพท์ที่ง่ายมีขนาดเล็กเกินไปและการทดสอบการรวมแบบดั้งเดิมนั้นใหญ่เกินไป สถานการณ์ที่เกิดขึ้นบ่อยครั้งที่Aและองค์ประกอบการใช้งานทั้งB Cอย่างไรก็ตามAและมีความต้องการที่แตกต่างกันเล็กน้อยและทำให้สมมติฐานแตกต่างกันเล็กน้อยเกี่ยวกับB Cหากฉันเป็นผู้พัฒนาAฉันจะทดสอบสมมติฐานของฉันได้Cอย่างไรและที่ไหน? เห็นได้ชัดว่าการทดสอบหน่วยที่Aมีข้อสมมติฐานล้อเลียนเกี่ยวกับCการทดสอบAแยกได้ แต่ก็ไม่ได้ทดสอบสมมติฐานเอง Cเป็นไปได้ก็คือการเพิ่มการทดสอบหน่วยสำหรับ อย่างไรก็ตามสิ่งนี้ไม่เหมาะเพราะในขณะที่Aอยู่ระหว่างการพัฒนาการเปลี่ยนแปลงการทดสอบCด้วยข้อสมมติฐานที่พัฒนาขึ้นจากAนั้นจะมีความเงอะงะมากเกินไป อันที่จริงAs นักพัฒนาอาจไม่ได้มีการเข้าถึงเพียงพอที่จะทดสอบหน่วยของC(เช่นห้องสมุดภายนอก) ในการจัดวางสิ่งนี้ด้วยตัวอย่างที่ชัดเจนยิ่งขึ้น: สมมติว่านี่เป็นแอปพลิเคชั่นของโหนด AและBขึ้นอยู่กับCการอ่านไฟล์ (ในหมู่สิ่งอื่น ๆ ) Cและการจัดเก็บเนื้อหาของแฟ้มในวัตถุส่งผ่านไปยัง ในตอนแรกไฟล์ทั้งหมดที่Cจัดการมีขนาดเล็กและสามารถอ่านแบบซิงโครนัสโดยไม่มีการบล็อกที่สำคัญ อย่างไรก็ตามผู้พัฒนาBตระหนักว่าไฟล์ของเขามีขนาดใหญ่ขึ้นและจำเป็นต้องเปลี่ยนCมาอ่านแบบ async ซึ่งส่งผลให้เกิดข้อผิดพลาดในการซิงโครไนซ์เป็นระยะAซึ่งยังคงCมีการอ่านไฟล์ นี่เป็นประเภทของบั๊กที่ยากต่อการติดตามจากการทดสอบการรวมระบบแบบสมบูรณ์และอาจไม่สามารถทำการทดสอบการรวมระบบได้เลย มันไม่ได้ถูกจับโดยAการทดสอบหน่วย s เพราะAข้อสันนิษฐานนั้นถูกเยาะเย้ย แต่มันได้อย่างง่ายดายจับโดย "มินิ" บูรณาการทดสอบว่าการออกกำลังกายเพียงและAC ฉันพบการอ้างอิงประเภทนี้ของการทดสอบเพียงเล็กน้อยเท่านั้น บูรณาการในขนาดเล็ก , การทดสอบส่วนประกอบของการรวม , หน่วยบูรณาการการทดสอบ นอกจากนี้ยังเกี่ยวข้องกับทิศทางการทดสอบ BDDค่อนข้างมากกว่าการทดสอบ TDD อย่างเป็นทางการ ฉันจะเติมช่องว่างการทดสอบนี้ได้อย่างไร โดยเฉพาะ - ฉันจะทำการทดสอบแบบไหน? ฉันจะจำลองอินพุตAและCสำหรับการทดสอบการรวม "มินิ" ได้อย่างไร และควรแยกความกังวลเรื่องการทดสอบระหว่างการทดสอบและการทดสอบหน่วยเท่าไหร่ หรือมีวิธีที่ดีกว่าในการเติมเต็มช่องว่างในการทดสอบ?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.