MISRA C - MISRA C

MISRA C bir dizi yazılım geliştirme yönergesidir. C Programlama dili tarafından geliştirilmiş MISRA (Motor Endüstrisi Yazılım Güvenilirliği Derneği). Amaçları kodu kolaylaştırmaktır Emniyet, güvenlik, taşınabilirlik ve bağlamında güvenilirlik gömülü sistemler, özellikle programlanmış sistemler ISO C / C90 / C99.[1]

Ayrıca MISRA C ++ için bu makalede ele alınmayan bir dizi yönerge de vardır.

Tarih

  • Taslak: 1997[2]
  • İlk baskı: 1998 (kurallar, zorunlu / tavsiye)
  • İkinci baskı: 2004 (kurallar, zorunlu / tavsiye)
  • Üçüncü baskı: 2012 (direktifler; kurallar, Karar Verilebilir / Karar Verilemez)
  • MISRA uyumluluğu: 2016

MISRA-C'nin (1998 ve 2004) ilk iki baskısı için tüm Yönergeler Kural olarak kabul edildi. MISRA C: 2012'nin yayınlanmasıyla birlikte yeni bir Kılavuz kategorisi tanıtıldı - Direktif uyumu yoruma daha açık olan veya süreç veya prosedürle ilgili konularla ilgili olanlar.

Benimseme

Başlangıçta özellikle otomotiv endüstrisini hedeflemesine rağmen, MISRA C, otomotiv, havacılık, telekom, tıbbi cihazlar, savunma, demiryolu ve diğerleri dahil olmak üzere sektörlerin önde gelen geliştiricileri tarafından en iyi uygulamalar için yaygın olarak kabul edilen bir model olarak gelişti.

  • Joint Strike Fighter proje C ++ Kodlama Standartları[3] MISRA-C: 1998'e dayanmaktadır.
  • NASA Jet Tahrik Laboratuvarı C Kodlama Standartları[4] MISRA-C: 2004'e dayanmaktadır.
  • ISO 26262 Fonksiyonel Güvenlik - Karayolu Taşıtları MISRA C'yi, C dilinin uygun bir alt kümesi olarak aktarır:
    • ISO 26262-6: 2011 Bölüm 6: Yazılım düzeyinde ürün geliştirme[5] MISRA-C: 2004 ve MISRA AC AGC'den alıntılar.
    • ISO 26262-6: 2018 Bölüm 6: Yazılım düzeyinde ürün geliştirme[6] MISRA C: 2012'den alıntı yapıyor.
  • AUTOSAR Genel Yazılım Spesifikasyonu (SRS_BSW_00007) de aynı şekilde MISRA C'yi belirtir:
    • AUTOSAR 4.2 Genel Yazılım Özellikleri[7] bunu gerektirir BSW Modülü uygulaması C dilinde yazılmışsa, MISRA C: 2004 Standardına uygun olmalıdır.
    • AUTOSAR 4.3 Genel Yazılım Özellikleri[8] bunu gerektirir BSW Modülü uygulaması C dilinde yazılmışsa, MISRA C: 2012 Standardına uygun olmalıdır.

Kılavuz sınıflandırma ve sınıflandırma

Yeni bir yazılım projesi başlatıldığında, en son MISRA standardı kullanılmalıdır. Önceki standartlar, ona başvurması gereken eski yazılım projeleriyle kullanım için hala mevcuttur.[9]

Sınıflandırma

Her Kılavuz sınıflandırılmıştır[10] gibi Zorunlu (MISRA C: 2012 için yeni), gereklidir veya Danışma. Ayrıca, MISRA Uyumluluk belgesi izin verir Danışma olmak için kurallar Onaylanmadı.

  • Zorunlu yönergelere her zaman uyulacaktır
  • gereklidir bir şeye tabi olmadıkça yönergelere uyulacaktır. Sapma
  • Danışma kılavuzlar iyi uygulama olarak kabul edilir, ancak uyum daha az resmidir.

Sınıflandırma

Kurallar mantıksal olarak birkaç kategoriye ayrılabilir:

  • Olası derleyici farklılıklarından kaçınmak, örneğin, bir C tamsayısının boyutu değişebilir, ancak bir INT16 her zaman 16 bittir. (C99 standardize edilmiştir int16_t.)
  • Örneğin, başarısızlığa eğilimli işlevleri ve yapıları kullanmaktan kaçınma, Malloc Başarısız olabilir.
  • Bakım yapılabilir ve hata ayıklanabilir kod üretin, örneğin adlandırma kuralları ve yorumlama.
  • En iyi uygulama kuralları.
  • Karmaşıklık sınırları.

Dürbün

MISRA C: 2012, her bir kılavuzu ayrı ayrı sınıflandırır. Tek Çeviri Birimi veya Sistem.[10]

Karar Verilebilirlik

MISRA C: 2012, kurallar (ama değil direktifler) gibi Karar verilebilir veya Kararsız.

Uyum sağlama

MISRA Uyumluluğu

MISRA, MISRA uyumluluğunu anlamak ve başarmak için ek rehberlik sağlayan belgeler yayınladı.

  • MISRA Uyumluluğu: 2016, Nisan 2016'da MISRA tarafından piyasaya sürüldü.[11]
  • MISRA Uyumluluğu: 2020, revize edilmiş baskı, Şubat 2020'de yayınlandı.[12]

uyma

Bir yazılım parçasının MISRA C Yönergelerine uygun olduğunu iddia etmesi için, zorunlu kurallar karşılanacak ve hepsi gereklidir kurallar ve direktifler karşılanacak veya resmi bir sapmaya tabi olacaktır. Danışma kurallar resmi bir sapma olmaksızın kaldırılabilir, ancak bu yine de proje belgelerine kaydedilmelidir.

Not: Uyumluluk amacıyla, arasında hiçbir ayrım yoktur kurallar ve direktifler.

Sapmalar

Birçok MISRA C kurallar olarak karakterize edilebilir yönergeler çünkü belirli koşullar altında yazılım mühendisleri kurallardan sapabilir ve yine de standarda uygun olarak değerlendirilebilir. Sapmalar kodda veya bir dosyada belgelenmelidir. Ek olarak; Yazılım mühendisinin sistemin güvenliğini düşündüğüne ve kuraldan sapmanın olumsuz bir etkisi olmayacağına dair kanıt sağlanmalıdır, sapmalar için gereklilikler ayrıca şunları içerir:

  • Kural saptı.
  • Sapmanın gerekçesi.[13]

Yayınlanmış belgeler

MISRA C: 1998

MISRA C'nin ilk baskısı, 1998'de yayınlanan ve resmi olarak bilinen "Araç tabanlı yazılımda C dilinin kullanımı için yönergeler" MISRA-C: 1998.[14]

MISRA-C: 1998, 93'ü zorunlu ve 34'ü tavsiye niteliğinde 127 kurala sahiptir; kurallar 1'den 127'ye kadar numaralandırılmıştır.

MISRA C: 2004

2004 yılında, ikinci baskı "C dilinin kullanım kılavuzu kritik sistemler"veya MISRA-C: 2004 kuralların tamamen yeniden numaralandırılması da dahil olmak üzere kılavuzlarda birçok önemli değişiklikle üretilmiştir.

MISRA-C: 2004, 122'si "gerekli" ve 20'si "tavsiye niteliğinde" 142 kural içerir; "Çevre" den "Çalışma zamanı arızalarına" kadar 21 konu kategorisine ayrılırlar.

MISRA C: 2012

Ana belge

2013 yılında üçüncü baskı olan MISRA C: 2012 yayınlandı. MISRA C: 2012 desteği, C99 C dilinin sürümü (C90 için yönergeleri korurken), uygunluğun maliyetini ve karmaşıklığını azaltabilecek bir dizi iyileştirmenin yanı sıra kritik sistemlerde C'nin tutarlı, güvenli kullanımına yardımcı olacak.[15]

MISRA-C: 2012, 143 kural ve 16 "yönerge" içerir (yani, uyumu yoruma daha açık olan veya süreç veya prosedürle ilgili konularla ilgili kurallar); her biri olarak sınıflandırılır zorunlu, gereklidirveya tavsiye. Ayrı ayrı sınıflandırılırlar Tek Çeviri Birimi veya Sistem. Ek olarak, kurallar şu şekilde sınıflandırılır: Karar verilebilir veya Kararsız.

Değişiklik 1

Nisan 2016'da MISRA yayınlandı (ücretsiz indirilebilir) MISRA C: 2012 - Değişiklik 1: Ek Güvenlik Yönergeleri[16] on dört yeni ekleyen güvenlik yönergeler.

Destekleyici belgeler

MISRA, MISRA C: 2012'yi desteklemek için aşağıdaki ekleri yayınladı:

  • MISRA C: 2012 - Ek 1: Kural Eşlemeleri[17], MISRA C: 2004 ile yeni sürüm arasında iki yönlü kural eşlemelerini içeren. Kullanıcılara geçişte yardımcı olması amaçlanmıştır.
  • MISRA C: 2012 - Ek 2: MISRA C Kapsamı: 2012, ISO / IEC TS 17961: 2013 "C Secure" a karşı[18]
  • MISRA C: 2012 - Ek 3: CERT C'ye karşı MISRA C: 2012'nin kapsamı[19]

Örnek paket

Örnek bir paket (MISRA-C: 2004 ve MISRA C: 2012 için) MISRA'dan temin edilebilir GitLab[20] depo. Bu, araç kullanıcılarının çeşitli MISRA araçları tarafından sağlanan kontrol desteğini değerlendirmelerine ve karşılaştırmalarına olanak tanır; ek olarak, araç uygulayıcılara MISRA Kılavuz İlkelerinin amacına ilişkin olarak bir miktar rehberlik sağlar.

Araçlar

"MISRA uygunluğu" için kodu kontrol ettiğini iddia eden birçok yazılım aracı varken, MISRA sertifikasyon süreci yoktur.[21]

Yönergelerin çoğu, performans gösteren araçlar kullanılarak kontrol edilebilir. statik kod analizi. Kalan yönergeler, dinamik kod analizi.

MISRA uyumluluğunu kontrol eden araçlar şunları içerir:

MISRA uyumluluğunu destekleyen C / C ++ derleyicileri şunları içerir:

Eleştiri

Bazı araştırma sonuçları MISRA'nın etkinliğini sorgulamaktadır.

MISRA C: 1998 ile ilgili önceki çalışmaları MISRA C: 2004 ile karşılaştıran bir makalede, Les Hatton şu sonuca varır:[27]

MISRA C standardının görünürde genişleyen etkisi göz önüne alındığında, bu makale orijinal standarttaki önemli eksikliklerin tatmin edici bir şekilde ele alınıp alınmadığını değerlendirmeye çalışmaktadır. Ne yazık ki yok ve önemli gerçek-yanlış pozitif oranı MISRA C 2004'te MISRA C 1998'de olduğundan çok daha iyi değil ve her ikisinde de kabul edilemez derecede düşük.

Belirtmeye devam ediyor:[27]

Mevcut haliyle, MISRA C 2004 güncellemesinden yararlanacak tek kişi araç satıcıları gibi görünecek ve hem ifadeyi basitleştirmek hem de gelecekteki revizyonlarda yanlış pozitif oranı azaltmak için adımlar atılması umulmaktadır. Yayınlanmış deneysel verilere biraz daha fazla dikkat çekmek ve iyi bir fikir gibi göründükleri temelinde kurallar icat etmeye daha az meyilli olmak.

Bir çalışma TU Delft, Cathal Boogerd ve Leon Moonen tarafından MISRA C: 2004'ün değerini ampirik olarak değerlendiriyor. Benzer sonuçlar geliyor:[28]

Elde edilen verilerden aşağıdaki kilit gözlemleri yapabiliriz. Birincisi, arızayla ilgili hatların yerini belirlemede rastgele bir öngörücüye göre önemli ölçüde daha iyi performans gösteren (α = 0.05) ihlallerin gözlendiği 72 kuraldan 9'u vardır. Bu kurallar için gerçek pozitif oranlar% 24-100 arasındadır. İkinci olarak, MISRA kural ihlalleri ile gözlemlenen hatalar arasında negatif bir korelasyon gözlemledik. Ek olarak, 72 kuraldan 29'unda sıfır gerçek pozitif oran vardı. Adams'ın tüm modifikasyonların bir hataya neden olma olasılığının sıfır olmayan bir olasılığa sahip olduğu gözlemiyle birlikte ele alındığında, bu, bir bütün olarak MISRA standardına bağlı kalmanın yazılımı daha az güvenilir hale getirmesini mümkün kılar.

Ayrıca bakınız

Referanslar

  1. ^ "MISRA, C dilinin güvenli ve güvenli kullanımlarını açıklar". www.misra.org.uk. Alındı 2019-10-09.
  2. ^ 1997 baharında, yazılım mühendisleri Austin Rover Grubu (ARG), incelenmek üzere Programming Research Ltd'ye (PRL) bir taslak C kodlama standardı gönderdi. İnceleme, taslağın önemli ölçüde daha güçlü bir kodlama kuralları setiyle değiştirilmesini öneren PRL'nin o zamanki kıdemli danışmanı David Blyth tarafından gerçekleştirildi. Küçük değişikliklerle birlikte bu kurallar, MISRA C'nin ilk baskısının temelini oluşturdu.
  3. ^ "Müşterek Taarruz Uçağı Hava Aracı C ++ Kodlama Standartları" (PDF). Alındı 2019-07-16.
  4. ^ "NASA JPC C Kodlama Standartları" (PDF). Alındı 2019-07-16.
  5. ^ "ISO 26262-6: 2011 Karayolu araçları - İşlevsel güvenlik - Bölüm 6: Yazılım düzeyinde ürün geliştirme". iso.org. ISO. Alındı 2019-07-16.
  6. ^ "ISO 26262-6: 2018 Karayolu araçları - İşlevsel güvenlik - Bölüm 6: Yazılım düzeyinde ürün geliştirme". iso.org. ISO. Alındı 2019-07-16.
  7. ^ "AUTOSAR 4.2 Genel Yazılım Özellikleri" (PDF). autosar.org. Alındı 2019-07-16.
  8. ^ "AUTOSAR 4.3 Temel Yazılım Modüllerinin Genel Özellikleri" (PDF). autosar.org. AutoSAR. 2016-11-30. Alındı 2019-07-16.
  9. ^ MISRA yayınları
  10. ^ a b "Bilgi Sayfası: MISRA C: 2012 (PDF)" (PDF). programlamaresearch.com. Alındı 10 Haziran 2013.
  11. ^ "MISRA Uyumluluğu: 2016 (PDF)". MISRA. Alındı 22 Temmuz 2016.
  12. ^ "MISRA Uyumluluğu: 2020 (PDF)". MISRA. Alındı 8 Nisan 2020.
  13. ^ "MISRA C: 2012 Uyumluluğuna Ulaşmak". Parasoft. Alındı 29 Mayıs 2017.
  14. ^ "MISRA C'nin kısa geçmişi". MISRA. 2013-03-18. Alındı 2014-06-30.
  15. ^ "MISRA C: 2012 çıkış tarihi açıklandı". MISRA. 26 Şubat 2013. Alındı 10 Haziran 2013.
  16. ^ "MISRA C: 2012 - Değişiklik 1 (PDF)". MISRA. Alındı 31 Ekim 2019.
  17. ^ "MISRA C: 2012 - Ek 1: Kural Eşleme (PDF)".
  18. ^ "MISRA C: 2012 - Ek 2: MISRA C Kapsamı: 2012, ISO / IEC TS 17961: 2013" C Secure "(PDF)".
  19. ^ "MISRA C: 2012 - Ek 3: CERT C'ye karşı MISRA C Kapsamı: 2012 (PDF)".
  20. ^ MISRA GitLab deposu
  21. ^ "MISRA C SSS listesi." MISRA Konsorsiyumu
  22. ^ https://www.perforce.com/products/helix-qac
  23. ^ https://www.roguewave.com/company/news/2019/perforce-software-acquires-rogue-wave-software
  24. ^ https://www.perforce.com/products/klocwork
  25. ^ MISRA uygunluk denetimi, PC-lint / FlexeLint, Gimpel Yazılımı.
  26. ^ Diller ve Standartlar; iar.com
  27. ^ a b Endüstriyel bağlamda dil alt kümesi: MISRA C 1998 ve MISRA C'nin karşılaştırması; Les Hatton; Kingston Üniversitesi; 2004.
  28. ^ Kodlama Standartlarının Değerinin Değerlendirilmesi: Ampirik Bir Çalışma; C.J. Boogerd ve L. Moonen; Delft Teknoloji Üniversitesi; 2008.

Dış bağlantılar