ที่ทำงานเรามีระบบที่ค่อนข้างซับซ้อน เรียกระบบนี้ว่า System_A ทีมงาน QA ของเราได้สร้างระบบอื่นเรียกระบบนี้ว่า System_B เพื่อทดสอบ System_A
วิธีที่ใช้ System_B มีดังนี้ เราสร้างอินพุต (โดยใช้ System_B เอง), IN, ประมวลผลอินพุตดังกล่าวกลับผ่าน System_B และสร้างเอาต์พุต O_B ดังนั้นกระบวนการดังต่อไปนี้:
System_B(IN) -> O_B
.
จากนั้นเราก็ทำเช่นเดียวกันสำหรับ System_A เพื่อสร้างผลลัพธ์ของตัวเอง O_A:
System_A(IN) -> O_A
.
เมื่อใดก็ตามจะถือว่า O_B เป็นเอาต์พุตที่คาดหวังและ O_A เป็นเอาต์พุตที่ตรวจพบ / เกิดขึ้นจริง โดยนัยก็คือ O_B เป็นแหล่ง "ทองคำ" (ความจริง) อย่างไรก็ตามเราพบปัญหาหลายอย่าง
- O_A ผิด O_B ถูกต้อง
- O_A ถูกต้อง O_B ถูกต้อง
- O_A ผิด O_B ผิด
- O_A ถูกต้อง O_B นั้นผิด
ใครเป็นผู้ตัดสินว่าอะไรจะเกิดขึ้นถ้า O_B ถือว่าถูกต้องเสมอ (หรือคาดหวังอะไร) ปรากฏว่า O_B บางครั้งผิดพลาดกับการตรวจสอบและการวิเคราะห์ของมนุษย์ ทุกสิ่งจะผ่านการประกันคุณภาพโดยใช้กระบวนการนี้และผู้ใช้จริงจะบ่นและเรากลับไปพบว่า O_B นั้นผิด
คำถามคือ: มันเป็นวิธีปฏิบัติที่ไม่ดีในการสร้าง "ระบบทดสอบ" เพื่อทดสอบระบบจริงหรือไม่?
- แล้วความชันลื่นล่ะ? จากนั้นเราไม่สามารถโต้แย้งได้ว่าเราต้องการระบบอื่นเพื่อทดสอบ "ระบบทดสอบ" หรือไม่?
- ค่าใช้จ่ายเป็นสิ่งต้องห้ามอย่างแน่นอนเนื่องจากนักพัฒนาจำเป็นต้องเรียนรู้อย่างน้อย 2 ฐานรหัสด้วยความซับซ้อนของ System_B อาจใหญ่กว่า System_A เราจะหาปริมาณว่าการมี System_B ไปรอบ ๆ นั้นดีหรือไม่ดีสำหรับองค์กรอย่างไร
- หนึ่งในเหตุผล "ที่น่าสนใจ" ดั้งเดิมในการสร้าง System_B คือการทดสอบ "อัตโนมัติ" ตอนนี้เราภูมิใจมากที่เราเป็นแบบอัตโนมัติ (เนื่องจาก System_B สร้างอินพุตเพื่อบู๊ตกระบวนการของการใช้ตัวเองเพื่อสร้างเอาต์พุต) แต่ฉันคิดว่าเราได้ทำอันตรายมากขึ้นและเพิ่มความซับซ้อนมากขึ้นในวิธีที่ไม่ต้องสงสัย เป็นงานของ QA ที่จะเป็นไปโดยอัตโนมัติอย่างเต็มที่? เหตุผลนั้นเพียงพอที่จะสร้างระบบคู่ขนานหรือไม่?
- ความกังวลที่แท้จริงของฉันคือสิ่งนี้แม้ว่าเราทุกคนรู้ว่า System_B นั้นผิด (บ่อยครั้ง) หาก System_B ประมวลผลอินพุตได้ดีและเอาต์พุตเป็นแหล่งทองคำทำไมไม่ลองแทนที่ System_A ด้วย System_B เพื่อให้ไม่มีใครในที่ทำงานสามารถให้การตอบสนองที่น่าพอใจ
คำแนะนำใด ๆ เกี่ยวกับปัญหานี้ชื่นชม