segunda-feira, fevereiro 25, 2008

Quem são eles?

Para quem programa (principalmente com Java), já deve ter lido muito material produzido por eles.

Da mesma forma, já deve ter utilizado frameworks que eles construíram e se maravilado com conceitos básicos de servidores de aplicação (e aplicações em si) que estas peças definiram.

Mas se na literatura os nomes são familiares, na foto, quem são eles ?




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.

domingo, fevereiro 10, 2008

Jira e Google Calendar para o 3PUP

Aos que não sabem, a 3Layer Tecnologia está unindo forças com outra eminente empresa na área de TI para definição de uma metodologia unificada para o desenvolvimento de sistemas enterprise, a qual visa abordar plataformas Java EE e .NET. O nome desse projeto é denominado 3PUP e deve se transformar em produto ainda nesse ano de 2008.

Fora os trâmites internos que rolam desde início de janeiro, inúmeros trabalhos são consequência (já disse que é difícil usar trema no meu teclado - parem!) dessa iniciativa. E destes, vários são relativos à otimização; claro!

Otimização
Os que me conhecem, poder arguir (sem trema!) que tenho certas prerrogativas natas, sendo um cara (extremamente) cético, metódico, crítico, perfeccionista, incisivo, perspicaz, objetivo e, por vezes, interpretado como um visionário e lunático. Fora esses adjetivos, os quais, dependendo do meu estado de espírito eu possa concordar ou negar definitivamente, considero que, se eu pudesse escolher uma palavra que me traduzisse, esta seria otimização.

Não vou nem comentar sobre o DTOptimizer, que nem está acabado ainda mas, realmente, para tudo que vejo, penso que deve existir uma forma mais fácil de ser feito.

Jira para automatizar
No passo que anda o 3PUP, temos definido o fluxo de levantamento, validação, catalogação e publicação de requisitos, o qual é composto (se a Summer não está me enganando agora) de 16 atividades, as quais envolvem analistas, usuários líderes, projetistas, arquitetos (e, eventulamente gestores, gerentes, designers, programadores e consultores) - todos papéis definidos no grande workflow em desenvolviemento.

Como otimização é a palavra-chefe da 3Layer, e considerando que com a "benção" da Atlassian, podemos utilizar gratuitamente a versão Enterprise do Jira, decidimos que todo o fluxo do 3PUP será automatizado por este software.

Google Calendar para agendar
O Jira é maravilhoso (e acredite quando digo isso, pois veja bem os adjetivos que me descrevem acima!). Porém, tem coisas que só o branquelo faz. E uma delas é o Google Calendar.

Sua interface polida, funcional, de uso horizontal e seus reminders SMS são uma "mão na roda". E esta é o estepe do Jira :)

Ao juntar à equação do 3PUP um cara extremanente chato, um software flexível como o Jira e uma atitude como o Google Calendar, o resultado só pode ser um processo ágil, automatizado e extremamente transparente - em palavras simples, que nem o maior projeto de software em desenvolvimento no Brasil possui (um dia eu falo sobre isso - ainda não, desculpem).

O sábado
Mas para essa automação, esforços técnicos são necessários. E assim, hoje, passei o dia brincando com a API do Calendar. Fiquei feliz "pra caramba" com a telinha ao lado. Tanto, que até penso em escrever um artigo pra Java Magazine. Mas isso ainda vamos ver...

Confluence para registrar
Porém, não basta automatizar o processo e fazer agendamentos. Precisamos registrar as coisas.

E como a 3Layer adora softwares horizontais e formatos .online, nada mais óbvio do que uma ferramenta de wiki atrelada ao processo.

Nesse sentido, novamente com a graça da Atlassian, o Confluence vem complementar o 3PUP, garantindo pautas e atas integradas, atualizadas e corretamente distribuídas. E óbvio, tudo automatizado.

EA, Subversion, FishEye, CruiseControl e Gmail
E eu poderia continuar dizendo que temos em desenvolvimento a integração do projeto, suas tarefas e recursos aos status, pacotes e elementos como Casos de Uso, Requisitos (...) e os baselines da (outra excelente ferramenta) Enterprise Architect ao processo. Tudo gerenciado pelo Subversion (já disse que adoro ele também?) e com a feature da integração contínua garantida pelo CruiseControl.

Para complementar o pacote, o Gmail, que avisa, deliveraba (acabei de criar uma palavra! - ainda estou rindo, acreditem!!!), armazena e compartilha informações "às pancas" para os envolvidos.

Entenderam?
Não sei se quem leu o post entendeu alguma coisa. Mas é exatamente isso que estamos fazendo. Brincando de fazer software de qualidade, barato, robusto e em tempos inimaginávies para qualquer outra empresa conservadora. Viva as diferenças! Viva o 3PUP!