เมื่อเร็ว ๆ นี้ฉันได้เห็นปัญหาที่คล้ายกับปัญหาที่อธิบายไว้ในบทความนี้มากขึ้นเรื่อย ๆ อีกคำสำหรับมันคือสายผลิตภัณฑ์แม้ว่าฉันมักจะเชื่อว่าสิ่งเหล่านี้กับผลิตภัณฑ์ที่แตกต่างกันจริงในขณะที่ฉันมักจะพบปัญหาเหล่านี้ในรูปแบบของการกำหนดค่าผลิตภัณฑ์ที่เป็นไปได้
แนวคิดพื้นฐานของปัญหาประเภทนี้ง่ายมาก: คุณเพิ่มคุณสมบัติให้กับผลิตภัณฑ์ แต่อย่างใดสิ่งที่ซับซ้อนเนื่องจากการรวมกันของคุณสมบัติที่มีอยู่อื่น ๆ ในที่สุด QA พบปัญหากับชุดค่าผสมที่หายากซึ่งไม่มีใครคิดมาก่อนและสิ่งที่ควรเป็นตัวแก้ไขข้อบกพร่องอย่างง่าย ๆ ก็อาจกลายเป็นการต้องการการเปลี่ยนแปลงการออกแบบที่สำคัญ
มิติของปัญหาการแยกคุณลักษณะนี้มีความซับซ้อนที่เหลือเชื่อ สมมติว่าเวอร์ชันซอฟต์แวร์ปัจจุบันมีN
คุณสมบัติและคุณเพิ่มคุณสมบัติใหม่หนึ่งรายการ นอกจากนี้เราจะทำให้สิ่งต่าง ๆ ง่ายขึ้นด้วยการบอกว่าคุณลักษณะแต่ละอย่างสามารถเปิดหรือปิดได้เท่านั้นจากนั้นคุณ2^(N+1)
มีการผสมผสานคุณสมบัติที่เป็นไปได้ที่จะต้องพิจารณา เนื่องจากการขาดการใช้ถ้อยคำที่ดีกว่า / คำค้นหา, ผมหมายถึงการดำรงอยู่ของชุดเหล่านี้เป็นปัญหาคุณลักษณะที่สี่แยก (คะแนนโบนัสสำหรับคำตอบรวมถึงการอ้างอิงสำหรับคำที่กำหนดขึ้น)
ตอนนี้คำถามที่ฉันต่อสู้คือวิธีจัดการกับปัญหาความซับซ้อนนี้ในแต่ละระดับของกระบวนการพัฒนา สำหรับเหตุผลด้านราคาที่ชัดเจนมันเป็นไปไม่ได้จนถึงจุดที่เป็นอุดมคติที่ต้องการแยกแต่ละชุดค่าผสม ท้ายที่สุดเราพยายามหลีกเลี่ยงอัลกอริธึมที่ซับซ้อนแบบเอกซ์โปเนนเชียลเพื่อเหตุผลที่ดี แต่เพื่อเปลี่ยนกระบวนการพัฒนาให้กลายเป็นสัตว์ประหลาดขนาดเอ็กซ์โพเนนเชียล
ดังนั้นคุณจะได้รับผลลัพธ์ที่ดีที่สุดในแบบที่เป็นระบบที่ไม่ระเบิดงบประมาณใด ๆ และเสร็จสมบูรณ์ในวิธีที่เหมาะสมมีประโยชน์และเป็นที่ยอมรับอย่างมืออาชีพ
ข้อมูลจำเพาะ: เมื่อคุณระบุคุณลักษณะใหม่ - คุณจะมั่นใจได้อย่างไรว่ามันเล่นได้ดีกับเด็กคนอื่น ๆ ทั้งหมด?
ฉันสามารถเห็นได้ว่ามีใครสามารถตรวจสอบแต่ละคุณลักษณะที่มีอยู่ร่วมกับคุณลักษณะใหม่อย่างเป็นระบบ แต่จะแยกคุณลักษณะอื่น ๆ เมื่อพิจารณาถึงลักษณะที่ซับซ้อนของคุณลักษณะบางอย่างมุมมองที่แยกได้นี้มักเกี่ยวข้องกันอยู่แล้วเพื่อให้ต้องการแนวทางแบบมีโครงสร้างในตัวเองโดยไม่คำนึงถึง
2^(N-1)
ปัจจัยที่เกิดจากคุณสมบัติอื่น ๆ ที่เราไม่สนใจการติดตั้งใช้งาน: เมื่อคุณติดตั้งฟีเจอร์ - คุณจะมั่นใจได้อย่างไรว่าโค้ดของคุณโต้ตอบ / ตัดกันอย่างถูกต้องในทุกกรณี
อีกครั้งฉันสงสัยเกี่ยวกับความซับซ้อนที่แท้จริง ฉันรู้เทคนิคต่าง ๆ เพื่อลดความผิดพลาดที่อาจเกิดขึ้นของฟีเจอร์การตัดกันสองแบบ แต่ไม่มีสิ่งใดที่จะขยายในรูปแบบที่สมเหตุสมผล ฉันคิดว่าเป็นกลยุทธ์ที่ดีในระหว่างการกำหนดควรเก็บปัญหาในระหว่างการดำเนินการ
การตรวจสอบ: เมื่อคุณทดสอบคุณสมบัติ - คุณจัดการกับความจริงได้อย่างไรว่าคุณสามารถทดสอบเพียงเสี้ยวหนึ่งของพื้นที่จุดตัดคุณลักษณะนี้ได้อย่างไร
มันยากพอที่จะรู้ว่าการทดสอบคุณสมบัติแยกเดี่ยวรับรองว่าไม่มีสิ่งใดใกล้กับรหัสที่ปราศจากข้อผิดพลาด แต่เมื่อคุณลดขนาดลงเหลือเพียงเศษเสี้ยว
2^-N
ดูเหมือนว่าการทดสอบหลายร้อยครั้งไม่ครอบคลุมแม้แต่หยดน้ำเดียวในมหาสมุทรทั้งหมดรวมกัน . ยิ่งแย่กว่านั้นข้อผิดพลาดที่เป็นปัญหามากที่สุดคือสิ่งที่เกิดจากจุดตัดของคุณลักษณะซึ่งอาจไม่คาดว่าจะนำไปสู่ปัญหาใด ๆ - แต่คุณจะทดสอบสิ่งเหล่านี้อย่างไรถ้าคุณไม่คาดหวังว่าจะมีจุดตัดที่แข็งแกร่งเช่นนี้
ในขณะที่ฉันต้องการได้ยินว่าคนอื่นจัดการกับปัญหานี้ได้อย่างไรฉันสนใจหลักวรรณกรรมหรือบทความที่วิเคราะห์หัวข้อในเชิงลึกยิ่งขึ้น ดังนั้นหากคุณทำตามกลยุทธ์บางอย่างเป็นการส่วนตัวที่จะรวมแหล่งข้อมูลที่เกี่ยวข้องไว้ในคำตอบของคุณ