मजबूती (कंप्यूटर विज्ञान): 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
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{short description|Ability of a computer system to cope with errors during execution}}
{{short description|Ability of a computer system to cope with errors during execution}}
{{see also|Fault-tolerant computer system}}
{{see also|दोष-सहिष्णु कंप्यूटर प्रणाली}}
{{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 name="MIT" />बल्कि, वे [[ scalability ]] और [[एल्गोरिथम दक्षता]] पर ध्यान केंद्रित करते हैं। आज मजबूती पर ध्यान न देने का एक मुख्य कारण यह है कि इसे सामान्य तरीके से करना कठिन है।<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="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>
==यह भी देखें==
==यह भी देखें==
* रक्षात्मक प्रोग्रामिंग
* रक्षात्मक प्रोग्रामिंग
Line 54: Line 45:
{{Software quality}}
{{Software quality}}
{{Complex systems topics}}
{{Complex systems topics}}
[[Category: स्थिरता अभियांत्रिकी]] [[Category: सॉफ्टवेयर गुणवत्ता]]


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Collapse templates]]
[[Category:Created On 27/06/2023]]
[[Category:Created On 27/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Translated in Hindi]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:सॉफ्टवेयर गुणवत्ता]]
[[Category:स्थिरता अभियांत्रिकी]]

Latest revision as of 12:01, 14 July 2023

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

परिचय

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

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

चुनौतियाँ

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

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

वर्तमान में, कंप्यूटर विज्ञान पद्धतियाँ दृढ़ता सिस्टम बनाने पर ध्यान केंद्रित नहीं करती हैं।[4] किन्तु , वे स्केलेबिलिटी और एल्गोरिथम दक्षता पर ध्यान केंद्रित करते हैं। वर्तमान समय में दृढ़ता पर ध्यान न देने का मुख्य कारण यह है कि इसे सामान्य विधि से करना कठिन है।[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.