Vídeos de testes unitários em sistemas embarcados

testes unitários

Compartilho uma pequena série de vídeos sobre testes unitários em sistemas embarcados, onde TDD é aplicado, ou seja, testar primeiro e implementar depois.

 

Assistir a esses vídeos pode ser uma boa estratégia para iniciar o aprendizado com técnica e também servem como uma boa ilustração de como é a vida do usuário de TDD e como uma equipe pode se beneficiar da técnica.

 

Este artigo replica alguns dos principiais tópicos de cada vídeo como forma de prover um resumo para o leitor, entretanto a quantidade de informação do texto não se equipara aos vídeos. 

 

Escrevendo um Pisca Led com testes unitários

 

Trata-se de um vídeo de codificação ao vivo de testes e aplicação de um exemplo de Pisca LED. Além da demostração prática sobre TDD, é legal de ver que os testes são executados no PC de desenvolvimento e também na plataforma embarcada.

 

 

Um exemplo de abstração de plataforma (tempo 2:19)

 

Chamadas para a funções como led_on  e led_off , que são dependentes de plataforma, são abstraídas utilizando um header (.h) compartilhado e a implementação (.c) será diferente para cada executável final selecionada no momento do linker. No final deste artigo um exemplo de estrutura de pastas é apresentado, onde os arquivos abstração ficariam distribuídos.

 

Como simular a passagem de tempo nos testes (tempo 8:06)

 

Testar passagem de tempo manualmente é muito entediante, a final, tem que esperar o tempo passar. Em testes a passagem de tempo é uma variável que é incrementada, dando controle total sobre os instantes em que code under test (CUT) é executado.

 

Teste e implementação de um comparador de tempo robusto a wrap-around (tempo 18:16)

 

Sempre que estamos comparando variáveis contadoras de tempo temos que ter o cuidado com o wrap-around (quando o contador chega no seu valor máximo e volta a valer zero).

 

Existem várias soluções não tão inteligentes com condicionais, mas nesse vídeo é mostrado como uma subtração pode recuperar o contador do wrap-around e oferecer elevada robustez ao código dependente de tempo, essa subtração se resume em "subtrair o valor de tempo de agora do valor de tempo do passado", desfazendo o efeito do wrap-around e restando um delta de tempo, que pode ser comparado com outro delta (o esperado) normalmente.

 

O vídeo também mostra como o efeito é simulado durante os testes.

 

~8 prós e contras sobre test-driven development em sistemas embarcados

 

Este vídeo é uma lista de prós e contras acrescido de algumas dicas para ajudar na escolha de adotar ou não a técnica proposta. O relevante é que a lista foi adaptada para a área de embarcados, onde a dinâmica do TDD passa a apresentar alguns ganhos extras, assim como, custos extras.

 

 

Escolhi como destaque a parte (no tempo 4:19) onde são apresentadas três perguntas que o gestor ou o engenheiro deve se fazer para ajudar na escolha em adotar ou não testes unitários, ou TDD, no desenvolvimento do produto:

  • Quanto tempo é gasto em testes manuais?
  • Quanto custa e quão eficientes são os testes já aplicados?
  • Quanto custa um recall do produto?

 

Estas três perguntas são criação do autor, que tem experiência em desenvolvimento embarcados no Brasil, diferentemente da bibliografia disponível que trás uma bagagem estrangeira ou fora da área de embarcados.

 

Agora, para finalizar, o último vídeo deste artigo.

 

Introdução à dinâmica do Test-Driven Development em Sistemas Embarcados

 

Agora, no último vídeo, temos uma breve apresentação da dinâmica do TDD em embarcados, como o ciclo de desenvolvimento onde testes são escritos.

 

 

Uma parte relevante desse vídeo é onde o autor mostra a estrutura de pastas de um projeto multi plataforma:

  • app: aplicativo independente de plataforma, contendo a maior parte da lógica do negócio;
  • app_tests: onde os testes independentes de plataforma são escritos. Testes desta pasta vão rodar em todos os builds de testes, seja embarcado ou no PC do desenvolvedor;
  • plat_host_tests: esta pasta contém a main.c do build de testes que vão rodar no PC do desenvolvedor, assim como testes que só devem rodar neste PC, como testes que vão depender de recursos do sistema operacional não disponíveis no embarcado.
  • plat_XXX_tests: outro build semelhante ao anterior, só que para outra plataforma, provavelmente uma plataforma embarcada, mas podendo até ser em um build para um servidor de integração.
  • plat_XXX_app: diferente dos builds que terminam com "_tests", agora o aplicativo é gerado de verdade, esse é o build de produção para a plataforma "XXX". 

 

Esses foram três vídeos sobre TDD embarcado,  haverão mais vídeos e conforme for conveniente ele serão compartilhados, aqui no portal.

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Bruno JorgeAndré CurvelloCesar Junior Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Bruno Jorge
Visitante
Bruno Jorge

Parabens!!! Felipe, você tem disponivel seu codigo no github? abs.

André Curvello
Visitante

Parabéns pelo post e pelo material!
Excelente!

Cesar Junior
Visitante
Cesar Junior

Parabéns pelo post e pelos vídeos, muito bom.
Valeu!