domingo, 26 de março de 2006

Aprendendo com os erros alheios

A Engenharia de Software, diferente de outos setores da engenharia, faz pouquíssimo uso de casos de sucesso e fracasso do passado. Isso é realmente lamentável. Em arquitetura, por exemplo, poderíamos estudar os desenhos de Oscar Niemeyer, Louis Sullivan, Frank Lloyd Wright, I. M. Pei, dentre outros, e talvez até visitar alguns de seus prédios.

Uma parte de qualquer ciência amadurecida é um conjunto de problemas resolvidos, comumente reconhecidos como exemplos de bons trabalhos no setor e que servem como exemplos para trabalhos futuros (Thomas Kuhn, 1996).

Infelizmente a ES está apenas começando a amadurecer neste sentido...

Se você, como eu, gosta de analisar e refletir sobre problemas e soluções do passado, algumas providas por casos de fracasso em projetos de software, aqui vão alguns links interessantes:

Casos de Fracasso:

The Mythical Man-Month (análise sobre o projeto do OS/360, da IBM)
Daikatana (game assinado por John Romero e
Hiro Miyamoto - Ion Storms Inc e Eidos Interactive)
Duke Nukem Forever (game da 3D Realms)

veja mais aqui.

Nota: Infelizmente, a maioria dos casos de sucesso que encontrei não trazia detalhes ou maiores discussões sobre a experiência vivida. Optei então por não apresentar seus links aqui.

sexta-feira, 24 de março de 2006

Paralelo sobre TDD

Há 150 anos atrás, os médicos acreditavam que espíritos do mal causavam doenças. Então a anestesia dava aos médicos mais tempo para realizar cirurgias. Esses médicos tipicamente lavavam suas mãos somente após operar - para limpar o sangue. Os pacientes frequentemente pegavam infecções pós-operatórias. "A operação era um sucesso mas o paciente morria."

Por volta de 1850, o Dr. Ignaz Philippe Semmelweiss experimentou lavar as mãos antes de ajudar as mulheres a dar a luz, ao invés de somente depois. Ele relatou uma baixa taxa de mortalidade, mas os médicos ainda tinham que aprender melhores sistemas para relatar e valorar experimentos e estatísticas, e Semmelweiss não usava um método científico para anunciar os resultados.

Então Louis Pasteur e Robert Koch espalharam uma teoria que animais pequeninos comiam nossos corpos por dentro. Esse modelo físico explicou os experimentos, voltados para antecipar a pesquisa com microscópios. Médicos como Scot Joseph Lister adicionaram soluções anti-sépticas aos seus tratamentos. Contudo, muitos médicos ainda se recusaram a lavar ou esterilizar seus instrumentos – mesmo assim esses procedimentos obviamente não puderam prejudicar os pacientes. Doutores em liderança e ensino de regras, como Pierre Pachet, o professor de Fisiologia em Toulouse, por volta de 1872, declamaria que, “A teoria de germes de Louis Pasteur é uma ficção ridícula.”

Hoje nós reconhecemos corpos saldáveis contendo milhões de criaturinhas vivendo em harmonia de cooperação e alvoroço. Os médicos diminuíram o risco de transtornar esse balanço começando a esfregar uma longa lista de coisas, antes mesmo de operações de menor importância, usando sabão e adotando alguns procedimentos que são agora obrigatórios por lei.

A indústria de programação vive momentos interessantes. Enquanto muitos engenheiros ainda acreditam que falta de planejamento de projeto causa bugs, eles não tem uma razão concebível para não escrever código de teste antes de testar o código. O que certamente poderia não machucar o paciente. Evidências nesse campo irão eventualmente encerrar o debate.

(Texto traduzido de Test First User Interfaces: Developing Agile GUI Code, capítulo 16 página 195, fornecido do grupo de discussão Test-First User Interfaces (TFUI) em http://groups.yahoo.com/group/testfirstuserinterfaces/ do qual atualmente faço parte).

Há cada vez mais relatos de empresas que implantaram métodologias Ágeis, Programação Extrema, ou metodologias com Desenvolvimento Dirigido a Testes . A grande maioria relata um significativo salto qualitativo no processo de desenvolvimento e, principalmente, no produto final.
Emergindo de práticas simples e sem burocracia, elas estão cada vez mais sendo usadas por equipes de projeto preocupadas com a confiabilidade e com a diminuição dos custos de manutenção do software.

Em próximos posts deverei discutir alguns aspectos relacionados ao desenvolvimento de software, alguns deles possivelmente relacionados a metodologias que trazem grandes melhorias qualitativas e aumentam o retorno do investimento empregado em seu desenvolvimento.

Até o próximo ! ;-)

sábado, 18 de março de 2006

"Hello World" (my first post)

So, after some time of thinking about it, I've decided to start a blog.
What will I talk about here? Who knows - only time will tell.

I still don't know if all my posts would be in English, 'cause my native language is Brazillian Portuguese. Anyway, I will try to make some of them available in both languages.

Stay arround. I'll try to post new stuff fairly regularly.