descadastro
site NCE
 
 
Engenharia de Software
 
artigos publicados

Extreme Programming - Continuação

 

Vinícius Manhães Teles
Mestre, DCC-IM/NCE

     
 

Desenvolvimento Orientado a Testes

Observando-se o trabalho de um desenvolvedor, nota-se que boa parte do seu tempo é dedicada à depuração de bugs. Trata-se de uma atividade frequentemente demorada que se repete inúmeras vezes à medida que o desenvolvedor produz mais código.
Idealmente, gostaríamos que softwares nunca tivessem defeitos, mas infelizmente, em função da complexidade dos sistemas, esse objetivo dificilmente é factível, levando à necessidade de depuração. Entretanto, o tempo gasto com depuração pode ser reduzido significativamente quando se consegue assegurar que os erros sejam detectados imediatamente, assim que são introduzidos. Quando isso ocorre, é mais rápido depurar e compreender o que pode ter causado o problema porque o programador tem, em sua memória, todo o contexto relativo à funcionalidade que está desenvolvendo. Não é necessário relembrar algo que foi implementado meses atrás.
É possível detectar problemas imediatamente desde que tenhamos o hábito de implementar testes automatizados antes de cada funcionalidade, de cada classe e de cada método criados no sistema. Quando isso é feito, criamos um mecanismo automatizado que aponta os problemas assim que eles são inseridos, o que reduz o tempo de depuração, além de servir como um mecanismo para testar o bom funcionamento do sistema a qualquer momento.
Equipes que trabalham com XP se preocupam em criar softwares saudáveis, que funcionem corretamente e permaneçam assim ao longo do tempo, à medida que recebem novas funcionalidades e alterações. Em se tratando de saúde, a prevenção é o melhor remédio e no caso de software não é diferente. Para tornar os sistemas saudáveis, equipes XP investem em testes automatizados, implementados antes mesmo de escrever o código das funcionalidades. Assim como a programação em par, o desenvolvimento orientado a testes ajuda a criar uma rede de proteção em torno do software, para que ele se mantenha saudável ao longo do tempo.

Refatoração

Quando deixamos de cuidar de nossa casa, a poeira se acumula, a pia fica cheia de louça suja, as lixeiras ficam entupidas e aquilo que se costumava chamar de lar se transforma em um lugar pouco agradável. Para evitar que isso ocorra, investimos tempo frequentemente para varrer, lavar a louça, arrumar a cama, retirar o lixo, entre outras atividades. Isso nos ajuda a ter mais conforto e permite que utilizemos a nossa casa para o que desejarmos, como por exemplo, convidar amigos para assistir a um jogo conosco.
Assim como a nossa casa, sistemas também se deterioram quando não investimos continuamente na limpeza e na organização dos mesmos. A estrutura de qualquer sistema tende a se degradar ao longo do tempo, à medida em que novas funcionalidades são inseridas, alterações são feitas, erros são corrigidos e mais código é introduzido.
Para evitar que a aplicação se transforme em uma casa suja, desorganizada e difícil de manter, equipes XP utilizam a prática de refatoração. Elas alteram pequenas partes do sistema, frequentemente, sempre que encontram uma oportunidade para melhorar o código, tornando-o mais limpo, mais claro e mais fácil de ser compreendido. Tais alterações não mudam o comportamento das funcionalidades, apenas melhoram a estrutura do código. Agindo assim, de forma sistemática e com frequência, as equipes investem para que o software se mantenha sempre fácil de alterar, gerando a velocidade de desenvolvimento que os clientes de projetos XP costumam vivenciar e apreciar.

Código Coletivo

Em um projeto XP, os pares se revezam, as pessoas se revezam na formação dos pares e todos têm acesso e autorização para editar qualquer parte do código da aplicação, a qualquer momento. Ou seja, a propriedade do código é coletiva e todos são igualmente responsáveis por todas as partes. Com isso, os desenvolvedores ganham tempo, pois não precisam esperar a autorização de um colega para editar uma área do código e há maior disseminação de conhecimento. Além disso, quando diversas pessoas têm a chance de olhar uma mesma área do código, torna-se mais freqüente a identificação de oportunidades de melhoria, levando frequentemente à refatoração em áreas que precisam da mesma.

Design Simples

O design de uma aplicação surge de forma incremental e evolutiva em projetos que trabalham com XP. O objetivo é criar a solução mais simples possível que seja suficiente para implementar as funcionalidades de cada iteração. Qualquer característica que possa ser implementada para dar apoio a funcionalidades futuras (fora da iteração), só são codificadas de fato se e quando tais funcionalidades forem priorizadas para uma iteração. Assim, busca-se concentrar os esforços da equipe naquilo que se tem certeza absoluta de que será necessário hoje, por já ter sido priorizado pelo cliente para a iteração corrente. Aquilo que poderia ser útil no futuro, deixamos para resolver no futuro, quando houver certeza da necessidade.
Isso levanta a preocupação de que não sejamos capazes de solucionar problemas futuros com rapidez. Entretanto, as demais práticas do XP ajudam a equipe a ter agilidade e segurança, de modo que ela possa esperar o futuro chegar para lidar com ele. Além disso, a prática regular de tentar se antecipar ao futuro não parece ser das mais adequadas quando se observa os padrões da indústria de software na qual, segundo estudos recentes do Standish Group, 64% das funcionalidades de um sistema comercial típico não são usadas quando entram em produção.

Ritmo Sustentável

Os recorrentes problemas observados nos projetos de software levam inúmeras equipes a trabalharem longos períodos e, por exemplo, fazer horas-extras com freqüência como uma tentativa de reduzir atrasos. Entretanto, sempre que fazem isso, se esquecem de que desenvolvedores são seres humanos que, como tais, sentem fome, se cansam, ficam com sono, perdem a atenção em tais circunstâncias e introduzem bugs. Assim, é comum o tempo extra ser gasto em vão, pois o fato de trabalhar mais não significa que o projeto avançou. Para progredir, é necessário que novas funcionalidades sejam implementadas e finalizadas, sem que haja bugs esperando para serem identificados nas mãos dos usuários.
Projetos XP respeitam isso e seguem a filosofia de que o mais importante não é trabalhar mais e sim trabalhar de forma mais inteligente, em um período de tempo semanal que as pessoas sejam capazes de sustentar sem ficarem esgotadas e sem prejudicarem o trabalho com o déficit de atenção decorrente da fadiga.
Existe uma distinção importante entre movimento e progresso. Uma equipe que se movimenta muita, que trabalha muitas horas, que "dá um gás" pelo projeto, mas produz várias coisas erradas não está progredindo. Está apenas consumindo energia. O importante não é se movimentar muito, é se mover na direção certa, de forma inteligente e sustentável.

Integração Contínua

Quando inúmeros desenvolvedores trabalham juntos em um mesmo projeto, é necessário sincronizar o que estão fazendo e assegurar que o código de um se integre corretamente com o de outro. Esse processo de sincronização recebe o nome de integração contínua em XP e é executado inúmeras vezes ao dia, pois é mais fácil integrar pequenos incrementos de código do que grandes blocos de código implementados ao longo de dias de trabalho. Quando há pouco a ser sincronizado em cada integração, eventuais conflitos no código são solucionados de maneira mais rápida e problemas não se acumulam uns sobre os outros.

Releases Curtos

Com o objetivo de receber feedback rapidamente, não apenas da pessoa que atua como cliente junto à equipe de desenvolvimento, mas de toda a comunidade de usuários do sistema, projetos XP procuram criar versões pequenas do software, contendo poucas funcionalidades novas, mas que sejam colocadas em produção com freqüência. Isso permite que os usuários tenham acesso ao software rapidamente, de modo que a equipe não corra o risco de investir demais em algo que não esteja correto, ou pior, em algo que não se revele necessário e valorizado pelos usuários.

Conclusão

Trabalhar com Extreme Programming equivale a encarar o desenvolvimento de software de uma forma diferente daquela a que estamos habituados. Trata-se de uma forma mais humana, onde todos - clientes, desenvolvedores e demais interessados no projeto - são identificados como pessoas que falham e que acertam. A estrutura de desenvolvimento criada pelo XP procura ajudar o projeto a explorar o que as pessoas têm de melhor e solucionar suas falhas com rapidez e segurança.
XP procura agir continuamente com priorização para evitar que trabalhos desnecessários sejam executados. Isso ajuda a poupar tempo, recursos e permite gerar maior valor para os clientes. Extreme Programming é a arte de maximizar o trabalho que não será feito. Pois, mais importante que trabalhar muito e produzir muito, é produzir a coisa certa, aquilo que o cliente realmente identifica como sendo valioso para resolver seus problemas, fazendo isso de forma consistente, segura e rápida ao longo de todo o andamento do projeto.

Vinícius Manhães Teles (vinicius@improveit.com.br) é Mestre em Informática pela UFRJ (DCC-IM/NCE), Diretor da Improve It e autor do livro “Extreme Programming – Aprenda como encantar seus usuários desenvolvendo software com agilidade e alta qualidade”.

Livros
Extreme Programming, Vinícius Manhães Teles (Novatec Editora, 2004)
Visão prática sobre Extreme Programming em português.
Extreme Programming Explained, Second Edition Kent Beck (Addison-Wesley, 2005)
Visão geral sobre XP em inglês.

Links
www.improveit.com.br/xp
Informações sobre XP em português.
c2.com/cgi/wiki?ExtremeProgrammingRoadmap
Wiki internacional sobre Extreme Programming.
www.agilealliance.org/articles
Vasta biblioteca de artigos sobre desenvolvimento ágil em geral.

 
 
         
 
    página principal
 
Núcleo de Computação Eletrônica
Universidade Federal do Rio de Janeiro
Prédio do Centro de Ciências Matemáticas e da Natureza Bloco C
Caixa Postal: 2324 - CEP: 20.010-974
Cidade Universitária - Ilha do Fundão, Rio de Janeiro - RJ Tel: 2598-3333