Pesquisar este blog

quarta-feira, 27 de janeiro de 2016

Testador Cargo, Sálarios e Desejados Skills


     O objetivo deste tópico é mostrar os cargos e salários, assim como, o perfil dos profissionais da área de teste e qualidade de software. Os pontos chave aqui considerados foram: cargos e salários, plataforma/tecnologia das aplicações onde os testes são realizados, linguagens de programação utilizadas para auxiliar as atividades de testes, formação, certificações dos profissionais, dependendo do Porte da Empresa e Nível de Criticidade dos Sistemas em Desenvolvimento ou em Manutenção, o salário varia muito de 2000 a 5000 mil Reais, ainda falta profissionais qualificados nesta área, com os conhecimentos necessários para atender a vaga, como sou um Arquiteto  Junior, ainda necessito de muito investimento em certificações para atender o Mercado Nacional ou galgar um degrau maior na empresa aonde eu trabalho.

Ano 2010.



     Escrevi esse Post em 2010, resolvi atualizar o mesmo, para falar mais sobre o assunto e as mudanças de mercado. Com a crise no Brasil tivemos uma baixa nos salários dos analistas de testes, vejo pouca vaga para muita concorrência e quase nada de vagas para Sênior, a maioria é para Junior e Pleno. Essas vagas variam de 1500 a 3500, é a triste realidade do momento, poucas vagas estão pagando acima de 4000 mil, apesar disso não vamos desanimar conheço muita gente que ganha entre 5000 a 7000 reais trabalhando com testes, geralmente quem ganha mais que isso trabalha com consultoria e treinamento.


    Acima vemos a pesquisa pelo maior site de empregos de TI, o CEVIU, temos o máximo de 7000, realmente muitas empresas multinacionais pagam esse valor, mas pra quem tem mais de 5 anos de experiência e domina o English Fluente, com as mudanças do mercado é necessário entender de várias ferramentas de testes e pelo menos uma linguagem de programação para automação, não é do dia pra noite que você vai se tornar um expert em testes, requer bastante treinamento e foco no aprendizado das ferramentas, é importante estudar um pouco ou tirar uma certificação em metodologia ágil. 
    Ser Proativo e Investigativo é um das principais qualidades de um testador, um ponto de atenção que muitos testadores erram é na comunicação e no trabalho em equipe. Muitas empresas que abrem a vaga de analista de testes e não conhecem nada sobre testes, e não tem um setor de testes definido no desenvolvimento de Software, pode ser uma boa oportunidade de crescer na empresa, mas vai ter muito trabalho pela frente. Tire da sua cabeça que o testador não precisa entender de desenvolvimento, o mercado mudou e agora é um diferencial na seleção.

Pesquisa sobre salários da Qualister:

Sites para Pesquisa de Emprego e Curriculum Online:


Minha Dica de Cursos baratos é na Udemy, faça a inscrição e selecione os cursos na wishlist e espere as promoções dos finais de semana, tem promoções boas por 12$ ou seja 56 reais dependendo do valor do dollar:

Pra começar recomendo um bom curso de Selenium com BDD e Python 3:


Bons cursos no Brasil:

Minha Dica de Pós-Graduação:

Desenvolvimento em Android (Mercado em Alta):

Análise de Dados com foco em Cloudy (Mercado em Alta):

Inglês Online o melhor é o englishtown:


Most popular test automation programing languages in the world
Em automação segue as linguagens mais usadas, em Primeiro vem Java, vejo um crescimento por JavaScript, Ruby, Python e C# nas vagas abertas.


O Selenium é o Framework mais usado, geralmente se usa o Selenium com Cucumber ou JUnit. A ferramenta mais usada pra automação é o UFT ou chamado QTP da HP e o segundo mais usado é o TestComplete.

Ferramentas de Testes automatizados tem as suas limitações, é bom conhecer todas elas, antes de adquirir uma ferramenta cara.

fonte: http://blog.testproject.io/2015/12/03/worlds-most-desirable-automation-skills/

Desired Skills and Experience
  • Ser apaixonado por testes e qualidade de software;
  • Possuir conhecimentos em criação e execução de casos de testes e aplicação de técnicas de análise de teste;
  • Possuir perfil investigativo;
  • Ter facilidade para trabalhar em equipe;
  • Estar disposto a novos desafios e mudanças;
  • Possuir experiência com testes em aplicações WEB;
  • Conhecer metodologias Ágeis (SCRUM, XP, Kanban);
  • Possuir experiência com testes funcionais, exploratórios e de integração;
  • Possuir experiência com ferramentas de gerenciamento e report de defeitos.
É DIFERENCIAL:
  • Experiência em programação (preferencialmente em JAVA);
  • Experiência em automação de testes (ex: Selenium , Cucumber);
  • Experiência com testes de stress e/ou performance.
>> A primeira parte desde anúncio sobre uma vaga de analista de testes, são os requisitos básicos de qualquer vaga de testador, o diferencial está na Automação com conhecimento de uma linguagem de programação, e uso do framework Selenium com BDD (Behaviour-Driven Development). 
Nos testes não-funcionais com testes de stress/performance, ele poderia ter adicionado também os testes de segurança, pelo menos os básicos relacionados as aplicações Web, Top 10 OWASP, outra coisa bem comum o conhecimento em SQL, pelo menos o básico (Insert, Alter table, Update, Delete, Select with multiple tables). Se a vaga fosse para Sênior iria exigir conhecimentos em testes para Mobile. 
Bom esse é o Perfil desejado atualmente de um testador, é sempre bom ter o nosso curriculum atualizado com as exigências do mercado de trabalho.


Ferramentas que os Analistas de Testes tem que conhecer:
TestLink - Open Source Test Management;
Jira Kanoah Tests - Project management, Bug tracking, Test Process, Test Management;
Bugzilla - Bug tracking;
MantisBT - Bug tracking;
HP UFT, HP LoadRunner - Bug tracking, Test Process, Test Management, Automation Testing, Performance/Stress Test;
TestComplete - Automation Testing Tool;
Ready! API - RestFul Testing Tool (Security, Load and Automation Testing)
Apache JMeter - Performance/Stress Test;
RedMine - Project Management;
Acunetix, IBM AppScan - Blackbox Security Testing (Web).

Entidades Certificadoras de Teste e Qualidade de Software, recomendo a BSTQB.
  • ALATS (Certificação Brasileira de Teste de Software).
  • CSTE (Certified Software Tester).
  • CSQA (Certified Software Quality Analyst).
  • CTFL (Certified Tester Foudation Level).
  • ISTQB (International Software Testing Qualification Board).
  • BSTQB (Brazilian Software Testing Qualification Board).
Links:
http://www.qaibrasil.com.br/
http://csqa.info/
http://www.bstqb.org.br/
http://istqb.org/display/ISTQB/Home
http://www.pmi.org/

quarta-feira, 20 de janeiro de 2016

Testes Unitários com Jasmine+Karma Test Runner


          
Nessa Postagem vamos falar sobre Testes Unitários em JavaScript, hoje em dia é um diferencial o testador conhecer sobre o mesmo, testes unitários não é nenhum bicho papão para o testador temer. Muitas empresas como a google fala da evolução do Quality Assurance para Test Engineering então é bom você aprender porque será o futuro, para saber mais sobre essa palestra leia as referências. 

Em programação procedural, o teste unitário é feito para testar uma unidade isolada ou função individual ou um procedimento separado. Idealmente, cada teste de unidade é independente dos demais, o que possibilita ao programador testar cada módulo isoladamente. 


1.    Escopo dos Testes Realizados


Vamos realizar testes unitários em um Jogo da Velha/ Tic Tac Toe, este foi desenvolvido em JavaScript. Será usando o framework Jasmine/karma Test Runner para desenvolvimento dos testes unitários em JavaScript. 
Com relação a criação dos scripts de testes, serão exatamente 17 testes para cada browser, totalizando 85 testes feitos no todo.
O projeto se limita aos browser Firefox, IE , Chrome , Safari, Opera, o teste foi será rodado nos sistemas Operacionais Windows e Linux, no Linux com limitação de browser (Firefox, Chrome, PhantomJS). 
Além de fazer os testes Unitários vamos corrigir os bugs do Jogo.

2.    Testes Manuais:

Para realização dos testes manuais foram feitos a cobertura dos testes utilizando o plugin firebug no browser Firefox, e no Chrome o seu próprio editor interno.

Bug 01 - Ao abrir o Jogo no Firefox o mesmo não estar funcionado corretamente, esta dizendo que eu já selecionei o campo, mas o campo está vazio.

Bug 02 - Quando inicio um novo jogo ele diz nada, por padrão deveria mostrar uma mensagem que o jogo foi iniciado.

Bug 03 - Ao testar o jogo no browser Google Chrome e Safari esta informando o ganhador errado.

Bug 04 - Quando eu desativo o javascript, ele para de funcionar, deve estar claro para o usuário que o mesmo deve estar ativado para funcionamento do jogo.

   Bug 05 UX/UI  - Pra melhorar a usabilidade do jogo deve ser colocada cores diferentes para cada jogador, assim melhorando a usabilidade do mesmo.

Bug 06 UX/UI - Para ficar mais interessante o jogo foi colocado um Score/Placar e um reset de Score/Placar.



Figura 01 - Quando os valores dos campos estão como undefined, ele exibe a mensagem que o usuário já ganhou “The winner is” e o nome do jogador.

3.    Lógica e cobertura dos testes:


Para o sucesso dos Scripts de Testes, deve se entender bem a lógica do jogo, antes de realizar a automação.

 Foram realizados 17 jogadas, essas 17 jogadas cobre todos os loops do código fonte implementado, em casa desenhei um quadro com o jogo da velha, e cada campo uma numeração  ce11, tanto que mudei isso no código para ficar como variável global:

ce11 = '', ce12 = '', ce13 = '',ce21 = '', ce22 = '', ce23 = '', ce31 = '', ce32 = '', ce33 = '';

A figura abaixo mostra muito bem o que fiz, são oito linhas, são necessárias somente uma jogada certa para cobrir um loop de código, como assim [ "X","X","X","O","O","","","","","X" ]  é uma jogada na figura seria 3,2,3, isso quer dizer que X ganhou o jogo, a jogada de O , O não vai ser analisada pelo código, não importa a ordem da jogada, mesmo que a jogada seja de O ou X, a análise do código vai ser a mesma, ele vai entrar no primeiro loop do código:

if (((ce11 !== '') && (ce12 !== '') && (ce13 !== '') && (ce11 == ce12) && (ce12 == ce13)) ||

Primeiro ele verifica se os três primeiros campos estão vazios, e segundo se os três campo são iguais, e mostra a mensagem pro usuário X, por isso tem aquele X no final dos testes, representa o usuário que fez a jogada, concluindo basta um teste para cada loop feito no código. Beleza e quando o usuário não entra em nenhum loop?

Bom isso é simples  a jogada representa assim:

[ "X","X","O","O","","","","","","X" ]

X fez duas jogadas e O fez duas jogadas, e quem esta jogando é X.
Coloquei no código a mensagem "Continue game!", ele não faz nada continua a jogada no jogo, não importa a quantidade de vezes diferentes sempre vai entrar em Continue game, então você precisa somente de um único teste para representar isso!

E por último seria a jogada que não houve ganhador:

 ("X","O","X","O","X","X","O","X","O","X")).toEqual("There wasn't winner");

Representado pelo testes acima, basta um único teste para cobrir esse laço de código, são totalmente desnecessário realizar diversos testes, sendo que um único já basta.  


Para pessoas críticas quem me garante que você falou esta certo?
Para isso usei o karma-coverage é um plugin que analisa a cobertura do código realizado.


Como o código implementado seria exibido na página HTML, sem precisa criar um arquivo separado?

Respondendo essa questão, a melhor forma seria criar uma classe pra fazer a chamada das funções e referenciar o html para a classe, não foi implementado isso, mas fica a dica aqui, para melhorar o código feito.




Figura 02 - karma-coverage



Figura 03- Foi baseado nesta figura a quantidade de possibilidades de ganhar o jogo, que é a mesma do código.

4.    Testes Unitários/Unit Test:

 As figuras abaixo mostra o resultado dos testes realizados, em dois ambientes diferentes Linux e Windows.


Na figura 04 - Mostra os testes realizados no Linux (Mint), foram removidos os browsers que não são padrões como IE, Safari, Opera, no entanto foi adicionado um novo browser PhantomJS. O teste falho foi adicionado de propósito, para mostrar  o resultado com falha. 


Rodando os testes via Jasmine sem o Karma Test Runner, temos o seguinte relatório:




       Para concluir o Jasmine é uma ferramenta muito poderosa, além de fazer os testes unitário podemos executar os Testes na camada de UI com o Protractor, assim podemos ter uma solução completa. Nas referências contém tudo que vai precisar sobre os testes unitários em JavaScript, compartilhei o projeto para a comunidade de testadores saber mais sobre o assunto. Bom espero que tenham gostado, ser um bom testador é sempre ir mais além.


Referências:

Para Aprendizado sobre JavaScript, segue um curso online no YouTube:
Curso JavaScript - Introdução #01

Download da documentação e do jogo da velha com os testes unitários: 
https://www.dropbox.com/sh/jfhxudslfpasvhu/AAAn2mLvnNN4GdLov19moGPUa?dl=0

Palestra sobre Test Engineering da google:
GTAC 2013 Keynote: Evolution from Quality Assurance to Test Engineering

Jasmine:
http://jasmine.github.io/2.4/introduction.html

Karma Test Runner:
https://karma-runner.github.io/0.13/index.html


segunda-feira, 11 de janeiro de 2016

6 Bugs em páginas de Upload de arquivos


Cinco Bugs em páginas de Upload6 Bugs em páginas de Upload

    1. Eu estava fazendo upload de arquivo no site do agiletesters e encontrei um Bug no NodeBB, não conseguia fazer o upload do arquivo. Analisando o problema vi que quando exportei a apresentação que fiz pra imagem, ele gerou a extensão com letra maiúscula.
    O NodeBB não foi capaz de notar isso, provavelmente o programador quando fez a função deixou em lowercase a validação, a melhor forma é você converter tudo que vem pra lowercase ou seja letras minúscula. Isso é bem comum de acontecer esse tipo de problema nas aplicações, o programador com pressa deixa a validação em lowercase ou uppercase, esquecendo de validar os dois na sua validação. Fica aqui essa dica para conhecimento dos testadores.

   Caso vocês tenham dúvida que seja um erro, leia sobre o desenvolvimento de uma página de upload abaixo:

   No código apresentado na  linha 32 ele usou a função strtolower, todo bom programador sabe que tem que converter o código pra lowercase , senão pode dar problema.

Função aonde ele converte o a extensão pra letras minúsculas:
 $extensao = strtolower(end(explode('.', $_FILES['arquivo']['name'])));

http://php.net/manual/pt_BR/function.strtolower.php

  Exemplo real site do Agile Testers.

Alguns testadores leigos vão dizer que isso não é problema, existem muitos programas que converte a extensão pra letras maiúsculas, no meu caso foi o PowerPoint, um programa muito utilizado. Muitos clientes podem reclamar do sistema que não esta fazendo o upload, até você explicar para o cliente isso já deu bastante problema. É claro que não é problema do Agile Testes, que somente adotou o NodeBB, a questão que esta sendo levada aqui é outra.

2. Outro problema das páginas de Upload, é deixar fazer o upload de qualquer extensão sem restrição, nesse caso o NodeBB fez muito bem, como vemos abaixo:


Já vi sites serem invadidos por esse problema, ao fazer o upload de arquivos .php/.jsp/.java, pode ser executados remotamente pelo servidor, tendo acesso a enviar comandos no servidor, abrir portas para conexão, copiar dados, infectar outras máquinas com vírus, ou até mesmo travar o servidor com loops infinitos.

No site do "linha de código" ele desenvolveu um código bem legal, faz esse tipo de validação com um array, ele também poderia ler um arquivo de configuração .properties, sem precisar mexer no código para acrescentar uma nova extensão, caso o cliente venha pedir.

// Array com as extensões permitidas
$_UP['extensoes'] = array('jpg', 'png', 'gif');


Com isso evitamos o problema abaixo:


Um teste que se pode fazer é alterar a extensão da imagem, tentando enganar a aplicação, exemplo:
teste.png.php

3. Terceiro Bug é deixar fazer upload de arquivos muito grandes, sem nenhuma limitação. Isso pode gerar vários problemas de performance no servidor, para evitar essa dor de cabeça futuramente, limite o tamanho dos arquivos de upload. No código do "linha de código" ele fez bem feito, limitou em 2 megabyte.
// Tamanho máximo do arquivo (em Bytes)
$_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

Teste: Tente fazer upload de um arquivo gigante como 300Mb fora da rede da empresa, tente fazer a aplicação travar.

4. Nosso quarto problema em páginas de upload é caracteres especiais e acentuação, algumas páginas de upload armazena o nome em um banco de dados, se o charset não estiver correto, isso pode gerar algum erro. Uma dica seria converter todo nome para caracteres aplicáveis em entidades html, em PHP se usa a função htmlentities para codificar os caracteres, e você usa a função
html_entity_decode para decodificar os caracteres. Dessa forma não teremos problema.


5. Nosso quinto bug, é um problema simples, de você fazer o upload de uma imagem e ela não esta sendo exibida, geralmente o link ou o caminho esta quebrado, alguns programas geram o caminho dinamicamente e concatena com o nome do arquivo, também pode acontecer de endereço do servidor mudou, ou até mesmo não foi dado a permissão necessária.

Com essas dicas evitamos o problema abaixo (HTTP Error 500):



6. Nosso sexto bug é na verdade uma melhoria de Usabilidade, muitas páginas de Upload você consegue baixar um arquivo por vez, acho muito chato como usuário, fazer o upload de uma imagem por vez, perco muito tempo nesse processo, podemos melhorar isso, aumentando o número de upload, mas temos que limitar esse número por problemas de performance, 4 imagens/arquivos por vez seria uma maravilha.

Espero que com esses dicas você venha pegar inúmeros bugs, e ajudar a melhorar os sistemas Web. Bom espero ter ajudado a comunidade de testadores! Se tiver alguma dúvida deixe um comentário, ela será bem respondida.


http://www.w3schools.com/php/func_string_html_entity_decode.asp
http://www.w3schools.com/php/func_string_htmlentities.asp