Kimyasal & Malzeme Mühendisliği
Kod Coverage Toolslarını kullanmak için Mühendislikte Test Edilmeyen Yolları Tanımlayın Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım Yazılım
Table of Contents
Mühendislik yazılım geliştirmesinde, kapsamlı testlerin güvenilir, güvenlik ve düzenleyici uyum için kritik olmasını sağlamak. Kod kapsama araçları kodbase'deki test süitinizde test edilen yolları tanımlamak için gereklidir - bu makale, bu boşlukları sistematik olarak ortaya çıkarmak, yazılımları nasıl azaltabileceklerini ve DO-178C (avionics) veya ISO 26262 (otomatik) gibi sıkı endüstri standartlarını nasıl araştırabileceklerini araştırıyor.
Kod Coverage Tools nedir?
Kod kapsama araçları, kaynak kodunuzun hangi bölümlerinin test paketinizi çalıştırdığınızda gerçekleştirildiğini izlemek için yazılım hizmetleridir. kodunuzu kullanarak çalışır - probları veya sayaçları ekleyin - ya da derleme zamanı (örneğin, diller için). Testler çalıştırıldığında, araç kod egzersizinin yüzdesini gösteren bir kapsama raporu toplar ve hangi hatların, şubelerin ve yolların ayrıntılı bir şekilde vurularak vuruldu.
İlk hedef, test titizliğini ölçmektir, ancak kapsama araçları doğrudan test edilmemiş kodu vurgulamaktadır.Bir işlev, koşullu bir şube veya mantıksal yol asla ziyaret edilmezse, bu, geliştiricilere dikkat eden kesin bir test boşlukları haritası sunar.
Coverage araçları birçok dili ve platformu destekler. C/C++'da yazılmış mühendislik yazılımı için, a) gibi araçlar ) ve [[Dönemli:2|BullseyeCoverage[DDDDÜye Olmayanlar İçin Tıklayınız.[DÜye Olmayanlar İçin Tıklayınız.)
Kapak türleri ve onların önemi
Kod kapsamı tek bir metrik değildir. Farklı kapsama türleri test tamamlamanın farklı yönlerini ortaya çıkarır. mühendislik yazılımı için - güvenlik ve doğruluk önemli olduğunda - ayrımı anlamak önemlidir.
Line Coverage
Line kapsamı (ayrıca ifade kapsamı) test sırasında çalıştırılan kodların yüzdesine yönelik önlemlerdir. En basit metrik ve sık sık sık sık rapor edilen bir çizgi asla uygulanmazsa, bu açık bir şekilde test yanıltıcı olabilir: bir test her çizgiyi yürütebilir, ancak bir koşullu şube asla alındı.
Klantı
Her olası karar sonucun (gerçek/false forurment:0), örneğin, [[Döncümler için dava) egzersizi yapılır. C/C++ ve Java, şube kapsamı genellikle tüm şubelerin yüzdesi olarak ifade edilir.
Pat Coverage
Yol kapsamı en kapsamlı ama aynı zamanda elde etmek en zor. Her olası benzersiz bir uygulama yolu üzerinde bir işlev veya modül test edilebilir. Birden çok ihmalli koşullarla bir işlev için, her koşulun üst üste (pat patlaması) bağımsız olarak büyüdüğü yol kapsamı genellikle, DO-178C Level A gibi güvenlik-kırıklama standartların bir şekilde test edilmesi gerekir.In a function with multiple nested conditions, bir karar dahilinde her koşulun bağımsız olarak görüldüğü yerde, sonuçunu etkiler.
Örnekler (MC/DC)
Durum kapsamı, her Boolean alt- ekspresyonun (sağlık) bir kararda hem gerçek hem de yanlış değerlendirildiğini garanti eder. MC/DC, her koşulun bağımsız olarak kararın sonucunu değiştirmesini talep edebilir. Bu, girişlerin kombinasyonlarını asla egzersizen test süiti değildir. Örneğin, a aviyonik uçuş kontrol sisteminde, MC/DC analizinde, belirli bir sensör hatası koşulunun hiçbir zaman bir sistem kapanmasına neden olabilir.
Bu kapsama türlerini anlamak, takımların sertifika seviyesi ve risk profili için doğru ölçümlerini seçmelerini sağlar. Yüksek yoğunluklu sistemler için, yalnızca satır kapsama güvenmek tehlikeli; test edilmemiş şubeler ve yollar felaket başarısızlıklara yol açabilir.
Neden Test Edilmeyen Yolları Tanımlayın?
Test edilmemiş yollar, asla doğrulamadığı kod dizilerini temsil eder. Mühendislik yazılımında - gömülü kontrol sistemleri, simülasyon motorları veya tıbbi cihaz donanımı - bu boşluklar güvenlik tehlikelerine yol açan başarısızlıklara neden olabilir, performans bozulması veya düzenleyici olmayan örnekler, hisse senedinleri gösterir: Gerçek dünya örnekleri
- [FONT:0]Therac-25 (1980s): Bir radyasyon terapisi makinesi, herhangi bir operasyonel dizide test edilmemiş olan kontrol yazılımında hiçbir zaman test edilmemiş bir yarış koşulu nedeniyle başarısız oldu.
- [FONT:0]Mars Climate Orbiter (1999): Bir navigasyon kodu yolu karışık metrik ve emperyal birimleri asla zemin testlerinde egzersiz yapmadı.
- [FONT:0)Toyota unintended speed (2009): ECU'daki kritik kod yolları gerçek dünya koşullarında test edilmedi, milyonlarca araç hatırlamaya yol açtı.
Serbestleşmeden önce yapılan yolların belirlenmesi, proaktif bir risk azaltma stratejisidir. Ayrıca düzenleyici denetçileri tatmin etmeye yardımcı olur: ISO 26262, DO-178C ve IEC 62304, doğrulama sürecinin bir parçası olarak yapısal kapsama analizi gerektirir.
Coverage Toolslarını test edilmemiş Paths
Test edilmemiş yolları tanımlamak için pratik iş akışı, birkaç adım içerir, araçlama ile başlayın ve hedefli test oluşturma ile sonlanır.
Ölçüm ve Test
İlk olarak, kodunuzu kapsama aracı ile çalıştırmanız veya çalıştırın. gcov için derlenen gcov, FRRAT:5 için, JaCoCo için ajanı kullanın.For JaCoCo6|Gruple tam test paketinizi çalıştırın.
Genrate ve İnceleme Coverage Raporları
Aracın raporlama komutunu kullanın (örneğin, dk.), [[Dönderlik|s.) ve listedeki ilk alt gruplar üzerinde durgundur.Her bir satır veya şube için: Bu kodun herhangi bir koşul altında erişilebilir mi?
Testsiz Yollar Analyating Untested Paths
Tüm test edilmemiş yollar eşit derecede önemlidir.Öncelik:
- [FONT:0)Error kullanım kodu[[Dönetici:0)[Döneticiler, geri dönüş rutinleri) - genellikle güvenli işlem için doğrulanmamış ama kritik bıraktı.
- [FONT=0)Edge vakaları ve sınır koşulları [Dönem: 1)[Dönem: 1), asla değişmez, işaretli ifadeler, sınırlarda sıra dışı durumlar, varsayılan durumlar.
- [FONT=0)Güvenli fonksiyonlar[[[Dönetici: 1))[[Döneticiler, sensörler, eylem çıktıları veya değişkenleri kontrol eder.
Belirli dizileri tanımlamak için kapsama raporları kullanın: bir nestedurFLT:11 içinde kırmızı bir şube, herhangi bir testte asla gerçekleşmeyen bir yol gösterir. Doğru (veya yanlış) uygun giriş verileri sağlayarak bu durumu zorlayan yeni test vakalarını yazın.
Mühendislik için Popüler Coverage Araçları
Doğru aracı seçmek dilinize, platforma ve kapsama gereksinimlerinize bağlıdır.
gcov (C/C++)
Gcov, GCC ile birlikte GNU kapsama aracıdır.Bu, satır ve şube kapsamı sağlar ve ücretsiz ve açık kaynaktır. CMake gibi sistemlerle iyi bir şekilde entegre edilir ve gömülü hedefler için çapraz-kompilasyonda kullanılabilir.|0]Official gcov belgeleri).
JaCoCo (Java)
JaCoCo, Java için endüstri standart kapsama kütüphanesidir. Bu, çizgi, şube ve yöntem kapsamı sunmaktadır. ajanı JVM'leri kod değişiklikleri olmadan çalıştırmaya eklenebilir.For Engineering systems built on Java (e.g., SCADA veya simülasyon frameworks), JaCo oldukça etkili..
BullseyeCoverage (C/C++)
BullseyeCoverage, fonksiyon, şube ve koşul kapsamı sağlayan ticari bir araçtır ( MC/DC dahil). Güvenlik-kritik ve gömülü gelişim için tasarlanmıştır. Raporları tam olarak hangi koşullarda ifadeler test edilmemiştir.
Diğer Araçlar
- [FONT:0)OpenCppCoverage (Windows, C/C++)) - Visual Studio ile entegre olan ücretsiz, açık kaynak aracı ve şube kapsamı sunuyor.
- [FONT:0)Coverage.py (Python)) - Python'da yazılmış veri odaklı mühendislik senaryoları için, bu araç çizgi ve şube kapsamı sağlar.
- [FONT:0)Go'nun yerleşik kapsamı[Dönetici: 1) – Go'sETHFLT:12), çizgi ve açıklama kapsamını, deneysel şube desteği ile sağlar.
Birçok takım ayrıca, kapsamı eğilimleri ve kapı talepleri için bulut tabanlı bir aggregasyon hizmetlerini de kullanmaktadır.S.Koruv) veya ).SonarQube)
Tümleştirici Kullanımlar Geliştirme İş Akışına
Test edilmemiş yolları tanımlamak sürekli bir etkinlik olmalı, bir zaman denetim değil. CI/CD boru hattınıza kapsama analizi:
- [FONT:0]Her iş hakkında kapsama alanı[[Dönetici: 1 ) - hatta kısmi kapsama bile hızlı geri bildirim verir.
- [FONT:0] minimum kapsama eşleri[[Dönetici: 1)) - yapılandırılabilir bir seviyenin altında yer alan tutarsa (örneğin, kritik modüller için% 80 şube kapsamı).
- [FONT:0)Generate kapsama raporları eserler olarak bildiriyor).
- [FONT:0)Grupla ilgili bazı sorunlarla ilgili olarak, yeni bir çek talebinin ortaya çıkan yeni bir istekle ortaya çıkan ve ortaya çıkan değişiklikler için testlere ekleyebilmek için geliştiricilere baskı yapmak.
- [FONT:0]Gate, test edilmemiş yollarda bir araya gelir[DÜT:1) - yüksek ücretli yazılım için,% 100 MC /DC güvenlik için kapsamını gerektirir.
Otomasyon, manuel denetim yükünü ortadan kaldırır. Geliştiriciler editörlerinde veya CI panolarında vurgulanan yolları görebilir ve hemen test yazabilirsiniz.
Etkili Kullanım için En İyi Uygulamalar
Test edilmemiş yolları bulmak için kod kapsamı araçlarının en fazlasını almak için, bu uygulamaları takip edin:
- [FONT:0]Combine çoklu kapsama türleri[[Döntilmiş: 1) hat kapsaması, yalnızca aldatıcı olabilir. daha derin olmayan yolları ortaya çıkarmak için şube ve koşul kapsamını kullanın.
- [FONT:0)Yüksek riskli koda odaklanır[[Dönetici: 1) hedef karmaşık fonksiyonlar, hata eller ve güvenlik duyarlı rutinler. Tüm kodların% 100 kapsama ihtiyacı yoktur; önemli olanlara odaklanır.
- [FONT:0]Köpektif analizler, [Dönetici: 0)) Tüm kapsamalar için geçerli olmayan kod bulabilirler.
- [FONT:0)Gerçek koşullar altında kapsama alanı[[Dönetici: 1) Sistem düzeyinde ve entegrasyon testleri kullanın, sadece birim testleri değil. Testler genellikle modüller arasındaki sınırlarda yalan söylüyor.
- [FONT:0] kapsama alanı için bir kapsama alanı ([Dönetici:0))) - Uygulamanın (örneğin, belirli olmayan toplayıcılar / kümesler) atıklar için her zaman anlamlı senaryolara bağlı olmayan yolları test edin.
- [FONT:0]Review kapsama trendleri zaman içinde[Dönetici: 1 ) - azaltım eğilimi, yeni kodların yanıtsız eklendiğini gösteriyor, yeni test edilmemiş yolları yaratıyor.
- [FONT:0] Takımı [DÜT:1] - geliştiriciler bu kapsama raporların bir yargı olmadığını anlamalarına yardımcı olur, ancak boşlukları bulmak için bir araç.
Meydanlar ve Sınırlar
Güçlü olsa da, kod kapsama araçları takımların kabul etmesi gereken sınırlamalara sahiptir:
- [FONT:0)Genel olarak [DÜDÜDÜDÜDÜDÜDÜDÜŞÜN) - enstrümantasyon, test infazını yavaşlatabilir ve ikili boyutunu artırabilir. sıkı hafıza ile gömülü sistemler için, bu sorunsal olabilir.
- [FONT:0]False güveni[[DÜDÜT:1) - yüksek kapsama mükemmel bir test anlamına gelmez. Testler, kod kullanabilir ancak sonuçları doğru bir şekilde kontrol edemez.
- [FONT=0)Path patlama[DÜDÜT:1) - birçok koşullu son derece karmaşık kod için, yol kapsamı hesaplamalı olarak düşünülemez. MC/DC veya şube kapsamı pratik bir yedek olarak kullanılır.
- [FONT:0) Üretimde Instrumentasyon) - çoğu kapsama aracı, üretim için geliştirilmiş bir kod için tasarlanmıştır.
- [FONT:0] Dil ve çevre sınırlamaları[[Dönetici: 1) - bazı gömülü hedefler, özellikle montaj veya özel donanım için sağlam kapsama aracına sahip değildir.
Bu zorluklara rağmen, kod kapsamı, test edilmemiş yolları tanımlamak için en etkili yollardan biri olmaya devam ediyor. Anahtar, araçları akıllıca kullanmak ve diğer doğrulama yöntemleri ile birleştirmektir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Kod kapsama araçları, her kritik yolun test edilmesi gereken mühendislik yazılım takımları için vazgeçilmezdir. Test edilmemiş hatları, şubeleri ve koşulları ortaya çıkarmak için, çoğu önemli olan testlere odaklanmanın veya endüstriyel simülasyon yazılımının sistematik olarak tanımlanması ve statik analiz ve risk tabanlı önceliklendirme ile birleştirilmeleri gerektiğinde, kapsamazlık analizleri, alanınızda başarısızlıklara yol açan gizli hataları önlemeye yardımcı olur.