การทดสอบกล่องดำหรือกล่องขาว - คุณต้องทำอะไรเป็นอันดับแรก


14

ในทีมขนาดเล็กมากการทดสอบกล่องดำและกล่องขาวทำโดยคนคนเดียวกันผู้ทดสอบควรทำอะไรก่อน


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

คำตอบ:


11

สิ่งที่จะต้องถูกต้องที่สุด

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

การทดสอบแบบกล่องดำ (เช่นการทดสอบผ่านส่วนต่อประสานผู้ใช้ / ระบบ) เป็นสิ่งที่ผู้ทดสอบส่วนใหญ่ทำ

การทดสอบทั้งหมดจะต้องจัดลำดับความสำคัญเกี่ยวกับความสำคัญของฟังก์ชันสำหรับผลิตภัณฑ์สำเร็จรูป หากภารกิจคือการจัดหาเครื่องมือในการทำ X และผลิตภัณฑ์ไม่ได้ทำ X นั่นเป็นปัญหาใหญ่


1
ดีตอบว่าดีที่สุดที่ฉันอ่านป่านนี้
Chris

5

สีดำ

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


2
ยกเว้นกรณีที่กล่องดำทดสอบพลาดการทดสอบฟังก์ชั่นหรือการกำหนดค่า:}
Alan

3
@Alan: อาร์กิวเมนต์เดียวกันนี้ใช้กับการทดสอบกล่องสีขาวดังนั้นข้อแม้ 'การรายงานข่าวที่ดี'
Steven A. Lowe

1
เห็นด้วย - ฉันเดาว่าคำแถลงของฉันจะขึ้นอยู่กับคำจำกัดความความครอบคลุมที่ดี
อลัน

1
@DocBrown ฉันไม่เห็นว่าสิ่งที่คุณอธิบายเป็นอะไรจากระยะไกลเช่นการทดสอบ whitebox การทดสอบ Whitebox เกี่ยวกับการติดตามเส้นทางสาขาของการนำไปปฏิบัติที่กำหนดและการเขียนกรณีทดสอบที่จะใช้เส้นทางทั้งหมด หากคุณยังไม่มีการใช้งานคุณจะไม่สามารถทำการทดสอบ Whitebox ได้ตามนิยาม ด้วย TDD และ BDD คุณเขียนการทดสอบของรูปร่างทั่วไปที่กำหนดเมื่อ - แล้ว คุณตั้งค่าข้อมูลที่ป้อนเข้าหรือสถานะก่อนกำหนดเริ่มหน่วยและทำการตรวจสอบข้อมูลที่ส่งออกหรือสถานะสิ้นสุดหรือการโทรของบุคคลที่สาม นี่คือคำจำกัดความของการทดสอบ blackbox
Sammi

1
@ SamJudge: เพื่อความเข้าใจของฉันเมื่อคุณดูในรหัสการใช้งานและใช้ข้อมูลนั้นในการออกแบบข้อมูลการทดสอบที่เฉพาะเจาะจงมาก (ซึ่งจะถูกส่งผ่านอินเตอร์เฟซสาธารณะ) จากนั้นมันก็สมเหตุสมผลที่จะเรียกการทดสอบกล่องสีขาวนี้ การทดสอบดังกล่าวจะล้มเหลวหากผลลัพธ์ไม่ใช่สิ่งที่เราคาดหวัง หากคุณดูที่การทดสอบในภายหลังคุณอาจไม่สามารถพูดได้อย่างชัดเจนว่า "การทดสอบนี้ผลิตโดยวิธีกล่องขาว (หรือกล่องดำ)"
Doc Brown

3

กล่องดำ.

ส่วนประกอบของกล่องสีขาวมักจะขึ้นอยู่กับส่วนประกอบของกล่องดำดังนั้นฉันต้องการทดสอบกล่องดำก่อนแล้วจึงย้ายไปที่กล่องสีขาว


2
ฉันไม่แน่ใจว่าคุณหมายถึงอะไรโดย "ส่วนประกอบกล่องดำ" และ "ส่วนประกอบกล่องสีขาว" - สำหรับฉันพวกเขาแค่ "ส่วนประกอบ" (ที่สามารถทดสอบโดยมีหรือไม่มีความรู้เกี่ยวกับรหัสหรือสถาปัตยกรรมพื้นฐาน
Alan

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

2

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


2

หากคุณต้องการมีรอบการทดสอบที่ดีคุณควรมีคนอื่นทำทั้งสองอย่าง :

  • นักพัฒนาที่เน้นการทดสอบกล่องขาวส่วนใหญ่รู้ว่ามีการเปลี่ยนแปลงอะไรบ้างในรหัสเมื่อเร็ว ๆ นี้พื้นที่ใดมีความซับซ้อนมากขึ้น (และมีแนวโน้มว่าจะแตก) ฯลฯ และสามารถมุ่งเน้นความพยายามอย่างเหมาะสมในพื้นที่เหล่านี้

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

ในการตอบคำถามของคุณควรทำการทดสอบกล่องขาวก่อน แต่คุณต้องให้คนอื่นทำการทดสอบกล่องดำถ้าคุณต้องการให้มันมีประสิทธิภาพ


1

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

แต่คำตอบที่แท้จริงคือมันขึ้นอยู่กับ ฉันมีแนวโน้มที่จะดำน้ำในรหัสเร็วกว่านี้ (ก่อนหน้านี้) หากฉันทำการทดสอบ API แต่ต่อมาถ้าเป้าหมายของฉันคือดูสถานการณ์ขนาดใหญ่ถึงจุดสิ้นสุด


1

ฉันจะบอกว่าการทดสอบกล่องดำก่อนเพราะในฐานะผู้สนับสนุนของ TDD การทดสอบจะถูกเขียนก่อนรหัส (หรือกล่อง) อยู่แล้ว :)

การทดสอบกล่องสีขาว (เท่าที่ฉันเข้าใจ) มีประโยชน์มากกว่าในการตั้งค่าการดีบัก


-1, TDD คือการทดสอบกล่องสีขาว ใน TDD มันเป็นสิ่งสำคัญที่จะต้องรู้ว่ารหัสที่เกี่ยวข้องในการทดสอบทำ (และสิ่งที่มันไม่ได้) เพื่อเขียนการทดสอบต่อไป กล่องดำทดสอบหมายความว่าคนที่มีความคิดของรหัส (ผู้ทดสอบคนที่ไม่ได้ต้องการที่จะรู้ว่าไม่มีวิธีการที่จะ code), การออกแบบการทดสอบ
Doc Brown

1
จากนั้นเราจะไม่ฝึก TDD ด้วยวิธีเดียวกัน TDD สำหรับฉันคือการบังคับใช้ข้อกำหนดของคลาส / ฟังก์ชั่น: การทดสอบถูกเขียนขึ้นเพื่อตรวจสอบว่าคลาส / ฟังก์ชั่นทำงานตามที่ระบุไว้ แต่สามารถดูแลได้น้อยกว่าวิธีที่โค้ดทำงานเบื้องหลัง ซึ่งเป็นสิ่งจำเป็นเนื่องจากการทดสอบจะถูกเขียนขึ้นก่อนการใช้งาน
Matthieu M.

1

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

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


0

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

เป้าหมายของฉันคือเน้นการเขียนแบบทดสอบที่ดีไม่ใช่สีที่จะเขียนก่อน


'ขาว' และ 'ดำ' ไม่ใช่คำทดสอบหน่วยดังนั้นคุณไม่ต้องกังวลเกี่ยวกับเรื่องนี้ การทดสอบหน่วยเป็นกล่องสีขาวอย่างแท้จริง
Ethel Evans

@Ethel Evans: พวกเขาไม่ใช่การทดสอบกล่องสีขาวตามคำจำกัดความ การทดสอบหน่วยส่วนใหญ่เป็นการทดสอบกล่องสีขาว แต่ก็ไม่ได้เป็นข้อกำหนด การทดสอบใด ๆ ที่แมปโดเมนของอินพุตกับช่วงของเอาต์พุตของฟังก์ชันคือการทดสอบหน่วย แต่ไม่จำเป็นต้องทราบรายละเอียดของการใช้งาน
Steven Evers

0

ครั้งแรกที่ทำมันทดสอบกล่องสีขาว

การทดสอบกล่องดำครั้งที่สอง

> การทดสอบกล่องดำ

I. ผู้ทดสอบควรตรวจสอบการทำงานของแอพพลิเคชั่นเช่นกล่องข้อความปุ่มตัวเลือกกล่องรายการปุ่มคำสั่ง ... ฯลฯ

ครั้งที่สอง ผู้ทดสอบควรตรวจสอบแอปพลิเคชั่นที่ไม่สามารถใช้งานได้เช่นโลโก้ภาพการสะกดคำ ฯลฯ ..

สาม. ผู้ทดสอบควรตรวจสอบการไหลของใบสมัครทั้งหมด

หมายเหตุ: เพื่อตรวจสอบเงื่อนไขในเชิงบวกและเชิงลบ

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