Overview TDD by example

olá Pessoal,

O objetivo deste post é dar um overview do livro TDD By Example, eu li o livro no inicio do ano, mas só agora conseguir liberar o post.Certamente se você quer entender algo de TDD já deve ter colocado o mesmo na sua lista. Nesse post vou dá um overview com meu ponto de visto  sobre o livro. Se houver alguma critica com certeza ela será construtiva. 🙂

Lets go…

Overview

O livro na parte I atende o que esperamos sobre TDD e o que já vimos na internet, porém o Kent Beck aborda de uma forma bem longe de qualquer linguagem de programação é abstração mesmo(e isso é bom), se você está iniciando com TDD, e se sente muito inseguro em saber qual o próximo unit tests criar, então terá dificuldades em seguir adiante em muita parte do livro, porque há questões entre linhas que só com uma boa dose de pratica que conseguimos identificar porque já fizemos. E a todo momento o Kent Beck tenta provar que TDD não é apenas escrever unit tests primeiro e sim uma forma de ti guiar para saber que está desenvolvendo algo correto conforme esperado, quando surgir um defeito, saberá fix, no menor tempo e maneira rápida e que ter tests é uma consequência. É como funciona um alarme. Se você põe um alarme na sua casa, ele não vai disparar do nada. Um alarme devidamente configurado, foi programado para disparar quando alguma regra de segurança fosse quebrada (uma porta que abriu que não deveria). E o alarme ti dar um feedback no menor tempo possível, o mesmo com os units tests, se eles quebraram é porque algo mudou em algum lugar que fez um de seus tests não ter o resultado esperado. Tirei essa conclusão durante abordagem do Beck.

E a pratica?

Não tem nada de pratico não, esqueça algo que possa fazer passo-passo, é abstração mesmo, ele põe os códigos lá e vai mostrando o que fazer. Bem, este também é o proposito do livro de mostrar o uso de TDD e não ser uma receita de bolo, porque não há receita de bolo, mas sentir que se o leitor é bem iniciante com TDD, pode vai ficar frustado. Eu diria que o publico alvo, seria um leitor que já fez alguns TDDs com aqueles software house que fazemos nas madrugadas de isonia, ou quem já usa na empresa e quer aprimorar.

As demais parte do livro é bem teoria, é abordado padrões de projeto (um breve overview), depois vai para refactoring, fala do uso de TDD, mas achei a leitura dele cansativa, o Kent Beck precisa escrever melhor na minha opnião, falo em termo de didático, sinto que na leitura fica algo “meio explicado” e que precisamos fazer associações para entender o que ele quis dizer. E não adianta dizer que bons programadores não escreve bem, a Kathy Sierra e seu time da serie “use à cabeça” provam isso para o mundo. E há outros autores por ai que sabe escrever bem, a questão é pensar mais como leitor do que autor/desenvolvedor. E isso não é uma tarefa fácil. Já consigo imaginar o sofrimento do Kent.

Custo x beneficios

O livro não é tão caro, com o dolar mais barato agora deve custar menos de 70,00 reais. Eu acho um livro válido se você já tem uma pratica de TDD e que ver alguma coisa, mas acho que há livros melhores e esperava mais do livro do Kent.

Os capitulos

Esses aqui são bem curtos, somente na parte bem teorica no final do livro que é tem caps longos, mas na de TDD na parte I, são bem pequenos mesmo de ter 3-4 páginas e achei isso legal, porque ele vai na ideia de baby-steps, explica só um trecho e explica de forma especifica.

O aprendizado

Bem, após a leitura conseguir consolidar mais um pouco de teoria de TDD, abrir mais minha mente de forma pratica que TDD guia você mais para o design e os units tests são consequência, a cobertura de code também. Fora, a organização e policiamento quando estiver no campo de batalha de TDD, não dar passos longos, saber quando preciso dar um passo atras e recomeçar, confiança no que entrego, garantir que atende aos requisitos e com alguma coisa próximo a zero de defects caso aconteça. TDD e refactoring estão mais próximos que qualquer coisa no mundo, querer usar TDD sem técnicas de refactoring é quase impossível, pois o próprio processo começa a gritar no menor tempo possível dizendo : “aqui precisa de refactoring”. Enfim, achei que foi um bom conhecimento adquirido.

Concluindo

O sentimento após a leitura é que “valeu” ter lido deu pra pegar detalhes, mas isso porque já tinha praticado e lido outros materiais antes, se tivesse lido como meu primeiro material, a frutação seria grande e teria jogado o livro de lado.

Bom fica aqui meu overview, e você o que achou do livro? Comente, please!!

Abracos, vou ficando por aqui.. see ya!! guys!

Scrum:Definindo as estórias para o Sprint Backlog


olá Pessoal,

Demorei um pouco, pois os ultimos dias tem sido corrido, mas está aqui mais um post da série Scrum, hoje vou apresentar como é que a equipe define quais estórias estarão no Sprint Backlog do Sprint que inicia amanhã. Vimos em um dos post anteriores que o PO é um cara importante no planejamento do Sprint. Então chegou a hora de discutir de como tirar as coisas que estão no Product Backlog e trazer para nossa “mesa”. Antes de começar o post queria compartilhar com vocês um vídeo muito interessante desenvolvido pela FIAP. Não é fazer propaganda da instituição, pelo contrário o vídeo foi feito com objetivo informativo sobre o mercado de TI. Vejam:


Lets go

Como a equipe define as estórias que vão para um Sprint?

Essa é uma pergunta clássica. Eu já ouvir alguns comentários que talvez o PO ou SM deveria fazer isso. Eu acho que se Scrum fosse um framework que funcionasse com base em quem tem o nível mais alto(para não dizer função) é quem define as coisas, talvez faria sentido. Mas, como não é assim, o conceito de time, equipe, pessoas etc, é de fato mais importante que os papeis apenas. Enfim, apesar do PO ter escrito toda história e em alguns casos ser o responsável pelo investimento no projeto, com Scrum isso não dar o direito de dizer: “a estória já está escrita, priorizada e o escopo é aquele. Se não entendeu algum ponto, por favor, deixe me saber, mas não vou mudar o escopo, porque eu quero assim”. Não é bem por ai. A questão é quem tem a bola da vez aqui é o time, ou seja, todos estão envolvidos e não apenas o PO. Não é porque ele é dono do produto que tudo vai acontecer como ele deseja sem questionamentos. Se temos um problema como esse é sinal que seu cliente não entendeu como Scrum funciona e ai é um outro problema que precisa ser tratado antes de pensar quando vai acontecer a reunião de planejamento.Eu diria que até antes do cliente apresentar o produto, ele já deveria saber o porque vai rodar Scrum e saber que as coisas funciona em um trabalho de equipe e cada um tem suas responsabilidade e limitações. Se isso não está claro para o seu cliente, não inicie nada, do contrário terá problemas e discussões que talvez não compense. Agora vamos ignorar o cenário anterior, trouxe apenas fazer uma citação do mundo real :). Então, Camilo como escolher a estória que vai para o Sprint Backlog?

Por sentimento ou instinto. É isso mesmo não há mágica nem ferramenta que vai ti dizer: “pega a história X, e sim a equipe que vai contribuir para isso”. Normalmente o ScrumMaster pergunta para equipe se a estória que está no top da lista(aquela que tem mais importância para o PO) dar para entregar naquela Sprint. Aquelas que ficarem com dúvidas e incertezas da entrega fica de fora (com o aval e negociação com PO) do Sprint.

A seguir temos um exemplo, pratico de um Product Backlog:

Imagem do livro Scrum and XP from the Trenches

Note: Claro, que vamos seguir sempre a ordem de importância definidas pelo PO e não pegar as estórias aleatórias.

Vamos supor que o PO não gostou porque a história D está fora, já que a velocidade da equipe só permite entregar até a C. O que fazer?

Primeiro: O PO não pode obrigar à equipe pegar(de novo, para você não esquecer). Então ele tem duas opções:

  1. é alterar o escopo, possivelmente quebrando e o time re-estimar e ver se é possível.

  2. ele mudaria a ordem de prioridade levando a estória para acima do C, daí o team é obrigado a pegar. Porém, a estória C ficaria de fora. Mas, o framework Scrum não diz que temos que pegar a estória com maior prioridade?

Sim. Pegamos a estória que está no topo da pilha do product backlog, mas ao olhar ela identificamos que é grande demais e não cabe dentro do Sprint de duas semanas, ou seja, é pouco tempo para muita coisa(escopo grande) em uma única estória. Lembre-se, as estórias deve ser do tipo INVEST.

  • Independente: a estória não pode ficar bloqueada durante a implementação, ela precisa ter vida por si só;
  • Negociável:uma estória precisa ter um escopo que pode ser alterado sem perder toda a essência do que se pretende e algumas coisas podem ser postergadas para um dos próximos Sprint tranquilamente.
  • Valioso: deve agregar valor ao produto, ter um valor de importância dentro do produto
  • Estimável: se não conseguimos estimar com base no que está escrito para estória, é porque temos alguma problema no que ela se propõe atingir. Então precisamos ver com o PO o que ele está querendo dizer;
  • Small: não precisa ter todas as funcionalidade em única estória, sendo assim pode ser pequena para que fique dentro do Sprint.
  • Testável: toda estória precisa ter uma forma de validar se ela foi implementada corretamente. Então os critérios de aceitação devem existir, para que podemos nos certificar que fizemos algo de acordo com o esperado.

Então era isso pessoal que eu tinha para apresentar para vocês quando estiverem pegando as estórias do Product Backlog e trazendo para o Sprint Backlog. Não se esqueçam que a responsabilidade de analisar e estimar uma estória é da equipe.
O que foi escrito pelo PO para estória é o que ele desejaria(nem sempre querer é poder) de ver pronto, mas nem sempre é possível, pois há vários fatores que contribuem para isso tais como: velocidade da equipe, nível técnico, interrupções etc. Não é uma tarefa fácil, mas com uma boa comunicação entre a equipe e o PO, sempre terminamos no contexto ideal.

Vou ficando por aqui espero que tenham gostado.

Abraços, see ya!!

Scrum: Lidando com estimativa e escopo com o cliente


Olá Pessoal,

Firme e forte na série Scrum. Hoje vamos ver como lidar com estimativa e escopo com o cliente, quem aqui não teve aquela solicitação do cliente: “será que não dar para diminuir um pouco a estimativa?”. Mas, nem sempre dá, porém o cliente sempre insiste. Então como resolver esse problema e ao mesmo tempo deixar o cliente satisfeito? Veremos a seguir.

Lets GO…

 Lidando com estimativa e escopo com o cliente situação comum e esperada

 Quem nunca passou pela situação a seguir? Não necessariamente com cliente apenas, mas com gerente de projetos, arquitetos etc. Se tua estimativa está alta na visão deles, é capaz, de presenciar um infarto rs ;).

Note: Estimar não é uma tarefa fácil, envolve vários fatores o quanto o time conhece as tecnologias, o produto, a experiência profissional, e os mais recentes chegados na equipe terão dificuldade em estimar inicialmente, pelos fatores citados anteriormente sendo assim o ScrumMaster deve auxiliar os novatos dando um coach na estimativa.

“O cliente diz, eu sei que você tem uma equipe técnica qualificada, com os melhores profissionais, será que não dá para diminuir um pouco a estimativa?”

Nesse caso o cliente está usando a qualidade interna, (aquilo que ele não ver) como fator para reduzirmos à estimativa, mas ele não quer diminuir o escopo. Claro que não permitiremos isso, sacrificar à qualidade interna na maioria das vezes (para não dizer sempre) é péssima idéia, lembre-se disso: “uma vez que se permita que uma base de código se deteriore, é muito difícil recuperar a qualidade mais tarde”. Não conte com refactoring, pois fazê-lo depois de tudo há um custo e nem sempre o cliente vai querer pagar por isso. Mas, como responder ao cliente a pergunta acima?

Uma das formas de responder é tentar convencê-lo de reduzir o escopo para algo mais especifico e remover aquela parte avançada, que normalmente vai virar uma nova estória que pode entrar no próximo Sprint. Um exemplo:

Se o cliente quer que todas as mensagens iterativas com o usuário sejam exibidas, por que não implementar as mais importantes e aquelas com menos importância deixar para um futuro, ou seja, aquelas que não causam impacto no entendimento ou funcionalidade da aplicação, podem ficar para os próximos Sprints. Outra situação é que ele quer um WebService para aplicação, mas o ScrumMaster viu junto com a equipe que não dá para entregar dentro do tempo e com base no escopo atual do WebService. A missão agora é convencer o cliente diminuir o escopo caso ele queira ver algo de WebService pelo menos iniciado no Sprint corrente.

Sei que não é uma tarefa fácil convencer o cliente disso, mas se ele está envolvido com o time e Scrum, ele sabe dos problemas que pode ter se tentar ir além da capacidade de entrega da equipe, é por isso que o PO não dita o que deve entrar no Sprint. É a equipe que vai pegando os itens até chegar no limite. Então qual a solução? Negociação e validar o escopo com o PO, essa é a forma mais adequada para não afetar a qualidade interna do produto, alguém uma vez disse em algum lugar que a qualidade não é negociável.

Vou ficando por aqui e espero que tenham gostado do post.

Abraços, see ya!!

Scrum: A importância do Product Owner no planejamento do Sprint

Olá Pessoal,

Mais um post da semana seguindo o ritual da serie Agile/Scrum ;). Hoje vamos ver a importância do Product Owner no planejamento do Sprint. A pergunta é: O quanto é importante a presença desse camarada? Vamos descobrir.

Lets GO…

Product Owner no planejamento do Sprint

Sem o product owner na reunião de planejamento não há Sprint. O PO é a chave para o inicio de qualquer Sprint, Há três pilares importantes: escopo, estimativa e importância. O escopo e importância são do PO, mas a estimativa fica com a equipe. Como a reunião começa com os itens mais importantes, se a estimativa for diferente do que o PO pensou isso pode fazer ele re-pensar no nível de importância, o mesmo pode acontecer com a equipe, se o escopo mudou a  equipe deve re-pensar nas estimativas novamente. E assim cada parte envolvida responde as mudanças e se adapta a elas.

Se o PO não puder aparecer este pode nomear um intermediário, com os poderes de exercer o papel de PO, mas se não houver o PO o lançamento do Sprint é adiado até a disponibilidade dele. Quando falei, de uma pessoa representar e ter poderes de PO como intermediário, isso não é só ter a pessoa como alguém presente na reunião de planejamento e sim com permissões de mudar níveis de importância das estórias, escopo etc. E uma vez definido o intermediário, o Product Owner oficial não poderá alterar tudo que foi feito pelo seu intermediário após já ter dado inicio ao Sprint (claro que há exceções se as mudanças forem com base nas regras de negócio, mas o fato da mudança não pode ser com base porque o Product owner enviou um intermediário). Mas, se o PO Oficial resolve mudar tudo, então voltarmos à ter um novo planejamento do zero e jogamos fora tudo que foi feito e acabamos desperdiçando tempo, porém de quem foi a responsabilidade?!. Atenção deve ser tomada aqui, pois há product owner que pode enviar um intermediário somente para iniciar de imediato o Sprint, pois ele já sabe que sem um representante nada inicia, mas depois vai querer mudar tudo e como sabemos isso vai ferrar o Sprint e ninguém quer isso. Deixe transparente, que se mudar tudo, haverá um re-planejamento.

Há dois tipos de qualidade em projeto Agile que são extremamente importantes:

  1. Qualidade externa: aquela que o usuário tem acesso, como a interface, o design.
  2. Qualidade interna: aquela que é da equipe, ou seja, como a equipe faz aquilo. Algo que tem um profundo efeito de manutenabilidade do sistema, como refactoring, cobertura de testes etc.

Claro que um sistema com alta qualidade interna pode ainda ter baixa qualidade externa, mas um com baixa qualidade interna raramente terá uma qualidade externa alta, não dá para construir algo bom, se a base está podre. Então à qualidade interna, simplesmente não é negociável.

E assim finalizo mais um post da série Agile/Scrum, no próximo veremos como lidar com estimativa e escopo com o cliente, esse aqui sempre gera discussões nas reuniões.

Abraços, see ya!!

Scrum: Fim do planejamento do Sprint


Olá Pessoal,

Hoje vamos lidar com o fim do planejamento do Sprint(Sprint Planning), estamos chegando ao final da reunião e ainda não definimos muita coisa, talvez a equipe perdeu o foco por algum momento e o ScrumMaster não trouxe a equipe para o objetivo principal o quanto antes  e agora temos um problema, como resolver? Aposto que alguns não podem gostar da resolução, mas eu tomei já esse remédio amargo quando alguém tomou a decisão que veremos a seguir.

Let GO…

Fim do planejamento do Sprint

Se chegar ao final do planejamento do Sprint e está faltando muita coisa a ser definido o que fazer?

Opções:

  1. Remarcar para o dia seguinte por algumas horas
  2. Esticar mais um pouco o planejamento do dia atual?

A opção 1 poderia ser boa e a primeira a ser pensada. Porém, um dia a mais de reunião pode ser ruim, pois a equipe já está ansiosa para começar e não agüenta mais horas de reuniões. Então uma esticadinha? Você acha que resolveria todos os problemas com algumas horinhas a mais e todos já querendo ir embora? A melhor escolha e pode ser radical é começar o Sprint do jeito que está, é isso mesmo vai começar do jeito que conseguimos chegar até o final da reunião, pois a equipe precisa aprender com uma lição que todos vão receber ao término do Sprint.

Será um Sprint sofrido, mas na próxima todos saberão da importância do planejamento do Sprint. Acredite isso funciona!

Ter um objetivo para o Sprint é requerido, melhor ter um do que não ter, pois todos vão saber o porquê estão ali, e este objetivo deve ser em termos de negócio e não técnico (tome cuidado com isso), assim qualquer um de fora da equipe, possa entender. Caso tenha dificuldades em escrever o objetivo do Sprint, basta responder a pergunta:

  • “Por que não saímos de férias ao invés de fazer esse Sprint?”
  • “Quem se importa com esse Sprint?”
  • “por que estou aqui?’

São perguntas que devem ter sido respondida até o final do Planejamento do Sprint. Enfim,  final de planejamento de Sprint é final, busque maximizar o uso bem do tempo que tem e evite que a equipe venha perder o foco do que precisa ser feito. Mas, sabemos que isso é o que queríamos no mundo ideal, e nem sempre vivemos no mundo ideal. De qualquer forma teremos que lidar com situações desejáveis e as indesejáveis no dia-dia.

Vou ficando por aqui, até o próximo post da série. Espero que estejam aprendendo um pouco de Scrum.:)

Abraços, guys!