Test-Driven Development (TD) uzun zamandır çevik yazılım mühendisliğinde temel bir uygulama olmuştur, ancak tek bir yazılım hatasının yaşam, mülk veya görev kaybı gibi kritik alanlarda rol oynadığını iddia eder.

TDD Döngüsü: Red-Green-Refaksiyon

Onun özünde TDD bir disiplini takip eder, iteratif üç fazlı döngüsü:

  1. [FONT:0)Red:[Dönetici:0) İstenen bir davranışı veya kabul kriterini tanımlayan başarısız bir test yazın. Testin spesifik, otomatik ve mümkün olduğunca küçük olması gerekir.
  2. [FONT:0)Green:[Dönetici: [Dönetici:0) Bu testin geçişini yapmak için gerekli minimum üretim kodu yazın. Yeniden faktörleme, spekülatif genellik - sadece testi tatmin etmek için yeterli.
  3. [FONT:0)Refaksiyon: [Dönetici:0))Refaksiyon: [Dönetici:0)Refaksiyon:[Dönetici:0))))Temiz: [Dönetici kodu ve test kodunu temizleyin. okunabilirlik, çoğaltmayı geliştirin ve tasarım basit ve doğru kalırken, tüm testler devam eder.

Bu döngü, her türlü özelliğin onlarca veya yüzlerce kez tekrarlanır. Sonuç, kodbase ile büyüyen ve önceden planlanan testlerden gelen bir tasarımdır.In security-kritik bağlamda TDD genellikle statik analiz, resmi yöntemler ve donanım-in-the-loop testleriyle birlikte bir araya getirilir.

Güvenlik-Critical Software Neden Ekstra Rigor Talepleri

Güvenlik-kahkalama sistemleri başarısızlık sonuçları ile tanımlanır. Havacılık endüstrisinde, sivil uçak ve sistemler gibi standartlar: 0 )DO-178C) ve [[Uygun sistemler için) ve [[Dönetici ve tıbbi cihazlar takip eder.ARP4754A[DÜcretsiz uçak ve sistemler için) aynı şekilde doğrulanmış doğrulama ve geçerlilik faaliyetlerine izin verilir.[Dönetici:262][/FONT=3][/FONT=FONT=FONT=3][/FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT

Geleneksel "kolay-sonrası" yaklaşımlar genellikle projede geç bir şişenck test etmeye yol açıyor. Bugs entegrasyon veya sistem testleri sırasında keşfedildi - bazen gereksinimleri veya mimaride bir değişiklik gerektiriyor. TDD sürekli, birinci sınıf bir aktivite test ederek bu dinamiği döndürür.In co-yazlı Kent Beck koydu, testler sadece bir güvenlik ağı değil, tasarımda bir değişiklik gerektirir.

Mekanik ve Havacılık Mühendisliğinde TDD: Zorluklar ve Adaptasyonlar

Domain-Specific Challenges

TDD'yi mekanik ve havacılık mühendisliğinde uygulamak, web veya işletme yazılımlarından basit bir çeviri değildir. Birkaç zorluk ortaya çıkmaktadır:

  • [FONT=0)Hardware bağımlılıklara bağlı:[Döneticiler:[Döneticiler: 0) Birçok havacılık sistemleri, sensörler, eylemciler ve diğer fiziksel bileşenlerle etkileşime giren gömülü kontrolörleri içerir. Bu tür kod için saf birim testleri genellikle donanım soyutlama veya simülasyon tabakaları gerektirir.
  • [FONT:0) Gerçek zamanlı ve determinist kısıtlamalar:[Dönetici iş istasyonu üzerinde çalışan Testler, hedef donanımın zaman duyarlı davranışını yansıtmayabilir. TDD sadece bir kontrol döngüsünin zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zaman zamanlaması tarihlerini doğrulayamaz.
  • [FONT:0) Model tabanlı tasarım:[Dönetici] Birçok havacılık projelerinde, mühendisler model seviyesindeki testlere (model-in-Loop veya Software-in-the-Loop) ve el yazma koduna uygulanabilir.
  • [FONTNT:0)Certification documents:[DÜDÜDÜDÜDÜDÜSTRİYE) ► [FONTNTNTNTNTNTTR:0)Certification documents:[FONTT:1) Standartlar DO-178C gibi testlerin her kod ve her şubeyi kapsadığı kanıt gerektirir. TDD'nin iyi eğitimli test paketi doğal olarak bu kanıtları sunar, ancak geliştirme süreci belgelenmiş ve denetimlenebilir.

TDD Çevrimi Gömülü Güvenlik-Critical Systems için Adapting the TDD Rise for Protectored Safety-Critical Systems

Bu zorluklara ulaşmak için, mühendislik takımları genellikle bir hibrit yaklaşım benimsemektedir:

  • [FONT:0) Donanım soyutlama katmanları ile test (HAL): [Döneticileri donanım periferileri için soyut arayüzler yazarak (örneğin, ADC, PWM, CAN otobüs), geliştiriciler aynı arayüzleri test ederek, hedef üzerinde gerçek sürücülere bağlı.
  • [FONT:0) Fiziksel modeller için Test çiftleri:[DD:0) Gerçek bir motor veya hava çerçevesi kullanmak yerine, TDD testleri, fiziksel davranışı taklit eden bitki modelleri (simted systems) kullanabilir. Bu, kontrol algoritmalarının ve hata algılama mantığının erken geçerliliğini sağlar.
  • [FONT:0]Statik analiz “kırmızı” aşamasına entegre edilmiştir: [DÜD’nin “kırmızı” aşaması sadece dinamik testler değil aynı zamanda MISRA uyumluluğu için statik kontroller de dahil edilebilir ve veri akışı doğrulayıcılık için önemlidir.
  • [FONT:0]Pairing TDD resmi yöntemlerle: En kritik fonksiyonlar için (örneğin, acil kapanma, uçuş kabuğu koruması), takımlar test odaklı süreci ispatlamak için resmi doğrulama araçları kullanabilir.

Sertifika ve Standartlar: TDD nasıl Uyuma Destekler

TDD'yi güvenlik-kahkır mühendisliğinde benimsemek için en büyük engellerden biri, sertifikasyon gerekliliklerine aykırı olduğu algıdır. Aslında TDD, doğru bir şekilde uygulandığında uyum sağlamada güçlü bir müttefik olabilir.

Gereksinimlerden Testlere Göre İzlenebilirlik

DO-178C'de, her üst düzey şart, düşük seviyeli gereksinimleri takip etmeli, bu da test vakalarını test etmek için izlenmelidir. TDD iş akışında, her test belirli bir şart veya kabul kritere dayanarak yazılır.Bu gereksinimleri ve bir çift yönlü iz matrisi (örneğin, bir gereklilik yönetim aracı kullanarak)

Yapısal Coverage Analizi Analiz

DO-178C Seviye A'nın gerektirdiği gibi standartlar:0)Modified Durum / Decision Coverage (MC/DC)) - her durumda bağımsız olarak birçok küçük yazma geleneği, hedef testlerin elde edilmesi ve belgelenmesi için daha kolay hale getirilmesi gerekir.

Gereksinimlerin Doğrulaması vs. Niyet Mektubu

TDD'de bir risk, geliştiricilerin orijinal gereksinimlerine karşı doğrulanmaları yerine kendi uygulamalarını test edebilir. Bu, " niyetin" çöküşü olarak bilinir. Güvenlik-kahkade projelerde, titiz gereksinimler değerlendirmeler ve bağımsız doğrulama (bir takımda) gerekli kalır. TDD, gelişim ekibi için bir uygulama olarak görülmelidir, resmi V&V faaliyetleri için bir yedek olarak görülmemelidir.

Gerçek Dünya Örnekleri ve Vaka Çalışmaları

Uçuş Kontrol Yazılımı Bir Binbaşı Havacılık

Örneğin, TDD ilkelerine benzeyen bazı havacılık şirketleri ) ve [[FONTD:2)Boeing) (Saçları ve el kodlu C) ile birlikte TDD ilkelerine sahip olan bazı testler, kontrol mantığına karşı test vakalarını yazdılar, sonra tüm testlerin yapıldığına kadar uygulama yöntemine göre düzeltme işlemiş oldu.

2017 IEEE International Symposium on Software Reliability Engineering Workshops) tarafından yayınlanan bir çalışma, TDD'yi bir aviyonel bağlamda kullanan ekiplerin, geleneksel bir şelale yaklaşımı kullanarak yüzde 40-60 daha az sürüm hataları elde ettiğini buldu.

Motor Kontrol Birimleri (ECUs) Otomotiv Sanayiinde

Bu makale mekanik ve havacılık mühendisliğine odaklanırken, otomotiv sektörü değerli paraleller sunar. [FONTT:0)Bosch[D:0) ve [[DÜcretsiz bir sabit nokta hesaplamasına yol açan otomatik test seti, ikisinde de TDD'yi kontrol edilemeyen bir hataya yol açmaz.

Uzayda Attitude Kontrol

NASA'nın Jet Propulsion Laboratory (JPL) TDD ile deneyerek, Simdrix modellerinin parçaları için deney yaptı ve TDD'nin (BİD) arka planlarında (BİD) ve yarı iletkenler için) daha güvenilir bir tutum kontrol kodu üretmelerine yardımcı oldu.

TDD'nin Güvenlik-Critical Software için Faydaları

Erken Defect Tespiti

En belirgin fayda, birkaç hafta sonra sistem entegrasyonu sırasında ortaya çıktıktan sonra böcekleri yakalamaktır. Bir güvenlik-kırık projede, uçuş testlerine hayatta kalan bir hata pahalı bir yeniden tasarım veya bir zamanlama revizyonu gerektirebilir. TDD, tespit etmek için zamanı dramatik bir şekilde azaltır.

Yaşam Dokümantasyon

İyi yazılmış bir test paketi, kodun doğrulandığını anlamak için testleri okuyabilmektedir.Yeni bir mühendis takıma katıldığında, her bileşeninin ne yapması gerektiğini anlamak için testleri okuyabilirler.Bir sertifika denetiminde, test paketi, kodun doğrulandığının objektif kanıtlar sunar.

Tasarım Kalitesi ve Decoupling

TDD modüler tasarımı teşvik eder, çünkü sıkı bir şekilde kod test etmek zordur. Güvenlik-kritik sistemlerde, dekoupling sadece güzel bir şey değildir - hataları izole etmeye ve başarısızlık analizine yardımcı olur. Örneğin, hata tespiti için iyi bir modül, bir şekilde tekrarlanabilir, doğrulama yükü olmadan birden fazla uçak platformlarında yeniden kullanılabilir.

Regresyon Önleme Önleme

Güvenlik-kahkalama yazılımı yavaş yavaş yavaş gelişti, ancak evrimleşiyor - sistemin bir parçasında bir otobüs, testlerin ayrıntılı olmadığını başka bir yerde tanıtılabilir. TDD ile, her değişiklik hemen tüm test paketine karşı doğrulanır, gerilemelerin paylaşılmasını önler. Bu, paylaşılan kodbases üzerinde birden çok çalışma yaparken özellikle değerlidir.

Sınırlar ve Tamamlayıcı Uygulamaları

TDD, güvenlik-kahkırık mühendislikte, gerekli güven seviyesine ulaşmak için birkaç başka uygulama tarafından tamamlanmalıdır:

  • [FONT:0)Hardware-in-the-loop (HIL) testi: ), Birim testleri gerçek donanıma gerçekçi girişler ve zamanlama ile test edilemez. HIL testi TDD'den sonra ayrı bir aşama olarak yapılmalıdır.
  • [FONT:0]Statik analiz:[Dönetici: {0}[D][/FONT=)[D][/FONT=FONT=FONT=FONT=[FONT=FONT=)))[Üye Olmayanlar (SÜye Olmayanlar)))))))))))
  • [FONT:0)Formal doğrulama:[Dönetici:[Dönetici:0) En kritik bileşenler için (örneğin, aşırı bir durumda bir motoru kapatan kod), resmi yöntemler testlerin ötesine geçen doğrulığın matematiksel kanıtını sağlar.
  • [FONT:0)Peer inceleme ve denetimler: TDD, manuel kod incelemeleri için ihtiyaç duymaz. Aslında, test kodunun yorumlarının yorumları değerlidir - belirsiz veya eksik test vakalarını yakalarlar.
  • [FONT:0)Requirements analizi:[DDD][D][B][B][D][FONT=0) Uygulamada, güvenlik-könemli projeler, tehlikelerin, başarısızlık modlarının ve operasyonel senaryoların ayrıntılı analizini gerektirir. TDD takip etmeli, önceki değil, bu analiz.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Test-Driven Development, bilgisayar mühendisliğinde yazılım kalitesini artırmak için güçlü bir uygulama sunuyor - başarısızlıkların bir seçenek olmadığı.En erken gelişim aşamalarına test ederek TDD, doğrulığı ve hassasiyeti bir kültürü teşvik ediyor. Ayrıca DO-178C ve ISO 262 gibi standartlara karşı sertifikasyonu destekleyen zengin, izlenebilir bir kanıt organı yaratıyor.

Ancak TDD, gömülü, gerçek zamanlı ve donanıma bağlı sistemlerin gerçeklerine adapte edilmelidir. Mühendisler daha güvenli uçaklar, fabrika modelleri ve statik analizleri, birim testleri ve fiziksel dünya arasındaki boşlukları köprülemek için önemli bir araç haline gelmeliler. Ve TDD asla resmi doğrulama veya bağımsız V&V için bir yedek olarak kullanılmamalıdır.

TDD'yi bir güvenlik-kahktik bağlamda benimsemeyi düşünen takımlar için anahtar küçük başlamaktır: akktik alt sistem, simdi bir ortama karşı birim testleri yazın ve uygulamanın mevcut iş akışına entegre edilmesi.