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

From Vigyanwiki
(Created page with "{{short description|Ability of a computer system to cope with errors during execution}} {{see also|Fault-tolerant computer system}} {{Complex systems}} कंप्यू...")
 
No edit summary
Line 3: Line 3:
{{Complex systems}}
{{Complex systems}}


[[कंप्यूटर विज्ञान]] में, मजबूती [[निष्पादन (कंप्यूटिंग)]] के दौरान [[त्रुटि संदेश]] से निपटने के लिए कंप्यूटर सिस्टम की क्षमता है<ref>{{cite web|url=http://dl.ifip.org/db/conf/pts/testcom2005/FernandezMP05.pdf |title=मजबूती परीक्षण के लिए एक मॉडल-आधारित दृष्टिकोण|website=Dl.ifip.org |access-date=2016-11-13}}</ref><ref name="IEEE">1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 defines robustness as "The degree to which a system or component can function correctly in the presence of invalid inputs or stressful environmental conditions"</ref> और ग़लत इनपुट से निपटें।<ref name="IEEE"/>मजबूती कंप्यूटर विज्ञान के कई क्षेत्रों को शामिल कर सकती है, जैसे [[रक्षात्मक प्रोग्रामिंग]], [[ओवरफिटिंग]] और [[मजबूत सुरक्षा नेटवर्क]]। औपचारिक तकनीकें, जैसे [[फ़ज़ परीक्षण]], मजबूती दिखाने के लिए आवश्यक हैं क्योंकि इस प्रकार के परीक्षण में अमान्य या अप्रत्याशित इनपुट शामिल होते हैं। वैकल्पिक रूप से, मजबूती का परीक्षण करने के लिए [[ दोष इंजेक्शन ]] का उपयोग किया जा सकता है। विभिन्न वाणिज्यिक उत्पाद सॉफ़्टवेयर विश्लेषण की मजबूती का परीक्षण करते हैं।<ref>{{cite journal|url=http://www.stanford.edu/~bakerjw/Publications/Baker%20et%20al%20(2008)%20Robustness,%20Structural%20Safety.pdf |title= मजबूती के आकलन पर|access-date=2016-11-13|doi=10.1016/j.strusafe.2006.11.004|volume=30|year=2008|journal=Structural Safety|pages=253–267  | last1 = Baker | first1 = Jack W. | last2 = Schubert | first2 = Matthias | last3 = Faber | first3 = Michael H.|issue= 3}}</ref>
[[कंप्यूटर विज्ञान]] में, मजबूती [[निष्पादन (कंप्यूटिंग)]] के दौरान [[त्रुटि संदेश]] से निपटने के लिए कंप्यूटर सिस्टम की क्षमता है<ref>{{cite web|url=http://dl.ifip.org/db/conf/pts/testcom2005/FernandezMP05.pdf |title=मजबूती परीक्षण के लिए एक मॉडल-आधारित दृष्टिकोण|website=Dl.ifip.org |access-date=2016-11-13}}</ref><ref name="IEEE">1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 defines robustness as "The degree to which a system or component can function correctly in the presence of invalid inputs or stressful environmental conditions"</ref> और ग़लत इनपुट से निपटें।<ref name="IEEE"/>मजबूती कंप्यूटर विज्ञान के कई क्षेत्रों को शामिल कर सकती है, जैसे [[रक्षात्मक प्रोग्रामिंग]], [[ओवरफिटिंग]] और [[मजबूत सुरक्षा नेटवर्क]]। औपचारिक तकनीकें, जैसे [[फ़ज़ परीक्षण]], मजबूती दिखाने के लिए आवश्यक हैं क्योंकि इस प्रकार के परीक्षण में अमान्य या अप्रत्याशित इनपुट शामिल होते हैं। वैकल्पिक रूप से, मजबूती का परीक्षण करने के लिए [[ दोष इंजेक्शन |दोष इंजेक्शन]] का उपयोग किया जा सकता है। विभिन्न वाणिज्यिक उत्पाद सॉफ़्टवेयर विश्लेषण की मजबूती का परीक्षण करते हैं।<ref>{{cite journal|url=http://www.stanford.edu/~bakerjw/Publications/Baker%20et%20al%20(2008)%20Robustness,%20Structural%20Safety.pdf |title= मजबूती के आकलन पर|access-date=2016-11-13|doi=10.1016/j.strusafe.2006.11.004|volume=30|year=2008|journal=Structural Safety|pages=253–267  | last1 = Baker | first1 = Jack W. | last2 = Schubert | first2 = Matthias | last3 = Faber | first3 = Michael H.|issue= 3}}</ref>
 
 
== परिचय ==
== परिचय ==
सामान्य तौर पर, संभावित विफलता के हर बिंदु को शामिल करने वाली मजबूत प्रणालियों का निर्माण करना मुश्किल होता है क्योंकि संभावित इनपुट और इनपुट संयोजनों की विशाल मात्रा होती है।<ref name="MIT">{{cite web|url=http://groups.csail.mit.edu/mac/users/gjs/6.945/readings/robust-systems.pdf |title=मजबूत प्रणालियों का निर्माण एक निबंध|author=Gerald Jay Sussman |date=January 13, 2007 |website=Groups.csail.mit.edu |access-date=2016-11-13}}</ref> चूंकि सभी इनपुट और इनपुट संयोजनों को परीक्षण करने के लिए बहुत अधिक समय की आवश्यकता होगी, इसलिए डेवलपर्स सभी मामलों को विस्तृत रूप से नहीं चला सकते हैं। इसके बजाय, डेवलपर ऐसे मामलों को सामान्य बनाने का प्रयास करेगा।<ref>{{cite web|last=Joseph |first=Joby |url=http://www.softwaretestingclub.com/profiles/blogs/importance-of-making |title=सामान्यीकृत टेस्टकेस बनाने का महत्व - सॉफ्टवेयर परीक्षण क्लब - एक ऑनलाइन सॉफ्टवेयर परीक्षण समुदाय|publisher=Software Testing Club |date=2009-09-21 |access-date=2016-11-13}}</ref> उदाहरण के लिए, कुछ [[पूर्णांक (कंप्यूटर विज्ञान)]] इनपुट करने की कल्पना करें। कुछ चयनित इनपुट में एक ऋणात्मक संख्या, शून्य और एक धनात्मक संख्या शामिल हो सकती है। इस तरह से सॉफ़्टवेयर का परीक्षण करने के लिए इन नंबरों का उपयोग करते समय, डेवलपर सभी वास्तविकताओं के सेट को तीन नंबरों में सामान्यीकृत करता है। यह अधिक कुशल और प्रबंधनीय तरीका है, लेकिन विफलता की अधिक संभावना है। परीक्षण मामलों को सामान्य बनाना विफलता से निपटने के लिए सिर्फ एक तकनीक का एक उदाहरण है - विशेष रूप से, अमान्य उपयोगकर्ता इनपुट के कारण विफलता। सिस्टम आम तौर पर अन्य कारणों से भी विफल हो सकते हैं, जैसे नेटवर्क से डिस्कनेक्ट होना।
सामान्य तौर पर, संभावित विफलता के हर बिंदु को शामिल करने वाली मजबूत प्रणालियों का निर्माण करना मुश्किल होता है क्योंकि संभावित इनपुट और इनपुट संयोजनों की विशाल मात्रा होती है।<ref name="MIT">{{cite web|url=http://groups.csail.mit.edu/mac/users/gjs/6.945/readings/robust-systems.pdf |title=मजबूत प्रणालियों का निर्माण एक निबंध|author=Gerald Jay Sussman |date=January 13, 2007 |website=Groups.csail.mit.edu |access-date=2016-11-13}}</ref> चूंकि सभी इनपुट और इनपुट संयोजनों को परीक्षण करने के लिए बहुत अधिक समय की आवश्यकता होगी, इसलिए डेवलपर्स सभी मामलों को विस्तृत रूप से नहीं चला सकते हैं। इसके बजाय, डेवलपर ऐसे मामलों को सामान्य बनाने का प्रयास करेगा।<ref>{{cite web|last=Joseph |first=Joby |url=http://www.softwaretestingclub.com/profiles/blogs/importance-of-making |title=सामान्यीकृत टेस्टकेस बनाने का महत्व - सॉफ्टवेयर परीक्षण क्लब - एक ऑनलाइन सॉफ्टवेयर परीक्षण समुदाय|publisher=Software Testing Club |date=2009-09-21 |access-date=2016-11-13}}</ref> उदाहरण के लिए, कुछ [[पूर्णांक (कंप्यूटर विज्ञान)]] इनपुट करने की कल्पना करें। कुछ चयनित इनपुट में ऋणात्मक संख्या, शून्य और धनात्मक संख्या शामिल हो सकती है। इस तरह से सॉफ़्टवेयर का परीक्षण करने के लिए इन नंबरों का उपयोग करते समय, डेवलपर सभी वास्तविकताओं के सेट को तीन नंबरों में सामान्यीकृत करता है। यह अधिक कुशल और प्रबंधनीय तरीका है, लेकिन विफलता की अधिक संभावना है। परीक्षण मामलों को सामान्य बनाना विफलता से निपटने के लिए सिर्फ तकनीक का उदाहरण है - विशेष रूप से, अमान्य उपयोगकर्ता इनपुट के कारण विफलता। सिस्टम आम तौर पर अन्य कारणों से भी विफल हो सकते हैं, जैसे नेटवर्क से डिस्कनेक्ट होना।


भले ही, जटिल प्रणालियों को अभी भी सामने आने वाली किसी भी त्रुटि को शालीनता से संभालना चाहिए। ऐसी सफल प्रणालियों के कई उदाहरण हैं। कुछ सबसे मजबूत प्रणालियाँ विकसित की जा सकती हैं और इन्हें आसानी से नई परिस्थितियों में अनुकूलित किया जा सकता है।<ref name="MIT" />
भले ही, जटिल प्रणालियों को अभी भी सामने आने वाली किसी भी त्रुटि को शालीनता से संभालना चाहिए। ऐसी सफल प्रणालियों के कई उदाहरण हैं। कुछ सबसे मजबूत प्रणालियाँ विकसित की जा सकती हैं और इन्हें आसानी से नई परिस्थितियों में अनुकूलित किया जा सकता है।<ref name="MIT" />
== चुनौतियाँ ==
== चुनौतियाँ ==
प्रोग्राम और सॉफ़्टवेयर एक बहुत ही विशिष्ट कार्य पर केंद्रित उपकरण हैं, और इस प्रकार सामान्यीकृत और लचीले नहीं होते हैं।<ref name="MIT" />हालाँकि, [[इंटरनेट]] या जैविक प्रणालियों जैसी प्रणालियों में अवलोकन उनके वातावरण के प्रति अनुकूलन को प्रदर्शित करते हैं। जैविक प्रणालियों को पर्यावरण के अनुकूल बनाने का एक तरीका अतिरेक का उपयोग है।<ref name="MIT" />मनुष्य में कई अंग अनावश्यक हैं। [[किडनी]] इसका एक उदाहरण है। मनुष्य को आम तौर पर केवल एक किडनी की आवश्यकता होती है, लेकिन दूसरी किडनी होने से विफलता की गुंजाइश बनी रहती है। सॉफ़्टवेयर पर लागू करने के लिए इसी सिद्धांत को अपनाया जा सकता है, लेकिन कुछ चुनौतियाँ हैं।
प्रोग्राम और सॉफ़्टवेयर बहुत ही विशिष्ट कार्य पर केंद्रित उपकरण हैं, और इस प्रकार सामान्यीकृत और लचीले नहीं होते हैं।<ref name="MIT" /> हालाँकि, [[इंटरनेट]] या जैविक प्रणालियों जैसी प्रणालियों में अवलोकन उनके वातावरण के प्रति अनुकूलन को प्रदर्शित करते हैं। जैविक प्रणालियों को पर्यावरण के अनुकूल बनाने का तरीका अतिरेक का उपयोग है।<ref name="MIT" />मनुष्य में कई अंग अनावश्यक हैं। [[किडनी]] इसका उदाहरण है। मनुष्य को आम तौर पर केवल किडनी की आवश्यकता होती है, लेकिन दूसरी किडनी होने से विफलता की गुंजाइश बनी रहती है। सॉफ़्टवेयर पर लागू करने के लिए इसी सिद्धांत को अपनाया जा सकता है, लेकिन कुछ चुनौतियाँ हैं।
कंप्यूटर विज्ञान में अतिरेक के सिद्धांत को लागू करते समय आँख बंद करके कोड जोड़ने का सुझाव नहीं दिया जाता है। आँख बंद करके कोड जोड़ने से अधिक त्रुटियाँ उत्पन्न होती हैं, सिस्टम अधिक जटिल हो जाता है, और इसे समझना कठिन हो जाता है।<ref>{{cite web|url=http://www.cse.sc.edu/~huhns/journalpapers/V6N2.pdf |title=मजबूत प्रणालियों का निर्माण एक निबंध|author=Agents on the wEb : Robust Software |website=Cse.sc.edu |access-date=2016-11-13}}</ref> वह कोड जो पहले से मौजूद कोड को कोई सुदृढीकरण प्रदान नहीं करता वह अवांछित है। इसके बजाय नए कोड में समतुल्य [[फ़ंक्शन (इंजीनियरिंग)]] होना चाहिए, ताकि यदि कोई फ़ंक्शन टूट जाए, तो वही फ़ंक्शन प्रदान करने वाला दूसरा मैन्युअल या स्वचालित सॉफ़्टवेयर विविधता का उपयोग करके इसे प्रतिस्थापित कर सके। ऐसा करने के लिए, नए कोड को पता होना चाहिए कि विफलता बिंदु को कैसे और कब समायोजित किया जाए।<ref name="MIT" />इसका मतलब है कि सिस्टम में और अधिक [[तर्क]] जोड़ने की जरूरत है। लेकिन जैसे-जैसे कोई सिस्टम अधिक तर्क, सॉफ़्टवेयर घटक#सॉफ़्टवेयर घटक जोड़ता है, और आकार में बढ़ता है, यह और अधिक जटिल हो जाता है। इस प्रकार, अधिक अनावश्यक प्रणाली बनाते समय, सिस्टम भी अधिक जटिल हो जाता है और डेवलपर्स को जटिलता के साथ अतिरेक को संतुलित करने पर विचार करना चाहिए।
कंप्यूटर विज्ञान में अतिरेक के सिद्धांत को लागू करते समय आँख बंद करके कोड जोड़ने का सुझाव नहीं दिया जाता है। आँख बंद करके कोड जोड़ने से अधिक त्रुटियाँ उत्पन्न होती हैं, सिस्टम अधिक जटिल हो जाता है, और इसे समझना कठिन हो जाता है।<ref>{{cite web|url=http://www.cse.sc.edu/~huhns/journalpapers/V6N2.pdf |title=मजबूत प्रणालियों का निर्माण एक निबंध|author=Agents on the wEb : Robust Software |website=Cse.sc.edu |access-date=2016-11-13}}</ref> वह कोड जो पहले से मौजूद कोड को कोई सुदृढीकरण प्रदान नहीं करता वह अवांछित है। इसके बजाय नए कोड में समतुल्य [[फ़ंक्शन (इंजीनियरिंग)]] होना चाहिए, ताकि यदि कोई फ़ंक्शन टूट जाए, तो वही फ़ंक्शन प्रदान करने वाला दूसरा मैन्युअल या स्वचालित सॉफ़्टवेयर विविधता का उपयोग करके इसे प्रतिस्थापित कर सके। ऐसा करने के लिए, नए कोड को पता होना चाहिए कि विफलता बिंदु को कैसे और कब समायोजित किया जाए।<ref name="MIT" /> इसका मतलब है कि सिस्टम में और अधिक [[तर्क]] जोड़ने की जरूरत है। लेकिन जैसे-जैसे कोई सिस्टम अधिक तर्क, सॉफ़्टवेयर घटक#सॉफ़्टवेयर घटक जोड़ता है, और आकार में बढ़ता है, यह और अधिक जटिल हो जाता है। इस प्रकार, अधिक अनावश्यक प्रणाली बनाते समय, सिस्टम भी अधिक जटिल हो जाता है और डेवलपर्स को जटिलता के साथ अतिरेक को संतुलित करने पर विचार करना चाहिए।
 
वर्तमान में, कंप्यूटर विज्ञान पद्धतियाँ मजबूत सिस्टम बनाने पर ध्यान केंद्रित नहीं करती हैं।<ref name="MIT" />बल्कि, वे [[ scalability ]] और [[एल्गोरिथम दक्षता]] पर ध्यान केंद्रित करते हैं। आज मजबूती पर ध्यान न देने का एक मुख्य कारण यह है कि इसे सामान्य तरीके से करना कठिन है।<ref name="MIT" />
 


वर्तमान में, कंप्यूटर विज्ञान पद्धतियाँ मजबूत सिस्टम बनाने पर ध्यान केंद्रित नहीं करती हैं।<ref name="MIT" /> बल्कि, वे [[ scalability |scalability]] और [[एल्गोरिथम दक्षता]] पर ध्यान केंद्रित करते हैं। आज मजबूती पर ध्यान न देने का मुख्य कारण यह है कि इसे सामान्य तरीके से करना कठिन है।<ref name="MIT" />
== क्षेत्र ==
== क्षेत्र ==


=== मजबूत प्रोग्रामिंग ===
=== मजबूत प्रोग्रामिंग ===
रोबस्ट प्रोग्रामिंग प्रोग्रामिंग की एक शैली है जो अप्रत्याशित समाप्ति और अप्रत्याशित कार्यों को संभालने पर केंद्रित है।<ref name="robust_programming">{{cite web|url=http://nob.cs.ucdavis.edu/bishop/secprog/robust.html |title=मजबूत प्रोग्रामिंग|website=Nob.cs.ucdavis.edu |access-date=2016-11-13}}</ref> सटीक और स्पष्ट त्रुटि संदेशों को प्रदर्शित करके इन समाप्ति और कार्यों को शानदार ढंग से संभालने के लिए कोड की आवश्यकता होती है। ये त्रुटि संदेश उपयोगकर्ता को प्रोग्राम को अधिक आसानी से डीबग करने की अनुमति देते हैं।
रोबस्ट प्रोग्रामिंग प्रोग्रामिंग की शैली है जो अप्रत्याशित समाप्ति और अप्रत्याशित कार्यों को संभालने पर केंद्रित है।<ref name="robust_programming">{{cite web|url=http://nob.cs.ucdavis.edu/bishop/secprog/robust.html |title=मजबूत प्रोग्रामिंग|website=Nob.cs.ucdavis.edu |access-date=2016-11-13}}</ref> सटीक और स्पष्ट त्रुटि संदेशों को प्रदर्शित करके इन समाप्ति और कार्यों को शानदार ढंग से संभालने के लिए कोड की आवश्यकता होती है। ये त्रुटि संदेश उपयोगकर्ता को प्रोग्राम को अधिक आसानी से डीबग करने की अनुमति देते हैं।


==== सिद्धांत ====
==== सिद्धांत ====
;व्यामोह: सॉफ़्टवेयर बनाते समय, प्रोग्रामर यह मान लेता है कि उपयोगकर्ता उनके कोड को तोड़ना चाहते हैं।<ref name="robust_programming" />प्रोग्रामर यह भी मानता है कि उनका स्वयं का लिखित कोड विफल हो सकता है या गलत तरीके से काम कर सकता है।<ref name="robust_programming" />
;व्यामोह: सॉफ़्टवेयर बनाते समय, प्रोग्रामर यह मान लेता है कि उपयोगकर्ता उनके कोड को तोड़ना चाहते हैं।<ref name="robust_programming" />प्रोग्रामर यह भी मानता है कि उनका स्वयं का लिखित कोड विफल हो सकता है या गलत तरीके से काम कर सकता है।<ref name="robust_programming" />


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


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


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


===मजबूत मशीन लर्निंग===
===मजबूत मशीन लर्निंग===
मजबूत मशीन लर्निंग आमतौर पर मशीन लर्निंग एल्गोरिदम की मजबूती को संदर्भित करता है। मशीन लर्निंग एल्गोरिदम को मजबूत माने जाने के लिए, या तो परीक्षण त्रुटि को प्रशिक्षण त्रुटि के अनुरूप होना चाहिए, या डेटासेट में कुछ शोर जोड़ने के बाद प्रदर्शन स्थिर होना चाहिए।<ref>{{cite web |author=El Sayed Mahmoud|title=What is the definition of the robustness of a machine learning algorithm? |url=https://www.researchgate.net/post/What_is_the_definition_of_the_robustness_of_a_machine_learning_algorithm |access-date=2016-11-13}}</ref> हाल ही में, उनकी लोकप्रियता में लगातार वृद्धि के साथ, तंत्रिका नेटवर्क की मजबूती में रुचि बढ़ रही है। यह विशेष रूप से प्रतिकूल हमलों के प्रति उनकी संवेदनशीलता के कारण है।<ref>{{cite arXiv |last1=Li |first1=Linyi |last2=Xie |first2=Tao |last3=Li |first3=Bo |title=SoK: Certified Robustness for Deep Neural Networks |eprint=2009.04131 |date=9 September 2022|class=cs.LG }}</ref>
मजबूत मशीन लर्निंग आमतौर पर मशीन लर्निंग एल्गोरिदम की मजबूती को संदर्भित करता है। मशीन लर्निंग एल्गोरिदम को मजबूत माने जाने के लिए, या तो परीक्षण त्रुटि को प्रशिक्षण त्रुटि के अनुरूप होना चाहिए, या डेटासेट में कुछ शोर जोड़ने के बाद प्रदर्शन स्थिर होना चाहिए।<ref>{{cite web |author=El Sayed Mahmoud|title=What is the definition of the robustness of a machine learning algorithm? |url=https://www.researchgate.net/post/What_is_the_definition_of_the_robustness_of_a_machine_learning_algorithm |access-date=2016-11-13}}</ref> हाल ही में, उनकी लोकप्रियता में लगातार वृद्धि के साथ, तंत्रिका नेटवर्क की मजबूती में रुचि बढ़ रही है। यह विशेष रूप से प्रतिकूल हमलों के प्रति उनकी संवेदनशीलता के कारण है।<ref>{{cite arXiv |last1=Li |first1=Linyi |last2=Xie |first2=Tao |last3=Li |first3=Bo |title=SoK: Certified Robustness for Deep Neural Networks |eprint=2009.04131 |date=9 September 2022|class=cs.LG }}</ref>
===मजबूत नेटवर्क डिज़ाइन===
===मजबूत नेटवर्क डिज़ाइन===
मजबूत नेटवर्क डिज़ाइन परिवर्तनशील या अनिश्चित माँगों की स्थिति में नेटवर्क डिज़ाइन का अध्ययन है।<ref>{{cite web|url=http://www-math.mit.edu/~olver/thesis.pdf |title=मजबूत नेटवर्क डिज़ाइन|website=Math.mit.edu |access-date=2016-11-13}}</ref> एक अर्थ में, परिवर्तन या इनपुट की विशाल संभावनाओं के कारण नेटवर्क डिज़ाइन में मजबूती सॉफ्टवेयर डिज़ाइन में मजबूती की तरह ही व्यापक है।
मजबूत नेटवर्क डिज़ाइन परिवर्तनशील या अनिश्चित माँगों की स्थिति में नेटवर्क डिज़ाइन का अध्ययन है।<ref>{{cite web|url=http://www-math.mit.edu/~olver/thesis.pdf |title=मजबूत नेटवर्क डिज़ाइन|website=Math.mit.edu |access-date=2016-11-13}}</ref> अर्थ में, परिवर्तन या इनपुट की विशाल संभावनाओं के कारण नेटवर्क डिज़ाइन में मजबूती सॉफ्टवेयर डिज़ाइन में मजबूती की तरह ही व्यापक है।


=== मजबूत एल्गोरिदम ===
=== मजबूत एल्गोरिदम ===


ऐसे एल्गोरिदम मौजूद हैं जो इनपुट में त्रुटियों को सहन करते हैं।<ref>{{cite book |last1=Carbin |first1=Michael |title=Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10 |last2=Rinard |first2=Martin C. |chapter=Automatically identifying critical input regions and code in applications |date=12 July 2010 |pages=37–48 |doi=10.1145/1831708.1831713 |publisher=ACM |isbn=9781605588230 |s2cid=1147058 |chapter-url=http://people.csail.mit.edu/rinard/paper/issta10.pdf}}</ref>
ऐसे एल्गोरिदम मौजूद हैं जो इनपुट में त्रुटियों को सहन करते हैं।<ref>{{cite book |last1=Carbin |first1=Michael |title=Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10 |last2=Rinard |first2=Martin C. |chapter=Automatically identifying critical input regions and code in applications |date=12 July 2010 |pages=37–48 |doi=10.1145/1831708.1831713 |publisher=ACM |isbn=9781605588230 |s2cid=1147058 |chapter-url=http://people.csail.mit.edu/rinard/paper/issta10.pdf}}</ref>
==यह भी देखें==
==यह भी देखें==
* रक्षात्मक प्रोग्रामिंग
* रक्षात्मक प्रोग्रामिंग

Revision as of 18:46, 3 July 2023

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

परिचय

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

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

चुनौतियाँ

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

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

क्षेत्र

मजबूत प्रोग्रामिंग

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

सिद्धांत

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

मजबूत मशीन लर्निंग

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

मजबूत नेटवर्क डिज़ाइन

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

मजबूत एल्गोरिदम

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

यह भी देखें

संदर्भ

  1. "मजबूती परीक्षण के लिए एक मॉडल-आधारित दृष्टिकोण" (PDF). Dl.ifip.org. Retrieved 2016-11-13.
  2. 2.0 2.1 1990. IEEE Standard Glossary of Software Engineering Terminology, IEEE Std 610.12-1990 defines robustness as "The degree to which a system or component can function correctly in the presence of invalid inputs or stressful environmental conditions"
  3. Baker, Jack W.; Schubert, Matthias; Faber, Michael H. (2008). "मजबूती के आकलन पर" (PDF). Structural Safety. 30 (3): 253–267. doi:10.1016/j.strusafe.2006.11.004. Retrieved 2016-11-13.
  4. 4.0 4.1 4.2 4.3 4.4 4.5 4.6 Gerald Jay Sussman (January 13, 2007). "मजबूत प्रणालियों का निर्माण एक निबंध" (PDF). Groups.csail.mit.edu. Retrieved 2016-11-13.
  5. Joseph, Joby (2009-09-21). "सामान्यीकृत टेस्टकेस बनाने का महत्व - सॉफ्टवेयर परीक्षण क्लब - एक ऑनलाइन सॉफ्टवेयर परीक्षण समुदाय". Software Testing Club. Retrieved 2016-11-13.
  6. Agents on the wEb : Robust Software. "मजबूत प्रणालियों का निर्माण एक निबंध" (PDF). Cse.sc.edu. Retrieved 2016-11-13.
  7. 7.0 7.1 7.2 7.3 7.4 7.5 "मजबूत प्रोग्रामिंग". Nob.cs.ucdavis.edu. Retrieved 2016-11-13.
  8. El Sayed Mahmoud. "What is the definition of the robustness of a machine learning algorithm?". Retrieved 2016-11-13.
  9. Li, Linyi; Xie, Tao; Li, Bo (9 September 2022). "SoK: Certified Robustness for Deep Neural Networks". arXiv:2009.04131 [cs.LG].
  10. "मजबूत नेटवर्क डिज़ाइन" (PDF). Math.mit.edu. Retrieved 2016-11-13.
  11. Carbin, Michael; Rinard, Martin C. (12 July 2010). "Automatically identifying critical input regions and code in applications" (PDF). Proceedings of the 19th international symposium on Software testing and analysis - ISSTA '10. ACM. pp. 37–48. doi:10.1145/1831708.1831713. ISBN 9781605588230. S2CID 1147058.