Escolar Documentos
Profissional Documentos
Cultura Documentos
Muitas empresas buscam modelos ágeis para desenvolvimento de software e esta busca
se deve principalmente à adoção e divulgação do Scrum como prática de gerenciamento de
projetos aqui no Brasil. Um pilar muito importante para qualquer metodologia ágil é a ordem de
construção das funcionalidades: no Scrum chamamos isso de "Product Backlog", no OpenUP
chamamos isso de"Lista de Itens de Trabalho", na FDD chamamos isso de "Lista de
Funcionalidades", no Extreme Programming a fila de construção não tem um nome definido, mas
seriam as histórias que ainda não fazem parte da iteração corrente. De qualquer forma, em todas
as metodologias ágeis nós trabalhamos com uma fila de construção composta por itens de
trabalho. Uma das maneiras mais comuns de manifestar esses itens de trabalho é utilizar User
Stories (ou histórias do usuário).
User Story é uma técnica leve e ágil que organiza o planejamento do projeto. Kent Beck
cunhou este termo dentro da metodologia Extreme Programming. O princípio básico desta
técnica é favorecer a comunicação. A comunicação"face-a-face" é a melhor maneira de
especificar juntamente com os usuários o que o software deve fazer. Assim, a técnica fortalece o
envolvimento dos usuários ou da área de negócios da empresa no desenvolvimento do projeto.
Usar fichas pautadas não é um mito das metodologias ágeis! Eu uso e muitos projetos
que tenho contato também estão utilizando Stories em cartões. O motivo para fugir de planilhas
eletrônicas e ferramentas de gerenciamento de projeto é exatamente favorecer a comunicação
"face-a-face" com o usuário sobre algo palpável e visível fisicamente. Geralmente nós colocamos
os cartões fixados num espaço na parede da sala do projeto, onde todos podem ver. Visibilidade
é um ponto-chave! Em todo momento você e a sua equipe estarão com as Stories logo à frente.
Isso beneficia o foco nos objetivos da iteração e também facilita conversas com o cliente e entre
a própria equipe.
Dois conceitos importantes também são defendidos por Kent Beck: o usuário/cliente é o
responsável por escrever as histórias e elas devem ser estimadas rapidamente. O usuário se
responsabilizar por manter as Stories é uma prática importante: com isso, o usuário passa a
participar mais ativamente, controlando a equipe técnica (os desenvolvedores) dentro do
planejamento.
Sobre a estimativa, o peso funcional que você dá para uma Story é um importante
parâmetro para o usuário/cliente tomar decisões sobre o rumo do projeto. Essa decisão é
sempre baseada em retorno sobre investimento (ROI).
Imagine o cenário descrito nas Stories da figura 2. Como o usuário é o responsável pelas
Stories, ele geralmente sabe o valor de negócio de cada cartão. A base do planejamento ágil é
tomar decisões a respeito do que entra na próxima iteração levando-se em consideração a
capacidade de produção da equipe (conhecido como velocidade) e o valor de negócio agregado.
Nesse exercício é imprescindível saber o tamanho funcional da história associado ao seu valor
para os usuários.
Existem algumas características sobre as histórias que permitem que elas sejam
estimadas rapidamente. Urna User Story tem que ser funcionalmente pequena para que a equipe
tenha segurança na sua estimativa. Se a história é grande demais será difícil estimá-la, assim é
melhor quebrá-la em histórias menores. A equipe é responsável por estimar o esforço. Como
podemos ver, a técnica é completamente relacionada com planejamento do projeto, sem precisar
de métricas dispendiosas e nem das famosas "gordurinhas" ou "pulmões" irracionais nas
estimativas tradicionais.
Mike Cohn escreveu uma das literaturas mais importantes sobre User Stories (vide
referências). Na sua obra, ele também citou Bill Wake sobre as características de uma Story.
Basicamente Stories devem ser: independentes, negociáveis, ter valor para os usuários (value),
estimadas, pequenas (small) e testáveis (nos termos em inglês, chegamos ao acrônimo INVEST).
Apesar de ser difícil em alguns casos, busque ter histórias independentes uma das outras.
Se existe muita dependência entre histórias inevitavelmente você terá problemas para planejar e
estimar o projeto. Isso está retratado exatamente nas figuras 1 e 2, sobre a história "Consultar,
Escrever e Apagar Recados".
Outra dica é evitar histórias do tipo "Manter Recados". Vocês devem estar se
questionando porque na figura 3 coloquei "Consultar, Escrever e Apagar Recados". Para
histórias e casos de uso é indicado evitar usar "Manter", "Gerenciar" e outros afins. Prefira
escrever no cartão exatamente o que a história faz, sem dar margens para interpretações
ambíguas. Não tem problema algum o nome da história ou caso de uso ser grande!
Outra característica importante é que histórias são negociáveis. Vamos repetir mais uma
vez: histórias não são especificações formais. Uma história simplesmente é a descrição sucinta
de determinada funcionalidade. O cartão da história simplesmente é um lembrete dizendo que
você deve discutir esse assunto com o usuário em momento oportuno (quando a história for
implementada). Nós tomamos algumas decisões quando estimamos a história e discutimos mais
quando a história está para ser implementada. Nessas conversas podemos enriquecer a história
escrevendo no cartão algumas decisões tomadas, podemos criar novas histórias e até mudar
histórias existentes. Tudo é fruto de negociação e descobrir "onde está o ouro".
O cliente "querer tudo" sem dar margem para conversa não é saudável para nenhum
projeto. Ao invés disso, o cliente deveria participar ativamente do projeto para "querer o
melhor" e auxiliar a equipe de desenvolvimento a encontrar "onde está o ouro". Muitas
literaturas citam a regra de Pareto sobre um projeto de um software: 20% das funcionalidades
agregam 80% do valor do software, isto é, todo software possui um pequeno conjunto de
funcionalidades que resolverão praticamente todos os problemas dos usuários. Podemos
considerar que uma boa equipe de desenvolvimento de software é aquela que sabe descobrir
quais funcionalidades fazem parte desses 20% mais importantes! Para isso, nós utilizamos as
Stories com um sentimento de experimentação e fugimos de "especificações lavradas em
cartório" que temos que seguir. Stories devem ter um enfoque informal, devem ser discutidas,
devem ser fáceis de criar, priorizar, manusear e descartar (uma ficha pautada é perfeita para
isso!).
Acredito que muitas empresas ainda vão demorar bastante para mudar sua visão sobre
desenvolvimento de software. É impressionante a falta de sentido que existe na contratação de
grandes projetos de software com contratos de escopo fechado: o cliente acaba pagando ao
fornecedor por um software que não vai resolver de fato seus problemas de negócio e ainda por
cima arca com 50%, 100%, 150% de "gordura" embutida na proposta.
Muitas equipes com as quais tenho contato têm dificuldade em compreender a criação de
software dessa maneira orgânica e crescendo de dentro para fora. Elas têm dificuldade em
compreender um design emergente. Algumas equipes acostumadas com processo de
desenvolvimento cascata realmente acreditam em muitas fases dentro do desenvolvimento que
são dependentes uma das outras. Como exemplo, algumas equipes acham que o banco de dados
deve ser modelado antes de pensar nas funcionalidades e processos. Outras equipes acreditam
que todos os requisitos devem ser levantados antecipadamente, ou que TODA a arquitetura deve
estar no lugar antes de começar a desenvolver. Porém, com a tecnologia e com as ferramentas
que temos nas mãos atualmente, não é necessário ter fases dependentes para produzir o
software. Isso é a base para o tão falado desenvolvimento iterativo. Com uma simples história na
mão e um mínimo de decisões arquiteturais é possível entregar software funcionando para o
usuário, nem que seja uma única tela. A partir deste ponto, novas histórias são incorporadas,
evoluindo as decisões, o design e a arquitetura da aplicação.
Stories acompanham testes de aceitação
O simples nome de uma User Story na maioria das vezes é muito pouco para se
direcionar uma implementação. Quando um usuário escreve no cartão uma história "Criar o
Perfil na Rede Social" os objetivos desta "Solicitação" devem estar claros. O que o cartão
representa deve estar claro!
Uma das dúvidas mais freqüentes para quem tem o primeiro contato com User Stories é
“Onde está a especificação? Onde estão os requisitos?”. Se citamos aqui que uma Story nada mais
é que uma solicitação de construção ou alteração do sistema, que outros subsídios temos para
implementar essa solicitação?
Algumas dessas dúvidas são respondidas por meio dos critérios de aceitação da Story.
Para deixar claro para os usuários e definir para o desenvolvimento o que uma história
representa, critérios de aceitação são essenciais. Critérios de aceitação são os parâmetros
definidos pelo usuário que dizem quando aquela Story está PRONTA. Isso é importante para os
desenvolvedores, pois fornecem critérios objetivos para saber quando uma Story está finalizada,
sem margem para relativismos.
Geralmente os critérios de aceite são capturados e aprofundados quando a Story vai ser
desenvolvida, porém isso não é regra. Também capturamos critérios de aceite ao estimar a
história, ao planejar a iteração e até ao criar o cartão. A qualquer momento podemos colocar
critérios no verso dos cartões para se lembrar de características que vão se transformar em
testes de aceitação.
Veja a figura 6. Note que os critérios tornam claros os testes de aceitação que validam se
a Story está pronta. Ao mesmo tempo, os critérios declaram objetivamente o que "Criar o Perfil
na Rede Social" significa na "cabeça" dos usuários sem margens para dúvidas ou má
interpretação. Quando esta Story estiver pronta, a demonstração da funcionalidade para os
usuários sempre se baseará nos critérios de aceitação acordados. Mas e se os usuários ao verem
essa funcionalidade rodando nos questionarem sobre o"Álbum de Fotos"que deve existir no
perfil? Opa! Isso não está definido nos critérios de aceite e nem constou nas conversas sobre a
história. Seria uma nova história! Veja a figura 7.
Figura 7. Nova Story "Subir e Remover Fotos do Álbum" e seus critérios de aceite.
Na figura 7 criamos mais uma história evitando "manter/gerenciar...". Veja como fica
mais claro declarar que a história significa "Subir e Remover Fotos do Álbum". "Manter Álbum" é
um termo genérico demais que pode gerar muitas dúvidas com relação ao que o cartão significa.
Porém, nós precisamos ter a falada especificação para saber o que o sistema faz, certo?
Essa especificação formal auxiliará nas construções futuras, principalmente para correções e
evoluções. Sim! Nós precisamos ter um registro, uma especificação funcional, algo que valide se
o sistema está se comportando da maneira esperada.
De qualquer forma, também é possível aplicar a técnica de User Stories mesmo quando
não se utiliza TDD ou BDD para ter especificações executáveis. Você usa as histórias para os
usuários guiarem o desenvolvimento, dentro do planejamento iterativo do projeto, e ao
desenvolver a Story você cria e/ou atualiza os artefatos e especificações que estão fora do código
(casos de uso, diagramas, testes etc.). Não é em todo sistema que é possível aplicar
especificações executáveis sobre testes automatizados, porém, devemos nos esforçar ao máximo
para melhorar nossa cobertura de testes automatizados e vigiar para que não tenha muitas
especificações defasadas ou inúteis no nosso repositório de projeto.
Conclusão
User Stories são pilares importantes para a adoção de métodos ágeis, principalmente
porque auxiliam o cliente a participar ativamente do projeto com uma prática que fornece poder
e liberdade. As maiores causas de falha dos projetos são: a falta de participação dos usuários e a
adoção de processos de desenvolvimento que distanciam eles. Processos iterativos mostram seu
maior valor com participação ativa dos usuários.
Referências
COHN, MlKE (2004). Users Stories Applied for Agile Software Development.
BECK, KENT (2004). Extreme Programming Explained.
SCHWASER, KEN (2004). Agile Project Management with SCRUM.
CALÇADO, PHILLIP (2008). User Stories are Just Schedulable Change: http://fragmen-
tal.com.br/2008/10/01/user-stories-are-just-schedulabie-change/
IMPROVE IT. Sobre contrato de escopo negociável: http://www.improveit.com.br/xp/
praticas/contrato