quinta-feira, 18 de fevereiro de 2010

O que é Escopo e Requisito?

Boa tarde pessoal,

Eu vou fazer uma definição simples e não formal, da diferença entre escopo e requisitos.



No exemplo das figuras dos carros, o escopo determina todos os produtos, serviços ou resultados que estamos entregando no nosso carro. No caso dos carros alguns itens que fazem parte do escopo são: portas, motor, rodas, bancos, etc...

Os requisitos determinam como vai ser a nossa porta, o nosso motor, os nossos bancos, a nossa cor de veiculo, etc.

É muito comum falarmos que o escopo mudou no projeto, mas a mudança de escopo é de fácil identificação. Um exemplo: O carro deve ter três rodas e não mais quatro rodas. Neste caso o escopo está determinando as fronteiras do nosso carro, os entregáveis que ele possui.

O que nos temos constantemente é a mudança de requisitos, onde o nosso cliente passa a ter uma visão mais critica do que ele realmente deseja com a execução do projeto e o recebimentos de produtos/serviços/resultados com requisitos implementados.

Mas agora vai a minha pergunta, quem desejar mandas as respostas por e-mail fique a vontade e quem desejar pode chamar para bate papo para debater sobre o meu questionamento.

Para podermos gerenciar o nosso projeto, para saber o quanto foi executado e quanto ainda falta ser executado, como devemos gerenciar o nosso projeto, por Escopo, Requisito ou qual a sua sugestão?


Abraço a todos,

Abu

quarta-feira, 17 de fevereiro de 2010

FDD

Oi pessoal,

Segue uma imagem traduzida pelo Adail Muniz Retamal – www.heptagon.com.br



FDD: http://www.featuredrivendevelopment.com/

Fica a minha sugestão, não se prenda apenas a Scrum. Cada projeto tem as suas características e conhecer Open UP, XP, Lean, Kanban, Scrum, FDD, entre outros é muito importante, para que você encontre a melhor maneira de conduzir o desenvolvimento que o seu projeto exige.

[]s
Abu

sábado, 13 de fevereiro de 2010

Cartão de História – Invest

Oi pessoal, eu vou escrever sobre Cartões de História e a sua estruturação com conceito INVEST. Existe na web vários post sobre este assunto, também temos este assunto muito bem tratado no livro de Cartão de História de Mike Cohn (Eu recomendo a leitura deste livro).



INVEST é igual a:
Independent | Independente
Negotiable | Negociável
Valuable | Avaliável
Estimatable | Estimável
Sized Appropriately | Dimensionada apropriadamente
Testable | Testável


No processo de analise de sistemas, quando estamos levantando as informações referentes “ao que tem que ser feito” no sistema, estamos identificando os requisitos necessários para a completude do nosso projeto.

Estes requisitos identificados podem ter dentro de si, uma quantidade de outros requisitos implícitos. Também podemos ter requisitos pequenos, que já permite um entendimento e estimativa do mesmo.

Estas discrepâncias entre os requisitos podem ser normalizadas com a técnica de INVEST. Mas normalizar não é a única responsabilidade do INVEST, ele nos ajudar a entender melhor os requisitos, a realizar estimativas mais assertivas, definir critérios de aceite, definir o valor agregado do requisito ao negócio e priorizar o que realmente deve ser entregue ao nosso cliente.

Vamos agora utilizar o termo História. História é como vamos organizar o nosso requisito, onde ela permite identificar quem está realizando a ação, a funcionalidade desejada e o valor de negocio que se espera com a execução desta funcionalidade. O termo História vêm do convite que esta estrutura nos leva ao dialogo, o que permite o nosso trabalho de analise de sistemas.

Como um [usuário], gostaria de [funcionalidade] para [valor do negócio].

Quem? O que? Por que?


Independente

Devemos buscar a independência entre as Histórias, isto é, não termos correlação direta entre eles. Fica mais fácil realizar a estimativa focada a uma História do que realizar uma estimativa em um conjunto de Histórias. O nosso erro vai ser maior quando temos que estimar um grupo de Histórias correlacionadas.

Também fica difícil priorizarmos Histórias correlacionadas, um dos itens que fazem parte deste grupo de História necessariamente não tem que ser entregue junto com a História mais importante para o nosso cliente, mas como existe um acoplamento forte entre as Histórias, não temos (ou fica muito difícil) entregar apenas uma parte do que deve ser feito.

Um exemplo é forma de pagamento de uma compra. Podemos pagar com cartão de credito, boleto bancário, dinheiro, cheque, com uma composição de meios de pagamento (dinheiro + cheque) e assim por diante.

Está História esta muito grande e possui dentro dela varias outras Histórias. Podemos refinar colocando as Histórias assim:
Pagamento com Cartão de Credito
Pagamento com Dinheiro
Pagamento com Cheque
Pagamento em Boleto Bancário

Mas ainda temos uma quantidade grande de tipos de Cartão de Credito, vamos melhorar mais um pouco...
Pagamento com Cartão de Credito Visa
Pagamento com Cartão de Credito Master

Agora a História de pagamento de uma compra chegou no nível de independência. Eu posso priorizar qual a forma de pagamento mais importante para o meu cliente na minha próxima entrega de produto. Devemos repetir este processo de refinamento para as demais formas de pagamento que o nosso cliente deseja.

Negociável

Uma Historia no seu processo de entendimento (analise de sistemas) gera um conjunto de conversas, conversas são anotações que realizamos na História para saber “o que temos que fazer” para deixar a História aderente as necessidades do cliente.

Estás conversas anotadas geram software, isto é, funcionalidades necessárias a serem implementadas no nosso sistema. Mas nem todas as necessidades (funcionalidades) tem que ser realizadas ao mesmo tempo, permitindo uma negociação com o cliente, onde esta negociação determina o que vai ser entregue e o que pode ser realizado em outro momento do projeto.

Um exemplo é a nossa tela de login. A nossa tela tem que ter o campo para a entrada do username e a entrada da senha. Mas no processo de entendimento da História passamos a buscar a completude da História, com informações de quantas vezes o usuário pode tentar se logar no sistema, se existe uma funcionalidade de recuperar a senha, algum tipo de notificação por e-mail, mensagens de erro, dispositivos de ações, como um botão para confirmar o usuário e senha, e assim por diante.

Passamos a realizar o entendimento da História junto ao nosso cliente, anotamos todas as suas necessidades e expectativas, estas anotações vão ser transformadas em funcionalidades implementadas e passamos a negociar quais destas funcionalidades devem ser implementadas.

Valiosa

Histórias devem gerar valor ao cliente, uma boa técnica de buscarmos este valor é o próprio cliente escrevendo as suas Histórias. Nem sempre é possível o cliente escrever as suas próprias Histórias, não importando no momento o que leva a está impossibilidade.
Mas valor é visto nos olhos de quem paga para usar e devemos se necessário colocar óculos no cliente, para que ele possa enxergar o valor de retorno das Histórias que ele está solicitando.

É um processo demorado, mas o retorno vale a pena, ensinarmos nossos clientes a escrevem suas Histórias. Lembrando sempre que podemos ajudá-lo a escrever.

Estimável

Quando chegamos no ponto de realizar uma estimativa é importante que as nossas Histórias já estejam independentes e negociadas. Se eu não tenho mais dependência entre Histórias minha estimativa vai ser mais assertiva e sem as funcionalidades desnecessárias para a entrega facilita e melhora cada vez mais a estimativa.

Estamos estimando Histórias com suas funcionalidades que realmente agregam valor aos “Olhos” do nosso cliente.

Pequena

Não existe uma formula mágica para determinar o tamanho que as nossas Histórias devem ter, mas este tamanho se normaliza com o processo de levantamento de Historias e analise das mesmas.

Um tamanho determinado em um projeto, necessariamente não vai ser o mesmo em outro projeto.
Devemos tomar cuidado em não confundir Histórias com uma funcionalidade a ser implementada, um exemplo é uma mensagem de erro do sistema, que faz parte de uma História.

Testável

Uma boa técnica de descobrir como a nossa História deve se comportar é realizar testes de validação da História.

Conversas mais Testes de Aceitação fecham um ciclo de entendimento da História. Qualquer implementação a mais nesta História, que não foi identificada nas conversas ou testes não deveria ser realizada.

Exemplo:
[Cartão de História]
Como um cliente, quero que o sistema mostre o valor da postagem, para que eu possa saber quanto vai ser a taxa de entrega.

[Testes] - Template: [ação] [resultado] [objeto]
Mostrar valor da postagem de correio para vendas realizadas na mesma cidade
Mostrar valor da postagem de correio para vendas realizadas no mesmo estado
Mostrar valor da postagem de correio para vendas realizadas em estados diferentes
Mostrar valor da postagem de correio para vendas internacionais
Mostrar valor da postagem de correio para vendas isentas de taxa de entrega
Calcular valor da postagem de correio para cada produto existente no carrinho de compras
Mostrar mensagem de erro para cep´s inválidos
Mostrar mensagem de erro para cep´s vazio



Abraço a todos,

Abu

sexta-feira, 12 de fevereiro de 2010

Cartão de História

Cartões de história é uma técnica de captura de requisitos de sistemas, esta técnica surgiu com a metodologia de desenvolvimento chamada de XP (extreme programming), porém podemos utilizar esta técnica com qualquer metodologia de desenvolvimento de sistemas ágeis.

Como “Cartões” têm o objetivo de capturar os requisitos, eles se concentram em “quem, o quê e porquê de um recurso, e não como”. Neste ponto ele é igual a varias técnicas de levantamento de requisitos, onde tentamos identificar o que tem que ser feito e não como será feito.

O cartão de história tem que ser escrito a partir de uma perspectiva do usuário. Desta maneira o cartão não deve possuir jargões técnicos ou informações de design, ou qualquer outra coisa que não seja informações de negócio. Um cartão deve ser escrito com a linguagem no negócio, para que seja compreendido por todos.

Exemplo de Cartão de Historia
Como um professor, eu gostaria de lançar as notas de meus alunos, para que os alunos possam saber como estão indo na minha matéria.

Como um aluno, eu gostaria de visualizar as minhas notas de modo que eu possa saber o meu desempenho nas disciplinas.

Observe que em ambos os casos estamos buscando um linguajar de negócio e buscando as necessidades do sistema (em nível de negócio – o que tem que ser feito), mas em nenhum dos exemplos entramos em uma linguagem técnica e nem falamos “como vamos fazer”.

Template de Cartão de Historia
Como um [usuário papel], quero [meta], para que eu possa [motivo].

A primeira vista podemos achar que a parte do [motivo] não é necessária, mas a utilização do [motivo] nos leva a um entendimento melhor do objetivo pelo qual o cartão é útil. Ele nos ajuda a entender melhor como o requisito funciona e nos da uma idéia melhor para outras características do sistema.

Em Scrum nós buscamos identificar os cartões no início do projeto, para que ele de origem ao “Procuct Backlog”. Com os cartões identificados podemos dar origem a priorização e a estimativa dos mesmos.

Uma vez os cartões priorizados para execução em uma Sprint eles devem ter os seus detalhes (tarefas) identificados. Não devemos identificar os detalhes de cartões que não fazem parte da Sprint, desta maneira evitamos o gasto de energia na Sprint corrente em trabalhos que fazem parte de outro momento temporal.

Organizando Cartões de Historia
Um cartão de história deveria ter pelo menos três itens: Informações do cartão, dados de conversa com o usuário e testes de validação do cartão.

Informações do cartão são: nome, descrição da história, um número de referencia, estimativa, etc.

Conversas são anotações (lembretes) da história e não uma especificação completa. Estas anotações servem de apoio para a obtenção de mais detalhes no momento de desenvolvimento, identificando como o software deve funcionar. Tudo que ajude a explicar a funcionalidade deve ser colocado como um item de conversa. É como um conjunto de palavras chaves, mas não tem a necessidade de ficar restrito a uma palavra, pode ser colocada (escrito) como uma frase.

Confirmação (Testes) são os casos de testes no verso do cartão. Os testes possibilitam o entendimento melhor do cartão, ajuda na busca de cenários que os usuários, desenvolvedores / analistas podem não ter pensado. Um cartão (requisito) tem que ser possível de ser testado.

Um cartão de história tem que possuir uma única responsabilidade, ter cartões de história com mais de uma responsabilidade dificulta o entendimento, a estimativa e a priorização. Cartões pequenos nos ajudam a realizar uma administração (gestão) do projeto.


Observe que o desenho que representa a frente do cartão tem os dados de identificação do cartão de história. Estes dados são: o numero (0001), o titulo (User Login), a história do cartão (As a [register user]...) e ainda dados das conversas com o usuário, onde temos um esboço de como deve funcionar a tela e anotações do comportamento esperado.

Na segunda imagem nós temos as informações dos testes (confirmação), mostrando os cenários possíveis e esperados pelo usuário.



Link de Referencia:
http://kw-agiledevelopment.blogspot.com/2008/01/user-stories-answers-on-postcard-please.html
http://kw-agiledevelopment.blogspot.com/2008/01/user-stories.html
http://kw-agiledevelopment.blogspot.com/2008/01/example-of-user-story.html



Abraço a todos,

Abu

domingo, 7 de fevereiro de 2010

GTT - Criando e Gerenciando Backlog + Kanban

Oi pessoal,

Foi realizado no sábado do dia 06 de fevereiro de 2010 na empresa GTT (http://www.gtt.com.br) o treinamento de Criação e Gerenciamento de Backlog e controle de execução do projeto utilizando Kanban.

O treinamento teve o foco de realizar um alinhamento dos conceitos com a pratica já utilizada na empresa. Parabéns a todos os participantes. O treinamento teve a participação dos profissionais da empresa nas mais diversas áreas, produção, engenharia, TI, vendas, etc. Foi muito proveitoso e a união das mais diversas áreas da empresa no treinamento permitiu uma troca muito rica de conhecimentos entre o instrutor e os participantes.

Fotos do Treinamento







Link's de post já realizados no Blog do Abu da empresa GTT

Combinando Técnicas de Ágil e PMBOK
Reunião de Definição de Produto na GTT
RFID x Cerveja x Geladeira x Empresa GTT
Fotos da Empresa Gtt
Abu e Empresa Gtt
Projeto GTT, em execução...
Cartão de Historia Quebrados em Tarefas

Abraços a todos,

Abu