Qual estrutura de teste de unidade posso usar para o projeto mcu baseado em CA?

15

Estou pensando em como posso usar testes de unidade no meu projeto de mcu e quais estruturas posso usar para simplificá-lo.

Hoje estou usando um stm32 com OpenOCD-jtag de um PC Linux, onde tudo é controlado a partir de um Makefile clássico e compilado com o gcc.

Eu mesmo poderia criar algo, mas se houver uma estrutura que eu possa usar, seria bom. (É um bônus se a estrutura puder gerar o resultado em um formato que Jenkins / Hudson possa ler).

Existe uma maneira de usar uma estrutura de teste de unidade com um stm32?

Johan
fonte
3
Não tenho tempo para escrever uma resposta completa, mas usei muitas das ferramentas e técnicas encontradas nesses documentos e nesta série de blogs . Em uma palavra: CMock!
Kevin Vermeer

Respostas:

4

Confira o CppUTest e o excelente http://pragprog.com/book/jgade/test-driven-development-for-embedded-c de James Grenning

O CppUTest tem suporte para C e C ++, e possui um bom conjunto de modelos Makefile que me iniciaram rapidamente.

blalor
fonte
Comprou uma versão ePub, vamos ver se ele é bom :)
Johan
O livro é bom, mas acho que a unidade (a outra estrutura desse livro) atenderá melhor à minha necessidade.
7119 Johan Johan
Aceito desde que o livro me empurrou na direção certa.
Johan
5

Existem muitas variáveis ​​que determinarão a melhor estrutura de teste de unidade a ser usada em sua situação. Alguns itens que podem afetar sua escolha serão:

  • O idioma alvo.
  • Qual suporte de biblioteca está disponível. por exemplo, libc ou uma versão reduzida dela.
  • O sistema operacional do destino. por exemplo, Nenhum, FreeRTOS, personalizado.

A maioria das estruturas do tipo xUnit fornecerá algum nível básico de funcionalidade que pode ser útil. Eu usei o Cunit com algum sucesso no passado. (pacote libcunit1-dev no Ubuntu / Debian). A maioria das estruturas exige que a libc esteja disponível, algumas exigem suporte adicional do sistema operacional.

Outra alternativa que tem apenas 3 linhas é a Minunit .

Descobri que o teste de unidade usando o microcontrolador como alvo é bastante complicado, pois você precisa apresentar um ambiente adequado para fazer o download de testes, executá-los e obter resultados novamente. Basta colocar a plataforma no lugar que permitirá fazer isso é uma grande tarefa.

Outra abordagem que tomei e que funcionou para mim é fazer testes de unidade no host, implementando uma camada de abstração entre os drivers e o código do aplicativo. Como você está usando o gcc para o destino, o código também deve ser compilado no host.

Testar no host de compilação geralmente é muito mais fácil, pois você tem o suporte completo do sistema operacional host e de todas as suas ferramentas. Por exemplo, ao testar no host, tenho uma versão zombada do meu driver sem fio com a mesma interface que o driver real que é executado no destino. A versão host usa pacotes UDP para simular a transferência de pacotes sem fio, com o driver simulado suportando a capacidade de descartar pacotes para que eu possa testar meus protocolos.

No produto em que estava trabalhando, um sistema operacional encadeado estava sendo usado; portanto, a camada de abstração para teste no sistema operacional host usava pthreads.

Embora não seja perfeito, quanto mais fácil você escrever e executar testes, maior a probabilidade de implementar mais casos de teste. Outro benefício de ter o código executado em plataformas diferentes é testar se o código é portátil. Você detectará rapidamente erros endian se as arquiteturas de destino e host diferirem.

Agora estou um pouco desconfortável, mas sinto que essas idéias podem ajudar na sua escolha de estrutura e métodos de teste.

Austin Phillips
fonte
Resolvi como obtenho código no destino e posso usar o gdb no modo de script para parar em diferentes pontos de interrupção, como test_ok ou test_fail ( fun-tech.se/stm32/TestSuite/index.php ). Então, eu estou meio que no meio do caminho. Esta é mais uma questão de como criar os diferentes "testes". Minhas idéias hoje são um pouco flexíveis, por isso comecei a procurar algum tipo de estrutura.
Johan
1

Confira embUnit http://embunit.sourceforge.net/embunit/index.html . É uma estrutura de teste de unidade C incorporada com uma pegada baixa.

Nós o usamos com sucesso em alguns projetos de microcontroladores incorporados. Não espere as opções e os recursos que você obtém com uma estrutura de teste de unidade de desktop. Mas é definitivamente poderoso o suficiente.

Ele tem alocações de declarações definidas para você, para que você não precise perder muito tempo escrevendo declarações personalizadas como com minUnit.

sillevl
fonte
1

Há algum tempo, escrevi um tutorial completo sobre o tópico: Teste de unidade (embutida) de aplicativos C com Ceedling ; Eu uso essas técnicas em vários projetos e estou muito feliz até agora.

Dmitry Frank
fonte
2
Esta é uma resposta apenas para link e, como tal, se tornará inútil se a URL mudar ou se o link for desativado. Você deve explicar as informações relevantes na resposta e adicionar o link como referência.
pipe
2
@ pipe Sim, mas a pergunta (essencialmente recomendação do produto) implora por respostas como esta.
Dmitry Grigoryev
-1

Tente o fiapo, mas não acho que seja para teste de unidade, é para análise de código.

LEMUEL ADANE
fonte
2
A análise de código estático não pode ajudar a executar e testar o código, portanto, não o ajude realmente.
Johan
1
Talvez não seja útil no contexto de teste de unidade, mas todos deveriam estar usando algum tipo de ferramenta de análise estática.
Tim