segunda-feira, 30 de abril de 2012

Como aprender a programar para teste de software (automação)?

Na lista de emails do DFTestes tivemos uma pergunta, que no meu ponto de vista foi muito bem colocada, que era:
Como vocês aprenderam a programar especificamente para testes?

Eu, particularmente, fui programador comercial no início da minha carreira em TI, porém não há uma diferenciação entre programar para "testes" e programar comercialmente.

Não deixe de ler depois o post Como obter conhecimento técnico em Teste de Software (de forma gratuita)
Em testes, basicamente, precisamos aprender o básico dos dois itens abaixo:
  • Aprender o básico de alguma linguagem de programação
  • Aprender sobre a ferramenta de automação de teste funcional escolhida

Como aprender o básico de alguma linguagem de programação?
Eu sempre falo que para ser um automatizados o profissional de testes não precisa ter grandes skills de desenvolvimento, apenas saber, entender e aplicar o básico de uma linguagem de programação.

Mas Elias, o que é o básico de uma linguagem de programação?
Para ser mais assertivo com essa resposta fiz uma pesquisa nos principais cursos de desenvolvimentos das principais empresas de treinamento do Brasil. Foquei nas linguagens Java, .NET e Ruby por serem as comercialmente mais usadas. Eis o resultado:
  • Sintaxe básica de linguagem
    • Fundamentos da linguagem
    • Variáveis (tipos, escopo)
    • Operadores (aritméticos, comparação e lógicos)
    • Fluxo de controles (if/else, switch, while, do/while, for)
    • Arrays (bidimensionais, multidimensionais)
  • Orientação a Objetos
    • Classes
    • Encapsulamento
    • Associação
    • Herança
    • Polimorfismo

Os itens acima são muito básicos em qualquer linguagem, e especificamente para o item 2 - Orientação a Objetos para as linguagens orientadas a objetos (todas as tres citadas).

Quem fez ou está fazendo faculdade olhe com carinho a lista acima e responda: Há algum destes itens que você não viu na faculdade?

Geralmente todos estes pontos são abordados por qualquer disciplina de programação na faculdade e não nos damos conta da importância dos mesmos :-)

Como aprender sobre uma ferramenta de automação de teste funcional?
Ai vem o segundo ponto. Posso dizer que uma ferramenta tem dois segmntos:

Em uma aplicação estilo IDE a ferramenta é um software capaz de gravar os passos que executamos sobre o sistema. Após podemos editar o código-fonte gerado para melhorar o teste. Este código-fonte pode ser apresentado em diversas linguagens diferentes, porém geralmente uma única é utilizada pela ferramenta. A ferramenta também dispôe de funcionalidades prontas para o uso no script de teste, como checkpoints/asserções automáticas, conexão com banco de dados, etc...
Para o aprendizado desta ferramenta há três caminhos:
  • Leitura da documentação básica da ferramenta (telas, como gravar e executar testes, etc...)
  • Entendimento das principais funcionalidades "prontas" da ferramenta
  • Aprendizado da linguagem de programação adotada pela ferramenta

Exemplos deste tipo de aplicação são: TestComplete, HP QuickTest Professional, IBM Functional Tester entre outras.

Exemplo de uma aplicação estilo IDE - TestComplete
 
Em uma aplicação estilo API um ou vários arquivos (geralmente chamados de bibliotecas) são disponibilizados para que o profissional utilize métodos daquela API, ou seja, um conjunto de métodos/funções para teste são utilizados para que possamos escrever um script de teste.
Neste modelo os profissionais importam esses arquivos (bibliotecas) para uma IDE de Desenvolvimento (diferente da aplicação estilo IDE que mencionei acima) como Eclipse, Visual Studio, Netbeans entre outras.
Durante a programação do script de teste o profissional vai escrevendo os testes, condições e quaisquer tipos de funções que não estejam presentes, como o acesso ao banco de dados.
Para o aprendizado desta ferramenta há três caminhos:
  • Leitura da documentação básica da ferramenta
  • Leitura de sua API
  • Exercitar as funções da API na utilização da ferramenta

Exemplos deste tipo de aplicação são: Selenium, Watir, Robot Framework entre outras.

Estilo de uma aplicação estilo API usando Eclipse IDE - Selenium

Aplicações estilo API exigem uma capacidade/conhecimento de programação maior do que as aplicações estilo IDE

Adendo
É claro que atualmente existem vagas que não exigem somente o básico de programação para trabalhar na área de teste, como as vagas de SDET - Software Developer in Teste que são posições de desenvolvedores que também trabalham em testes com o intuito de criar sistemas (frameworks) para testar aplicações, além de também conhecer desenvolvimento muito bem.
Vamos encontrar este tipo de vaga em grandes empresas como Google, Microsoft, Amazon, Facebook entre outras.
Infelizmente isso não é uma realidade no Brasil, mas isso dá outro post depois...

Dica
Pela internet é faci encontrar diversos materiais sobre como aprender determinada linguagem de programação. Eu recomendo ler os links abaixo para quem quer começar a estudar por conta com um material confiável:

Abraços!

segunda-feira, 16 de abril de 2012

Criptografar senhas em um script automatizado é realmente necessário?

Hoje tive uma conversa com um aluno do curso de Selenium que me fez pensar um pouco...
A pergunta era como criptografar a senha gravada pelo Selenium durante a gravação dos testes e execução do mesmo.

E eu me perguntei: pra que? rs

A pergunta é pertinente, pois há uma preocupação com a segurança dos dados dentro do script.
Vamos a alguns pontos...

Que ganho teriamos em "criptografar" a senha de dentro de um script de teste?
Obviamente o ganho seria em segurança.
Qualquer pessoal má intencionada poderia utilizar aquele usuário e senha para acessar o sistema, principalmente em produção e utilizá-lo de forma indevida. Até mesmo passar o usuário e senha para uam pessoa acessar um sistema em produção para utilização própria (leia-se para não pagar/comprar), e muitas outras ações que podem ser feitas.


Como a grande maioria dos profissionais trabalha com esta questão em automação
Na grande maioria das vezes a codificação de uma senha dentro do script não é levada em consideração porque:
  • Os servidores de testes são conhecidos e possuem acesso apenas aos colaboradores da empresa
  • Usuários específicos são criados (ou deveriam) para diversos testes
  • Mesmo em ambiente produtivo (servidor de produção) o acesso é controlado através de usuários apenas para testes especificos, onde estes usuários são desativados no sistema em produção e, obviamente, possuem uma senha mais "segura"
Pense no trabalho que dará você codificar uma senha e, no momento da execução do script, ter que decodificar a mesma para que a aplicação execute. No mínimo um desenvolvimento usando reflexão terá de ser criado. E como diria na minha terra "é muita mão de obra" (dá muito trabalho) fazer isso.

Uma possivel solução rápida se simples
A solução não exclui o fato de segurança de acesso, etc... Porém pode tornar as coisas mais simples e tranquilas e na verdade vai te ajudar a criar "melhor" os testes scripts: colocar este dado em um arquivo externo!

Obviamente tu continua tendo um acesso a senha daquela, mas não diretemente no arquivo

O que deveríamos fazer então?
O ideal, na minha visão, é:
  • Criar usuários especificamente para rodar os scripts automatizados
  • Sempre possuir um processo/automação para desativar os usuários quando não estiverem em uso, principalmente em ambiente produtivo
Bom, estas são as minhas pequenas considerações em relação a este tema.
E como vocês costumam fazer?
Essa mesma idéia de "criptografar" os dados já passou na cabela de vocês?

Abraços!