11.1 C++ Güvenlik Standartları Hiyerarşisi

Modern dünyada bir otomobilde 300 milyondan fazla satır kod bulunmaktadır (Synopsys Verisi). Bu karmaşıklığı yönetmek ve insan hayatını korumak için Kodlama Standartları (Coding Standards) zorunludur. Akademik olarak bu standartlar ikiye ayrılır:

MISRA C++:2023

Motor Endüstrisi Yazılım Güvenilirliği Birliği tarafından tanımlanan, Emniyet-Kritik (Safety-Critical) sistemler için hata olasılığını minimize eden kurallar seti.

AUTOSAR

Modern otomotiv mimarisi için C++14 ve sonrasını kapsayan, MISRA ile birleşme yolunda olan yüksek seviyeli standart.

CERT C++ / CWE

Siber güvenlik açıklarını (Vulnerabilities) önlemeye odaklanan, Güvenlik-Kritik (Security-Critical) kodlama kılavuzu.

11.2 Uyumluluk Analizi İş Akışı

graph TD Dev[Kod Geliştirme] -->|Statik Analiz| Tool[SonarQube / CppDepend] Tool -->|İhlal - Violation| Fix[Düzeltme ve İyileştirme] Fix --> Dev Tool -->|Uyumlu - Compliant| Report[Uyumluluk Raporu - Compliance Report] subgraph "Kural Kategorileri" Mandatory[Zorunlu - Mandatory] Required[Gereklilik - Required] Advisory[Tavsiye - Advisory] end

Şema 11.1: Statik Analiz Araçları ile Uyumluluk Denetimi (Automated Review)

11.3 Akademik Uygulama: MISRA Uyumluluğu

safety_compliant_architecture.cpp
#include <iostream>
#include <cstdint>

/**
 * @brief MISRA C++:2023 Rule 8.2: İşlevler (Functions) daima tip güvenli olmalıdır.
 * @details Implicit conversion (Örtülü dönüşüm) engellenmelidir.
 */
int32_t hesapla(int32_t a, int32_t b) noexcept {
    // KURAL: 'int' yerine taşınabilir 'int32_t' gibi tipler kullanılmalıdır.
    return a + b;
}

int main() {
    // HATALI (NON-COMPLIANT):
    // float x = 10.5;
    // int y = x; // MISRA İhlali: Veri kaybı (narrowing conversion) riski!

    // UYUMLU (COMPLIANT):
    int32_t hizi = 100;
    int32_t ivme = 20;

    // KURAL: C-style cast yerine static_cast kullanılmalıdır.
    auto toplam = hesapla(hizi, ivme);

    std::cout << "Toplam: " << toplam << std::endl;

    return 0; // KURAL: main fonksiyonu daima bir değer dönmelidir.
}

Kritik Kural: Tanımsız Davranış

"MISRA kurallarının ana amacı, C++ dilindeki Tanımsız Davranışları (Undefined Behaviors) kodlama aşamasında yasaklamaktır. Örneğin, bir işaretçinin (pointer) dizi sınırları dışında kullanılması MISRA tarafından kesinlikle yasaklanır."

Araç Desteği (Static Analysis):

SonarQube veya CppDepend gibi araçlar, binlerce satırlık kodu otomatik olarak tarayarak MISRA ve AUTOSAR ihlallerini saniyeler içinde tespit eder.

⚠️ Yaygın Standart İhlalleri (Standard Violations)

RULE 5.0.4

Örtülü Dönüşümler (Implicit Conversions)

Bir `double` değerin farkında olmadan `int` değişkene atanması.
Akademik Çözüm: Daima `static_cast` kullanarak niyeti (intent) açıkça belirtin.

RULE 18.4.1

Dinamik Bellek Kullanımı (Dynamic Memory)

Gömülü sistemlerde `malloc`, `free` veya `new`, `delete` kullanımı bellek parçalanmasına (fragmentation) yol açtığı için yasaklanabilir.
Alternatif: Statik bellek veya Nesne Havuzları (Object Pools) kullanımı tavsiye edilir.

11.5 Uyumluluk ve Güvenlik Testi

Soru: MISRA C++ standartlarının temel çıkış noktası nedir?

Pratik Görev (Industry Challenge):

"Otomotiv sektöründen bir senaryo: Bir ABS fren sistemi yazılımı geliştiriyorsunuz. MISRA kurallarına göre, bu yazılımda neden 'goto' ifadesi kullanılamaz? Akademik bir açıklama getirin."