Entendendo Qualidade em Projetos Ágeis

by alisson.vale 4/10/2007 01:35:00

Talvez as questões de garantia de qualidade estejam dentre os assuntos mais misteriosos para aqueles que ainda estão começando a trilhar os primeiros passos em métodos Ágeis. Muito se fala em testes de aceitação, TDD, testes unitários, mas é só isso? Qualidade em projetos ágeis se assegura somente com testes automatizados?

A resposta é não. Essas técnicas são importantes, mas há todo um universo conceitual por trás dos projetos ágeis que poderão lhe ajudar a não só explicar como isso se dá, mas também a aplicar pequenas melhorias que podem causar grande repercussão no seu processo. 

O primeiro ponto a se entender é que qualidade é um meio não um fim. A idéia é não procurar montar um processo cujo objetivo seja gerar um produto de qualidade. O ideal é fazer com que a própria busca pela qualidade oriente a formação do seu processo.

A forma como um projeto ágil lida com qualidade está muito sintonizada com as idéias de Edward Deming e com o modelo de administração e gerenciamento oriental (muito influenciado por ele). O modelo ocidental lida basicamente com o uso de inspeções em massa para assegurar qualidade. O mesmo modelo é utilizado pelos processos tradicionais de desenvolvimento de software. A idéia é mais ou menos a seguinte: Depois que está tudo pronto, vamos testar pra ver se funciona. Talvez por isso a idéia de se criar testes antes de se escrever o software seja considerada tão "excêntrica" por aqueles que ainda não conhecem a abordagem ágil. O modelo mental de se testar só depois que algo é considerado pronto é muito forte. Não foram poucas as vezes que eu ouvi me dizerem: "Mas pra quê eu vou testar agora se ainda não está pronto?"

Assim, para entender como se garante qualidade em projetos ágeis, há 5 pontos que acho serem fundamentais:

1. Não depender de inspeções para garantir qualidade: Se você inspeciona seu software com a expectativa de encontrar defeitos, seu processo ainda não tem qualidade. Então, invista em qualidade durante a produção, não depois. Inspeções são ineficientes porque não previnem o problema, apenas o encontram. Em quê ajuda encontrar um erro em uma inspeção? O erro já está lá! Inspeções são necessárias, certamente não vamos conseguir viver sem elas tão cedo. Mas encontrar erros em uma inspeção no final do processo é desperdício. Considere que há duas maneiras de evitá-las ou reduzir a dependência que você tem delas:

  • Inserindo qualidade no produto. Aqui entra a figura dos testes automatizados.
  • Antecipando as inspeções de modo que elas aconteçam antes que um defeito seja inserido no produto. Como? Muitas práticas ágeis já ajudam muito, cada uma da sua forma: Integração Contínua, times multi-disciplinares, shared workspaces,  daily meetings, pair programming, TDD, code e design Inspections e outras. Cada prática dessas traz consigo uma diferente forma de inspeção. Você também pode ajudar fazendo testes durante o processo de produção, não depois. Um exemplo é chamar alguém para testar o que foi feito, antes que o software saia da máquina do desenvolvedor. É o melhor momento para se encontrar um problema.  Se deixarmos pra testar tudo no final de uma iteração, as chances de não entregar nada no final são grandes.

2. Valorize a prevenção, não a detecção. Encontrar um defeito não pode ser algo comum. O processo de prevenção deve ser revisado imediatamente. A equipe não deve ir adiante enquanto houverem defeitos. Há várias formas de se trabalhar com prevenção, uma delas é a automação. Por exemplo, automatizar o deploy e a instalação do seu software é investir em prevenção. Um grande número dos problemas encontrados em ambientes fora da fronteira da equipe estão associados às configurações necessárias para se instalar e rodar o software produzido. Os próprios desenvolvedores devem ser capazes de incorporar os recursos que ele precisa para ser instalado. Assim, é o desenvolvedor que tem que indicar que scripts de banco devem ser rodados e que arquivos de configuração devem receber novas entradas. É comum o uso de uma gerência de configuração para isso. Mas é desnecessário quando há automação. Aqui no nosso projeto, o próprio desenvolvedor que produziu a funcionalidade configura tudo que será preciso ser executado quando da instalação do software. A automação elimina a necessidade de intermediação. Isso aumenta a qualidade porque elimina mais um hands-off do processo.

3. Não confie nas especificações como forma de garantir satisfação dos usuários. Se seu projeto ainda está atrelado à necessidade de se desenvolver para atender uma especificação, saiba que elas não são capazes de contar toda a história. Especificações não são bons instrumentos para descrever como um software deve funcionar. A melhor maneira de aumentar a qualidade que o seu cliente percebe no seu produto é envolvendo-o no processo. Ciclos de feedback geram aprendizado, confiança e ajudam o usuário a encontrar a melhor solução. Seguir uma especificação é separar o problema da solução e direcionar o cliente para apenas descrever o problema, enquanto você fica responsável pela solução. O ideal é que o problema e a solução estejam no mesmo contexto, e que eles sejam trabalhados em conjunto. Se, de alguma forma, o cliente contribuir para a solução, ele não só ficará mais satisfeito, como também se tornará seu cúmplice e o ajudará nos momentos difíceis pelos quais você pode chegar a passar.

4. Qualidade não se controla, se incorpora. Em caso de equipes de projeto, não acredito que bugs aparecem por causa de desenvolvedores ruins (talvez problemas de design ou de performance apareçam por causa de desenvolvedores ruins). Bugs aparecem porque a falta de qualidade do processo permitiu. Assim, medidas de punição ou recompensa, ou qualquer outra abordagem top-down para tentar reduzir bugs não funcionam a longo prazo. É injustificável ficar tentando controlar algo tão precioso - como é o caso da qualidade - quando é possível incorporá-la ao seu dia-a-dia.   

5. Treine a aquisição de habilidades, não o uso dos instrumentos. As pessoas são capazes de se tornarem multi-disciplinares. Basta treiná-las para isso. Você vai incorporar qualidade ao seu processo na medida que investe nas pessoas para que elas adquiram novas habilidades. Assim, treine:

  • modelagem, não UML;
  • padrões de arquitetura, não Webservices;
  • design, não novos recursos da IDE;
  • programação pragmática, não novos recursos de linguagem;
  • a especificar testes, não a usar ferramentas de testes;

Enquanto que os itens a esquerda geram novas habilidades nas pessoas, os itens a direita podem ser resolvidos com 20 minutos de pesquisa no google.

Posts relacionados

Comentar


(Vai mostrar seu Gravatar)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Pré-visualização

5/9/2008 19:14:57

Sobre o Autor

Alisson Vale Alisson Vale
Líder de Projeto da Phidelis Tecnologia.


E-mail me Send mail
      Sign in

Últimos posts

Últimos comentários

Termo de Responsabilidade

Este site apresenta apenas opiniões pessoais. Não necessariamente representa as opiniões ou práticas da Phidelis Tecnologia.

© 2008