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

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

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

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

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

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

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

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

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

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

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

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

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

यह भी देखें

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

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