मैंने हाल ही में फीचर चौराहों पर इस लेख में बताए गए समान और अधिक समस्याओं को देखा है। इसके लिए एक और टर्म प्रोडक्ट लाइन्स होगी, हालाँकि मैं वास्तव में अलग-अलग प्रोडक्ट्स के लिए इनकी विशेषता रखता हूँ, जबकि मैं आमतौर पर इन समस्याओं का सामना संभावित प्रोडक्ट कॉन्फ़िगरेशन के रूप में करता हूँ।
इस तरह की समस्या का मूल विचार सरल है: आप किसी उत्पाद में एक विशेषता जोड़ते हैं, लेकिन किसी तरह चीजें अन्य मौजूदा सुविधाओं के संयोजन के कारण जटिल हो जाती हैं। आखिरकार, क्यूए को उन विशेषताओं के एक दुर्लभ संयोजन के साथ एक समस्या मिलती है जो पहले किसी ने नहीं सोचा था और जो एक साधारण बगफिक्स होना चाहिए था वह भी प्रमुख डिजाइन परिवर्तनों की आवश्यकता में बदल सकता है।
इस सुविधा चौराहे की समस्या के आयाम एक मन उड़ाने की जटिलता के हैं। मान लीजिए कि वर्तमान सॉफ़्टवेयर संस्करण में N
विशेषताएं हैं और आप एक नई सुविधा जोड़ते हैं। आइए यह कहकर चीजों को भी सरल करें कि प्रत्येक सुविधाओं को केवल चालू या बंद किया जा सकता है, फिर आपके पास पहले से ही 2^(N+1)
विचार करने के लिए संभावित संयोजन हैं। बेहतर शब्दों / खोज शब्दों की कमी के कारण, मैं फीचर संयोजन समस्या के रूप में इन संयोजनों के अस्तित्व का उल्लेख करता हूं । (अधिक स्थापित अवधि के लिए संदर्भ सहित उत्तर के लिए बोनस अंक।)
अब सवाल यह है कि विकास प्रक्रिया के प्रत्येक स्तर पर इस जटिलता की समस्या से कैसे निपटा जाए। स्पष्ट लागत कारणों के लिए, यह यूटोपियन होने के बिंदु तक अव्यावहारिक है, प्रत्येक संयोजन को व्यक्तिगत रूप से संबोधित करना चाहते हैं। आखिरकार, हम एक अच्छे कारण के लिए घातीय जटिलता एल्गोरिदम से दूर रहने की कोशिश करते हैं, लेकिन बहुत ही विकास प्रक्रिया को एक घातीय आकार के राक्षस में बदलने के लिए पूरी तरह से असफलता की ओर ले जाता है।
तो आप एक व्यवस्थित फैशन में सबसे अच्छा परिणाम कैसे प्राप्त करते हैं जो किसी भी बजट को विस्फोट नहीं करता है और एक सभ्य, उपयोगी और पेशेवर रूप से स्वीकार्य तरीके से पूरा होता है।
विशिष्टता: जब आप एक नई सुविधा निर्दिष्ट करते हैं - आप यह कैसे सुनिश्चित करते हैं कि यह अन्य सभी बच्चों के साथ अच्छा खेले?
मैं देख सकता हूं कि एक नई सुविधा के साथ संयोजन में प्रत्येक मौजूदा सुविधा को व्यवस्थित रूप से जांच सकता है - लेकिन यह अन्य विशेषताओं के अलगाव में होगा। कुछ विशेषताओं की जटिल प्रकृति को देखते हुए, यह अलग-थलग दृश्य अक्सर पहले से ही इतना शामिल होता है कि इसे अपने आप में सभी के लिए एक संरचित दृष्टिकोण की आवश्यकता होती है, अकेले अन्य
2^(N-1)
कारकों के कारण होने वाले कारक को छोड़ दें, जिसे किसी ने जानबूझकर अनदेखा किया है।कार्यान्वयन: जब आप एक सुविधा को लागू करते हैं - आप सभी मामलों में अपने कोड को कैसे इंटरैक्ट / चौराहों पर ठीक से सुनिश्चित करते हैं।
फिर से, मैं सरासर जटिलता के बारे में सोच रहा हूँ। मैं दो प्रतिच्छेदन सुविधाओं की त्रुटि क्षमता को कम करने के लिए विभिन्न तकनीकों के बारे में जानता हूं, लेकिन कोई भी ऐसा नहीं है जो किसी भी उचित फैशन में हो। हालांकि, मैं मानता हूं कि विनिर्देश के दौरान एक अच्छी रणनीति कार्यान्वयन के दौरान समस्या को खाड़ी में रखना चाहिए।
सत्यापन: जब आप एक विशेषता का परीक्षण करते हैं - आप इस तथ्य से कैसे निपटते हैं, कि आप केवल इस सुविधा चौराहे के कुछ हिस्सों का परीक्षण कर सकते हैं?
यह जानना काफी कठिन है कि अलगाव में किसी एक विशेषता का परीक्षण करना त्रुटि-रहित कोड के पास कहीं भी कुछ भी गारंटी नहीं देता है, लेकिन जब आप इसे कम कर देते हैं
2^-N
तो ऐसा लगता है कि सैकड़ों परीक्षण संयुक्त सागर में पानी की एक बूंद को भी कवर नहीं कर रहे हैं। । इससे भी बदतर, सबसे अधिक समस्याग्रस्त त्रुटियां वे हैं जो सुविधाओं के प्रतिच्छेदन से उपजी हैं, जो कि किसी भी समस्या के लिए नेतृत्व करने की उम्मीद नहीं कर सकता है - लेकिन अगर आप इस तरह के मजबूत चौराहे की उम्मीद नहीं करते हैं, तो आप कैसे इनका परीक्षण करेंगे?
जबकि मैं यह सुनना चाहता हूं कि अन्य लोग इस समस्या से कैसे निपटते हैं, मैं मुख्य रूप से साहित्य या लेखों में रुचि रखता हूं जो अधिक गहराई से विषय का विश्लेषण करते हैं। इसलिए यदि आप व्यक्तिगत रूप से एक निश्चित रणनीति का पालन करते हैं, तो अपने उत्तर में संबंधित स्रोतों को शामिल करना अच्छा होगा।