Archive

Archive for December 3rd, 2008

Tempo de Mudanças

December 3rd, 2008 No comments

Realmente estamos em momentos revolucionários (apesar de não gostar do termo) na área de desenvolvimento de software. Trato essa revolução como um conjunto de mudanças que visam o benefício de quem é cliente e desenvolvedor. Esse fenômeno é perceptivo se analizar-mos a quantidade de metodologias ágeis criadas e de linguagens que visam a produtividade, como Groovy e Rails.

No mesmo vagão está o conjunto literário que vem com um número de publicações extremamente rico e que demonstra regras e comportamentos, baseados na experiência, que ajudam formar desenvolvedores cada vez mais produtivos. Entre estes livros indico Getting Real (versão em inglês) da  37 Signals.

O livro é composto de pequenos tópicos que contem uma breve descrição que tem como base a experiência do autor/autores sobre o tema. O livro todo demonstra um comportamento que devemos ter para que possamos desenvolver softwares de qualidade, com produtividade, eficiência e ao mesmo tempo se divertindo.

Humm… quase ia esquecendo. Existe uma tradução completa da obra para português aqui. A tradução foi liderada por Fabio Akita em colaboração com diversas pessoas. Realmente é uma excelente obra.

Segue a dica.

Categories: Book, Metodologias Ágeis Tags:

Teste, teste, teste, teste, teste e teste

December 3rd, 2008 No comments

Sim, a mensagem é essa: Testem até não poderem mais, caso isso aconteça, peça para outra pessoa continuar os testes. Pode ser um exagero, mas não é. Quanto maior for o tempo de teste maior será a probabilidade de não ocorrer problemas, conseqüentemente, maior será a sua credibilidade sobre o seu serviço. Sim desenvolvedores também escrevem testes;

A escrita de testes é tão importante quanto a escrita de código fonte. Bom, isso é facilmente justificado através das características de nosso cérebro. Vou explicar: A partir do momento que nos deparamos com situações que envolvem repetição, como passar por uma mesma rua várias vezes, seu cérebro entra em um estado de abstração dessas informações. Isso nos dá a sensação de que o tempo está passando rápido. Com isso é normal ter comentários como: “Essa semana passou rápido” ou “Nossa, já é Dezembro, como o ano passou rápido”.

Bom, vocês devem está se perguntando onde eu quero chegar com essa baboseira toda. Isso é simples. Compreender os testes! Quando estamos desenvolvendo é normal que não nos preocupemos com testes, não devíamos, mas é o que acontece. Nesse processo, estamos preocupados em desenvolver funcionalidades, criar classes, escrever consultas e poucos se preocupam com teste.

Os testes são escritos tardiamente após termos passado várias vezes pelo código que contem a funcionalidade a ser testado.  Com isso, entra em cena o fenômeno que citei no início do texto, colaborando com a analise defeituosa do problema e ao mesmo tempo com a ausência da escrita de códigos de testes.

Deixar um projeto sem código de testes é um suicídio. Futuramente, caso exista necessidade de fazer alguma manutenção nos fontes, não será possível saber se a modificação efetuada irá impactar em alguma funcionalidade contida na aplicação, pois não há maneira de rodar os testes para verificar se o código inserido afeta, diretamente ou indiretamente, as outras funcionalidades implementadas.

Afirmo isso porque já trabalhei em projetos que necessitavam de freqüentes testes. Sempre que concluíamos uma funcionalidade, construíamos inúmeros códigos de testes unitários para validar os métodos que compunham o escopo da funcionalidade desenvolvida. Posteriormente adicionávamos tudo isso no start de testes para testar tudo de uma vez. Após isso, todos achavam mais confortáveis em desenvolver novas funcionalidades, já que sempre que fosse possível, rodavam a bateria de testes para verificar se houve algum impactos com as funcionalidades que já foram desenvolvidas.

Escrever testes unitários deveria ser tarefa de qualquer desenvolvedor que vise a qualidade de seu trabalho, não apenas por motivos promocionais, mais principalmente pela equipe que está alocada ao projeto. Quanto mais se testa um produto, menores são as chances de erros em projetos. Isso não acontece apenas em desenvolvimento de software, mas também em outras áreas.

Hoje em dia, é possível contar com a colaboração de inúmeras técnicas e frameworks desenvolvidos para essa finalidade sejam para cada tipo de teste. Entre os mais utilizados estão os frameworks voltados para testes unitários como o JUnit e TestNG. Não irei falar sobre nenhum deles e nem afirmar qual o melhor, talvez em próximo post. A princípio, quero mostrar a vocês que existem diversos elementos que facilitam a escrita de testes, principalmente testes unitários.

As metodologias ágeis contribuem massivamente para que testes sejam escritos e executados de forma automática, no momento da integração contínua ou até mesmo antes da geração do build. As metodologias ágeis incentivam o uso de ferramentas de execução de testes automáticos através da integração contínua, pois através dela a aplicação será testada exaustiva vezes e comparada com diversos builds  existentes no repositório. Essa é uma excelente abordagem, já que os testes não são executados pelo desenvolvedor e sim pelo servidor de integração contínua.

Existem vários tipos de testes e diversas técnicas que são aplicadas. Aplicá-las em projetos reais sempre será uma excelente alternativa. Porem, a obrigatoriedade de escrever testes unitários fica mesmo com o desenvolvedor.

Categories: Teste Tags: , ,