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

MISRA C, Motor Industry Software Reliability Association द्वारा विकसित C ( प्रोग्रामिंग भाषा ) प्रोग्रामिंग लैंग्वेज के लिए सॉफ्टवेयर डेवलपमेंट गाइडलाइंस का एक सेट है। इसका उद्देश्य अंतः स्थापित प्रणालियाँ  के संदर्भ में कोड सुरक्षा, कंप्यूटर सुरक्षा,  में porting  और विश्वसनीयता को सुविधाजनक बनाना है, विशेष रूप से उन सिस्टम को ISO C / C90 / C99 में प्रोग्राम किया गया है। इस लेख में शामिल नहीं किए गए MISRA C++ के लिए दिशानिर्देशों का एक सेट भी है।

इतिहास

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

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

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


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

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

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


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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

वह बताता है:

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

यह भी देखें

 * प्रोग्रामिंग शैली