Kerangka uji unit apa yang dapat saya gunakan untuk proyek MCU berbasis ac?


15

Saya sedang berpikir tentang bagaimana saya dapat menggunakan tes unit dalam proyek MCU saya, dan kerangka kerja apa yang dapat saya gunakan untuk menyederhanakannya.

Hari ini saya menggunakan stm32 dengan OpenOCD-jtag dari PC Linux, di mana semuanya dikendalikan dari Makefile klasik dan dikompilasi dengan gcc.

Saya bisa membuat sesuatu sendiri, tetapi jika ada kerangka kerja yang bisa saya gunakan akan menyenangkan. (Ini adalah bonus jika kerangka kerja dapat menampilkan hasil dalam format yang dapat dibaca Jenkins / Hudson).

Apakah ada cara untuk menggunakan kerangka uji unit dengan stm32?


3
Saya tidak punya waktu untuk menulis jawaban lengkap, tetapi saya telah menggunakan banyak alat dan teknik yang ditemukan dalam makalah ini dan seri blog ini . Dalam satu kata: CMock!
Kevin Vermeer

Jawaban:


4

Lihat CppUTest, dan http://pragprog.com/book/jgade/test-driven-devenment James Grenning yang luar biasa

CppUTest memiliki dukungan untuk C dan C ++, dan ia punya seperangkat template Makefile yang bagus yang membuat saya mulai dengan cepat.


Membeli versi ePub, mari kita lihat apakah ini bagus :)
Johan

Buku itu bagus, tetapi saya pikir persatuan (kerangka kerja lain dalam buku itu) akan menyesuaikan kebutuhan saya dengan lebih baik.
Johan

Diterima karena buku itu mendorong saya ke arah yang benar.
Johan

5

Ada banyak variabel yang akan menentukan kerangka pengujian unit terbaik untuk digunakan dalam situasi Anda. Beberapa item yang dapat memengaruhi pilihan Anda adalah:

  • Bahasa target.
  • Dukungan perpustakaan apa yang tersedia. misalnya libc atau versi pengurangannya.
  • Sistem operasi target. mis. Tidak ada, FreeRTOS, kustom.

Sebagian besar kerangka kerja tipe xUnit akan memberikan tingkat fungsionalitas dasar yang mungkin berguna. Saya telah menggunakan Cunit dengan beberapa keberhasilan di masa lalu. (paket libcunit1-dev di Ubuntu / Debian). Sebagian besar kerangka kerja akan membutuhkan libc untuk tersedia, beberapa akan membutuhkan dukungan OS tambahan.

Alternatif lain yang panjangnya hanya 3 baris adalah Minunit .

Saya telah menemukan pengujian unit menggunakan mikrokontroler sebagai target untuk menjadi cukup rumit karena Anda harus dapat menyajikan lingkungan yang cocok untuk mengunduh tes, menjalankannya dan kemudian mendapatkan hasilnya kembali. Hanya mendapatkan platform di tempat yang akan memungkinkan Anda untuk melakukan ini adalah tugas besar.

Pendekatan lain yang telah saya ambil yang telah berhasil bagi saya adalah dengan melakukan pengujian unit pada host, menerapkan lapisan abstraksi antara driver dan kode aplikasi. Karena Anda menggunakan gcc untuk target, kode juga harus dikompilasi pada host.

Pengujian pada host kompilasi umumnya jauh lebih mudah karena Anda memiliki dukungan lengkap dari OS host dan semua alat-alatnya. Misalnya, ketika menguji pada host, saya memiliki versi mengejek driver nirkabel saya dengan antarmuka yang sama dengan driver nyata yang berjalan pada target. Versi host menggunakan paket UDP untuk mensimulasikan transfer paket nirkabel, dengan driver tiruan mendukung kemampuan untuk menjatuhkan paket sehingga saya dapat menguji protokol saya.

Pada produk yang saya kerjakan, OS ulir sedang digunakan, jadi lapisan abstraksi untuk pengujian pada OS host menggunakan pthreads sebagai gantinya.

Meskipun tidak sempurna, semakin mudah bagi Anda untuk menulis dan menjalankan tes, semakin besar kemungkinan Anda untuk menerapkan lebih banyak kasus uji. Manfaat lain dari menjalankan kode pada platform yang berbeda adalah untuk menguji bahwa kode tersebut portabel. Anda akan dengan cepat mengambil kesalahan endian jika arsitektur target dan host berbeda.

Saya sekarang sedikit keluar dari topik, tetapi merasa ide-ide ini dapat membantu dengan pilihan Anda kerangka uji dan metode pengujian.


Saya telah memecahkan bagaimana saya mendapatkan kode pada target dan saya dapat menggunakan gdb dalam mode skrip untuk berhenti di breakpoint yang berbeda seperti test_ok atau test_fail ( fun-tech.se/stm32/TestSuite/index.php ). Jadi saya agak setengah jalan. Ini lebih merupakan pertanyaan bagaimana membangun "tes" yang berbeda. Ide-ide saya hari ini sedikit tidak fleksibel, itulah sebabnya saya mulai mencari semacam kerangka kerja.
Johan

1

Lihat embUnit http://embunit.sourceforge.net/embunit/index.html . Ini adalah kerangka uji unit C tertanam dengan jejak rendah.

Kami berhasil menggunakannya dalam beberapa proyek mikrokontroler tertanam. Jangan mengharapkan opsi dan fitur yang Anda dapatkan dengan kerangka uji unit desktop. Tapi itu pasti cukup kuat.

Ini memiliki banyak asersi yang ditentukan untuk Anda, jadi Anda tidak harus kehilangan banyak waktu untuk menulis asersi kustom seperti dengan minUnit.


1

Beberapa waktu yang lalu saya menulis tutorial menyeluruh tentang topik: Unit-testing (embedded) aplikasi C dengan Ceedling ; Saya menggunakan teknik ini dalam banyak proyek, dan sejauh ini saya cukup senang.


2
Ini adalah jawaban hanya tautan, dan karenanya akan menjadi tidak bernilai jika URL berubah atau tautannya turun. Anda harus menjelaskan informasi yang relevan dalam jawabannya , lalu Anda dapat menambahkan tautan sebagai referensi.
pipa

2
@pipe Ya, tetapi pertanyaan (rekomendasi produk pada dasarnya) meminta jawaban seperti ini.
Dmitry Grigoryev


-1

Coba serat, tapi saya tidak berpikir untuk pengujian unit, untuk analisis kode.


2
Analisis kode statis tidak dapat membantu mengeksekusi dan menguji kodenya, jadi lint itu tidak terlalu membantu.
Johan

1
Mungkin tidak membantu dalam konteks pengujian unit, tetapi semua orang harus menggunakan beberapa jenis alat analisis statis.
Tim
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.