Técnicas: Top-Down, Mocks e TDD

top-down

Top-Down, Mocks e TDD podem ser consideradas três abordagens de desenvolvimento de abrangência distinta que juntos possibilitam a criação de softwares enxutos e bem testados. Este artigo apresenta uma introdução do uso conjunto das três técnicas.

 

 

Top-Down

 

Abordando a escrita de código com Top-Down, concebe-se arquiteturas mais enxutas e eficientes. Top-Down define que o código é escrito a partir de módulos superiores da hierarquia de dependências, ou mais próximos da funcionalidade em desenvolvimento, em oposição à abordagem Bottom-Up que primeiro desenvolve os módulos mais próximos da plataforma. Um exemplo: em uma funcionalidade de envio de mensagens via a internet, primeiro se escreve o módulo de código que implementa a interface com o usuário para o envio de mensagens, que, por sua vez, vai depender de um módulo de baixo nível para efetivamente enviar a mensagem via algum protocolo de internet, e que será escrito depois. A ordem proposta caracteriza a técnica Top-Down.

 

Top-Down é mais difícil de utilizar do que Bottom-Up, mas produz melhores interfaces e, por consequência, uma melhor arquitetura, porque a interface dos módulos são definidas antes da implementação dos mesmos. O problema de Top-Down é que o código só será testado quando finalmente todos os módulos dependentes forem completamente escritos, o que torna essa abordagem muito suscetível a bugs. Então, para solucionar esse problema, Test-Driven Development e Mocks entram em prática.

 

 

TDD: Test-Driven Development

 

Test-Driven Development ([2], [3] e [4]), ou TDD, é uma metodologia que regra os testes unitários e o procedimento de escrita do código dos módulos. É fundamental que seja usada para tornar o processo Top-Down robusto contra bugs, já que com TDD os módulos poderão ser testados antes da integração final, detectando e eliminando falhas de comportamento de maneira antecipada e individualizada. Entretanto, para que um módulo superior na hierarquia, que é escrito previamente, possa ser testado com TDD, é necessário que imitadores e analisadores das chamadas a módulos dependentes sejam confeccionados, só assim  o módulo em testes será compilado e testado. Esses imitadores/analisadores são chamados de Mocks.

 

Mock, segundo Grenning [4, pág. 114], é definido como um objeto que verifica as funções chamadas, a ordem de chamada e os parâmetros passados pelo CUT (code under test) ao DOC (depended on code) e também é programado para retornar valores pré definidos ao CUT. Então o Mock é responsável em satisfazer as dependências do módulo em testes e assim torná-lo testável. É utilizado apenas no ambiente de testes e pode ser auto gerado a partir de interfaces (header) utilizando ferramentas apropriadas.

 

 

Ferramentas: Unity, CMock, CppUTest, CppUMock e Ceedling

 

Para que se aplique Top-Down, TDD e Mocks com eficiência é necessário um ambiente de testes e um gerador de Mocks pode encurtar a etapa de escrita dos mesmos. Abaixo uma lista de ferramentas indicadas para a tarefa, considerando o desenvolvimento de sistemas embarcados.

  • Unity: framework de TDD para a linguagem C;
  • CMock: gerador automatizado de Mocks para a linguagem C, escrito em Ruby e dos mesmos desenvolvedores do Unity;
  • CppUTest: outro framework para linguagem C, escrito em C++ e otimizado para rodar em sistemas embarcados;
  • CppUMock: auxiliar para geração manual de Mocks, dobradinha com o CppUTest;
  • Ceedling: build-system para TDD em C, integra Unity, CMock e outra ferramenta com o objetivo facilitar o uso de TDD.

 

 

Referências

 

[1] Menos bugs, maior qualidade: Test-Driven Development
[2] Test Driven Development – Unity + Microchip PIC
[3] Test-Driven Development for Embedded C, por James W. Grenning

 

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.

4
Deixe um comentário

avatar
 
2 Comment threads
2 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Felipe LavrattiMarcelo Rodrigo Dos Santos AndriolliDesenvolvimento de Software – Ferramentas de Produtividade | Blog do Engenheiro Puhlmann Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
trackback

[…] Os diagramas N-S são associados diretamente aos comandos de programação, tais  como IF-THEN-ELSE, FOR, DO-WHILE, etc. A tradução é direta, quando o programa estiver totalmente detalhado. Para complementar a introdução, faltou explicar que a abordagem Top-Down é a maneira de se desenvolver um projeto, sistema, algoritmo, etc, partindo do plano mais geral (Top) e descendo aos poucos para os detalhes, (Down) até que esteja tudo definido nos mínimos detalhes. Para conhecer um pouco mais sobre a técnica Top-Down, sugiro que você leia o artigo técnico Técnicas: Top-Down, Mocks e TDD. […]

Marcelo Rodrigo Dos Santos Andriolli
Visitante
Marcelo Andriolli

Bacana o artigo Felipe! O mesmo terá continuidade na forma de artigos com pequenos códigos exemplos de uso das ferramentas citadas?

Felipe Lavratti
Visitante
Felipe Lavratti

Obrigado por participar Marcelo.
O nosso colega Marcelo Jo já escreveu um tutorial de uso do Unity. http://embarcados.com.br/test-driven-development-unity-microchip-pic/
Quanto às demais ferramentas, pensamos em abordar com tutoriais sim, mas não sabemos quando isso ocorrerá.

Felipe Lavratti
Visitante
Felipe Lavratti

Olá Marcelo,
Excelente a sua sugestão, vamos abordar esses pontos sim no futuro.
Por enquanto, já temos um tutorial com o Unity: http://embarcados.com.br/test-driven-development-unity-microchip-pic/