Ana içeriğe geç

Tasarım Standardı (SDStd) Şablonu

Tasarım standardı (software design standards, SDStd), yazılım mimarisini (software architecture) ve düşük seviyeli gereksinimleri (low-level requirements) yazan herkesin aynı gösterimi kullanmasını, riskli yapılara aynı koşullarla başvurmasını ve karmaşıklığı aynı sınırlarda tutmasını sağlayan kural kitabıdır: tasarımcı için çalışma kuralı, tasarımı gözden geçiren için nesnel ölçüttür. Tipik olarak yazılım mimarı yazar, yazılım geliştirme sorumlusu onaylar; doğrulama ekibi ve kalite güvencesi (quality assurance) yayımlanmadan önce gözden geçirir. Planlama sürecinde, ilk mimari kararlar kayda geçmeden önce yazılır ve SOI-1'de diğer planlar ve standartlarla birlikte gösterilir.

Bu standart, tasarım sürecinin çıktısı olan tasarım tanımının (design description) kendisi değildir; o verinin nasıl yazılacağını söyler. Tasarımın iki çıktısının ne olduğu 7. Yazılım Tasarımı, standardın neden gerektiği 5. Yazılım Planlama bölümünde anlatılır; bu sayfa "nasıl yazılır" tarafını verir. Şablonların ortak kuralları ve paketleme seçenekleri genel bakış sayfasındadır.

Bir bakışta​

ÖzellikDeğer
DO-178C maddesi§11.7 (içerik); §4.5 (geliştirme standartları)
İlgili Ek A hedefleriA-1 #5; A-4 #5, #12; A-9 #1, #3
Beklendiği seviyelerA, B, C (D'de beklenmez)
Kontrol kategorisi (A/B/C/D)CC1/CC1/CC2/–
OtoriteyeDenetimde gösterilir
SahibiYazılım mimarı (tasarım sorumlusu)
İlgili SOISOI-1 (standardın kendisi); SOI-2 (tasarımın standarda uyumu)
Şablonu nasıl kullanmalı?

Tasarım standardının ölçüsü, gözden geçirenin bir bulguyu "TS-17'ye aykırı" diye yazabilmesidir. Aşağıdaki başlıklar ve TS numaralı örnek kurallar doldurulacak metin değil, verilecek kararların listesidir: sınır değerlerini, izinleri ve yasakları projenin işlemcisi, işletim sistemi ve yazılım seviyesi belirler. Başlıklar kurumunuza göre değişebilir; önemli olan uyum tablosundaki her maddenin bir yeri olması ve yazılan her kuralın bir denetim yolunun bulunmasıdır.

Önerilen içindekiler​

Ortak ön bölümler (belge kimliği, onaylar, revizyon geçmişi, referanslar, kısaltmalar ve tanımlar) genel bakış sayfasında anlatılır ve burada tekrarlanmaz.

1 Amaç ve kapsam
1.1 Uygulandığı yazılım ve seviyeler
1.2 Kapsam dışı ve ayrı standarda tabi bileşenler
2 Tasarım tanımlama yöntemi ve gösterimler
2.1 Tasarım yaklaşımı
2.2 Mimari görünümler
2.3 Diyagram türleri ve gösterim kuralları
2.4 Tasarım verisinin yeri ve kimliklendirilmesi
3 Mimari kuralları
3.1 Bileşenler ve katmanlar
3.2 Arayüz tanımı
3.3 Bölümleme ve koruma sınırları
3.4 Emniyet mekanizmaları ve hata yönetimi
3.5 Kaynak bütçeleri ve paylar
4 Düşük seviyeli gereksinim kuralları
4.1 Ayrıntı düzeyi
4.2 Yazım kalıbı
4.3 Öznitelikler
4.4 Türetilmiş düşük seviyeli gereksinimler
4.5 Kodla ve mimariyle ilişki
5 Adlandırma kuralları
6 İzin verilen tasarım yöntemlerinin koşulları
6.1 Çizelgeleme
6.2 Kesmeler
6.3 Olay güdümlü mimari
6.4 Dinamik görev oluşturma
6.5 Yeniden girilebilirlik
6.6 Global veri ve paylaşılan kaynaklar
6.7 İstisna yönetimi
7 Tasarım kısıtları
7.1 Özyineleme
7.2 Dinamik nesneler ve bellek
7.3 Veri takma adları
7.4 Sıkıştırılmış ifadeler
7.5 Nesne yönelimli özellikler (kullanılıyorsa)
8 Karmaşıklık sınırları
9 Veri ve kontrol bağlaşımı kuralları
10 Devre dışı bırakılmış kod ve seçenekle seçilebilir işlevler
11 Tasarım araçlarının kullanım kısıtları
11.1 İzin verilen araçlar ve özellikler
11.2 Kod üretimi ve koddan tasarım üretimi
12 Uyum denetimi ve sapma süreci
12.1 Kuralların denetim yolu
12.2 Sapma isteği ve onayı
12.3 Standardın değiştirilmesi

Bölüm bölüm yazım rehberi​

Örnek kurallar TS-nn biçiminde numaralıdır; numara, gözden geçirme kontrol listesinin ve sapma kaydının kurala atıf yapmasını sağlar. Sayısal değerler temsilîdir; projenin değerleri işlemciden, işletim sisteminden ve önceki ölçümlerden çıkarılır.

1. Amaç ve kapsam​

Bu bölüm standardın hangi bileşenlere, hangi seviyelerde ve hangi tasarım verisine uygulandığını söyler. Kapsam dışı bırakılanlar (işletim sistemi çekirdeği, kart destek paketi (board support package, BSP), önceden geliştirilmiş bileşenler, otomatik üretilen kod) adlarıyla ve tabi oldukları standartla yazılır; yazılmazsa her gözden geçirmede "bu bileşen bu kurala tabi mi?" sorusu yeniden açılır. Bağlayıcı kural ile tavsiye arasındaki dil farkı da burada tanımlanır, çünkü sapma süreci yalnızca bağlayıcı kurallar için işler. Çok sürümlü benzemez yazılımın (multiple-version dissimilar software) sürümleri farklı tasarım standartlarıyla geliştirilecekse bu da kapsamda yazılır.

Verilecek kararlar:

  • Standart hangi bileşenlere ve seviyelere uygulanıyor; seviyeye göre kural farkı var mı?
  • İşletim sistemi, kütüphaneler ve önceden geliştirilmiş bileşenler hangi standarda tabi?
  • Bağlayıcı kural ile tavsiye nasıl ayırt ediliyor; çok sürümlü benzemez yazılım için ayrı standart var mı?
Zayıf ifadeGüçlü ifade
"Bu standart projedeki tüm tasarımlar için geçerlidir.""Bu standart <ürün adı> uçuş yazılımının Seviye B ve C bileşenlerine uygulanır; <işletim sistemi adı ve sürümü> çekirdeği ve kart destek paketi, tedarikçinin tasarım verisiyle birlikte kapsam dışıdır."

2. Tasarım tanımlama yöntemi ve gösterimler​

Bu bölüm tasarımın hangi yaklaşımla (yapısal, nesne yönelimli, model tabanlı) ve hangi görünümlerle (bileşen, veri akışı, kontrol akışı, durum, görev tablosu) anlatılacağını, her diyagram türünde öğelerin anlamını ve tasarım verisinin nerede durduğunu (mimari belgesi, gereksinim aracı, veri sözlüğü (data dictionary)) belirler. Tasarım modeli (design model) kullanılıyorsa modelleme kuralları ayrı bir model standardına (software model standards) gider; biçimsel yöntemlerle (formal methods) analiz edilecek gösterimin sözdizimi ve anlamı matematiksel olarak tanımlı olmalıdır.

Verilecek kararlar:

  • Hangi tasarım yaklaşımı, hangi bileşende kullanılacak?
  • Mimari hangi görünümlerle, hangi diyagram türü ve araçla anlatılacak?
  • Tasarım verisi hangi ortamlarda tutulacak; aralarındaki kimlik bağı nasıl kurulacak?

Dikkat: Okun veri akışını mı, çağrıyı mı gösterdiği tanımlanmamışsa aynı diyagram iki gözden geçirene iki farklı şey söyler; veri ve kontrol bağlaşımı analizi de bu belirsizliği devralır.

3. Mimari kuralları​

Bu bölüm bileşenlerin nasıl bölüneceğini, nasıl bağlanacağını ve arıza karşısında nasıl davranacağını sınırlar; mimarinin tutarlılığı ve hedef bilgisayarla uyumu gözden geçirmede bu kurallarla değerlendirilir. Bölüm sınırını geçen verinin doğrulanması, değiştirilemeyen bileşenin kullanıcı tarafından değiştirilebilir bileşenden korunması, bekçi köpeği zamanlayıcısı (watchdog timer) ve makullük denetimi (reasonableness check) gibi izleme mekanizmaları ve en kötü durum yürütme süresine (worst-case execution time, WCET) bırakılacak pay buraya yazılır.

NoKuralGerekçeNasıl denetlenir
TS-01Bağımlılık yalnızca üst katmandan alt katmana doğrudur; donanım yazmaçlarına yalnızca sürücü katmanı erişir.Donanım değişikliği sürücüde kalır; etki analizi daralır.Statik analizden çıkan bağımlılık grafiği katman tablosuyla karşılaştırılır.
TS-02Her arayüz verisi için birim, aralık, çözünürlük, güncelleme hızı, tazelik sınırı, geçerlilik bilgisi ve başlangıç değeri yazılır.Entegrasyon hatası çoğunlukla aynı verinin iki tarafta farklı yorumlanmasıdır.Veri sözlüğünde boş alan sorgusu; anlam gözden geçirmede.
TS-03Daha düşük seviyeli bir bileşenden ya da başka bir bölümden gelen veri, kullanılmadan önce aralık ve tazelik denetiminden geçer.Üst seviyeli bileşen hatalı girdiye karşı kendini korur.Arayüz tablosunda kaynak seviyesi sütunu; denetimi yapan düşük seviyeli gereksinime iz.
TS-04Bileşenler algıladıkları hatayı hata yönetimi bileşenine bildirir; kısıtlı çalışma ya da güvenli duruma geçişe yalnızca o bileşen karar verir.Aynı arızaya tutarlı tepki; sınanacak yol sayısı azalır.Durum diyagramı ve çağrı grafiğinin gözden geçirmesi.
TS-05En kötü durumda işlemci kullanımı %80'i, her görevin yığın kullanımı ayrılan alanın %75'ini aşmaz.Sonraki değişiklikler ve ölçüm belirsizliği için pay.WCET ve yığın kullanımı analiz raporları.

Verilecek kararlar:

  • Kaç katman var ve donanıma hangi katman erişir?
  • Bölümleme ya da kullanıcı tarafından değiştirilebilir bileşen varsa koruma hangi mekanizmayla sağlanıyor; bölümler arası veri hangi kanallardan geçiyor?
  • Hangi izleme mekanizmaları hangi koşulda zorunlu?
  • İşlemci zamanı, bellek ve veri yolu için en az pay kaç, nasıl ölçülür?
  • Çok çekirdekli işlemcide (multi-core processor) görevler ve bölümler çekirdeklere hangi kuralla atanıyor; paylaşılan önbellek ve veri yolu girişimi (interference) WCET bütçesine nasıl giriyor (20. Gerçek Zamanlı İşletim Sistemleri)?
  • Sistem gereksinimleri tek olay bozulmasına (single event upset) karşı yazılıma önlem ayırdıysa saklı veri ve donanım yapılandırması hangi yöntemle denetleniyor: döngüsel artıklık denetimi (cyclic redundancy check, CRC), yazmaçların periyodik tazelenmesi?

4. Düşük seviyeli gereksinim kuralları​

Tasarım standardının en çok tartışılan bölümüdür. Ölçüt şudur: düşük seviyeli gereksinim (LLR) koddan bire bir kopya olmayacak kadar soyut, kodlayıcıya davranış kararı bırakmayacak kadar somut olmalıdır; kodlayıcı LLR'yi ve mimariyi okuyarak başka bilgiye gerek duymadan kodu yazabilmelidir. Bölüm bu ölçütü bir yazım kalıbına, zorunlu özniteliklere (kimlik, üst iz, türetilmiş işareti, gerekçe, doğrulama yöntemi) ve kodla iz kurulacak birime çevirir. Türetilmiş gereksinimlerin (derived requirements) işaretlenme ve iletilme yolu gereksinim standardındakiyle aynıdır.

Ayrıntı düzeyi kişiye bırakılmamalı

Standart ayrıntı düzeyini tanımlamazsa aynı projede kimi bileşen sözde kod (pseudocode), kimi tek cümlelik özet düzeyinde yazılır. Sözde koddan türetilen test, kodun doğruluğunu değil kendisiyle tutarlılığını gösterir; özet ise kararı kodlayıcıya bırakır ve kodda gereksinimsiz davranış belirir. İkisi de SOI-2'de bulgu olarak döner; standarda en az bir yetersiz ve bir yeterli örnek çifti konmalıdır.

Zayıf ifadeGüçlü ifade
"Uyarı mantığı aşırı hız durumunda uyarı verir." (tek cümlelik özet; kararı koda bırakır)"Havahızı geçerliyse ve VNE_LIMIT_knot değerinden büyükse uyarı çıkışı aynı çevrimde ETKİN yapılır."
"hiz değişkeni VNE_LIMIT_knot - VNE_HISTEREZIS_knot'tan küçükse sayac bir artırılır, değilse sıfırlanır; sayac VNE_TEYIT_CEVRIM olunca uyari ve sayac sıfırlanır." (sözde kod; kodun kopyası)"Uyarı ETKİN iken havahızı art arda VNE_TEYIT_CEVRIM çevrim boyunca VNE_LIMIT_knot - VNE_HISTEREZIS_knot değerinin altında kalırsa uyarı PASİF yapılır."
NoKuralGerekçeNasıl denetlenir
TS-06Her LLR tek bir davranışı tetikleyici koşul, girdi ve sonuçla tanımlar; yerel değişken, döngü yapısı ya da işlem sırası gibi kod ayrıntısı içermez.Ayrıntı düzeyi tek biçimli olur; test gereksinimden yazılabilir.Gözden geçirme kontrol listesi; standarttaki örnek çiftle karşılaştırma.
TS-07Tasarımda seçilen her eşik, teyit süresi, zaman aşımı ve filtre katsayısı birimi ve gerekçesiyle adlandırılmış bir tasarım parametresidir; üst gereksinimde yoksa türetilmiş işaretlenir.Türetilmiş gereksinimin en sık kaynağı; gürbüzlük (robustness) testinin girdisi.Kodda adsız sayısal sabit taraması; parametre listesinin LLR'lerle karşılaştırılması.
TS-08Kipe bağlı davranış durum makinesiyle verilir; her durum ve olay çifti için ya bir LLR vardır ya da çiftin bilerek yok sayıldığı yazılır.Tanımsız geçiş, kodda gereksinimsiz davranış olarak belirir.Durum–olay tablosunun tamlık denetimi.

Verilecek kararlar:

  • LLR hangi biçimde yazılacak: düzyazı kalıbı, karar tablosu, durum geçiş tablosu?
  • Algoritmalar hangi düzeyde verilecek: formül, adım listesi, sayısal örnek?
  • Doğrulama yöntemi özniteliği hangi değerleri alıyor (Test, Analiz, Gözden geçirme)?
  • Yüksek seviyeli gereksinimden LLR'ye iz hangi ayrıntıda, kim tarafından ve hangi gözden geçirmeden önce kuruluyor; bir LLR birden çok üst gereksinime bağlanabilir mi?
  • LLR ile kod arasındaki iz hangi birimle kuruluyor?
  • Tek gereksinim katmanıyla çalışılacak bileşen var mı; gerekçesi yazılım sertifikasyon planında (Plan for Software Aspects of Certification, PSAC) mı?

5. Adlandırma kuralları​

Bu bölüm bileşenlerin, arayüz verilerinin, durumların, olayların, tasarım parametrelerinin ve LLR kimliklerinin nasıl adlandırılacağını söyler. Tasarımdaki ad kodda aynen korunursa izlenebilirlik kolaylaşır; bu yüzden kural kodlama standardındaki adlandırmayla çelişmemelidir. Birim taşıyan adlar, knot ile metre/saniyenin karışması gibi hataları görünür kılar.

NoKuralGerekçeNasıl denetlenir
TS-09Fiziksel nicelik taşıyan her arayüz verisinin ve tasarım parametresinin adı birim sonekiyle biter (_knot, _ms, _deg); aynı ad kodda korunur.Birim karışıklığı görünür olur; iz kolaylaşır.Veri sözlüğünde ad–birim tutarlılık sorgusu; kodda adlandırma denetimi.

Verilecek kararlar:

  • Bileşen kısaltmalarını kim, hangi listede yönetiyor?
  • LLR kimlik biçimi ne (ör. LLR-<bileşen>-<sıra>); silinen kimlik yeniden kullanılabilir mi?
  • Tasarımdaki adın koddaki adla aynı olması zorunlu mu?

6. İzin verilen tasarım yöntemlerinin koşulları​

Bu bölüm riskli ama gerekli yöntemleri yasaklamaz; her biri için izin koşulunu ve gerekçesini yazar. Çizelgelemede (scheduling) döngüsel yürütücü (cyclic executive) seçilirse ana çerçeve (major frame) ve küçük çerçeve (minor frame) kuralları, sabit öncelikli kesintili (preemptive) çizelgeleme seçilirse öncelik atama kuralı yazılır. Görevlerin periyodu, zaman sınırı (deadline) ve WCET bütçesi çizelgelenebilirlik analizinin (schedulability analysis) girdisidir (9. Yazılım Doğrulama, 20. Gerçek Zamanlı İşletim Sistemleri); görev kümesi denemeleri için Görev Çizelgeleme Analiz Aracı kullanılabilir. Kesme servis rutini (interrupt service routine, ISR), olay güdümlü mimari (event-driven architecture), dinamik görev oluşturma (dynamic tasking), yeniden girilebilirlik (re-entrancy), paylaşılan veri ve istisna yönetimi (exception handling) için de koşul yazılır; işletim sisteminin tedarikçi belgesindeki kullanım kısıtları buraya taşınır.

NoKuralGerekçeNasıl denetlenir
TS-10Döngüsel yürütücüde ana çerçeve küçük çerçevenin tam katıdır; her küçük çerçevenin en kötü yükü çerçeve süresinin %80'ini aşmaz; taşma algılanıp bildirilir.Belirlenimci sıra; taşma sessiz kalmaz.Çerçeve tablosu ve WCET analizi; taşma için gürbüzlük testi.
TS-11Kesintili çizelgelemede öncelikler hız-monoton (rate-monotonic, RM) kurala göre, zaman sınırı periyottan kısa görev varsa zaman sınırı-monoton (deadline-monotonic, DM) kurala göre atanır; periyot, zaman sınırı, WCET bütçesi, öncelik ve yığın boyutu görev tablosunda verilir.Öncelik önem sırası değildir; tablo analizin girdisidir.Görev tablosu ile işletim sistemi yapılandırmasının karşılaştırılması; çizelgelenebilirlik analizi.
TS-12ISR yalnızca veriyi alır, kesme kaynağını temizler ve bir bayrak ya da kuyrukla görevi uyandırır; beklemeli çekirdek çağrısı yapmaz.Kesme süresi kısa ve sınırlı kalır; işleme olağan testle sınanır.ISR başına WCET ölçümü; kesme bağlamındaki çekirdek çağrılarının taranması.
TS-13Kesmeye ya da olaya bağlanan her kaynağın iki varış arasındaki en kısa süresi tasarımda verilir; sınırı bilinmeyen kaynak yoklamayla (polling) okunur.Sınırı bilinmeyen olay kaynağı analize girmez.Kesme tablosundaki en kısa varış aralığı sütununun gözden geçirmesi.
TS-14Olay ve mesaj kuyruklarının derinliği sabittir; taşma algılanır, sayılır ve tanımlı bir tepkiye bağlanır.Yük patlamasında veri kaybı sessiz kalmaz.Kuyruk tablosu; taşma için gürbüzlük testi.
TS-15Görevler, kuyruklar ve muteksler yalnızca başlatmada yaratılır; çalışma sırasında görev yaratılmaz, silinmez, önceliği değişmez.Analizin dayandığı görev modeli sabit kalır.Başlatma sonrasında çağrılan çekirdek hizmetlerinin statik taraması.

Paylaşılan veri muteksle korunuyorsa öncelik kalıtımı (priority inheritance) ya da öncelik tavanı (priority ceiling) kullanılır. Daha düşük öncelikli görevlerin bu görevi bekletebilecek kritik kesitleri (critical section) analize engellenme süresi (blocking time) olarak girer: öncelik tavanında en uzun tek kesit yeterlidir; öncelik kalıtımında görev art arda birden çok kesitte bekleyebileceğinden her düşük öncelikli görevin en uzun ilgili kesiti toplanır (20. Gerçek Zamanlı İşletim Sistemleri).

NoKuralGerekçeNasıl denetlenir
TS-16Birden çok görevden ya da kesmeden çağrılan fonksiyon tasarımda yeniden girilebilir diye işaretlenir; statik yerel değişken ve korumasız global yazım içermez.Eşzamanlı çağrıda iç durum bozulmaz.Çağrı grafiğinden çoklu bağlam taraması; işaretli fonksiyonların gözden geçirmesi.
TS-17Görevler arası paylaşılan her verinin tek yazanı vardır; okuyanlar ve koruma yöntemi (öncelik kalıtımlı muteks, kuyruk, çift tampon) global veri erişim tablosunda yazılır.Yarı eski yarı yeni okuma ve yarış durumu dışlanır.Erişim tablosu ile statik analiz erişim raporunun karşılaştırılması.
TS-18Muteks beklemeleri zaman aşımlıdır; süresiz bekleme yasaktır; iç içe kilitler için tek bir alma sırası tanımlanır.Kilitlenme dışlanır; engellenme süresi sınırlanır.Çekirdek çağrılarının parametre taraması; kilit sırası tablosu.
TS-19İşlemci istisnaları (sıfıra bölme, bellek koruma ihlali, tanımsız komut) tek işleyicide yakalanır, kaydedilir ve istisna tablosunda tanımlı tepkiye (güvenli duruma geçiş ya da yeniden başlatma) bağlanır.Belirsiz durumdan sessizce devam edilmez.İstisna vektör tablosunun gözden geçirmesi; hata enjeksiyonu testi.

Verilecek kararlar:

  • Döngüsel yürütücü mü, kesintili çizelgeleme mi; gerekçesi ne?
  • Hangi çekirdek hizmetleri kesme bağlamından çağrılabilir, hangileri hiç kullanılmaz?
  • Hangi istisnada yeniden başlatma, hangisinde güvenli duruma geçiş var?
Zayıf ifadeGüçlü ifade
"Görevler uygun önceliklerle çalıştırılır.""Öncelikler hız-monoton kurala göre atanır; görev tablosu tasarım tanımında yer alır ve çizelgelenebilirlik analizinin girdisidir."

7. Tasarım kısıtları​

Bu bölüm doğrulanamayan ya da emniyet gereksinimleriyle bağdaşmayan yapıları dışlar. Özyineleme (recursion) yığın üst sınırının hesaplanmasını engeller; başlatma sonrasında bellek ayırma parçalanma ve belirsiz süre getirir; veri takma adı (data alias), yani aynı belleğe birden çok adla erişim, veri akışı analizini kör eder; sıkıştırılmış ifadeler (compacted expressions) ara taşma ve ölçekleme hatalarını gizler. Kuralın dili "yasak" ya da "yalnızca şu koşulla" olmalıdır; "kaçınılır" gibi bir ifade gözden geçirmede uygulanamaz.

NoKuralGerekçeNasıl denetlenir
TS-20Doğrudan ve dolaylı özyineleme yasaktır.Yığın üst sınırı hesaplanamaz; mimari doğrulanamaz hâle gelir.Çağrı grafiğinde döngü taraması; kodlama standardındaki karşılığı (ör. MISRA C:2012 Kural 17.2).
TS-21Başlatma tamamlandıktan sonra bellek ayrılmaz ve bırakılmaz.Parçalanma, belirsiz süre ve bellek tükenmesi dışlanır.Bağlama haritasında ayırma fonksiyonu ve öbek (heap) bölümü taraması.
TS-22Aynı bellek alanına birden çok adla (union, işaretçi dönüşümü) erişim yalnızca sürücü katmanında ve tasarımda listelenen yerlerde yapılır.Gözden geçirme ve veri akışı analizi takma adı göremez.Listedeki yerlerle statik analiz bulgularının karşılaştırılması.
TS-23Birden çok işlem içeren bir hesapta LLR ara sonuçları adlandırır, her birinin birimini ve aralığını verir.Ara taşma ve ölçekleme hataları gereksinimde görünür.LLR gözden geçirme kontrol listesi.
Zayıf ifadeGüçlü ifade
"Dinamik bellek kullanımından mümkün olduğunca kaçınılır.""Başlatma bittikten sonra bellek ayrılmaz ve bırakılmaz; başlatmadaki ayırmalar statik havuzdan yapılır, bağlama haritasında öbek bölümünün boyutu sıfırdır."

Nesne yönelimli özellikler (7.5). Nesne yönelimli bir teknik kullanılıyorsa DO-332 bu standarda ayrı bir başlık ekler; uygulama örnekleri 15. DO-332 ve Nesne Yönelimli Teknoloji bölümündedir. Standart en az şu konularda karar verir:

KonuStandartta verilecek karar
Sınıf hiyerarşisiGereksinimlerden çıkarılışı, kalıtım (inheritance) derinliği, yerel tip tutarlılığının (local type consistency) gösterilme yöntemi
Parametrik çok biçimlilik (parametric polymorphism)Şablon ve generic birimlerin hangi tiplerle örneklenebileceği
Aşırı yükleme (overloading), tip dönüşümü (type conversion)İzin koşulları; örtük dönüşüm ve örtük çağrı üreten yapıların sınırı
İstisna ve bellek yönetimiMimari düzeyde tek strateji: yayılma sınırı, havuz ya da başlatmada ayırma, çöp toplama (garbage collection) varsa zaman davranışı
Sanallaştırma (virtualization)Yorumlayıcı ya da sanal makine üzerindeki kodun kod mu veri mi sayılacağı
Yeniden kullanımYeniden kullanılan sınıflardan doğan türetilmiş gereksinimler ve devre dışı kalacak işlevler

Verilecek kararlar:

  • Özyineleme tümden mi yasak, derinliği statik sınırlı biçimde mi izinli?
  • Başlatmada bellek ayırmaya izin var mı; havuz boyutları nerede tanımlı?
  • Nesne yönelimli özelliklerden hangileri, hangi sınırla kullanılıyor?

8. Karmaşıklık sınırları​

Bu bölüm tasarımın gözden geçirilebilir ve analiz edilebilir kalmasını sayısal sınırlara bağlar. Karmaşıklık ile emniyet arasında nicel bir bağ kurulamadığından sınırın değeri bir mühendislik kararıdır ve gerekçesi (yığın bütçesi, test maliyeti) yazılır. Ölçümün tanımı da verilir: dolaylı çağrılar ve kesme rutinleri çağrı derinliğine sayılıyor mu? Çevrimsel karmaşıklık (cyclomatic complexity) gibi fonksiyon içi sınırların sahibi kodlama standardıdır; bu bölüm bileşen ve mimari düzeyindeki sınırları koyar, fonksiyon içi sınırlara atıf yapar.

NoKuralGerekçeNasıl denetlenir
TS-24İç içe çağrı derinliği, kesme rutinleri dahil, en çok 8'dir.Yığın analizi ve en kötü yol izlenebilir kalır.Statik analiz aracının çağrı grafiği raporu.
TS-25Koşul yapılarının iç içe derinliği ve bir karardaki koşul sayısı kodlama standardındaki sınırlara uyar (örnekte KS-11: en çok 4 ve 6); LLR'deki karar yapıları bu sınırı aşmayacak biçimde bölünür.Gözden geçirilebilirlik; değiştirilmiş koşul/karar kapsama (MC/DC) test sayısı denetimde kalır.LLR gözden geçirme kontrol listesi; kodda KS-11 ölçümü.
TS-26Koşulsuz dallanma (goto, setjmp/longjmp) kullanılmaz; her fonksiyonun tek giriş noktası vardır, çıkış noktası sayısı kodlama standardındaki karara uyar (örnekte MISRA C:2012 Kural 15.5 gerekli sayılmış: tek çıkış, erken dönüş yalnızca sapma kaydıyla).Kontrol akışı tasarımdan okunur; kapsam analizi sadeleşir.Kodlama standardındaki karşılık kurallar (ör. MISRA C:2012 Kural 15.1, 15.5, 21.4).
Zayıf ifadeGüçlü ifade
"Tasarım gereğinden karmaşık olmamalıdır.""İç içe çağrı derinliği en çok 8'dir; ölçüm <statik analiz aracı ve sürümü> çağrı grafiği raporuyla yapılır, aşan her zincir için sapma kaydı açılır."

Verilecek kararlar:

  • Hangi sınırlar bu standartta, hangileri kodlama standardında tanımlanacak?
  • Sınır değerleri ne, gerekçesi ne ve hangi araçla ölçülüyor?
  • Sınırı aşan bileşen için sapma mı açılıyor, yeniden tasarım mı yapılıyor?

9. Veri ve kontrol bağlaşımı kuralları​

Seviye A, B ve C'de bileşenler arası veri ve kontrol bağlaşımının (data and control coupling) gereksinim tabanlı testlerle işletildiği analizle gösterilir. Analiz mimaride tanımlı bağlaşımları esas alır; mimaride görünmeyen bağlaşım analizde de görünmez ve sonradan bulgu olarak döner (9. Yazılım Doğrulama). Bu bölüm bağlaşımın tasarımda hangi biçimde bildirileceğini tanımlar: bileşen arayüz tablosu (dışa açık fonksiyonlar, çağrılan bileşenler, kip seçimi gibi kontrol etkileri) ve global veri erişim tablosu; tabloların elle mi tutulduğu, araçtan mı üretildiği de burada yazılır.

NoKuralGerekçeNasıl denetlenir
TS-27Her bileşenin dışa açık fonksiyonları ile okuduğu ve yazdığı global veriler bileşen arayüz tablosunda listelenir; tabloda olmayan erişim bulgudur.Bağlaşım analizi mimaride tanımlı bağlaşıma dayanır.Arayüz tablosu ile statik analiz çağrı ve erişim raporunun karşılaştırılması.
TS-28Fonksiyon işaretçisiyle ya da çağrı tablosuyla yapılan çağrıların hedef kümesi tasarımda listelenir ve başlatmadan sonra değişmez.Dolaylı çağrının hedefi analizde bilinir.Çağrı tablolarının sabit bellekte olduğunun bağlama haritasından denetimi; gözden geçirme.

Verilecek kararlar:

  • Bileşen arayüz tablosu hangi alanları içeriyor ve tasarım verisinde nerede duruyor?
  • Global veri erişim tablosu elle mi tutuluyor, araçtan mı üretiliyor?
  • Dolaylı çağrılara izin var mı; varsa hedef kümesi nerede listeleniyor?

10. Devre dışı bırakılmış kod ve seçenekle seçilebilir işlevler​

Devre dışı bırakılmış kodun (deactivated code) etkin işlevleri bozmasını ve istem dışı etkinleşmesini (inadvertent enabling) önleyen mekanizma tasarımın parçasıdır. Standart onun biçimini tanımlar: ayrımın derleme zamanında mı, çalışma zamanında mı (konfigürasyon verisi, pin programlama) yapılacağı, seçim noktasının tekliği ve tanımsız seçim değerinin sonucu. Seçenekle seçilebilir yazılımın (option-selectable software) seçim verisi ayrı dosyadaysa parametre verisi öğesi olarak yönetilir (22. Konfigürasyon Verisi); kanıt beklentisi 17. Kapsanmayan Kodlar bölümündedir.

NoKuralGerekçeNasıl denetlenir
TS-29Seçenekle seçilebilir her işlev tek bir seçim noktasından yönetilir; seçim verisinin tanımsız ya da bozuk değeri işlevi kapalı tutar ve arıza bildirir.İstem dışı etkinleşme tek noktada önlenir ve doğrulanır.Seçim verisinin kullanıldığı yerlerin taraması; tanımsız değer için gürbüzlük testi.
TS-30Koşullu derleme anahtarları tasarımda listelenir; listede olmayan anahtar kullanılmaz, her derleme varyantı ayrı imaj olarak tanımlanır.Hangi kodun imaja girdiği belirsiz kalmaz.Derleme betiklerindeki anahtarların listeyle karşılaştırılması.

Verilecek kararlar:

  • Devre dışı bırakma derleme zamanında mı, çalışma zamanında mı yapılacak?
  • Seçim verisi parametre verisi öğesi olarak mı yönetiliyor?
  • Gelecek sürüm işlevi gibi riskli kullanımlara izin var mı; varsa otoriteyle konuşuldu mu?

11. Tasarım araçlarının kullanım kısıtları​

Araç adı ve sürümü yazılım geliştirme planında ve yazılım yaşam döngüsü ortam konfigürasyon indeksinde (Software Life Cycle Environment Configuration Index, SECI) durur; bu bölüm aracın nasıl kullanılacağını sınırlar: izin verilen diyagram türleri, kapalı tutulan otomatik özellikler, araç dosyalarının saklanma biçimi. Araçtan kod üretilecekse doğrulama ya da kalifikasyon planlarda karara bağlanır. Koddan tasarım üretmek tersine mühendisliktir (reverse engineering) ve kodla uyumu gösterir, doğruluğu göstermez (25. Tersine Mühendislik). Uyumu otomatik denetleyen aracın çıktısı gözden geçirmenin yerine geçecekse kalifikasyon kararı PSAC'tadır.

NoKuralGerekçeNasıl denetlenir
TS-31Planlarda tersine mühendislik tanımlanmadıkça tasarım verisi koddan araçla üretilmez; tasarım aracının kod üretme özelliği yalnızca planlarda tanımlıysa kullanılır.Koddan üretilen tasarım kodla uyumu gösterir, doğruluğu göstermez.Tasarım verisinin oluşturma kaydı; araç ayarlarının gözden geçirmesi.
Zayıf ifadeGüçlü ifade
"Tasarım <araç adı> ile yapılır.""Mimari <araç adı ve sürümü> ile yalnızca bileşen, durum ve sıralama diyagramlarıyla çizilir; kod üretme ve koddan diyagram üretme özellikleri kapalıdır; araç dosyaları <depo adı> altında konfigürasyon kontrolündedir."

Verilecek kararlar:

  • Hangi tasarım ve modelleme araçları kullanılıyor; hangi özellikleri kapalı?
  • Araçtan kod üretilecek mi; üretilecekse doğrulama mı, kalifikasyon mu?
  • Araç dosyaları hangi biçimde temel çizgiye (baseline) alınıyor?

12. Uyum denetimi ve sapma süreci​

Bu bölüm standardı yaşatan mekanizmayı tanımlar. Her kural için bir denetim yolu (araç, kontrol listesi maddesi ya da analiz) yazılır; kontrol listesi kural numaralarına atıf yapınca "standarda uygun mu?" sorusu tek bir onay kutusu olmaktan çıkar. Sapma (deviation) akışının ayrıntısı (kayıt alanları, tekil ve proje geneli sapma, onay yetkisi) kodlama standardı şablonundadır; tasarım standardı aynı akışı kullanır ve yalnızca tasarıma özgü olanı ekler: sapma kaydının kimliği ilgili bileşenin ya da LLR'nin tasarım verisine yazılır. Sapmalar proje sonunda yazılım başarım özetinin (Software Accomplishment Summary, SAS) uyum beyanında anıldığı için kayıtlar toplanabilir tutulur; kayıtları kalite güvencesi denetler (A-9 #3). Standart değişirse eski sürüme göre gözden geçirilmiş tasarımın ne olacağı da buradadır.

Zayıf ifadeGüçlü ifade
"Gerekirse standarttan sapılabilir.""Sapma, kodlama standardındaki akışla kural numarası, yer, gerekçe ve telafi edici doğrulamayla kaydedilir; kayıt kimliği tasarım verisine yazılır ve <onaylayan rolü> onaylamadan ilgili gözden geçirme kapatılmaz."

Verilecek kararlar:

  • Her kural hangi yolla denetleniyor: araç, kontrol listesi, analiz?
  • Tasarım sapmasını kodlama standardındaki onaylayan rol mü onaylıyor; kayıt kimliği tasarım verisinde nereye yazılıyor?
  • Standart değiştiğinde mevcut tasarım verisi yeniden değerlendiriliyor mu?

Dikkat: Toplu muafiyet ("sürücü katmanı bu standarda tabi değildir") sapma değildir; 1.2'de gerekçeli kapsam dışı bırakmadır.

Seviyeye göre farklar​

KonuSeviye A ve BSeviye CSeviye D
Standardın tanımlanması (A-1 #5)BeklenirBeklenirBeklenmez
Kontrol kategorisiCC1CC2–
Tasarımın standarda uyumu (A-4 #5, #12)Aranır; bağımsızlık gerekmezAranır; bağımsızlık gerekmezAranmaz
Hedef bilgisayarla uyum, doğrulanabilirlik (A-4 #3, #4, #10, #11)AranırAranmazAranmaz
Bölümleme bütünlüğü (A-4 #13)A'da bağımsızlıkla; B'de aranırAranırAranır
Veri ve kontrol bağlaşımı analizi (A-7 #8)Bağımsızlıkla aranırAranırAranmaz
Kalite güvencesi: standart ve uyum (A-9 #1, #3)Bağımsızlıkla aranırBağımsızlıkla aranırAranmaz

Seviye A ve B. Standart CC1 altında yönetilir: temel çizgiye alınır, değişikliği problem raporu ve değişiklik gözden geçirmesiyle yapılır. Hedef bilgisayarla uyum (başlatma, eşzamanlama, kesmeler, kaynak kullanımı) ve doğrulanabilirlik yalnızca bu iki seviyede ayrı hedeftir; 3, 6, 7 ve 8. bölümlerdeki kurallar onların dayanağıdır.

Seviye C. Standart yine beklenir ama CC2 altında yönetilebilir: sürümü tanımlı, korunmuş ve geri getirilebilir olur; değişikliği için problem raporu ve resmî değişiklik onayı aranmaz (10. Yazılım Konfigürasyon Yönetimi). Standarda yazılan her kurala uyum denetlenmeye devam eder; A ve B ile aynı standart kullanılıyorsa C'de uygulanmayacak kurallar 1.1'de açıkça ayrılır.

Seviye D. Tasarım standardı beklenen veri değildir; LLR'ler de hedef değildir. Yine de yararlı olabilir: mimari bu seviyede de geliştirilir, bölümleme kullanılıyorsa bütünlüğü D'de de doğrulanır ve arayüz ve bölümleme kuralları yazılı değilse bu doğrulamanın ölçütü kalmaz. Ortak standart, farklı seviyelerde çalışan ekipte tutarlılık sağlar ve ileride seviye yükseltmeyi ucuzlatır. Planlarda zorunlu tutulan standart, planlara uyumla birlikte denetim konusu olabilir; bu yüzden yalnızca gerçekten uygulanacak kurallar yazılır.

DO-178C uyum tablosu​

DO-178CKonuŞablondaki yer
§11.7Standardın kapsamı ve uygulanışı1 Amaç ve kapsam
§11.7.aTasarım tanımlama yöntemi2 Tasarım tanımlama yöntemi ve gösterimler
§11.7.bAdlandırma kuralları5 Adlandırma kuralları
§11.7.cİzinli yöntemlerin koşulu ve gerekçesi6 İzin verilen tasarım yöntemlerinin koşulları
§11.7.dTasarım aracı kısıtları11 Tasarım araçlarının kullanım kısıtları
§11.7.eYasak ya da kısıtlı yapılar7 Tasarım kısıtları
§11.7.fKarmaşıklık sınırları8 Karmaşıklık sınırları
§4.1.eEmniyet hedefleriyle tutarlı standart1.1 Uygulandığı yazılım ve seviyeler; 3.4 Emniyet mekanizmaları ve hata yönetimi
§4.2.bStandardın seçilmesi ya da yazılması1 Amaç ve kapsam
§4.2.f, §12.3.2Benzemez sürümler için ayrı standart1.2 Kapsam dışı ve ayrı standarda tabi bileşenler
§4.2.gDeğişiklik kontrolü ve gözden geçirmeOrtak ön bölümler; 12.3 Standardın değiştirilmesi
§4.2.h, §5.2.4Devre dışı kod mekanizması10 Devre dışı bırakılmış kod ve seçenekle seçilebilir işlevler
§4.2.i, §5.2.3Değiştirilebilir bileşenin korunması3.3 Bölümleme ve koruma sınırları
§4.5.aBölüm 11'e uyumBu uyum tablosu
§4.5.bTek biçimli tasarım2 Tasarım tanımlama yöntemi ve gösterimler; 4.2 Yazım kalıbı; 5 Adlandırma kuralları
§4.5.cDoğrulanamayan yapıların dışlanması7 Tasarım kısıtları; 8 Karmaşıklık sınırları
§4.5.dGürbüzlüğün gözetilmesi3.4 Emniyet mekanizmaları ve hata yönetimi
§5.2.2.aTasarımın standarda uyması12 Uyum denetimi ve sapma süreci
§5.2.2.bTüretilmiş LLR ve gerekçesi4.4 Türetilmiş düşük seviyeli gereksinimler
§5.2.2.dBileşen arayüzlerinin tutarlılığı3.2 Arayüz tanımı; 9 Veri ve kontrol bağlaşımı kuralları
§5.2.2.eKontrol ve veri akışının izlenmesi3.4 Emniyet mekanizmaları ve hata yönetimi
§6.3.2.c, §6.3.3.cHedef bilgisayarla uyum3.5 Kaynak bütçeleri ve paylar; 6 İzin verilen tasarım yöntemlerinin koşulları
§6.3.2.e, §6.3.3.eLLR'nin ve mimarinin standarda uyumu12.1 Kuralların denetim yolu
§6.3.3.dDoğrulanabilir mimari7.1 Özyineleme; 8 Karmaşıklık sınırları
§8.1.aStandardın kalite güvencesiOrtak ön bölümler (onaylar)
§8.1.bStandarda uyumun kalite güvencesi12.2 Sapma isteği ve onayı
§11.20.lSapmaların SAS'ta anılması12.2 Sapma isteği ve onayı
§12.2Tasarım aracının kalifikasyon kararı11.2 Kod üretimi ve koddan tasarım üretimi

Teknoloji ekleri​

EkMaddeŞablona etkisi
DO-331MB.11.7§11.7 değişmez. Mimari ya da LLR modelle ifade ediliyorsa ek kurallar model standardına yazılır; 2.1 hangi bileşenin modelle tasarlandığını söyler.
DO-331MB.4.5, MB.11.23Model standardı dördüncü geliştirme standardıdır; tasarım modeli için ayrı bir standart ya da bu belgenin eki olarak yazılır (14. bölüm).
DO-331MB.6.3.2.e, MB.6.3.3.eModelle ifade edilen tasarımda uyum model standardına göre denetlenir; 12.1 bunu da kapsar.
DO-332OO.5.2.2.h–lSınıf hiyerarşisi, yerel tip tutarlılığı, bellek ve istisna stratejisi ile yeniden kullanım tasarım faaliyetine girer; gösterimleri 2 ve 7.5'te tanımlanır.
DO-332OO.11.7.g.1–g.4, g.7Kalıtım, parametrik çok biçimlilik, aşırı yükleme, tip dönüşümü ve sanallaştırma kısıtları: 7.5
DO-332OO.11.7.g.5İstisna yönetimi kısıtları: 6.7 ve 7.5
DO-332OO.11.7.g.6Dinamik bellek yönetimi kısıtları: 7.2 ve 7.5
DO-332OO.6.3.3.a–bMimari değerlendirmesine istisna ve bellek yönetimi ile kalıtım ilişkileri eklenir: 9 ve 12.1
DO-333FM.11.7.aBiçimsel modelde gösterimin sözdizimi ve anlamı matematiksel olarak tanımlıdır; gösterim kısıtları 2.3'e yazılır.

Bu eşleme bir başvuru aracıdır; standardın kendisinin yerine geçmez, madde metinleri için DO-178C ve ilgili ek esas alınır.

Diğer belgelerle tutarlılık​

Bu belgedeÖrtüşmesi gereken belgeNasıl denetlenir
Tasarım araçları ve kullanım biçimi (11)SDP: geliştirme ortamı ve araç sürümleri; SECIAraç adları ve sürümleri iki belgede aynıdır
LLR kimliği ve türetilmiş işaretleme (4)Gereksinim standardı: kimlik biçimi ve türetilmiş gereksinim akışıTüretilmiş gereksinimin sistem süreçlerine iletilme yolu iki standartta aynıdır
Karmaşıklık, özyineleme, dinamik bellek, global veri (7, 8)Kodlama standardı: dil alt kümesi ve karmaşıklık sınırlarıHer sınır tek belgede tanımlanır, öteki atıf yapar; sayılar çelişmez
Kuralların denetim yolu (12.1)SVP: tasarım gözden geçirme kontrol listesi, bağlaşım analiziKontrol listesi maddeleri TS numaralarına atıf yapar
Sapma süreci (12.2)Kodlama standardı: sapma akışı; SQAP: sapma kayıtlarının denetimiAyrı akış tanımlanmamış; kayıt alanları ve onaylayan rol aynıdır
Standardın değiştirilmesi (12.3)SCMP: kontrol kategorisi ve değişiklik kontrolüStandart A ve B'de CC1, C'de CC2 olarak listelenmiştir
Bölümleme, devre dışı kod, değiştirilebilir bileşen (3.3, 10)PSAC: yazılıma genel bakış ve ek hususlarPSAC'ta anılan her mekanizmanın bu standartta kuralı vardır

Sık hatalar​

HataTipik nedeniÖnlem
Standart tasarım ilkelerini anlatıyor; numaralı, denetlenebilir kural yokDers kitabından derleme, takvim baskısıHer kurala numara, sınır değeri, gerekçe ve denetim yolu
LLR ayrıntı düzeyi bileşenden bileşene sözde koddan özete değişiyorÖlçütün ekip deneyimine bırakılması4.1'de ölçüt ve yetersiz/yeterli örnek çifti
Çizelgeleme ve kesme kuralları seçilen işletim sisteminin kullanım kısıtlarıyla uyuşmuyorStandardın işletim sistemi seçiminden önce yazılıp güncellenmemesiTedarikçinin kullanım kısıtlarını 6. bölüme taşımak; seçimden sonra revizyon
Aynı sınır tasarım ve kodlama standardında farklı sayıylaİki standardın birbirinden habersiz yazılmasıSınırın sahibi olan belgeyi belirlemek; öteki atıf yapar
Tedarikçi kodu için çok sayıda sapmaKapsamın yalnızca yeni kod düşünülerek yazılması1.2'de bileşen bileşen kapsam dışı listesi ve tabi oldukları standart
Tasarım koddan araçla üretilmiş; standarda uyum kâğıt üzerindeTasarım verisinin kodlamadan sonra yazılmasıTS-31; tersine mühendislik gerekiyorsa planlarda tanımlamak
Mimaride bildirilmemiş global veri erişimi bağlaşım analizinde bulgu çıkarıyorArayüz tablosunun zorunlu tutulmaması9. bölümdeki tablonun statik analizle karşılaştırılması

Yayımlamadan önce​

  • Her kuralın numarası, gerekçesi ve denetim yolu var; "mümkün olduğunca" gibi ifade yok.
  • LLR ayrıntı düzeyi için ölçüt ve en az bir yetersiz/yeterli örnek çifti standartta.
  • Çizelgeleme, kesme ve paylaşılan veri kuralları seçilen işletim sisteminin ve sertifikasyon paketinin kullanım kısıtlarıyla karşılaştırıldı.
  • Karmaşıklık sınırları kodlama standardıyla çelişmiyor; her sınır tek belgede tanımlı.
  • Kapsam dışı bırakılan bileşenler adıyla ve tabi oldukları standartla yazılı.
  • Tasarım araçları, sürümleri ve kapalı tutulan özellikler SDP'deki ortam tanımıyla aynı.
  • Tasarım gözden geçirme kontrol listesi kural numaralarına atıf yapıyor.
  • Sapma süreci kodlama standardındaki akışa atıf yapıyor; ayrı akış ya da farklı onaylayan tanımlanmamış, kayıtların denetimi SQAP'ta.

Otoritenin standartlarda baktığı noktalar SW SOI-1, tasarımın bu standarda uyumunun nasıl örneklendiği SW SOI-2 sayfasındadır.

İlgili bölümler​