Extensibility
विस्तारशीलता एक सॉफ्टवेयर इंजीनियरिंग और सिस्टम डिजाइन सिद्धांत है जो भविष्य के विकास के लिए प्रदान करता है। विस्तारशीलता एक प्रणाली का विस्तार करने की क्षमता और विस्तार को लागू करने के लिए आवश्यक प्रयास के स्तर का एक उपाय है। विस्तार नई कार्यक्षमता को जोड़ने या मौजूदा कार्यक्षमता के संशोधन के माध्यम से हो सकता है। यह सिद्धांत मौजूदा प्रणाली कार्यों को बाधित किए बिना संवर्द्धन प्रदान करता है। एक विस्तार योग्य प्रणाली वह है जिसकी आंतरिक संरचना और डेटा प्रवाह न्यूनतम रूप से या नई या संशोधित कार्यक्षमता से प्रभावित नहीं होते हैं, उदाहरण के लिए निर्माता या अन्य प्रोग्रामरों द्वारा किसी प्रणाली के व्यवहार को बदलते समय मूल स्रोत कोड को पुनः संकलित करना या बदलना अनावश्यक हो सकता है। चूँकि सॉफ्टवेयर प्रणालियाँ लंबे समय तक जीवित रहती हैं और नई सुविधाओं और उपयोगकर्ताओं द्वारा मांगी गई अतिरिक्त कार्यक्षमताओं के लिए संशोधित की जाएंगी, विस्तारशीलता डेवलपर्स को सॉफ्टवेयर की क्षमताओं का विस्तार करने या जोड़ने में सक्षम बनाती है और व्यवस्थित पुनः उपयोग की सुविधा प्रदान करती है। इसके कुछ दृष्टिकोणों में उपयोगकर्ताओं की अपनी कार्यक्रम दिनचर्या को सम्मिलित करने की अनुमति देने की सुविधा और नए डेटा प्रकारों को परिभाषित करने के साथ-साथ नए स्वरूपण मार्कअप टैग को परिभाषित करने की क्षमता शामिल है। सॉफ्टवेयर इंजीनियरिंग में एक्स्टेंसिबल डिज़ाइन एक्स्टेंसिबल डिज़ाइन यह स्वीकार करना है कि सब कुछ पहले से डिज़ाइन नहीं किया जा सकता है। इसके बजाय एक हल्का सॉफ्टवेयर ढांचा प्रदान किया जाता है जो परिवर्तनों की अनुमति देता है। कम सामंजस्य और उच्च युग्मन सहित पारंपरिक सॉफ्टवेयर विकास मुद्दों से बचने और निरंतर विकास की अनुमति देने के लिए, कार्य तत्वों को समझने योग्य इकाइयों में अलग करने के सिद्धांत का पालन करते हुए, विस्तारशीलता के तत्व को खोने से रोकने के लिए छोटे आदेश बनाए जाते हैं। विस्तार योग्य डिजाइन के लिए परिवर्तन को अपनाना आवश्यक है, जिसमें परिवर्धन निरंतर होगा। प्रणाली का प्रत्येक भाग किसी भी परिवर्तन के साथ काम करने योग्य होगा, और जोड़ के माध्यम से परिवर्तन का विचार पूरे प्रणाली डिजाइन का केंद्र है। विस्तार योग्य डिजाइन बार-बार पुनः प्राथमिकता का समर्थन करता है और अनुरोध पर छोटे चरणों में कार्यक्षमता को लागू करने की अनुमति देता है, जो फुर्तीली कार्यप्रणाली और पुनरावृत्ति विकास द्वारा समर्थित सिद्धांत हैं। विस्तारशीलता विकास के दौरान कम और स्वच्छ निर्भरताओं के साथ-साथ कम युग्मन और अधिक सामंजस्यपूर्ण अमूर्तता, साथ ही अच्छी तरह से परिभाषित इंटरफेस को लागू करती है। महत्व चपलता मानव घटना के कारण सभी सॉफ्टवेयर के आधार पर निहित है क्योंकि सॉफ्टवेयर एक "विकसित इकाई" है जिसे मनुष्यों द्वारा विकसित और बनाए रखा जाता है, जिससे सॉफ्टवेयर विनिर्देश और कार्यान्वयन में निरंतर प्रणाली परिवर्तन होते हैं। सॉफ्टवेयर के घटकों को अक्सर असंबंधित पक्षों द्वारा स्वतंत्र रूप से विकसित और तैनात किया जाता है। अनुकूलन योग्य सॉफ्टवेयर घटक आवश्यक हैं क्योंकि बाहरी विक्रेताओं के घटक एक विशिष्ट परिनियोजन परिदृश्य में ऑफ-द-रैक में फिट होने की संभावना नहीं है, निर्माता के अलावा तीसरे पक्ष के उपयोगकर्ताओं को ध्यान में रखते हुए। कई सॉफ्टवेयर सिस्टम और सॉफ्टवेयर उत्पाद-लाइन एक आधार प्रणाली से प्राप्त होते हैं, जो एक सामान्य सॉफ्टवेयर वास्तुकला या कभी-कभी कार्यक्षमता और कार्यान्वयन के बड़े हिस्सों को साझा करते हैं, लेकिन संभवतः विभिन्न घटकों से लैस होते हैं जिनके लिए एक विस्तार योग्य आधार प्रणाली की आवश्यकता होती है। स्वतंत्र रूप से विस्तार योग्य सॉफ्टवेयर प्रणालियों का निर्माण एक महत्वपूर्ण चुनौती है। एक स्वतंत्र रूप से विस्तार योग्य प्रणाली न केवल दो लोगों को स्वतंत्र रूप से प्रणाली में विस्तार विकसित करने की अनुमति देती है, बल्कि वैश्विक अखंडता जांच के बिना दो विस्तारों को संयुक्त करने की भी अनुमति देती है। विस्तारता तंत्र का वर्गीकरण सॉफ्टवेयर विस्तारता के तीन अलग-अलग रूप हैंः व्हाइट-बॉक्स विस्तारता, ग्रे-बॉक्स विस्तारता और ब्लैक-बॉक्स विस्तारता, जो इस बात पर आधारित हैं कि कौन सी कलाकृतियाँ और उन्हें कैसे बदला जाता है। व्हाइट-बॉक्स विस्तारशीलता के इस रूप के तहत, एक सॉफ्टवेयर प्रणाली को स्रोत कोड को संशोधित करके बढ़ाया जा सकता है, और यह सबसे लचीला और कम से कम प्रतिबंधात्मक रूप है। विस्तार के दो उप-रूप हैं, ओपन-बॉक्स विस्तार और ग्लास-बॉक्स विस्तार, जो इस बात पर निर्भर करता है कि परिवर्तन कैसे लागू किए जाते हैं। ओपन-बॉक्स परिवर्तन ओपन-बॉक्स विस्तार योग्य प्रणालियों में आक्रामक रूप से किए जाते हैं; अर्थात। मूल स्रोत कोड को सीधे हैक किया जा रहा है। इसके लिए उपलब्ध स्रोत कोड और संशोधन अनुमत स्रोत कोड लाइसेंस की आवश्यकता होती है। ओपन-बॉक्स एक्सटेंसिबिलिटी बग फिक्सिंग, इंटरनल कोड रीफैक्टरिंग या सॉफ्टवेयर उत्पाद के अगले संस्करण के उत्पादन के लिए सबसे अधिक प्रासंगिक है। ग्लास-बॉक्स ग्लास-बॉक्स विस्तार (जिसे वास्तुकला संचालित ढांचा भी कहा जाता है) एक सॉफ्टवेयर प्रणाली को उपलब्ध स्रोत कोड के साथ विस्तारित करने की अनुमति देता है, लेकिन कोड को संशोधित करने की अनुमति नहीं दे सकता है। विस्तारों को मूल प्रणाली से इस तरह से अलग किया जाना चाहिए कि मूल प्रणाली प्रभावित न हो। विस्तारशीलता के इस रूप का एक उदाहरण वस्तु-उन्मुख अनुप्रयोग ढांचा है जो आमतौर पर विरासत और गतिशील बंधन का उपयोग करके विस्तारशीलता प्राप्त करता है। ब्लैक-बॉक्स विस्तार में (जिसे डेटा-संचालित ढांचा भी कहा जाता है) परिनियोजन या विस्तार को लागू करने के लिए किसी प्रणाली के कार्यान्वयन के बारे में कोई विवरण का उपयोग नहीं किया जाता है; केवल इंटरफेस विनिर्देश प्रदान किए जाते हैं। इस प्रकार का दृष्टिकोण विभिन्न व्हाइट-बॉक्स दृष्टिकोणों की तुलना में अधिक सीमित है। ब्लैक-बॉक्स एक्सटेंशन आमतौर पर सिस्टम कॉन्फ़िगरेशन अनुप्रयोगों या घटक इंटरफेस को परिभाषित करके अनुप्रयोग-विशिष्ट स्क्रिप्टिंग भाषाओं के उपयोग के माध्यम से प्राप्त किए जाते हैं। ग्रे-बॉक्स ग्रे-बॉक्स विस्तारशीलता एक शुद्ध सफेद-बॉक्स और एक शुद्ध ब्लैक-बॉक्स दृष्टिकोण के बीच एक समझौता है, जो पूरी तरह से स्रोत कोड के संपर्क पर निर्भर नहीं करता है। प्रोग्रामरों को प्रणाली का विशेषज्ञता इंटरफेस दिया जा सकता है जो परिष्करण के लिए सभी उपलब्ध अमूर्तताओं और विस्तारों को कैसे विकसित किया जाना चाहिए, इस पर विनिर्देशों को सूचीबद्ध करता है। विस्तारशीलता बनाम पुनः प्रयोज्य विस्तारशीलता और पुनः प्रयोज्य में कई सामान्य गुण हैं, जिनमें कम युग्मन, प्रतिरूपता और उच्च जोखिम वाले तत्वों की कई अलग-अलग सॉफ्टवेयर प्रणालियों के लिए निर्माण करने की क्षमता शामिल है, जो अक्सर सामान्य तत्वों को साझा करने वाले सॉफ्टवेयर प्रणालियों के अवलोकन से प्रेरित होती है। विस्तारशीलता के साथ पुनः प्रयोज्य एक तकनीक को कम विकास और रखरखाव समय के साथ-साथ बढ़ी हुई विश्वसनीयता और निरंतरता के साथ दूसरी परियोजना में स्थानांतरित करने की अनुमति देती है। सुरक्षा आधुनिक ऑपरेटिंग सिस्टम डिवाइस ड्राइवरों और लोड करने योग्य कर्नेल मॉड्यूल के माध्यम से विस्तार का समर्थन करते हैं। कई आधुनिक अनुप्रयोग प्लग-इन, विस्तार भाषाओं, ऐपलेट आदि के माध्यम से विस्तार का समर्थन करते हैं। विस्तारशीलता बढ़ने की प्रवृत्ति सॉफ्टवेयर सुरक्षा को नकारात्मक रूप से प्रभावित करती है। सी. जी. आई. उन प्राथमिक साधनों में से एक है जिसके द्वारा वेब सर्वर विस्तार प्रदान करते हैं। कुछ लोग सी. जी. आई. लिपियों को "एक विशाल सुरक्षा छेद" के रूप में देखते हैं। एक्स्टेंसिबल प्रोग्रामिंग पॉलीमॉर्फिज्म सॉफ्टवेयर मीट्रिक स्केलेबिलिटी एक्स. एम. एल. संदर्भ बाहरी लिंक सॉफ्टवेयर आर्किटेक्चर फरः एक्स्टेंसिबिलिटे भी देखें।