AC tabanlı mcu projesi için hangi birim test çerçevesini kullanabilirim?


15

Mcu projemde birim testlerini nasıl kullanabileceğimi ve basitleştirmek için hangi çerçeveleri kullanabileceğimi düşünüyorum.

Bugün bir Linux PC'den OpenOCD-jtag ile bir stm32 kullanıyorum, burada klasik bir Makefile tarafından kontrol ediliyor ve gcc ile çapraz derlenmiş.

Kendim bir şey yaratabilirdim, ama kullanabileceğim bir çerçeve varsa güzel olurdu. (Çerçevenin sonucu Jenkins / Hudson'ın okuyabileceği bir formatta çıkarması bir bonusdur).

Stm32 ile birim test çerçevesi kullanmanın bir yolu var mı?


3
Tam bir cevap yazmak için zamanım yok, ancak bu makalelerde ve bu blog serisinde bulunan birçok araç ve teknik kullandım . Tek kelimeyle: CMock!
Kevin Vermeer

Yanıtlar:


4

CppUTest ve James Grenning'in mükemmel http://pragprog.com/book/jgade/test-driven-development-for-embedded-c adresine göz atın

CppUTest, C ve C ++ için desteğe sahip ve beni oldukça hızlı bir şekilde başlatan güzel bir Makefile şablonları kümesi var.


Bir ePub sürümü aldım, bakalım iyi mi :)
Johan

Kitap iyi, ama birliğin (bu kitaptaki diğer çerçeve) ihtiyacımı daha iyi karşılayacağını düşünüyorum.
Johan

Kitap beni doğru yöne ittiği için kabul edildi.
Johan

5

Durumunuzda kullanılacak en iyi birim test çerçevesini belirleyecek birçok değişken vardır. Seçiminizi etkileyebilecek bazı öğeler:

  • Hedef dil.
  • Hangi kütüphane desteği mevcuttur. mesela libc veya kesilmiş hali.
  • Hedefin işletim sistemi. ör. Hiçbiri, FreeRTOS, özel.

XUnit türü çerçevelerin çoğu, kullanışlı olabilecek bazı temel işlev düzeyleri sağlayacaktır. Cunit kullandım geçmişte başarılı bir şekilde . (Ubuntu / Debian üzerinde libcunit1-dev paketi). Çoğu çerçeve libc'nin kullanılabilir olmasını gerektirir, bazıları ek OS desteği gerektirir.

Sadece 3 satır uzunluğundaki diğer bir alternatif ise Minunit .

Testleri indirmek, çalıştırmak ve daha sonra sonuçları geri almak için uygun bir ortam sunabilmeniz gerektiğinden, hedef olarak mikrodenetleyici kullanarak birim testi buldum. Sadece bunu yapabilmenizi sağlayacak platformu yerleştirmek büyük bir iştir.

Benim için işe yarayan başka bir yaklaşım, ana bilgisayar üzerinde birim testi yapmak, sürücüler ve uygulama kodu arasında bir soyutlama katmanı uygulamaktır. Hedef için gcc kullandığınızdan, kodun ana bilgisayarda da derlenmesi gerekir.

Derleme ana bilgisayarında test yapmak, ana bilgisayar işletim sisteminin ve tüm araçlarının tam desteğine sahip olduğunuzdan genellikle çok daha kolaydır. Örneğin, ana bilgisayar üzerinde test yaparken, kablosuz sürücümün hedefte çalışan gerçek sürücü ile aynı arabirime sahip alaycı bir sürümüne sahibim. Ana bilgisayar sürümü, kablosuz paket aktarımını simüle etmek için UDP paketleri kullanır, sahte sürücü paketleri bırakma özelliğini destekler, böylece protokollerimi test edebilirim.

Üzerinde çalıştığım üründe, dişli bir işletim sistemi kullanılıyordu, bu nedenle ana bilgisayar işletim sistemi üzerinde test için soyutlama katmanı pthreads kullandı.

Mükemmel olmasa da, testleri yazıp çalıştırmanız ne kadar kolay olursa, daha fazla test örneği uygulama olasılığınız o kadar artar. Kodun farklı platformlarda çalıştırılmasının bir başka yararı da kodun taşınabilir olduğunu test etmektir. Hedef ve ev sahibi mimariler farklıysa endian hatalarını hızlı bir şekilde alacaksınız.

Şimdi biraz konu dışıyım, ancak bu fikirlerin test çerçevesi ve test yöntemleri seçiminize yardımcı olabileceğini hissedin.


Ben hedefe kod almak nasıl çözdüm ve test_ok veya test_fail ( fun-tech.se/stm32/TestSuite/index.php ) gibi farklı kesme noktasında durdurmak için komut dosyası modunda gdb kullanabilirsiniz . Yani ben yarı yoldayım. Bu daha çok farklı "testlerin" nasıl oluşturulacağı sorusudur. Bugün fikirlerim biraz esnek değil, bu yüzden bir tür çerçeve aramaya başladım.
Johan

1

EmbUnit http://embunit.sourceforge.net/embunit/index.html adresine bakın . Düşük kaplama alanına sahip gömülü bir C birimi test çerçevesidir.

Birkaç gömülü mikrodenetleyici projesinde başarıyla kullandık. Masaüstü birim sınama çerçevesi ile elde edeceğiniz seçenekleri ve özellikleri beklemeyin. Ama kesinlikle yeterince güçlü.

Sizin için tanımlanmış ekler listesi vardır, bu nedenle minUnit gibi özel ekler yazarken zaman kaybetmek zorunda değilsiniz.


1

Bir süre önce konuyla ilgili kapsamlı bir eğitim yazdım: Ceedling ile birim testi (gömülü) C uygulamaları ; Bu teknikleri bir grup projede kullanıyorum ve şimdiye kadar oldukça mutluyum.


2
Bu yalnızca bağlantıya verilen bir yanıttır ve URL değiştiğinde veya bağlantı düştüğünde bu değersiz olur. Sen gerekli bilgileri açıklamalıdır cevap o zaman bir referans olarak bağlantı ekleyebilirsiniz.
boru

2
@pipe Evet, ancak soru (esasen ürün önerisi) bunun gibi cevaplar için yalvarıyor.
Dmitry Grigoryev


-2

Tüysüz deneyin, ancak birim testi için değil, kod analizi için düşünmüyorum.


2
Statik kod analizi, kodun yürütülmesine ve test edilmesine yardımcı olamaz, bu yüzden gerçekten yararlı değildir.
Johan

1
Birim testi bağlamında yardımcı olmayabilir, ancak herkes bir tür statik analiz aracı kullanıyor olmalıdır.
Tim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.