Aprenda as Técnicas: Top-Down, Mocks e TDD - Embarcados
Ferramentas: Unity, CMock, CppUTest, CppUMock e Ceedling
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.
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.
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.
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.
[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
Avançado, Engenharia de Software, Processo de Desenvolvimento
Home » Software » Técnicas: Top-Down, Mocks e TDD
22/02/2014 12:34
Bacana o artigo Felipe! O mesmo terá continuidade na forma de artigos com pequenos códigos exemplos de uso das ferramentas citadas?
Obrigado por participar Marcelo.
O nosso colega Marcelo Jo já escreveu um tutorial de uso do Unity. https://www.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á.
Excelente a sua sugestão, vamos abordar esses pontos sim no futuro.
Por enquanto, já temos um tutorial com o Unity: https://www.embarcados.com.br/test-driven-development-unity-microchip-pic/