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?


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.


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.


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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.