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

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

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

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

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

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

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

सिद्धांत

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


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


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


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

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

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

मजबूत एल्गोरिदम
ऐसे एल्गोरिदम मौजूद हैं जो इनपुट में त्रुटियों को सहन करते हैं।

यह भी देखें

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