0%

Embedded Software Testing

Gömülü Yazılım Testi

Özet

Bu yazıda, “Gömülü yazılım nedir?”, “Gömülü yazılım testleri neden önemlidir?”, “Gömülü yazılım nasıl test edilir?”, “Gömülü Yazılımda TDD nasıl yapılır?”, “Standart yazılım testinden farkları nedir?” gibi soruların cevapları işlenmektedir.

Gömülü Yazılım Nedir?

Gömülü yazılımlar , gömülü sistem diye bilinen kontrol aygıtları ve makineleri için bilgisayar yazılımlarıdır.

Gömülü sistem bir görev için atanmış, mekanik ve elektronik fonksiyonları yerine getiren işlemciden, hafızadan, girişler,çıkışlardan oluşan bir bilgisayar sistemidir.

Endüstriyel robotlar, GPS alıcıları, Kameralar, Routerlar, Oyun konsolları, Fotokopi makineleri, Arabalar, Akıllı cihazlar, Saatler, Mikrodalga fırınları, Beyaz eşyalar, Trafik Işıkları, İHAlar, Telefonlar, Tabletler, Askeri cihazlar, Hava araçları bir gömülü sistemdir.

Son istatistiklere göre tahminen dünyadaki işlemcilerin %90’ına yakını bir gömülü sistem parçasıdır.

/images/embedded/Untitled.png

Gömülü yazılım testi neden önemlidir?

Gömülü sistemler hayatımızın her aşamasına girmiştir. Bunlardaki bir kusur, hata ve zayıflık can güvenliğimizi bile tehdit edebilecek seviyelere gelebilmektedir. Geçtiğimiz yıllarda, Chrysler adında birçok ünlü markaların sahibi olan bir firma, arabalarının uzaktan hacklenebilme zayıflığı yüzünden 1.4 milyon arabayı geri çağırmıştır. Bu arabalar yapılacak siber saldırılarla sürücüyü öldürecek ciddiyette riskler taşımaktadır.

Yine geçtiğimiz yıllarda Toyotanın güç sisteminde hiçbir test ve belgeleme içermeyen spagetti kodlar ortaya çıkmıştır.

İngiltere de satılan bir akıllı termostat sistemi, yazılımındaki bir bug sebebiyle müşterileri soğuğa mazur bırakmıştır. Bir can kaybı yaşanmasa da, bu bug bebekler için ölümcül olabilirdi.

Bir Airbus A400M uçağı, gömülü sistemindeki bir bug sebebiyle düşmüştür. Bu boyutta bir uçağın askeri mühimmat taşıması ve yerleşim yerlerine düşmesi büyük can kayıplarına yol açabilirdi.

Gömülü sistemler hastanelerde de kullanılmaktadır. Bir hastanın ilaç pompasını kontrol eden yazılımda bug bulunmuştur. Bu bug sebebiyle, hastalara ölümcül doz verilebilirdi.

Ayrıca gömülü sistemler birbirine bağlı olduğu için birindeki kusur diğerlerini de etkileyebilir. Geçtiğimiz yıllarda bir WiFi destekli Akıllı Lambada bir güvenlik açığı bulunmuştur. Bu açık sayesinde hackerlar WiFi şifresine erişip, bütün evin ağına sızabilmekteydi.

Uzay mekikleri ve roketlerde bir gömülü sistemdir. Geçtiğimiz yüzyıllarda gömülü yazılım kusurları sebebiyle, birçok uzay faciası yaşanmıştır.

Bu sebeplerden dolayı, gömülü yazılım testi, standart yazılım testlerinden ayrılır. Çünkü bir hata, kusur, açık ve zayıflık bizi öldürebilir.

Sektörlere göre gömülü yazılım test tekniği paper sayısı

/images/embedded/Untitled%201.png

Test Nedir?
Test bugların, kusurların, noksanlıkların ve zayıflıkların bulunmasıdır.

Gömülü yazılım nasıl test edilir?

Benzer bir çok yazılım test sisteminde olduğu gibi, gömülü yazılımda da test geliştirme döngüsünün ayrılmaz bir parçasıdır.

Sağlamlık için hem fonksiyonel hemde fonksiyonel-olmayan nitelikler denetlenmelidir.

Fonksiyonel Nitelik Testi, yazılım yerine getirmesi gereken görevleri kusursuz bir şekilde yapmasıyla alakalıdır. Gömülü yazılımda fonksiyonellik fiziksel çevreye bağlı kontrol ediliyor olabilir. Bu çevresel girdilerin tanımı ve aralığı açık olmalıdır.

/images/embedded/Untitled%202.png

Örnek kodda, fonksiyon çevresel bir girdi olan ivmeölçer ile kontrol edilmektedir. Fakat bu fonksiyonun ivmelenme girdilerinden biri “0” değeri aldığında bozulacaktır.

Fiziksel çevre, rastgele oluşturulan sentetik girdiler ile simüle edilebilir. Fakat bu yaklaşımda ilişkili girdi sentezlemek başarısız olabilir. Bunun önüne geçmek için bu simülasyon evrimsel veya metaheuristic algoritmalar ile yapılabilmektedir.

Gerekli olan durumlarda tüm olası girdiler test edilebilir. Fakat çok önemli olmayan fonksiyonlarda, bu yöntem maliyetlidir. (zaman açısından)

Anlaşılacağı üzere girdi uzayı ve bu uzayın test edilebilirliği ve test yöntemleri büyü önem taşımaktadır.

Fonksiyonel Olmayan Nitelik Testi , bir gömülü yazılımın birkaç fonksiyonel olmayan nitelikleri vardır. Bunlardan en önemli ve temel nitelikler : zamanlama, enerji ve güvenirliktir. ( timing, energy, reliability)

Zaman Kısıtlamaları, yazılımın görevlerini kısıtlı zamanda tamamlanmasıyla alakalıdır. Gömülü yazılımların çoğu gerçek zamanlıdır. Tepki süreleri ve gecikmeleri çok önemlidir. Örneğin bir arabanın kaza anında darbe sensörlerindeki verilere göre hava yastıklarını doğru zamanda tetiklemesi hayati önem taşır. Bir kaza olduğunun doğrulanması, emin olunması, hesaplamaların yapılması ve çok geç olmadan hava yastığın tetiklenmesi, milisaniyeler düzeyinde kısıtlı bir zamanda yapılmalıdır.

/images/embedded/Untitled%203.png

Dolasıyla bu süreleri optimize ederken, işlemcinin kod talimatları işleme süresi bilenerek yazılım geliştirilmelidir.

Her bir fonksiyon için bir “zaman bütçesi” belirlenmeli ve o fonksiyon o zamanı aşmayacak şekilde optimize edilmelidir.

İşlemciler, boolean operatorlerini çok hızlı işler, toplama işlemini çarpmaya göre daha hızlı yapar. Hafızaya erişmek bile zaman tüketir.

İşlemci-hafıza arasında zaman kaybı olmaması için işlemcinin önbelleği kullanılmalıdır.

/images/embedded/Untitled%204.png

Her bir fonksiyonun zamanını ölçen testler yazılmalıdır.

Örneğin: assert(time <¼ 1ms)

Her bir önemli fonksiyon için WCET (Worst-case execution time) yani en kötü senaryoda çalışma zamanı bilinmelidir.

Enerji Kısıtlamaları, zaman gibi gömülü yazılımda göz önünde bulundurulması gerek şeylerden biridir. Özellikle batarya kaynaklı sistemlerde önemlidir. Enerji tükenen işlemlerin, komponentlerin tüketim değerlerin testi yazılmalıdır. Zaman kısıtlamalarında olduğu gibi, enerji tüketimi içinde, WCEC (worst case energy consumption) yani en kötü enerji tüketim senaryosu ölçülmelidir.

Güvenirlik Kısıtlamaları, gömülü sistemler çoğu zaman fiziksel çevreyle etkileşim içindedir. Fiziksel çevreden sensörler ile güvenilebilir veriler elde etme çalışır. ( jiroskop , ivmeölçer, kablosuz iletişim vs. ) Ancak bu sensörlerden ve alıcılardan tutarsız veriler alınabilir. Ağda veri paketleri bozulabilir, kaybolabilir. Çoğu sensör kusursuz değildir ve hata payları vardır. Ayrıca daha tutarlı, kaliteli sensör ve alıcı sistemler pahalıdır. İşte burada bu çevresel verilerin kabul edilebilir tutarlılık seviyeleri belirlenmeli ve ona göre bir yazılım geliştirilmelidir.

Test Metodolojilerin Kategorizasyonu

/images/embedded/Untitled%205.png

/images/embedded/Untitled%206.png

Kara-kutu Soyutlaması: Sistem kara kutu gibi davranır. Test senaryoları örnekler ve rastgele girdiler ile oluşturulur. Sistemin gereksinimleri test edilir. Fonksiyonlar test edilir. Sık rastlanmayan uç senaryolar test edilemeyebilir.

/images/embedded/Untitled%207.png

Gri-Kutu Soyutlaması: Kara-kutu ve Beyaz-kutu yaklaşımın karışımı olarak düşebilir. Ancak sistem kara kutu gibi davranmış, bir model gibi temsil edilir. Bilgiyle alakalı özellikler test edilir. Testler arama uzayına göre oluşturulur.

Beyaz-kutu Soyutlaması: Bütün kaynak kodunun ve yollarının test edildiği bir işlemdir. Girdi uzayına göre testler yazılır. Daha çok sistem yapısı test edilir. Bu yöntemde eksik özellikler tespit edilemez.

/images/embedded/Untitled%208.png

Yapısal olmayan yaklaşımlar

Bu yöntemlerde bir düzel ve yapı yoktur. Testin kalitesi testi yapana bağlıdır. Yazılımın ne kadar test edildiğini bilmek zordur. Bu bu testin sonuçları objektif değildir. Çok taraflı ve görecelidir.

Smoke Testing (Duman testi)

Yazılımın bir çok ana fonksiyonun çalıştırılıp duman çıkıp çıkmadığın test edilmesidir. (Bu daha hardwarelar için yapıldığı böyle tanımlanıyor. Tabi duman çıkıp çıkmaması değil, fonksiyonu yerine getirip getirmemesi test edilir)

Geniş ve sığ bir yaklaşımdır

Exploratory Testing (Keşifsel yaklaşım)

Uzman bir tester, sistemin açıklarını bulmayı sistemi alt etmeye çalışır.

Learn(Öğren), Design(Tasarla), Execute(Uygula), Analysis(Sonuçları analiz et) diye 4 aşaması vardır.

Bu çok dağınık bir yöntemdir.

Testing Coverage

Bir yazılımın, test senaryolarının yüzde kaçını başarıyla tamamladığını gösteren değerdir.

%100 coverage, yazılım 100% test edilmiş olduğunu göstermez, çünkü test-caselere bağlıdır.

Aynı şekilde 100% test edilmiş bir yazılım 100% güvenli de değildir.

Test geliştirme döngüsü

TDD (Test Driven Development)

  1. Testleri oluştur.
  2. Bütün testleri çalıştır, hatalı olanı gör.
  3. Ufak(!) değişiklikler ile hatayı düzelt.
  4. Testi yeniden çalıştır. Testin geçildiğini gör.
  5. Testleri refactor et. Fazlalıkları kaldır.

/images/embedded/Untitled%209.png

TDD ve Gömülü Yazılım

  • Testlerde donanıma bağlılık vardır.
  • Gerçek zamanlılıktan gelen zaman kısıtlamaları kısıtlamalar vardır.
  • Sınırlı bir hafıza vardır. (Normal yazılama göre)
  • Pek OOP(Nesneye yönelimli programlama) kullanamazsın.

V-model

/images/embedded/Untitled%2010.png

Unit Test

Yazılımın her bir çalıştırılabilir fonksiyonunun test edilmesidir.

Integration Test (Subsystem Test)

Yazılım her modülünün test edilmesi ve bu modüllerin uyumluluklarında test edilmesidir.

Software Test (System Test)

Sistemin bir bütün olarak test edilmesidir.

Acceptance Test

Müşteriyle beraber yapılan, yazılım kabul edilebilirliğinin testidir.

Emulated Target Board

Gömülü yazılımlar test edilirken ve geliştirirken, sanal donanım kartları kullanılır. Çünkü bir hata yüzünden kart bozulabilir ve kullanılamaz hale gelebilir.

Sanal kartlar yoksa, bu kartları mocklayan bir yazılım yazılarak testler çalıştırılabilir. Fakat bunu donanımdan bağımsız yazılım parçaları için yapmak gerekir.

/images/embedded/Untitled%2011.png

Sunum

Embedded Software Testing Sunum

Kaynakça ve İleri Okuma

On Testing Embedded Software
Abhijeet Banerjee, Sudipta Chattopadhyay†
, Abhik Roychoudhury

What we know about testing embedded software?
Vahid Garousi, Hacettepe University and University of Luxembourg
Michael Felderer, University of Innsbruck
Çağrı Murat Karapıçak, KUASOFT A.Ş.
Uğur Yılmaz, ASELSAN A.Ş.

Automating Embedded Software Testing on an Emulated Target Board
Jooyoung Seo, Ahyoung Sung, Byoungju Choi, Sungbong Kanga
Dept. of Computer Science and Engg., Ewha University, Seoul, Korea
Mobile Solution, System LSI Division, Samsung Electronics Co., Ltd., Yongin, Koreaa
{jyseo, aysung}@ewhain.net, [email protected], [email protected]

Formal Testing Applied in Embedded Software
Li Zhen,Liu Bin, Ma Ning and Yin Yongfeng
Dept. of System Engineering of Engineering Technology
Beihang University
No.37 Xueyuan Road, Beijing, China, 100191

The Effectiveness of Real-time Embedded Software
Testing

Bo Zhang,Xiangheng Shen
Changchun Institute of Optics, Fine Mechanics and Physics
Chinese Academy of Sciences
Changchun, China

Embedded Software
Testing

Distributed Embedded Systems
Philip Koopman
September 30, 2015

Tool Support for Automated Traceability of
Test/Code Artifacts in Embedded Software Systems

Christian Wiederseiner, Vahid Garousi, Michael Smith
Department of Electrical and Computer Engineering, University of Calgary
2500 University Drive NW, Calgary, AB Canada T2N 1N4

Embedded Software Testing in Research
Environment

Marcin Bajer, Marek Szlagor, Marek Wrzesniak
ABB Corporate Research Center
Krakow, Poland

Effective Test Driven Development for Embedded Software
Michael J. Karlesky, William I. Bereza, and Carl B. Erickson, PhD

Test Driven Development for Embedded Software
James Grenning
San Jose, April 2007, ESC Class# 241