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

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