Certificação para testes – vale a pena?

Sou suspeito para falar, aprendi a testar por necessidade, começando por um sistema muito complexo e cheio de bugs com documentação zero. Certificação pode valer a pena quando vc tem que seguir um processo bem burocratico, onde vc precisa de 1024 documentos e mais diversas ferramentas de apoio. Pessoalmente eu discordo dessa abordagem por um bom motivo: ruído.

Pode haver muito ruído entre o que o cliente quer (ou acha que quer) e todos os envolvidos, uma vez que nem sempre o cliente sabe o que quer exatamente ou pode não saber se expressa muito bem. Imagine agora isso colocando em uma coleção de documentos que circula entre os envolvidos e que exige um esforço considerável para manter-se atualizado. Pode ser a receita para o desastre :)

Uma condição interessante para o sucesso do projeto é a dedicação dos mesmos frente a honestidade. Muitos analistas, programadores ou testadores querem mesmo é tirar o seu da reta, uma vez que vivem sob um mundo medieval onde os chefes são temidos pelos urros guturais e ameaças perturbadoras, nesse caso o sentimento gostoso de “estou num projeto bom que produz um software de boa qualidade” passa a ser “caramba, se isso não funcionar não é culpa minha e sim do X”. Um bom exemplo é testadores que se limitam a seguir um manual de testes de forma exata e não fazem nada alem disso. Se um bug for encontrado, o testador se defende “mas eu segui o documento de testes #542″. Nesse caso ninguem precisa se defender: testar não elimina bugs, eles podem ser encontrados em situações muito peculiares e de dificil reprodução, nesse caso um bug deveria alimentar um documento de testes e não gerar pânico, dor e morte. Todo o software tem bugs, paciência.

Lembro de uma tela que poderia receber o campo “dia util do mês”. A tela funcionava quando eu informava 01, 02, 03, 10, 20, 28, etc. A tela parecia 100% dentro do uso normal até que alguem colocou o dia 08: um grande erro de javascript aparecia para o usuario! E com 09 também. Depois de muita pesquisa descobriram que, em javascript, um numero que começa com 0 é considerado octal e, em octal, não existe 8 nem 9, nesse caso a máscara desse campo era a origem desse comportamento estranho. Esse tipo de coisa só se resolve com trabalho, pois poderiamos ficar discutindo sobre quem errou, o testador ou o desenvolvedor, por horas, até acabar o projeto. O que importa é que 8 e 9 são dias úteis válidos e a funcionalidade ficaria comprometida com esse bug.

Alias, testar é uma atividade muito legal, se vc é curioso. Basicamente vc tem que procurar comportamentos erráticos e descobrir como reproduzi-los. Hoje em dia eu ainda me pego testando SQL Injection em alguns sites ou estudando paginação de dados, etc. Testar através de ferramentas é mais divertido ainda, não aqueles monstros que funcionam na base do Record/Playback: testar sites usando Shell Script (curl + grep), Selenium ou soluções próprias (como uma classe que se conecta com um webservice, um script Perl que envia dezenas de requests ou mesmo incorporar o Internet Explorer numa dll escrita em C# para integrar com algum sistema complexo de testes) é uma arte que traz benefícios como eliminar horas de trabalho braçal propenso a erros.

Não que alguem certificado em testes seria desonesto ou covarde mas a minha percepção é que esse universo de testes utiliza documentos, ferramentas e certificações também subterfúgios, tiro isso de conversas com gerentes dessa área que querem saber: quem é o desenvolvedor que produz mais bugs, quem demora mais pra desenvolver, quem demora mais pra testar, quem testa de verdade, etc. Quando vc pergunta específicamente essas coisas vc não quer métricas, vc quer dados para ferrar com alguem. Neste tipo de ambiente, tão comum ai por fora, a honestidade é soterrada pela mediocridade de gerentes e outros figurões e, geralmente, se resolve mudando de emprego ou fazendo parte de uma célula que implanta uma mudança de pensamento dentro da empresa. Geralmente chegamos a essa opção quando cansamos de trocar de emprego.

Por fim: conhecimento não pesa nem ocupa espaço, biológicamente falando. IMHO honestidade para o desenvolvedor, testador ou gerente é muito mais importante do que o cinismo. Experiência é mais importante que certificações. Conhecimento é mais importante do que um mero diploma. O resto é dançar conforme a música.

Eu gosto de citar este artigo: Introduzindo Agilidade num Ambiente, do Phillip Calçado, que me mostrou um novo mundo e me inspirou a sair do mundo de testes para o mundo onde se faz de tudo um pouco. Então, se alguem se perguntar se certificação, mesmo para testes, vale a pena, lembre-se que a sua postura profissional conta muito mais.

Rating 4.00 out of 5
[?]
Publicado em Uncategorized | 6 comentários

Inversão de Controle em Perl e PHP5

Interessante o que este módulo em Perl é capaz de fazer: IOC

Entretanto achei este framework, para PHP5, mais ‘verboso’: DiContainer.

E vc: qual o seu framework de IOC favorito?

Rating 4.00 out of 5
[?]
Publicado em Uncategorized | 1 comentário

O custo de adotar uma nova tecnologia

Estes dias eu estava pensando nos reais custos de adotar uma nova tecnologia. Imagine que vc sempre trabalhou com Java e tem que trabalhar com .Net, o que causou essa escolha? Que estratégia existe por trás?

Bom, o principal custo esta vinculado com a capacidade de um time ou equipe de entregar, ou não, uma determinada release. Entra ai a curva de aprendizado, que não pode ser encarado como aprender a sintaxe de uma linguagem e sim compreender os fundamentos da mesma, bem como entender a infra-estrutura necessária para que ela desenvolva o seu papel.

Quem aprendeu PHP sabe como desenvolver uma pagina dinâmica, trabalhar com formularios, sessão e acesso a banco de dados, porém sabe que basta editar um arquivo e subir para o servidor que ele é ‘executado’. Passar para um mundo J2EE onde vc tem uma estrutura de diretórios para respeitar, arquivos de configuração e, principalmente, entender a filosofia J2EE, a diferença entre os servidores de aplicação, as particularidades do garbage collector, etc, enfim, não é uma tarefa simples.

Imagine que vc tem 2 semanas para desenvolver uma aplicação: o que vc escolheria? Antes de pensar “ah, 2 semanas, pra web eu faria em Rails”, pense que vc tem que desenvolver um uma equipe que não conhece Rails. Nesse caso, 2 semanas pode ser tempo muito curto para se comprometer com uma entrega se vc pensa em termos de Scrumm por exemplo, pois o time não conhece a sua velocidade (e, nesse caso, não importa velocidade pois vc TEM que terminar o projeto no prazo). Se a equipe inteira conhece PHP, metade conhece Java e apenas um cara conhece Ruby on Rails, seria interessante considerar PHP pois essa experiência acumulada colabora para a solução do problema: entregar software funcionando numa determinada data.

Quando temos liberdade de escolha e tempo necessário, podemos explorar outras linguagens, frameworks e tecnologias, usando alguns Sprints para desenvolver a habilidade necessária de implementar e, principalmente, de dar manutenção.

Outro ponto importante é a testabilidade do codigo: se vc não tem uma equipe com proficiência em testes unitários, cobrar num projeto com prazo curto pode ser um tiro no pé pois prazo curso geralmente detona o humor dos envolvidos, prejudicando a adoção de novas ideias. Um projeto de tres meses, por exemplo, seria ideal pois eu posso usar um dia (ou parte dele) para efetuar um pequeno workshop ou dojo sobre TDD e tecnologias de teste, se necessário. E o ideal é começar com testes pois codigo legado nem sempre é facil de injetar testabilidade (e as vezes deixa de funcionar no processo, ai o telefone toca, vem um esporro, é lindo).

Passei por uma situação curiosa certa vez: um serviço crítico seria adicionado à uma api de serviços com algum tempo de vida. Como ninguem sabia como testar direito usando PHP (criar mocks não é tão simples, pelo menos naquela época), desenvolvi um pequeno script que efetuava testes funcionais: eu utilizava aquele serviço usando todas as combinações possiveis de parâmetros e situações.

O grande problema dessa abordagem é desenvolver algo que pode receber atualizações: naquele momento eu tinha criado um modelo de forma a descrever os testes como estruturas de dados, assim bastaria adicioanr novas estruturas que eu teria, de forma simples, novos testes. Testes automatizados são uma tecnologia que pode agregar qualidade e, portanto, tem um custo também. Não vou ser fatalista e dizer que software sem suite de testes não tem qualidade (vide um hello world), mas vc pode atingir um patamar de qualidade superior com uma suite de testes completa, tanto por causa dela quanto pela mudança cognitiva que isso acarreta. Eu explico: desenvolver testes muda a forma como programamos. Não precisa ser TDD ou BDD: basta programar com atenção e esmero, este ultimo o grande responsável pelo sucesso de um projeto.

O desafio agora é desenvolver scripts de teste no estilo Cucumber/RSpec. Falarei disso no futuro, ainda mais que estou reinventado a roda – mas por um bom motivo.

Rating 4.00 out of 5
[?]
Publicado em Uncategorized | Com a tag , , | 3 comentários

Cuidado com os imports automaticos do Eclipse

Hoje em dia as IDEs para desenvolvimento, sobretudo para Java, fornecem dicas para solucionar todo o tipo de problemas como: classpath, package errado, algum throws faltando, etc. O Eclipse fornece essas dicas quando vc clica no aviso vermelho do lado esquerdo da linha com problema.

Geralmente a primeira dica é a correta, entretanto devemos perder um tempinho analisando as outras. Um bom exemplo aconteceu comigo trabalhando com JDBC: Em determinado momento eu estava trabalhando com PreparedStatement e a dica do Eclipse, para os imports, era com.mysql.jdbc.PreparedStatement porém, naquele momento, me interessava o java.sql.PreparedStatement. Não prestei a atenção e o eclipse me pedia, estranhamente, um cast numa determinada linha aonde não precisava.

Detalhe que este import errôneo não iria prejudicar a minha classe naquele momento: ela funcionaria sem maiores problemas. O problema era uma dependência adicional com o driver mysql: eu teria problemas se quisesse migrar de banco. Um problema bem simples, bastaria corrigir a classe, mas que me faria perder algum tempo no futuro.

Sem falar que, pela lei de Murphy, esse problema poderia surgir quando ele fosse o mais devastador possivel.

Rating 4.00 out of 5
[?]
Publicado em Java | 2 comentários

Ah, essa tal de autenticação

Estou dando manutenção no site de uma pequena empresa. Anteriormente a atualização era feita enviando um email para o “webmaster” responsável que editava os htmls e fazia o upload dos arquivos. Trabalho duro, cobrado por hora inclusive. O estranho é que, numa época em que os programas de cms (Content Management System) são tão bons e gratuitos, algumas pessoas insistem em trabalhar como há 10 anos, onde ter um host no geocities era o máximo (invariavelmente cheio de gifs animados, letras amarelas sobre fundo azul e muitos, mas muitos frames).

Durante a migração para o wordpress descobri uma particularidade: uma parte das novidades do site estavam vindo de outro servidor via iframe. Havia um pequeno cms para noticias, escrito em ASP, em que cada noticia podia ser acessada dessa forma:

http://outrositeexterno.com/xxx/client666/mostraNoticia.aspx?id=9

Como fui testador de software por mais de 4 anos, resolvi brincar um pouco com essa url. Pensei em que mensagens de erro poderiam ser exibidas caso uma noticia de id inexistente fosse requisitada. Coloque lá id=999999999 e mandei bala. Era pior do que eu pensava.

Uma interface tosquissima apareceu, mostrando uma listagem de todas as noticias e botões de new, delete, edit estavam presentes. Tive um mal pressentimento. Não é que eu tinha acesso a um CRUD de noticias sem precisar de autenticação? Pois é… e a culpa não é da tecnologia: com certeza é possivel desenvolver sites seguros até com shell-script, basta ter os profissionais adequados (desses que sabem procurar no google).
.

Rating 3.00 out of 5
[?]
Publicado em Dicas | Com a tag | 2 comentários

Hello world

Ok,

Estou inaugurando este site. Pela primeira vez eu tenho um domínio próprio e posso instalar o que eu quiser. Apesar de estar acostumado com o antigo blogspot vou dar uma chance ao wordpress. Os antigos posts, que foram mais importantes de uma forma ou de outra estarão disponiveis na minha wiki.

Atualizem os seus feeds e lembre-se: na Russia, o hello world imprime vc!

[math]e^{i\pi} + 1 = 0[/math]

Rating 3.00 out of 5
[?]
Publicado em hello | Com a tag | 7 comentários