Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Artigo no estilo: Curso

De que se trata o artigo

Apresentaremos nesta série de artigos uma técnica baseada em templates de testes de design para a verificação de artefatos de diagramas de classes UML contra código Java. Nesta primeira parte de nosso artigo, apresentaremos os principais conceitos envolvidos: UML 2.0, MDA, Teste de Design e DesignWizard.

Para que serve

Uma das principais contribuições em se aplicar teste de design é diminuir os custos do software. Custos com a manutenção do software podem chegar até 90% do custo total do ciclo de vida do software. Dentre esses custos destacamos o custo com a revisão de código.

Em que situação o tema útil

Verificação de conformidade com o design é especialmente relevante em processos de desenvolvimento que promovem uma clara distinção entre artefatos de design e de implementação, como por exemplo, o RUP. E, especialmente, se equipes diferentes desenvolverem os artefatos de design e os de implementação.

Uma atividade comum e fundamental a todo processo de software é o design do software. O design incorpora a descrição da estrutura do software, os dados que são manipulados pelo sistema, a descrição das interfaces entre os componentes do sistema, e algumas vezes o algoritmo usado. O design realiza importantes decisões da arquitetura do software e possui um papel crucial no desenvolvimento, implantação e evolução do sistema. Sendo assim, o design atua como o elo entre os requisitos e a implementação do software.

Contudo, nem sempre a implementação segue o design proposto. De acordo com testemunhos de alguns gerentes de fábricas de software do Brasil, isso raramente acontece. Documentação errônea ou obsoleta é considerada uma das principais causas da baixa qualidade de software. Verificação de conformidade com o design é especialmente relevante em processos de desenvolvimento que promovem uma clara distinção entre artefatos de design e de implementação, como por exemplo, o RUP. E, especialmente, se equipes diferentes desenvolverem os artefatos de design e os de implementação.

Porém, a verificação de conformidade entre design e implementação é ainda um ponto em aberto na engenharia de software com poucas ferramentas de automação disponíveis. As principais ferramentas atualmente verificam o comportamento do sistema através de testes funcionais em detrimento à verificação da estrutura do sistema. Dentre as poucas que verificam estrutura, elas são em sua maioria manuais.

Para ilustrar a importância da conformidade entre o design do sistema e o seu código, considere o processo de desenvolvimento ilustrado na Figura 1. Inicialmente, nesse processo, o arquiteto do software desenvolve o projeto do sistema, de forma que este contemple da melhor forma possível os requisitos do cliente. O projeto do sistema é um conjunto de artefatos que descrevem vários aspectos da forma como o sistema deve ser implementado. Dentre esses artefatos, um bastante usado para descrever a estrutura do sistema é o design estrutural, ele é responsável por exprimir a forma que a estrutura do código deve seguir. A etapa seguinte no processo de desenvolvimento é a etapa de implementação, é nessa etapa onde os programadores, baseados no projeto do sistema, implementam o código fonte desse sistema. Depois disso, vem a etapa de teste, onde diversos testes são executados, bugs podem ser descobertos e consertados. Por fim, a etapa de implantação, onde temos uma versão final do sistema pronta para ser usada. Um grande problema desse processo de desenvolvimento é que depois das diversas etapas intermediárias do processo, não há uma forma de garantir que o projeto do sistema ainda se mantém retido no código final.

Processo de desenvolvimento tradicional

Figura 1. Processo de desenvolvimento tradicional.

A Figura 2 exibe o mesmo processo de desenvolvimento tratado anteriormente, sendo que agora o processo foi estendido com o uso de testes de design. Essa extensão teria um impacto mínimo no processo como um todo, tendo em vista que os arcos indicados com nome auto poderiam ser ações completamente automáticas.

Extensão do processo de desenvolvimento

Figura 2. Extensão do processo de desenvolvimento.

Atualmente, a notação UML 2.0 é um formalismo padrão amplamente utilizado pela academia e pela indústria na especificação de design de software. Essa notação é usada para descrever tanto características estruturais quanto comportamentais do software.

Há ainda alguns autores que propõem a verificação do design através do conceito de teste de design. Teste de design é um tipo de teste automático que verifica a conformidade de uma implementação em relação a regras de design explícitas. Contudo, regras de design expressas através de código de teste não é uma forma usual para especificar design. Para tanto existe a UML que é uma linguagem específica para esse fim.

Neste contexto, nós apresentaremos nesta série de artigos uma técnica baseada em templates de testes de design para a verificação de artefatos de diagramas de classes UML contra código Java. Usando a abordagem, um designer que desenvolva o design estrutural do sistema baseado em modelos UML será capaz de derivar automaticamente os testes de design para verificar se a implementação está de acordo com o design proposto. Para a geração automática dos testes de design nós adotamos MDA, pois consideramos que essa abordagem consegue tratar todo o problema de aplicação de templates automaticamente com o uso de padrões internacionais, além do fato que um dos elementos do problema já envolve um dos padrões de MDA. Esta abordagem pode ser usada no desenvolvimento do software como ferramenta para manter a sincronia entre os documentos de design e a implementação.

Nesta primeira parte de nosso artigo, apresentaremos os principais conceitos envolvidos: UML 2.0, MDA, Teste de Design e DesignWizard.

Template (ou “modelo de documento”) é um documento sem conteúdo, com apenas a apresentação visual (apenas cabeçalhos, por exemplo) e instruções sobre conteúdo de um documento a ser formado.

Overview da Solução

Nossa solução para a verificação de artefatos do diagrama de classe UML fundamenta-se na criação de um catálogo de templates de testes de design. Cada template é responsável por criar os testes capazes de verificar um tipo de artefato abordado nessa dissertação.

...
Quer ler esse conteúdo completo? Tenha acesso completo