Vou falar com o meu departamento na próxima semana sobre testes de unidade e desenvolvimento orientado a testes. Como parte disso, vou mostrar alguns exemplos do mundo real de algum código que escrevi recentemente, mas também gostaria de mostrar alguns exemplos muito simples que vou escrever na palestra.
Eu tenho pesquisado na web por bons exemplos, mas tenho lutado para encontrar algum que seja particularmente aplicável à nossa área de desenvolvimento. Quase todo o software que escrevemos são sistemas de controle profundamente embutidos, rodando em pequenos microcontroladores. Há muito código C que é facilmente aplicável ao teste de unidade (falarei sobre o teste de unidade no PC, e não no próprio alvo), desde que você fique longe da camada 'inferior': o que fala diretamente aos periféricos do microcontrolador. No entanto, muitos exemplos que encontrei tendem a se basear no processamento de strings (por exemplo, o excelente exemplo de numeração romana Dive Into Python) e, como quase nunca usamos strings, isso não é realmente adequado (sobre as únicas funções de biblioteca que nosso código normalmente usa são memcpy
, memcmp
e memset
,strcat
ou expressões regulares não estão certas).
Então, sobre a questão: alguém pode oferecer bons exemplos de funções que eu possa usar para demonstrar o teste de unidade em uma sessão ao vivo? Uma boa resposta na minha opinião (sujeita a alterações) provavelmente seria:
- Uma função que é simples o suficiente para que qualquer pessoa (mesmo aqueles que escrevem código ocasionalmente) possa entender;
- Uma função que não parece inútil (ou seja, calcular a paridade ou CRC é provavelmente melhor do que uma função que multiplica dois números e adiciona uma constante aleatória);
- Uma função que é curta o suficiente para escrever na frente de uma sala de pessoas (eu posso tirar proveito das muitas pranchetas do Vim para reduzir erros ...);
- Uma função que aceita números, matrizes, ponteiros ou estruturas como parâmetros e retorna algo semelhante, em vez de manipular strings;
- Uma função que possui um erro simples (por exemplo, em
>
vez de>=
) que é fácil de inserir e que ainda funcionaria na maioria dos casos, mas que rompe com um caso particular: fácil de identificar e corrigir com um teste de unidade.
Alguma ideia?
Embora provavelmente não seja relevante, os próprios testes provavelmente serão escritos em C ++ usando o Google Test Framework: todos os nossos cabeçalhos já possuem o #ifdef __cplusplus extern "C" {
wrapper; isso funcionou bem com os testes que fiz até agora.