मजबूती (कंप्यूटर विज्ञान)

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

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

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

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

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

वर्तमान में, कंप्यूटर विज्ञान पद्धतियाँ दृढ़ता सिस्टम बनाने पर ध्यान केंद्रित नहीं करती हैं। किन्तु, वे स्केलेबिलिटी और एल्गोरिथम दक्षता पर ध्यान केंद्रित करते हैं। वर्तमान समय में दृढ़ता पर ध्यान न देने का मुख्य कारण यह है कि इसे सामान्य विधि से करना कठिन है।

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

सिद्धांत

 * व्यामोह: इस प्रकार से सॉफ़्टवेयर बनाते समय, प्रोग्रामर यह मान लेता है कि उपयोगकर्ता उनके कोड को तोड़ना चाहते हैं। और प्रोग्रामर यह भी मानता है कि उनका स्वयं का लिखित कोड विफल हो सकता है या गलत विधि से काम कर सकता है।


 * अज्ञानता : प्रोग्रामर मानता है कि उपयोगकर्ता गलत, परिहास और विकृत इनपुट की परीक्षा लेना है । और परिणाम स्वरूप, प्रोग्रामर उपयोगकर्ता को स्पष्ट, सहज त्रुटि संदेश लौटाता है जिसके लिए त्रुटि कोड देखने की आवश्यकता नहीं होती है। त्रुटि संदेश को उपयोगकर्ता को भ्रमित किए बिना यथासंभव सटीक होने का प्रयास करना चाहिए, जिससे समस्या को सरलता से ठीक की जा सकती है।


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


 * असंभावित (सॉफ़्टवेयर विकास): अधिक बार, कोड को संशोधित किया जाता है और असंभव स्तिथि घटित होने की संभावना उत्पन्न हो सकती है। इसलिए असंभव विषय को अत्यधिक असंभावित माना जाता है। डेवलपर इस बारे में सोचता है कि उस स्तिथियों को कैसे संभालना है जो अधिक असंभावित होते है, और तदनुसार हैंडलिंग प्रयुक्त करता है।

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

दृढ़ता नेटवर्क डिज़ाइन
दृढ़ता नेटवर्क डिज़ाइन परिवर्तनशील या अनिश्चित माँगों की स्थिति में नेटवर्क डिज़ाइन का अध्ययन करते है। अर्थ में, परिवर्तन या इनपुट की विशाल संभावनाओं के कारण नेटवर्क डिज़ाइन में दृढ़ता सॉफ्टवेयर डिज़ाइन में दृढ़ता की तरह ही व्यापक होते है।

दृढ़ता एल्गोरिदम
इस प्रकार से ऐसे एल्गोरिदम उपस्तिथ होते हैं जो इनपुट में त्रुटियों को सहन कर सकते हैं।

यह भी देखें

 * रक्षात्मक प्रोग्रामिंग
 * गैर-कार्यात्मक आवश्यकता