एमआईएसआरए सी (MISRA C)

एमआईएसआरए सी, एमआईएसआरए कंसोर्टियम द्वारा विकसित C क्रमादेशन भाषा के लिए सॉफ्टवेयर विकास दिशानिर्देशों का एक सेट है। इसका उद्देश्य अंत: स्थापित तंत्र के संदर्भ में कूट सुरक्षा, सुरक्षा, पोर्टेबिलिटी और विश्वसनीयता की सुविधा प्रदान करना है, विशेष रूप से आईएसओ सी / सी 90 / सी 99 में क्रमादेश किया गया है। इस लेख में सम्मलित नहीं किए गए एमआईएसआरए सी++ के लिए दिशानिर्देशों का एक सेट भी है।

इतिहास

 * प्रारूप: 1997
 * पहला संस्करण: 1998 (नियम, आवश्यक/परामर्शिका)
 * दूसरा संस्करण: 2004 (नियम, आवश्यक/परामर्शिका)
 * तीसरा संस्करण: 2012 (निर्देश; नियम, निर्णायक/अनिश्चित)
 * एमआईएसआरए अनुपालन: 2016, अद्यतन 2020

एमआईएसआरए सी (1998 और 2004) के पहले दो संस्करणों के लिए सभी दिशानिर्देशों को नियम माना गया। एमआईएसआरए सी: 2012 के प्रकाशन के साथ दिशानिर्देश की एक नई श्रेणी पेश की गई - निर्देश जिसका अनुपालन व्याख्या के लिए अधिक खुला है, या प्रक्रिया या प्रक्रियात्मक स्थितियों से संबंधित है।

दत्तक ग्रहण
चूंकि मूल रूप से विशेष रूप से मोटर वाहन उद्योग पर लक्षित, एमआईएसआरए सी स्वचालितयंत्र, वांतरिक्ष, दूरसंचार, चिकित्सा उपकरणों, रक्षा, रेलवे और अन्य क्षेत्रों में अग्रणी विकासक द्वारा सर्वोत्तम प्रथाओं के लिए व्यापक रूप से स्वीकृत मॉडल के रूप में विकसित हुआ है। उदाहरण के लिए:


 * संयुक्त स्ट्राइक फाइटर परियोजना C++ कूटलेखन मानक एमआईएसआरए सी:1998 पर आधारित हैं।
 * नासा जेट प्रणोदन प्रयोगशाला सी कूटलेखन मानक एमआईएसआरए सी: 2004 पर आधारित हैं।
 * आईएसओ 26262 कार्यात्मक सुरक्षा - सड़क वाहन एमआईएसआरए सी को सी भाषा का उपयुक्त उप-सेट बताते हैं
 * आईएसओ 26262-6:2011 भाग 6: सॉफ्टवेयर स्तर पर उत्पाद विकास एमआईएसआरए सी: 2004 और एमआईएसआरए एसी एजीसी का हवाला देते हैं।
 * आईएसओ 26262-6:2018 भाग 6: सॉफ्टवेयर स्तर पर उत्पाद विकास एमआईएसआरए सी: 2012 का हवाला देते हैं।
 * एयूटीओएसएआर सामान्य सॉफ़्टवेयर विनिर्देश (एसआरएस_बीएसडब्ल्यू_00007) इसी तरह एमआईएसआरए सी का हवाला देता है:
 * एयूटीओएसएआर 4.2 सामान्य सॉफ्टवेयर विनिर्देश आवश्यकता है कि यदि बीएसडब्ल्यू मापांक कार्यान्वयन सी भाषा में लिखा गया है, तो यह एमआईएसआरए सी:2004 मानक के अनुरूप होगा।
 * एयूटीओएसएआर 4.3 सामान्य सॉफ्टवेयर विनिर्देश आवश्यकता है कि यदि बीएसडब्ल्यू मापांक कार्यान्वयन सी भाषा में लिखा गया है, तो यह एमआईएसआरए सी: 2012 मानक के अनुरूप होगा।

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

वर्गीकरण
प्रत्येक दिशानिर्देश को अनिवार्य (एमआईएसआरए सी:2012 के लिए नया), आवश्यक या परामर्शिका के रूप में वर्गीकृत किया गया है। इसके अतिरिक्त, एमआईएसआरए अनुपालन दस्तावेज़ परामर्शिका दिशानिर्देशों को अस्वीकृत करने की अनुमति देता है।


 * अनिवार्य दिशा-निर्देशों का हमेशा पालन किया जाएगा।
 * आवश्यक दिशा-निर्देशों का अनुपालन किया जाएगा, जब तक कि विचलन के अधीन न हो।
 * परामर्शिका दिशानिर्देशों को अच्छा अभ्यास माना जाता है, लेकिन अनुपालन कम औपचारिक होता है।

संवर्गीकरण
नियमों को तार्किक रूप से कई श्रेणियों में विभाजित किया जा सकता है:


 * संभव संकलक अंतर से बचना, उदाहरण के लिए, सी का आकार  प्रकार भिन्न हो सकता है लेकिन   (C99 में मानकीकृत) हमेशा 16 बिट का होता है।
 * कार्यों और निर्माणों का उपयोग करने से बचना जो विफलता के लिए प्रवण हैं, उदाहरण के लिए,  विफल हो सकता है।
 * बनाए रखने योग्य और दोषमार्जन करने योग्य कूट तैयार करें, उदाहरण के लिए, नामकरण परंपरा और टिप्पणी है।
 * सर्वोत्तम अभ्यास नियम है।
 * जटिलता सीमा है।

परिधि
एमआईएसआरए सी: 2012 अलग-अलग प्रत्येक दिशानिर्देश को एकल अनुवाद इकाई (क्रमादेशन) या सिस्टम के रूप में वर्गीकृत करता है।

निर्णायकता
एमआईएसआरए सी: 2012 नियमों (लेकिन निर्देशों को नहीं) को निर्णायक या अनिर्णीत के रूप में वर्गीकृत करता है।

एमआईएसआरए अनुपालन
एमआईएसआरए ने एमआईएसआरए अनुपालन को समझने और प्राप्त करने के लिए अतिरिक्त मार्गदर्शन प्रदान करने के लिए दस्तावेज़ प्रकाशित किए है।
 * एमआईएसआरए अनुपालन: 2016, अप्रैल 2016 में एमआईएसआरए द्वारा जारी किया गया था।
 * एमआईएसआरए अनुपालन: 2020, संशोधित संस्करण, फरवरी 2020 में जारी किया गया था।

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

नोट: अनुपालन उद्देश्यों के लिए, नियमों और निर्देशों के बीच कोई अंतर नहीं है।

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


 * नियम से विचलित है।
 * विचलन के लिए तर्क है।

एमआईएसआरए सी: 1998
एमआईएसआरए सी का पहला संस्करण, वाहन आधारित सॉफ़्टवेयर में सी भाषा के उपयोग के लिए दिशानिर्देश, जो 1998 में प्रकाशित हुआ था और इसे आधिकारिक तौर पर एमआईएसआरए-सी:1998 के रूप में जाना जाता है। एमआईएसआरए सी: 1998 में 127 नियम हैं, जिनमें से 93 आवश्यक हैं और 34 परामर्शिका हैं; नियमों को 1 से 127 तक अनुक्रम में क्रमांकित किया गया है।

एमआईएसआरए सी: 2004
2004 में, 'महत्वपूर्ण प्रणालियों', या 'एमआईएसआरए सी: 2004' में सी भाषा के उपयोग के लिए दिशानिर्देशों का दूसरा संस्करण तैयार किया गया था, जिसमें दिशानिर्देशों में कई महत्वपूर्ण बदलाव सम्मलित थे, जिसमें नियमों की पूरी तरह से पुनर्संख्या भी सम्मलित थी।.

एमआईएसआरए सी: 2004 में 142 नियम सम्मलित हैं, जिनमें से 122 आवश्यक हैं और 20 परामर्शिका हैं; उन्हें पर्यावरण से लेकर रन-टाइम विफलताओं तक 21 सामयिक श्रेणियों में विभाजित किया गया है।

मुख्य दस्तावेज़
2013 में, तीसरा संस्करण, एमआईएसआरए सी: 2012 प्रकाशित किया गया था। एमआईएसआरए सी: 2012 सी भाषा के C99 संस्करण (C90 के लिए दिशानिर्देशों को बनाए रखते हुए) के लिए समर्थन प्रदान करता है, इसके अतिरिक्त कई सुधार सम्मलित हैं जो अनुपालन की लागत और जटिलता को कम कर सकते हैं, जबकि महत्वपूर्ण में सी के लगातार, सुरक्षित उपयोग में सहायता करते हैं। एमआईएसआरए सी: 2012 में 143 नियम और 16 निर्देश सम्मलित हैं (अर्थात, ऐसे नियम जिनका अनुपालन व्याख्या के लिए अधिक खुला है, या प्रक्रिया या प्रक्रियात्मक स्थितियों से संबंधित है); जिनमें से प्रत्येक को अनिवार्य, आवश्यक या परामर्शिका के रूप में वर्गीकृत किया गया है। उन्हें एकल अनुवाद इकाई या सिस्टम के रूप में अलग से वर्गीकृत किया गया है। इसके अतिरिक्त, नियमों को निर्णायक या अनिर्णीत के रूप में वर्गीकृत किया गया है।

संशोधन 1
अप्रैल 2016 में, एमआईएसआरए प्रकाशित (मुक्त डाउनलोड के रूप में) एमआईएसआरए सी: 2012 - संशोधन 1: अतिरिक्त सुरक्षा दिशानिर्देश जिसने चौदह नए कंप्यूटर सुरक्षा दिशानिर्देश जोड़े है।

संशोधन 2
फरवरी 2020 में, एमआईएसआरए प्रकाशित (मुक्त डाउनलोड के रूप में) एमआईएसआरए सी:2012 - संशोधन 2: आईएसओ/आईईसी 9899:2011/18 कोर कार्यक्षमता के लिए अपडेट जो C11/C18 के भीतर अपरिभाषित, अनिर्दिष्ट और कार्यान्वयन परिभाषित व्यवहारों के लिए मानचित्रण जोड़ता है।

सहकारी दस्तावेज़
एमआईएसआरए ने एमआईएसआरए सी: 2012 का समर्थन करने के लिए निम्नलिखित परिशिष्ट प्रकाशित किया है:


 * एमआईएसआरए सी: 2012 - परिशिष्ट 1: नियम मानचित्रण, जिसमें एमआईएसआरए सी:2004 और नए संस्करण के बीच द्वि-दिशात्मक नियम मैपिंग सम्मलित है। इसका उद्देश्य उपयोगकर्ताओं को प्रवासन में सहायता करना है।
 * एमआईएसआरए सी: 2012 - परिशिष्ट 2: आईएसओ / आईईसी टीएस 17961: 2013 सी सुरक्षित के विरुद्ध एमआईएसआरए सी: 2012 का आच्छादन है।
 * एमआईएसआरए सी: 2012 - परिशिष्ट 3: सीईआरटी सी के विरुद्ध एमआईएसआरए सी 2012 का कवरेज आच्छादन है।

उदाहरण सूट
एक उदाहरण सुइट (एमआईएसआरए-C:2004 और एमआईएसआरए सी:2012 के लिए) एमआईएसआरए GitLab कोष (लॉगिन आवश्यक) से उपलब्ध है। यह उपकरण-उपयोगकर्ताओं को विभिन्न एमआईएसआरए उपकरण द्वारा प्रदान किए गए जाँच समर्थन का मूल्यांकन और तुलना करने की अनुमति देता है; इसके अतिरिक्त, यह उपकरण-कार्यान्वयनकर्ताओं को एमआईएसआरए दिशानिर्देशों के इरादे के अनुसार कुछ मार्गदर्शन देता है।

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

एमआईएसआरए अनुरूपता के लिए कूट की जाँच करने वाले उपकरणों में सम्मलित हैं:
 * Astrée (स्थैतिक विश्लेषण) | AbsInt द्वारा Astrée
 * एक्सिवियन जीएमबीएच द्वारा एक्सिवियन बॉहॉस सुइट। एमआईएसआरए सी:2004, सी:2012, सी:2012 संशोधन 1, सी++:2008, अनुपालन:2016।
 * ग्रामाटेक द्वारा कूट सोनार।
 * साइनोपसिस द्वारा आवरण स्थिर कूट विश्लेषण ।
 * सीपीपीचेक - C/C++ के लिए ओपन सोर्स स्टेटिक एनालिसिस उपकरण
 * बगसेंग एसआरएल द्वारा एक्लेयर। एमआईएसआरए सी:2004, सी:2012, सी:2012 संशोधन 1, सी++:2008।
 * पर्सफोर्स सॉफ्टवेयर द्वारा हेलिक्स क्यूएसी। एमआईएसआरए सी:1998, सी:2004, सी:2012, सी++:2008।
 * रॉग वेव सॉफ्टवेयर द्वारा क्लॉकवर्क (अब परफोर्स सॉफ्टवेयर के स्वामित्व में है ). एमआईएसआरए सी:2012, सी:2012 संशोधन 1, सी++:2008।
 * लिवरपूल आकंड़ा अनुसंधान एसोसिएट्स द्वारा एलडीआरए टेस्टबेड
 * पैरासॉफ्ट द्वारा पैरासॉफ्ट सी/सी++ टेस्ट। एमआईएसआरए सी 1998, एमआईएसआरए सी 2004, एमआईएसआरए सी 2012 एएमडी1, एएमडी2 और एएमडी3, एमआईएसआरए सी++ 2008, एमआईएसआरए सी++ 202x का प्रारूप संस्करण।
 * जिम्पेल सॉफ्टवेयर द्वारा पीसी-लिंट (अब वेक्टर इंफॉर्मेटिक जीएमबीएच के स्वामित्व में)। एमआईएसआरए सी:1998, सी:2004, सी:2012, सी++:2008।
 * मैथवर्क्स द्वारा पॉलीस्पेस
 * पीवीएस-स्टूडियो क्रमादेश सत्यापन प्रणाली द्वारा
 * सोनारस्रोत द्वारा सोनारक्यूब (कुछ वाणिज्यिक प्लग-इन घटकों के साथ खुला स्रोत)
 * स्क्वॉयरिंग तकनीक द्वारा SQuORE
 * SciTools द्वारा समझें (सॉफ्टवेयर)।

एमआईएसआरए अनुरूपता का समर्थन करने वाले C/C++ संकलक में सम्मलित हैं:
 * ग्रीन हिल्स सॉफ्टवेयर
 * आईएआर प्रणाली - एमआईएसआरए सी:1998, सी:2004, सी:2012, सी++:2008।
 * उच्च - एमआईएसआरए सी:1998, सी:2004, सी:2012।

आलोचना
कुछ शोध परिणाम एमआईएसआरए सी 2004 की प्रभावशीलता पर सवाल उठाते हैं।

एमआईएसआरए सी:1998 पर एमआईएसआरए सी:2004 के साथ पहले के काम की तुलना करने वाले एक पेपर में, द हैटन  इस निष्कर्ष पर पहुंचे हैं कि:एक औद्योगिक संदर्भ में भाषा सबसेटिंग: MISRA C 1998 और MISRA C की तुलना; लेस हैटन; किंग्स्टन विश्वविद्यालय; 2004.

वह बताता है:

कैथल बूगर्ड और लियोन मूनन द्वारा तु डेल्फ़्ट में एक अध्ययन, अनुभवजन्य रूप से मिश्रा सी: 2004 के मूल्य का आकलन करता है। यह समान परिणाम आता है:

यह भी देखें

 * क्रमादेशन शैली