sexta-feira, 21 de agosto de 2009

O âmago do desenvolvimento de software

Quais seriam os talentos, as habilidades, os pulos-do-gato a serem dominados por alguém que almeja ser um desenvolvedor de software de mão-cheia?
Particularmente, não creio que os mais experimentados desenvolvedores do mundo tenham uma resposta precisa para essa questão. Eles sequer precisam responder a essa questão para continuar aprimorando suas habilidades e acumulando sucessos em novos projetos. Eles simplesmente aprendem com a prática e com a interação com outros colegas experientes, assimilando e aplicando padrões que apresentem bons resultados de produtividade e de qualidade.
A propósito, em 1999 o renomado enxadrista Garry Kasparov foi perguntado se a sua maestria no jogo de xadrez poderia ser ensinada. Para o consagrado campeão mundial, quem almeja a maestria no xadrez deve ter intuição, deve ter um gongo interior, uma iluminação, de modo que possa ter uma visão panorâmica do que está acontecendo (no torneio). Finalizou dizendo que seria necessário já nascer com essa característica, já que nenhum treinamento poderia contruí-la.
Voltando à engenharia de software, Alistair Cockburn citou 7 habilidades requeridas para o desenvolvimento de software (fonte: Software engineering in the 21st century):
  • Decidir o que deverá ser construído
  • Gerenciar (pessoas e projetos)
  • Modelar
  • Design da visão externa
  • Design de larga escala (arquitetura)
  • Design de pequena escala (programação)
  • Validar o trabalho
No mesmo trabalho, Cockburn sugere um caminho progressivo para aprendizado dos talentos requeridos: primeiramente aprenda uma técnica, depois colecione técnicas, então combine as técnicas. Cockburn recomenda atualmente o uso de práticas lean de software, por exemplo: integração contínua.
Segundo Mary Poppendieck, especialista em pensamento lean, desenvolver software requer a aplicação consciente de técnicas de solução de problemas. Para ela, é comum novatos optarem pela abordagem depth-first, tomando decisões de design muito cedo. Enquanto se aprende o contexto do problema, é mais seguro adotar a abordagem breadth-first, evitando-se tomar decisões prematuras que possam fazer com que a equipe desperdice energia focando em detalhes com maior risco de impacto de mudanças ao longo do projeto.
Após duas décadas aprendendo, acumulando e combinando técnicas para desenvolver software com qualidade, o que eu posso concluir de tudo isso?
Tenho percebido que as técnicas de desenvolvimento de software evoluem com o passar dos anos, assim como os problemas de negócio e as soluções tecnológicas. Por isso, precisamos usar frequentemente nosso intelecto, intuição, talento, criatividade, conhecimento técnico e habilidade de comunicação/interação com outras pessoas para formatarmos e aplicarmos a técnica correta de acordo com o contexto de cada momento do projeto de desenvolvimento de software. Minha conclusão é a seguinte: precisamos nos manter aprendendo por meio da pesquisa frequente e da interação contínua com os colegas de trabalho, participando ativamente da solução dos problemas que emergem dos projetos reais. Felizmente, a comunidade de desenvolvedores de software dispõe de redes sociais colaborativas que permitem expandir esse aprendizado continuamente conforme o interesse e disponibilidade de cada um.

terça-feira, 18 de agosto de 2009

Pensamento 003

Quanto maior o feedback, maior o aprendizado.
Essa regra vale para cientistas ao verificar hipóteses, designers ao conceber novos produtos, usuários ao utilizar novas ferramentas.
No contexto computacional, isto se traduz em mais iterações (ciclos de entrega) durante os estágios de desenvolvimento e manutenção de produtos de software e/ou hardware. Também se traduz em menos stress no atendimento das tão aguardadas solicitações de mudança/melhoria.

domingo, 2 de agosto de 2009

sábado, 1 de agosto de 2009

TDD com VSTS - parte 7/7

O sétimo vídeo da série de demonstrações de test-driven development usando Microsoft Visual Studio Team System está disponível no Youtube no link:

TDD com Microsoft Visual Studio Team System - parte 7/7

Este vídeo demonstra a criação e implementação de outro caso de teste com cenário negativo - TestDepositoComValorZeroDeveFalhar - o qual foi adicionado à lista "Negocio - testes de unidade". Neste cenário, o teste de unidade se certifica de que uma exceção do tipo ContaException será disparada durante a tentativa de fazer um depósito com valor zero.

TDD com VSTS - parte 6/7

O sexto vídeo da série de demonstrações de test-driven development usando Microsoft Visual Studio Team System está disponível no Youtube no link:

TDD com Microsoft Visual Studio Team System - parte 6/7

Este vídeo demonstra a criação e implementação de um caso de teste com cenário negativo - TestDepositoComValorNegativoDeveFalhar - o qual foi adicionado à lista "Negocio - testes de unidade". Neste cenário, o teste de unidade se certifica de que uma exceção do tipo ContaException será disparada durante a tentativa de fazer um depósito com valor negativo.

TDD com VSTS - parte 5/7

O quinto vídeo da série de demonstrações de test-driven development usando Microsoft Visual Studio Team System está disponível no Youtube no link:

TDD com Microsoft Visual Studio Team System - parte 5/7

Este vídeo demonstra um passo importante do ciclo TDD: refatoração de código. Este passo é caracterizado por modificar o código sem necessariamente implementar nova funcionalidade.

TDD com VSTS - parte 4/7

O quarto vídeo da série de demonstrações de test-driven development usando Microsoft Visual Studio Team System está disponível no Youtube no link:

TDD com Microsoft Visual Studio Team System - parte 4/7


Antes de iniciar um ciclo TDD (RED, GREEN, GREEN), é recomendável executar o seguinte ritual de integração contínua: get latest version, executar lista de testes (GREEN). Após a conclusão do ciclo TDD, o ritual é o seguinte: get latest version, executar lista de testes (GREEN) e, finalmente, check-in. O vídeo demonstra mais um ciclo TDD com atividades de integração contínua (get latest version e check-in), tendo sido adicionado o caso de teste TestDepositoDeveIncrementarSaldo à lista "Negocio - testes de unidade".

TDD com VSTS - parte 3/7

O terceiro vídeo da série de demonstrações de test-driven development usando Microsoft Visual Studio Team System está disponível no Youtube no link:

TDD com Microsoft Visual Studio Team System - parte 3/7

Um ciclo TDD possui os seguintes passos: rodar o teste falhando (RED), criar a implementação mais simples que faça o teste passar (GREEN), refatorar o código sem quebrar os testes (GREEN). O vídeo apresenta o primeiro passo (RED) ao executar o teste que está disparando a exceção System.NotImplementedException. O segundo passo (GREEN) é então alcançado com a Implementação mais simples do método Conta.getSaldo() que faz o teste passar. O terceiro passo de refatoração não foi necessário pois o código já estava simples, limpo e sem trechos repetidos. O vídeo demonstra a criação de uma lista de testes chamada "Negocio - testes de unidade", na qual é adicionada o primeiro caso de teste: TestSaldoInicialDeveSerZero. Demonstra ainda como se ativa a medição da cobertura de código do assembly Negocio.dll. O TDD tem como meta 100% de cobertura, desde o início do projeto. Por fim, o primeiro check-in no repositório é realizado.