एक्स्टेंसिबिलिटी

एक्स्टेंसिबिलिटी एक सॉफ्टवेयर इंजीनियरिंग और प्रणाली डिजाइन सिद्धांत है जो भविष्य के विकास के लिए प्रदान करता है। एक्स्टेंसिबिलिटी एक सिस्टम का विस्तार करने की क्षमता और विस्तार को प्रयुक्त करने के लिए आवश्यक प्रयास के स्तर का एक उपाय है। एक्सटेंशन नई कार्यक्षमता के अतिरिक्त या उपस्थित कार्यक्षमता के संशोधन के माध्यम से हो सकते हैं। सिद्धांत उपस्थित सिस्टम कार्यों को प्रभावित किए बिना संवर्द्धन प्रदान करता है।

एक एक्स्टेंसिबल सिस्टम वह है जिसकी आंतरिक संरचना और डेटा प्रवाह नई या संशोधित कार्यक्षमता से न्यूनतम या प्रभावित नहीं होते हैं, उदाहरण के लिए, सिस्टम के व्यवहार को बदलते समय या तो निर्माता या अन्य प्रोग्रामर द्वारा मूल स्रोत कोड को फिर से जोड़ना या बदलना अनावश्यक हो सकता है। क्योंकि सॉफ्टवेयर सिस्टम लंबे समय तक जीवित रहते हैं और उपयोगकर्ताओं द्वारा मांग की जाने वाली नई सुविधाओं और अतिरिक्त कार्यात्मकताओं के लिए संशोधित किए जाएंगे, विस्तारशीलता डेवलपर्स को सॉफ़्टवेयर की क्षमताओं को विस्तारित करने या जोड़ने में सक्षम बनाती है और व्यवस्थित पुन: उपयोग की सुविधा प्रदान करती है। इसके कुछ दृष्टिकोणों में उपयोगकर्ताओं के अपने प्रोग्राम रूटीन को सम्मिलित करने की अनुमति देने की सुविधा और नए डेटा प्रकारों को परिभाषित करने के साथ-साथ नए स्वरूपण मार्कअप टैग को परिभाषित करने की क्षमता सम्मिलित है।

एक्स्टेंसिबल डिजाइन
सॉफ़्टवेयर इंजीनियरिंग में एक्स्टेंसिबल डिज़ाइन का अर्थ यह स्वीकार करना है कि हर चीज़ पहले से डिज़ाइन नहीं की जा सकती है। इसके अतिरिक्त एक हल्का सॉफ़्टवेयर रूपरेखा प्रदान किया जाता है जो परिवर्तनों की अनुमति देता है। कम सामंजस्य और उच्च युग्मन सहित पारंपरिक सॉफ्टवेयर विकास के उद्देश्य से बचने और निरंतर विकास की अनुमति देने के लिए, कार्य तत्वों को समझने योग्य इकाइयों में अलग करने के सिद्धांत का पालन करते हुए, विस्तारशीलता के तत्व को खोने से रोकने के लिए छोटे कमांड बनाए जाते हैं। एक्स्टेंसिबल डिज़ाइन के लिए परिवर्तन को अपनाना आवश्यक है, जिसमें परिवर्तन निरंतर होते रहेंगे। सिस्टम का प्रत्येक भाग किसी भी बदलाव के साथ काम करने योग्य होगा और जोड़ के माध्यम से बदलाव का विचार पूरे सिस्टम डिजाइन का केंद्र है। एक्स्टेंसिबल डिज़ाइन बार-बार पुनः प्राथमिकता देने का समर्थन करता है और अनुरोध पर छोटे चरणों में कार्यक्षमता को प्रयुक्त करने की अनुमति देता है, जो कि एजाइल कार्यप्रणाली और पुनरावृत्त विकास द्वारा समर्थित सिद्धांत हैं। विस्तारशीलता विकास के समय कम और स्वच्छ निर्भरता प्रयुक्त करती है, साथ ही कम युग्मन और अधिक सुसंगत अमूर्तता, साथ ही अच्छी तरह से परिभाषित इंटरफेस भी प्रयुक्त करती है।

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

स्वतंत्र रूप से एक्स्टेंसिबल सॉफ्टवेयर सिस्टम बनाना एक महत्वपूर्ण चुनौती है। एक स्वतंत्र रूप से एक्स्टेंसिबल सिस्टम न केवल दो लोगों को स्वतंत्र रूप से सिस्टम में एक्सटेंशन विकसित करने की अनुमति देता है, किंतु वैश्विक अखंडता जांच के बिना दो एक्सटेंशन को संयुक्त करने की भी अनुमति देता है।

एक्स्टेंसिबिलिटी मैकेनिज्म का वर्गीकरण
सॉफ़्टवेयर एक्स्टेंसिबिलिटी के तीन अलग-अलग रूप हैं: व्हाइट-बॉक्स एक्स्टेंसिबिलिटी, ग्रे-बॉक्स एक्स्टेंसिबिलिटी, और ब्लैक-बॉक्स एक्स्टेंसिबिलिटी, जो कि किन कलाकृतियों और उन्हें बदलने के विधि पर आधारित हैं।

व्हाइट-बॉक्स
एक्स्टेंसिबिलिटी के इस रूप के अनुसार एक सॉफ्टवेयर सिस्टम को स्रोत कोड को संशोधित करके बढ़ाया जा सकता है, और यह सबसे लचीला और सबसे कम प्रतिबंधात्मक रूप है। विस्तारणीयता के दो उप-रूप हैं, खुले-बक्से विस्तारणीयता और ग्लास-बॉक्स विस्तारणीयता, यह इस बात पर निर्भर करता है कि परिवर्तन कैसे प्रयुक्त किए जाते हैं।

ओपन-बॉक्स
ओपन-बॉक्स एक्स्टेंसिबल सिस्टम में आक्रामक रूप से परिवर्तन किए जाते हैं; अथार्त मूल स्रोत कोड को सीधे हैक किया जा रहा है। इसके लिए उपलब्ध स्रोत कोड और संशोधन की अनुमति स्रोत कोड लाइसेंस की आवश्यकता है। ओपन-बॉक्स एक्स्टेंसिबिलिटी बग फिक्सिंग, आंतरिक कोड रिफैक्टरिंग, या किसी सॉफ्टवेयर उत्पाद के अगले संस्करण के उत्पादन के लिए सबसे अधिक प्रासंगिक है।

ग्लास डिब्बा
ग्लास-बॉक्स एक्स्टेंसिबिलिटी (जिसे आर्किटेक्चर संचालित फ्रेमवर्क भी कहा जाता है) एक सॉफ्टवेयर सिस्टम को उपलब्ध स्रोत कोड के साथ विस्तारित करने की अनुमति देता है, किंतु कोड को संशोधित करने की अनुमति नहीं दे सकता है। एक्सटेंशन को मूल सिस्टम से इस तरह अलग करना होता है कि मूल सिस्टम प्रभावित न हो। एक्स्टेंसिबिलिटी के इस रूप का एक उदाहरण ऑब्जेक्ट-ओरिएंटेड एप्लिकेशन फ्रेमवर्क है जो सामान्यतः इनहेरिटेंस और डायनेमिक बाइंडिंग का उपयोग करके एक्स्टेंसिबिलिटी प्राप्त करते हैं।

ब्लैक-बॉक्स
ब्लैक बॉक्स एक्सटेंसिबिलिटी (जिसे डेटा-ड्रिवन फ्रेमवर्क भी कहा जाता है) में सिस्टम के कार्यान्वयन के बारे में कोई विवरण परिनियोजन या एक्सटेंशन को प्रयुक्त करने के लिए उपयोग नहीं किया जाता है; केवल इंटरफ़ेस (कंप्यूटिंग) प्रदान किया जाता है। इस प्रकार का दृष्टिकोण विभिन्न व्हाइट-बॉक्स दृष्टिकोणों की तुलना में अधिक सीमित है। ब्लैक-बॉक्स एक्सटेंशन सामान्यतः सिस्टम कॉन्फ़िगरेशन एप्लिकेशन या घटक इंटरफेस को परिभाषित करके एप्लिकेशन-विशिष्ट स्क्रिप्टिंग भाषाओं के उपयोग के माध्यम से प्राप्त किए जाते हैं।

ग्रे-बॉक्स
ग्रे-बॉक्स एक्स्टेंसिबिलिटी एक शुद्ध व्हाइट-बॉक्स और एक शुद्ध ब्लैक-बॉक्स दृष्टिकोण के बीच एक समझौता है, जो स्रोत कोड के एक्सपोजर पर पूरी तरह निर्भर नहीं करता है। प्रोग्रामर्स को सिस्टम का स्पेशलाइज़ेशन इंटरफ़ेस दिया जा सकता है जो रिफाइनमेंट के लिए सभी उपलब्ध एब्स्ट्रैक्शन और एक्सटेंशन को कैसे विकसित किया जाना चाहिए, इस पर विनिर्देशों को सूचीबद्ध करता है।

एक्स्टेंसिबिलिटी बनाम पुन: प्रयोज्यता
एक्स्टेंसिबिलिटी और पुन: प्रयोज्यता में कई अलग-अलग सॉफ़्टवेयर सिस्टम के निर्माण के लिए कम युग्मन, मॉड्यूलरिटी और उच्च कठिन परिस्थिति वाले तत्वों की क्षमता सहित समान में कई जोर देने वाले गुण हैं, जो अधिकांशतः सामान्य तत्वों को साझा करने वाले सॉफ़्टवेयर सिस्टम के अवलोकन से प्रेरित होते हैं। एक्स्टेंसिबिलिटी के साथ पुन: प्रयोज्यता एक तकनीक को कम विकास और रखरखाव के समय के साथ-साथ बढ़ी हुई विश्वसनीयता और स्थिरता के साथ किसी अन्य प्रोजेक्ट में स्थानांतरित करने की अनुमति देती है।

सुरक्षा
आधुनिक ऑपरेटिंग सिस्टम डिवाइस ड्राइवर और लोड करने योग्य कर्नेल मॉड्यूल के माध्यम से एक्स्टेंसिबिलिटी का समर्थन करते हैं। कई आधुनिक एप्लिकेशन प्लग-इन (कंप्यूटिंग) या प्लग-इन, विस्तार भाषा, एप्लेट्स आदि के माध्यम से एक्स्टेंसिबिलिटी का समर्थन करते हैं। एक्सटेंसिबिलिटी बढ़ने की प्रवृत्ति सॉफ्टवेयर सुरक्षा को नकारात्मक रूप से प्रभावित करती है।

सीजीआई एक प्राथमिक साधन है जिसके द्वारा वेब सर्वर एक्स्टेंसिबिलिटी प्रदान करते हैं। कुछ लोग सीजीआई स्क्रिप्ट को एक विशाल सुरक्षा छिद्र के रूप में देखते हैं।

यह भी देखें

 * एक्स्टेंसिबल प्रोग्रामिंग
 * बहुरूपता (कंप्यूटर विज्ञान)
 * सॉफ्टवेयर मीट्रिक
 * मापनीयता
 * एक्सएमएल

बाहरी संबंध
Extensibilité