Páginas

Mostrando postagens com marcador AgileJournal. Mostrar todas as postagens
Mostrando postagens com marcador AgileJournal. Mostrar todas as postagens

14 março 2008

OpenSource para Desenvolvimento Ágil

Saudações!

Kirk Knoerchild descreve todas as ferramentas necessárias para você, desenvolvedor Ágil, trabalhar mantendo a paz de espírito e o conforto.

Confira o Artigo Completo: OpenSource Tools for an Agile Developer


A defining characteristic of agile development is to keep moving forward, recognizing working code as the primary measure of valued software. Undoubtedly, there is no way to judge a software system until you have a system to judge. Yet, experienced developers recognize that requirements frequently change and traditional methods have achieved very little success in stabilizing requirements early in the lifecycle. Instinctively, we may feel change impedes progress, but agile developers embrace an attitude where change is viewed as an opportunity to improve the system. A variety of open source software tools can enable important agile practices, allowing you to keep moving forward so long as you are willing to embrace change.



Muitas destas ferramentas serão tratadas no meu próximo artigo, na próxima edição da revista Visão Ágil

Até lá!
[]s

29 janeiro 2008

Mitos Ágeis





Certa vez ouvi um palestrante dizer a seguinte frase: "Para os desenvolvedores, XP é uma opção extremamente sexy". E engraçado como tal afirmação é verdadeira. Explicar para alguém que trabalha em um projeto de software é visivelmente mais fácil do que um patrocinador, ou diretor de empresa.

Como uma forma de dar início a um projeto Ágil, tenta-se adaptar as práticas mais apelativas: Testes automatizados, desenvolvimento interativo e pair programming. Mesmo que os benefícios de tais práticas sejam evidentes, é comum que elas sejam mal interpretadas. Isto porque a aparente facilidade que "automatização de testes" ou "programação em dupla" transmite, é completamente diferente da realidade.

Aplicar testes em projetos de software pode ser um processo muito doloroso, por desafiar os principais hábitos dos programadores e trazer uma aparente queda na produtividade. Principalmente por isso, no momento em que você optar em seguir para o "Mundo Ágil", é muito importante utilizar as práticas em sua essência, ganhando a experiência necessária para seguir na criação de um modelo sustentável de desenvolvimento de sofware. É preciso experimentar os reais benefícios das práticas, ganhando confiança para mudanças mais críticas em sua empresa.

Mais uma vez, Ross Pettit apresenta sua visão no site Agile Journal de como a interpretação errada de práticas pode levar a sérios problemas no desenvolvimento, ou ainda causar a impressão errada à equipe e diretoria.

Mito #1: Nós escrevemos testes unitários, mas não importa se eles passam ou não...
Não existe prática com os benefícios mais evidentes que automatizar os testes de software e integrá-los num ambiente de build automático. Entretanto, poucas pessoas se lembram de que é necessário manter os testes criados. Isto é, os desenvolvedores escrevem inúmeros testes automatizados mas não existe a preocupação em manter todos os testes funcionando no momento do build. Assim, a falha de um teste não se torna um "chamado para os desenvolvedores". Esta característica pode ser reflexo de:

  • Pressão para que os desenvolvedores mostrem "código finalizado"

  • Desenvolvedores não sentem responsabilidade pelos testes que eles não escreveram

  • Testes unitário não são desenvolvidos como uma especificação executável, apenas como informação (talvez cumprindo a requisição por documentação)



Desenvolvimento Ágil não é sobre aparências, mas sobre fatos. Esta falsa impressão de qualidade, com a existência de inúmeros testes unitários que não fucionam, deve ser combatida. Sem o comprometimento em manter o conjunto de testes sempre funcionando, todo este código gerado não passará de lixo. Isto mesmo: lixo

Todo o controle de riscos existente em uma equipe Ágil estará perdido. Uma vez que os testes não garantem que o código está funcionando, qualquer problema/bug/nova funcionalidade adicionada não poderá ser analisada com confiança.

(...)
Leia o documento completo

[]s

22 janeiro 2008

Transitioning To Agile Process



Yeah! Eles atacam novamente... a edição deste mês do Agile Journal está excepcional! Com o título de Transitioning To Agile Process, a revista traz uma compilação de artigos do tema... tornando-se mais um referência nas leituras obrigatórias...

Um resumo:

Patterns of agile adoption

Mike Cohn descreve dúvidas comuns sobre como prosseguir na adoção do desenvolvimento Ágil: "Começar pequeno" ou seguir o famoso "Arrastão" na empresa? Seguir para práticas técnicas ou conseguir transformar o desenvolvimento em um modelo iterativo?

Entre as vantagens e desvantagens podemos citar:

- O custo de utilizar projetos piloto para testar o movimento Ágil pode ser ótimo para minimizar custos, mas pode não trazer a real visão da aplicabilidade do modelo em um nível macro.
- Um projeto bem sucedido e um equipe satisfeita por ser o empurrão necessário para que novas e vitoriosas iniciativas iniciativas

- Introduzir algumas práticas pode não trazer os resultados esperados, já que todas as práticas são complementares. (nota pessoal: não iniciar refactoring sem testes automatizados)
- É muito mais fácil iniciar no projeto um modelo iterativo de desenvolvimento. Faça o teste: diga para sua equipe: daqui a 4 semanas eu quero uma versão instalável do software...

Mais informações: leia artigo completo

Ainda sobre Patterns in agile, recomendo a leitura do livro: Agile Patterns: A techinal Cluster (leitura obrigatório número 3323)


The Dichotomy of Change

Para mim já é um dos melhores textos do tema... indubitavelmente. Ross Pettit descreve a evolução das fases na adoção Ágil, e resume um processo Ágil para a sua empresa como sendo:

The path of Agile adoption is well trod, but poorly lit. Each organization, each project, presents unique challenges and obstacles. Agile work processes must be specific enough to be understandable, defined enough to be repeatable, malleable enough to change with experience, and flexible enough to accommodate a wide range of operating realities. A sufficient breadth of Agile practices must be brought to bear on a situation or the practices will yield few benefits. The people performing them must master these new practices quickly or the process change will be perceived as providing little value.
(desculpe a falta de tradução, não quis perder o real significado do texto)


Topicos desta edição:
Building an Agile Organization
Patterns of Agile Adoption
The Dichotomy of Change
Moving to Agile: TO DOs for your Pointy Haired Boss
The Challenge of Enterprise Requirements Management: Boosting Business Value with Index Cards
Resolve to Increase Agility
The Shiny New Agile Architect
FEATURED BOOK: The Art of Agile Development by James Shore and Shane Warden

16 novembro 2007

Enterremos o termo "Engenharia de Software"

Saudações!

Desculpem a demora em escrever... estou um pouco ocupado escrevendo o novo artigo para a revista Visão Ágil...
Mas vamos lá...

Dica quente: Agile Journal de novembro

Sou muito fã das publicações desta revista, e desta vez devo admitir que eles foram muito bem na escolha dos temas, recomendo imensamente...
Me chamou atenção um texto entitulado:
Let's Bury the Term Software Engineering, que gostaria de dividir com vocês, fazendo uma pequena introdução em português.
Continuo não acreditando que Desenvolvimento de software não deve ser comparado em engenharia (na verdade gosto mais do termo criado dave Thomas: Jardinagem de software), e o texto me trouxe maiores embasamento sobre minha convicção. E vale muito a pena ser comentado.

"In software, if we discourage changes, we can expect failure. Our constraints come packaged with change. Our constraints are the expectations, needs, wants, and feelings of people."


O texto inicia com uma comparação bastante interessante:

Engenheiros ao trabalharem possuem as restrições principais relacionadas às leis da física, bastante conhecidas, documentadas e estáticas (em termos gerais: leis de newton, mecânica dos sólidos, leis da aceleração, peso, momento, etc). Obviamente que espectativas de clientes são restrições a serem consideradas... entretanto a base do pensamento na construção de uma ponte está focada em axiomas matemáticos e físicos...
Em desenvolvimento de software isso não ocorre!! As maiores restrições que possuimos estão relacionadas a expectativas de stakeholders, mal documentadas, mal compreendidas (se é que um stakeholder sabe realmente o que quer). E como o resultado de nosso trabalho é um produto intengível, leis da física não são prioridade... e pior, as "leis" que regem o desenvolvimento podem mudar a qualquer momento! Inclusive na leitura deste blog...

A principal forma de trabalhar de forma eficiente e produtiva num ambiente mutável como o de criação de software é estar preparado para a mudança, não tentando evitar que ela ocorra, mas incorporando-a. E como resolvemos este problema? Criatividade! Não processos de engenharia...

Daryl Kulak propõe inclusive a abolição do termo Engenharia de Software, na tentativa de mudar nossas convicções que nos prendem a um modelo estático e mecanizado, que não corresponde a nossa realidade. Vou apoiar a iniciativa e não falarei mais em engenharia de software! =)

Leia o artigo completo

22 outubro 2007

Comunidade Ágil


O site AgileJournal é uma ótima opção de leitura, caso queira se interar do que ocorre atualmente no mundo Ágil. A edição mensal da revista está disponível online e ainda existem webcasts, podcasts e artigos tratando do que há de mais novo nos estudos e no modelo de Desenvolvimento Ágil.

A edição desse mês trás destaque para o papel da comunidade na construção de um processo de desenvolvimento mais harmonioso. Vale a pena a leitura do artigo.

What Do Agile and Community Have in Common?

Several forces in the software industry are combining to dramatically shorten product cycle times for even the largest applications. These forces also shorten the feedback loops on an application's quality, usability, and customer relevance. As feedback loops shorten and the number of software deliveries goes up, it becomes paramount to inform and collaborate with employees, customers, and partners in a community setting.
Let me briefly share my perspective on how Web 2.0 communities can enable software teams to scale up their interactions from single-user conversations to collaborating across dozens, hundreds, and thousands of stakeholders. I'll also share my experience from the recent beta program of Agile Commons, a Web 2.0 community where users, partners, and employees collaborated in an agile development process to define the top features during a seven-week release cycle.


Aproveite!

16 outubro 2007

Tornando-se um líder Ágil - Parte 1



Colaboração, delegação de tarefas, feedback, prazos, orçamentos, planejamento estratégico: o que é necessário saber caso você queira se tornar um líder Ágil ?(assumindo que você sabe o que Ágil com A quer dizer)
Se você, como líder, acredita que para comandar uma equipe basta apenas ótimos conhecimentos técnicos, acho melhor você se atualizar um pouco pois os tempos mudaram... Vou tentar apresentar algumas informações importantes para que você possa entender onde Desenvolvimento Ágil pode ajudar a criar equipes mais produtivas e motivadas, empresas mais coesas e principalmente vantagens competitivas. O seu papel como líder é importantíssimo, auxiliando a todos no processo de mudança que está se tornando mais e mais evidente no mercado brasileiro.

Nem tudo são flores

É necessário dedicação, e muita força de vontade, se você quer tonar-se um líder realmente eficiente. O que muitos acreditam ao assumirem uma posição gerencial é que não existe a necessidade de estudo para realizarem sua atividade. Este engano pode levar uma equipe inteira ao desastre. A sensação de poder existente em um cargo de gerente pode torná-lo arrogante e cego às reais necessidades de sua função, portanto não se esqueça: aprenda sempre! com todos!
Um bom início a meu ver pode ser o livro de Paul Glen: Leading Geeks, por ser um livro simples e muito tranquilo de ler... (ah não sabe ler em inglês? desculpe, aprenda! Que tal começar por aki). O livro servirá como uma introdução ao mundo da liderança... aproveite! (alias, o programa de webinars gratuitos que o site do Paul Glen possui é uma ótima pedida! acesse!)
Respondendo à pergunta: pra que isso me serve?, vai um pequeno texto sobre as mudanças que nossa área está sofrendo: (fonte: ComputerWorld

A analista do Gartner disse que as companhias querem melhorar a habilidade em cuidar das informações, o que pode significar, por exemplo, ajudar os negócios a entender melhor a lucratividade de um determinado produto ou eliminar um passo desnecessário no supply chain via automatização.

Ken McGee apontou como evidência de que certas companhias estão se movendo nesse sentido o comportamento dos empregadores de buscar um CIO que não tenha necessariamente uma graduação em Engenharia da Computação ou em Ciência da Computação. “Elas procuram alguém que possa fazer outras coisas além de administrar o ambiente de TI”.

Em cinco anos, defende o analista, o CIO pode estar separado das responsabilidades de administrar a operação de TI. “Talvez a tecnologia tenha um melhor atendimento com a criação de um grupo de operações focado nisso, sendo submetido ao chefe das operações. Achamos que é um debate justo”, diz. É também um tema, ressalta McGee, sobre o qual o Gartner continua pensando.

Joe Montano, chefe de TI do departamento de Energia, Minerais e Recursos Naturais do estado norte-americano do Novo México, disse que o questionamento de McGee ressoou em seu pensamento. “Você pode notar isso acontecendo. Eu tenho ficado cada vez menos nas operações do dia-a-dia, portanto o foco está mais nos negócios”, completou.

Pois é, é necessário atualizar-se. Mas por onde começar?? Particularmente não acredito muito que fazer um curso de Administração em uma unibomba da vida não resolverá sua vida, mas que sabe por um custo muito menor você não consegue o mesmo resultado??
Já pensou em fazer um MBA? Caro? E se eu disser que ele pode sair de graça??!?!? Duvida? (Fonte: Personal MBA Manifesto)

The Personal MBA (PMBA) is a project designed to help you educate yourself about advanced business concepts. This manifesto will show you how to substantially increase your knowledge of business on your own time and with little cost, all without setting foot inside a classroom.

The PMBA is more flexible than a traditional MBA program, doesn’t involve going into massive debt, and won’t interrupt your income stream for two years. Just set aside some dedicated reading time, pick up one of these books, learn as much as you can, discuss what you learn with others, and go out into the real world and make great things happen.

If you’re interested in educating yourself about business, the Personal MBA is the best place to start.

Recomendo livros de Peter Drucker e Demin. Entenda de onde surgiu o conceito para poder aplicá-lo da melhor forma possível. É necessário aprender sobre qualidade total e administração moderna para saber onde quero chegar com esse negócio de Desenvolvimento Ágil

Leia meu amigo, leia muito! É necessário ter o conhecimento base durante a aplicação de práticas de Desenvolvimento Ágil

Onde TI e Businnes se encontram

Fonte: Business and IT – A Marriage Made in Heaven?

To most non-technical people, the mere mention of "IT" can be a real turn off, or result in a roll of the eyes. Although traditionally associated with geeks developing code in a back room, IT - in its very broadest sense - forms the backbone of organizations today, which begs the question: why is there still such a huge communication gap between the IT discipline and the business it powers? This article provides anecdotes and advice for businesses to help them resolve the issues between business and IT, and describes how using Agile methods might just save their relationship.

Talvez este seja o principal documento deste post de hoje... devore-o!

até o próximo...

12 setembro 2007

Métricas em Desenvolvimento Ágil



Saudações!
Estive atrás de informações sobre métricas aliadas ao desenvolvimento Ágil, já que é necessário mensurar o desempenho e validar o estado atual de um projeto.
A pesquisa foi muito melhor do que eu imaginava. Além de regras e fórmulas, encontrei um material bastante pertinente a respeito, inclusive uma edição inteira do Agil Journal falando sobre o tema
Farei uma pequena contextualização antes de continuar:

Deviado ao custo elevado em se manter um departamento de TI (profissionais caros e equipamentos mais caros), são necessários métodos de mensurar o desempenho e garantir que o dinheiro investido não está indo para o ralo. Infelizmente à medida que nos aprofundamos no assunto, seguindo modelos tradicionais de desenvolvimento e desempenho, verificamos que falta clareza na utilização de ferramentas de mensuração, e que estamos a todo momento medindo aquilo que não é importante, deixando de lado o que realmente justifica a utilização da TI: a agregação de valor ao negócio. Ao invés disso, o foco das medidas está em atributos de software e quantidade de dinheiro dispendido. Entre essas medidas podemos citar: pontos de função criados, horas trabalhadas, número de linhas de código por desenvolvedor ou ainda orçamento gasto. Aliado à falta de estrutura para receber tais dados esse relatórios fazem que os itens tenham seu valor superestimado, criando uma visão míope do projeto.

Medidas como linhas de código por desenvolvedor ou horas trabalhadas sempre levam a problemas muito maiores para o projeto. Um programador, quando cobrado em linhas de código, evitará qualquer tipo de reutilização ou refactoring que aumente a qualidade do código para que possa parecer produtivo. Ou ainda ele poderá degradar-se completamente ao trabalhar a mais do que o necessário, criando dificuldades de relacionamento e de participação no projeto (lembrem da prática: Semana de 40 horas). Perceba a complexidade que é criar e fomentar tais medidas.

Tradicionalmente atribuimos uma medida de produtividade aos indivíduos do projeto. É pior ainda! Uma equipe deve possuir uma identidade única, que é projetada ao mundo externo como reflexo de seu comprometimento com o projeto, e não como uma série de indivíduos que trabalham por si em detrimento do grupo. Pois é isso que acontece ao medir produtividade individual das pessoas da equipe. Uma equipe deve competir para ser a melhor dentro de toda a organização. Não acredito que gerentes queiram uma equipe que disputa para ver quem é o melhor dentro dela mesma.
Mike Griffths apresenta sua visão sobre isso de forma bastante interessante em seu artigo. Baseado no Efeito Hawthorne, que demonstrou a mudança de produtividade de trabalhadores através do simples fato deles terem conhecimento da medição de produtividade, Mike apresenta a idéia de que uma medição efetiva não deve em nenhum momento atrapalhar a qualidade do projeto (medir linhas de código não é o caso), e deve estar direcionado a elementos chave para o desenvolvimento. Ele cita também um modelo de seleção de métricas definido por Donald Reinertsen:
Primeiro, deve ser simples, métricas ideais são geradas automaticamente no sentido de que não é necessário esforço extra para serem produzidas. Segundo, elas deve ser relevantes. Isto é, o controle deve ser feito pelas mesmas pessoas que estão sendo medidas. Psicólogos já descobriram que quando as pessoas acreditam que podem controlar alguma coisa, elas estarão mais motivadas para controlá-la. Mensurar uma equipe por algo que ela não tem controle apenas causará estresse, insatisfação e alienação. Terceiro, deve ser focado em indicadores de condução. Meça olhando para o futuro, e utilizando tais dados para relatar o passado. É mais fácil medir o tamando de uma fila de testes do que é medir o tempo de processamento dos testes individuais pelo fato de que o tamanho da fila é um indicador de condução para futuros atrasos no processamento do teste.


Modelos ágeis em sua concepção já promovem um jogo completo de métricas que podem ser coletadas de forma trasparente. Testes unitários, análise da qualidade de código e outras medidas técnicas podem ser automatizadas no processo de Integração Contínua. A unidade comum de trabalho - o história - é o fundamento para medidas de gerenciamento de projetos e qualidade de alinhamento de negócio. É importante lembrar que todo o ferramental existe para dar suporte a isso, e que se deve encarar este modelo de métricas com uma visão global.

Ross Pettit, em seu artigo, propõe a seguinte categorização:

  • Excelência em desenvolvimento: Consolidando objetivos para medição de código. Não deve ser analizado em separado, pois causará distorções graves.

  • Qualidade: medidas de defeitos que possam escapar ao desenvolvimento bem como o alinhamento entre desenvolvimento e especificações funcionais.

  • Sensibilidade ao negócio: para os modelos ágeis, requisitos são assumidos como user stories, tornando-se a real expressão do valor de negócio. Podem ser medidas como o grau de valor objetivado e o grau entregue.



Exemplos reais de métricas e relatórios

CFD - Cumulative Flow Diagrams
Bastante Interessante! Ele seria o complementar ao BurnDown Chart do Scrum, trazendo a relação de requisitos completos, requisitos restantes e requisitos em desenvolvimento.

No exemplo acima, o progresso é indicado pela completude da faixa verde no decorrer do projeto. Importante notar a mudança de proporção relacionada à faixa superior, indicando aumento de user stories no decorrer do projeto. Esta mudança pode indicar um problema relacionado à comunicação entre produto e desenvolvedores.

Parking-Lot Chart
Ouvi falar a primeira vez desse gráfico com Mike Cohn no livro Agile Estimating and Planning, e achei extremamente interessante! A ideia é utilizar agrupadores para reunir requisitos com o mesmo domínio e montar um grafico contendo Dominio, Numero de historias em cada dominio, numero de pontos de historia e a completude. A coisa fica mais ou menos assim:


Retirado do site Feature Driver Development

Pode-se ter uma visão bastante real do estado atual do projeto.

Ambiente Informativo
Apresentado na xpRio, na discussão a respeito de um Ambiente Informativo, Alisson Vale mostrou um modelo muito claro para trabalhar com a equipe:

Acredito que a imagem seja suficientemente auto explicativa.

RTF: Running, Tested Features
Representa a quantidade de requistos estão passando em todos os testes de aceitação. É facilmente gerado utilizando ferramentas automatizadas de teste e Teste de aceitação. Idealmente deve parecer com a imagem abaixo:

Também conhecido como Burn-Up chart. Qualquer anomalia no comportamente desta imagem deve ser encarada como um problema, já que, teoricamente, os requisitos implementados devem passar em todos os testes sempre.
Uma ótima referência para este tipo de teste pode ser encontrado aqui.


Outras medidas

Satisfação do Cliente: Determinada nos encontros entre de definição das iterações, podendo ser feita com um questionário simples de satisfação e representada através de imagens/cores. Medida interessante de ser trabalhada, pois deixa a equipe com o real estado de aceitação que o cliente se encontra.

Code coverage (quantidade de código coberto por testes)

Builds feitos com sucesso (por sprint, por semana, por dia)

Builds não realizados (por sprint, por semana, por dia)




É isso senhores... espero que tenha sido proveitoso.