segunda-feira, fevereiro 25, 2008

Especificações Executáveis via wiki

O mundo é realmente grande. E as formas com que as coisas podem ser feitas variam de tal maneira que, para os que estão distantes, elas simplesmente parecem inimagináveis. Estou falando das Especificações Executáveis da GreenPepper, as quais podem ser utilizadas sobre o Confluence e o Jira, ambos da Atlassian. E o bom é que isso pode fazer parte do 3PUP.

Vamos a um cenário:

1. No Confluence, em formato wiki, nas etapas de análise e projeto, o analista especifica seus requisitos e casos de uso;
2. Para cada requisito, ele determina quais são as suas regras de aceitação, também na própria wiki;
3. No Jira, as issues são criadas e ligadas às respectivas especificações da wiki;
4. Os desenvolvedores resolvem as issues, tal como define o cronograma do projeto;
5. Concluídas, as especificações vinculadas às issues podem ser automaticamente executadas, na própria wiki;
6. Os resultados dos testes podem ser visualizados diretamente ou então publicados para fins gerenciais.

Greepepper, a empresa

Primeiro, um parabéns para os caras. Greenpepper (pimentas verdes) é uma empresa focada em processo ágeis, tal como a 3Layer. Experientes no ramo, eles têm plugins para o Atlassian Jira, de forma que a condução da gerência de projetos através detse software possa ser facilitada.

Semana passada solicitei uma licença Open Source para a nossa instalação do Jira e fiquei estupefado em receber um reply (humano, diga-se de passagem) com a licença solicitada em menos de 10 minutos! Sim, os caras são rápidos.

GreenHopper, o plugin

Muitas empresas julgam ter processo ágeis. Porém, disso especulo, pois dando aos extremos, os meios são geralmente penalizados. Uma frase não dita em uma ata de reunião não escrita em um documento não protocolado pode ser o estopim para centenas de horas mal ocupadas em um projeto. E acontece, não duvidem.

O mesmo vale para requisitos mal escritos, ou casos de uso mal testados. E em processos evolutivos, a tendência é que os desvios aumentem a cada interação. Mas como manter especificações e testes atrelados, sendo que entre eles diversas etapas de projeto, interações e pessoas estão envolvidas?

A resposta pode não ser total, mas o conceito que a fundamenta, se bem explorado, é capaz de promover a completude ao questionamento: são as Especificações Executáveis. E é justamente isso que o plugin da GreenPepper oferece para nós.

Um exemplo

No link http://www.greenpeppersoftware.com/confluence/display/GPO/Writing+my+first+Executable+Specification vocês tem mais detalhes. Aqui, reproduzo o essencial:

Digamos que o analista especifique uma operação de soma, e dê alguns exemplos de entradas e saídas esperadas: 2 + 5 = 7; 1 + 3 = 4; 80 + 1 = 81.

Uma vez que as tarefas relativas a construção essa operação de soma sejam concluídas por um programador, seria interessante testá-la; não?

JUnit e outros frameworks caem bem. Mas notem que foi o analista que definiu as operações e os testes aqui. E que nem sempre ele vai conhecer bibliotecas de baixo nível, como o JUnit.

Da mesma forma, obrigar (e garantir) que os programadores acessem a wiki e criem JUnit’s consistentes com as especificações é uma tarefa herculóide (ou insana, devido à redundância).

E o problema piora, pois o analista pode ter errado nas versões iniciais de suas especificações; pode tê-las evoluídas, melhoradas; aumentadas e, no pior dos casos, estendidas – agora o sistema precisa suportar multiplicações. Nesses casos, como garantir a sincronia entre as especificações e os testes?

A resposta para tudo isso se resume em executar as especificações na própria wiki.

Seja um formato simples, como abaixo:

Essa entrada pode se executada diretamente pelo plugin da Greenpepper e ter saídas como:

Notem que o resultado do último teste falhou, retornando 80.

Da mesma forma, podemos estender a nossa tabela, para suportar novas funcionalidades, como:

Observem que podemos modificar em alto nível as especificações e ainda tê-las integradas ao restante do projeto (controle das issues) e à implementação (código-fonte) sem maiores dificuldades.

Funcionamento

Não me peguei aos detalhes, mas pelo que percebi, cada um desse testes (e tem vários tipos, incluindo o suporte à interação, condições, coleções, etc.) é atrelado a uma fixture, a qual aponta para a classe ou pacote de teste. Essa fixture é importada na wiki, de forma a ser o elo entre o código-fonte e especificação. O plugin GreenPepper se encarrega do suporte, permitindo que todo o projeto se mantenha coeso e sincronizado.

Conclusões

Primeiro, obrigado à GreenPepper por nos ceder a licença Open Source para o Merlin. Segundo, adoro automação. E, considerando que o 3PUP almeja ser uma metodologia ágil sem colocar em detrenimento os meios (e daí o motivo de ele ser um desafio), o conceito de Especificações Executáveis é uma funcionalidade muito interessante.
Deus salve a Internet, a qual encurta distâncias e permite que o inimaginável aconteça.

0 comentários: