Upload
phungtram
View
226
Download
0
Embed Size (px)
Citation preview
Testes Ágeis
● São práticas de testes de acordo com os princípios do desenvolvimento ágil e que permeiam todo o ciclo de desenvolvimento, constituindo uma atividade constante do projeto e não uma fase
● Testes são imprescindíveis ao desenvolvimento de software
– Produto de software que não seja construído sob constante verificação da sua eficácia e eficiência é um produto inacabado!
● Os testadores tanto zelam pela qualidade externa e visão do cliente como atuam na construção da qualidade interna definida pelo time
● É fundamental balancear o uso dos diversos níveis e tipos de testes através de práticas, técnicas e ferramentas de apoio
Testes Manuais Funcionais
● Indispensáveis ao projeto:– Fornecem a primeira validação do atendimento aos
requisitos funcionais e não-funcionais do sistema– Consideram fatores subjetivos como a experiência do
usuário, interface do sistema, ...– Variação no fluxo de execução das funcionalidades– Aceitação do usuário
Testes Manuais Funcionais - Projeto
● Casos de Uso– Derivação de casos de teste a partir das regras e fluxos
de execução descritos no requisito
Testes Manuais Funcionais - Projeto
● Casos de Uso– Derivação de casos de teste a partir das regras e fluxos
de execução descritos no requisito
Testes Manuais Funcionais - Projeto
● Histórias de Usuário– Descrição geral dos objetivos de uma funcionalidade do
ponto de vista do usuário– http://wiki.cta.serpro/index.php/User_Stories_e_Ce%C
3%A1rios_de_Uso
Testes Manuais Funcionais - Projeto
● Cenários de Uso– Descrição que contém atores, as informações por trás
deles, informações sobre o seu ambiente, os seus objetivos e sequências de ações e eventos
– Pode incluir também os obstáculos, contingências e êxitos dos atores
– http://wiki.cta.serpro/index.php/User_Stories_e_Ce%C3%A1rios_de_Uso
Testes Manuais Funcionais - Projeto
● Especificação por Exemplos– Abordagem colaborativa para definição de requisitos e
testes funcionais orientados ao negócio para produtos de software baseados na captura e ilustração de requisitos usando exemplos realísticos ao invés de afirmações abstratas
Testes Manuais Funcionais - Projeto
● BDD (Behaviour Driven Development):– O BDD é uma técnica de desenvolvimento de software
onde os programadores desenvolvem o sistema guiados por comportamentos (testes de aceitação)
– Os comportamentos são descritos em uma linguagem natural similar a linguagem do negócio, a qual deve ser facilmente entendida pelo cliente e demais membros do time
Testes Exploratórios
● Aprendizado, criação e execução de um teste ao mesmo tempo
● Normalmente o testador não tem informações detalhadas sobre o que vai testar e como vai testar:
– Baseia-se na experiência, assim como no conhecimento adquirido sobre o sistema durante a execução do teste
– A partir dessa perspectiva, podemos afirmar que o teste exploratório:
– É uma atividade iterativa e empírica de exploração que exige idas e vindas num processo de investigação contínuo
– A intuição, a criatividade e a experiência do testador são indispensáveis para garantir a eficiência do teste
Testes Exploratórios
● Características:– Não são ad-hoc e nem criados com antecedência– Não segue um roteiro rígido (segue guias e diretrizes)– Baseado em pensamento estruturado e exploração livre– Adaptativo e flexível– Enfoca o aprendizado em paralelo– A execução do teste é guiada/aprimorada com base em
execuções anteriores– Exige profissionais experientes– Expande o escopo dos testes tradicionais baseados em
roteiros (introduz variação aos casos de testes)– Fluxo imediato de feedback (e correção de curso)– Amplifica a cobertura dos testes
Testes Exploratórios
● O oráculo é o Testador:– A experiência afeta diretamente a qualidade do teste– Criatividade– Observação cuidadosa– Metódico– Pensamento crítico– Aprendizado rápido– Intuição e Improviso– Auto-gerenciamento– Ideias diversificadas: baseia na sua experiência, mas usa
heurísticas, checklists, diretrizes e técnicas formais (classes de equivalência, valores limítrofes, tabelas de decisão, diagramas de estado, fluxogramas, etc)
– Recursos: usa ferramentas de apoio
Testes Exploratórios
● Algumas referências:● Ferramenta para gravação de vídeos:
– http://www.debugmode.com/wink/● Algumas heurísticas para testes exploratórios em
aplicações web– http://voce.serpro/04151765905/blog/algumas-heuristicas
-para-testes-exploratorios-em-aplicacoes-web
Testes de Acessibilidade
● “A construção de sítios acessíveis é uma exigência do decreto 5.296, publicado em dezembro de 2004, que torna obrigatória a acessibilidade nos portais e sítios eletrônicos da administração pública na rede mundial de computadores para o uso das pessoas com necessidades especiais, garantindo-lhes o pleno acesso aos conteúdos disponíveis”
● “O Modelo de Acessibilidade de Governo Eletrônico (e-MAG), consiste em um conjunto de recomendações a ser considerado para que o processo de acessibilidade dos sítios e portais do governo brasileiro seja conduzido de forma padronizada e de fácil implementação"
● Para conhecer vários conceitos básicos relacionados a acessibilidade e o e-MAG, recomenda-se fortemente a leitura do documento de Modelo de Acessibilidade do e-MAG
Testes de Acessibilidade
● Algumas referências:– https://www.w3.org/WAI/ER/tools/– http://www.utad.pt/wai/wai-pageauth.html– http://www.acessibilidadelegal.com/13-validacao.php– http://wiki.cta.serpro/index.php/Roteiro_para_Avalia
%C3%A7%C3%A3o_de_Acessibilidade– http://wiki.cta.serpro/index.php/Checklist_para_Aval
ia%C3%A7%C3%A3o_de_Acessibilidade
Testes de Usabilidade
● Teste de Usabilidade tem por objetivo verificar a facilidade que o software ou site possui de ser claramente compreendido e manipulado pelo usuário
● Verifica se o sistema utiliza manuais, ajuda, assistentes eletrônicos, ...
● Para avaliar a usabilidade de um sistema podemos aplicar uma metodologia chamada Avaliação Heurística, definida por Nielsen e Molich (1994), onde são abordadas 10 questões:
– Visibilidade do status do sistema
– Compatibilidade entre o sistema e o mundo real
– Controle e liberdade para o usuário
– Consistência e padrões
– Prevenção de erros
– Reconhecimento em lugar de lembrança
– Flexibilidade e eficiência de uso
– Projeto minimalista e estético
– Auxiliar os usuários a reconhecer, diagnosticar e recuperar erros
– Ajuda e documentação
Testes de Usabilidade
● Algumas referências:● Heurísticas de Nielsen:
– http://wiki.cta.serpro/index.php/Heur%C3%ADsticas_de_Nielsen
● Lista de verificação para Testes de Usabilidade:– http://wiki.cta.serpro/index.php/Lista_de_Verifica%C
3%A7%C3%A3o_de_Usabilidade
Testes de Segurança
● Avaliar as vulnerabilidades em aplicações e serviços frente a diferentes tipos de ataques de segurança – como ataques de negação de serviço ou ataque man-in-the-middle – e descobrir novas vulnerabilidades antes que sejam exploradas por atacantes
● COGSI – Coordenação Geral de Gestão da Segurança da Informação● http://cogsi.serpronet.serpro/conteudo/institucional
● Norma SG 021● http://sinor.portalcorporativo.serpro/documento.php?
cod=MzAxODk=
Testes de Segurança
● Vulnerabilidades a serem verificadas (Norma SG 021):– Injeção de código (SQL injection, Xpath injection, XML
injection, command injection, LDAP injection, ...)– Forçar a execução de códigos ou requisições no lado
cliente (cross site scripting, cross frame scripting, cross site request forgery, click injection, ...)
– Listar, acessar e/ou alterar dados não autorizados– Quebrar os algoritmos criptográficos utilizados pela
aplicação– Comprometer senhas, chaves ou tokens de sessão– Visualizar o tráfego de informações privadas– Alterar o conteúdo e/ou layout da aplicação– Redirecionar vítimas para sites maliciosos
RQM
● Rational Quality Manager (RQM)● Registro das atividades de testes por projeto do
sistema:– Plano de Testes, Casos de Teste, Resultados e
Relatórios● Integração com o módulo de requisitos (RM):
– Usa requisitos registrados– Fornece casos de teste (validado por)
● Integração com o módulo de gestão (CCM):– Usa planos de desenvolvimento e defeitos
PSDS RQM
Planejar e Acompanhar Testes - Criar e Preencher o Plano de Teste- Aprovar Plano
Projetar Testes - Criar e preencher os Casos de Teste
Implementar Testes - Criar Scripts de Teste
Executar Testes - Executar Casos de Teste- Relatar Defeitos- Acompanhar Defeitos
Avaliar Resultados de Testes - Visualizar Resultado dos Casos de Teste- Gerar Relatórios (Elaborar e Manter)- Visualizar Artefatos
RQM
RQM
● Algumas referências:● Material de treinamento:
– http://portal.alm.serpro.gov.br/materiais-de-treinamento/rqm
● Mentores de ferramentas:– http://portal.alm.serpro.gov.br/mentores-de-ferramentas
/copy4_of_rqm
Automação de Testes
● Prós:– Testes de regressão (refatorações e novas
implementações)– Integração contínua– Feedback rápido (tempo de execução)– Confiabilidade do software– …
● E Contras (?):– Manutenção
Automação de Testes
● Quando automatizar testes– Sempre que possível!– Funcionalidades principais do sistema– Alto volume de refatorações
● Indefinições de requisitos● Arquitetura
– Atividades repetitivas nos testes manuais– Complexidade de fluxos, regras, cálculos...
Automação de Testes
● Automação nos diferentes níveis e tipos de teste● Paradigmas de automação de testes:
– Testes caixa preta
– Testes caixa branca
Testes Unitários
● O desenvolvedor também é responsável pelos testes:– Testam sob a perspectiva do código (método por
método) com o objetivo de prevenir e detectar defeitos– Garantir a qualidade de cada unidade do código
individualmente– Unidade, neste contexto, deve ser entendida como o
menor trecho de código de um software que pode ser testado, podendo ser uma função ou procedimento em linguagens de programação procedurais ou métodos de classes em linguagens orientadas a objetos
– São utilizados casos de testes criados a partir:● Das classes de equivalência, ou seja, o conjunto de estados
válidos e inválidos para as condições de entrada● Da análise dos valores limites, ou seja, entradas e saídas que
estão nas extremidades destas classes
Testes Unitários
● Benefícios:– Feedback imediato ao desenvolvedor– Segurança em mudanças e refatorações através dos
testes de regressão– Ajudam na identificação e isolamento de defeitos– Em conjunto com plugins de cobertura fornecem uma
visualização das áreas do software cobertas por testes– Fornecem um exemplo executável de como funciona o
código (ou como deveria funcionar)
● TDD (Test Driven Development)– Escrita dos testes antes da implementação do código:
● Direcionam como o código deverá ser estruturado● Irão assegurar o comportamento adequado do código
– Nenhum código vai para produção sem ter pelo menos um teste associado a ele
– Facilita o rastreamento de erro caso uma mudança ocasione um problema
– Facilita refatoração– Você só implementa o mínimo que deve ser
implementado, sem código em excesso
Testes Unitários
● JUnit– Framework opensource, integrado ao Eclipse, com
suporte à criação de testes automatizados na linguagem de programação Java
– Facilita a criação de código para a automação de testes unitários com apresentação dos resultados
– Possibilita verificar se cada método de uma classe funciona da forma esperada, exibindo possíveis erros ou falhas, podendo ser utilizado tanto para a execução de baterias de testes como para extensão
Testes Unitários
● JUnit● Principais Facilidades
– Permite criação de testes unitários para métodos pertencentes a uma classe
– Permite a definição e execução de um conjunto de testes unitários – Suites de Teste
– Permite a execução de teste com relato de problemas ocorridos e onde especificamente ocorreram os erros
– Uma vez escritos, os testes são executados rapidamente sem que, para isso, seja interrompido o processo de desenvolvimento
– Facilmente integrável com as IDEs Java já existentes (Eclipse, Netbeans, JBuilder, ...)
Testes Unitários
● Mock– É uma simulação do objeto real
● Implementa a interface e o comportamento do objeto real identicamente para viabilizar testes
– Também validam se o código que os utiliza está correto● Para passar da validação do mock, outros objetos devem
chamar os métodos corretos, com os parâmetros esperados, na ordem esperada
● Um objeto de teste que simplesmente substitui um objeto real sem promover tal verificação não é um mock e sim um stub
Testes Unitários
● Razões para utilizar Mock– Ajuda no desacoplamento de código– Verifica a utilização de código de outro objeto– Direcionamento de código de teste– Testes mais rápidos– Simula interação com dispositivos externos e remotos– Protela a implementação de classes– Isolamento de testes– Utilização e refinamento de interface– Testa situações incomuns difíceis de reproduzir
Testes Unitários
● EasyMock● Foi o primeiro gerador dinâmico de objetos mock, aliviando
os utilizadores manuais, ou a geração de código para eles:
– Criação dinâmica de objetos Mock– Especifica os valores retornados por casos de teste– Define apenas o que é necessário– Código mais légivel– Pode necessitar de refatoramento no código– Não simula métodos estáticos e final
Testes Unitários
● JMockit– Permite que os desenvolvedores escrevam testes
unitários e de integração– Os testes podem ser facilmente escritos com mock final,
classes e métodos, métodos estáticos, construtores, e assim por diante; não há limitações
– API de simulação simples e consistente– Não há métodos especiais ou anotações que devem ser
usados no código de teste, com exceção daqueles que realmente fazem sentido
Testes Unitários
● EasyMock x JMockit– O EasyMock (o mesmo é verdadeiro para a maioria dos
frameworks de simulação) não simula métodos static ou final, podendo apenas simular métodos públicos
– Muitos métodos estáticos no sistema:● Problema de arquitetura?● Refatoração?● Bibliotecas externas?
– JMockit é uma pequena estrutura que pode ajudar nesses casos
● Permite substituir os métodos dinamicamente com novas definições
● Permite redefinir métodos privados, static, final e construtores sem argumentos
Testes Unitários
Testes Unitários
● EclEmma– Plugin para o Eclipse que mede e apresenta a cobertura
de testes em percentual– Os testes são executados no próprio Eclipse e a
apresentação dos trechos cobertos e descobertos é integrada ao editor Java
– Não requer modificações nos projetos ou qualquer outra configuração (não-invasivo)
Testes Unitários
● Algumas referências:● DECTA Ágil – Testes Unitários
– http://voce.serpro/articles/public/0108/5950/DECTA-TV-TestesUnit_rios.pdf
● Boas práticas em Testes Unitários:– http://voce.serpro/siscoaf2/blog/testes-unitarios-boas-prat
icas● Orientações para Testes Unitários:
– http://wiki.cta.serpro/index.php/Orienta%C3%A7%C3%B5es_para_Testes_Unit%C3%A1rios
● Testes que são executados em uma combinação de componentes
– Verifica-se a corretude desses componentes em conjunto– Assegura-se que as interfaces entre eles funcionam de
forma prevista e que os dados estão sendo processados conforme especificado
– Unidades, Componentes, Sub-sistemas, API / WEB Services, Hardware, Banco de dados
– Teste de baixo nível dos componentes e APIs internas do sistema sem acesso a interface gráfica
Testes de Integração
● DbUnit– Extensão do JUnit direcionado para projetos de banco de
dados que, entre outras coisas, coloca seu banco de dados em um estado conhecido entre as execuções de testes
– O banco pode ser populado com dados antes dos testes unitários serem executados
– O banco pode retornar para o estado anterior ao teste unitário
Testes de Integração
Testes de Integração / Funcionais
● SoapUI● Ferramenta open source escrita em Java cuja principal
função é consumir e testar web services● Dentre as suas principais características, podemos destacar
as seguintes:
– Importação e geração automática das requisições descritas no WSDL
– Gerenciamento de múltiplos endpoints para cada web service– Validação das respostas (asserções) de um web service– Testes funcionais, carga e stress– Execução de diversos testes em paralelo– Criação de mock para testes de web service– Suporta criação de testes complexos utilizando scripts Groovy
Testes de Integração / Funcionais
● SoapUI● Para iniciar o teste de um web service com o SoapUI,
basta criar um novo projeto e informar o endereço do WSDL:
Testes de Integração / Funcionais
● SoapUI● O SoapUI disponibilizará uma request com os dados
necessários para serem informados no web service. Os campos aparecem com um ponto de interrogação:
Testes de Integração / Funcionais
● SoapUI● É possível criar uma suíte de testes, onde será
possível observar o resultado da execução de todos os testes, ou analisar os detalhes de cada um deles:
Testes de Integração / Funcionais
● SoapUI● Algumas referências:
– http://www.soapui.org/– http://supst.serpronet.serpro/conteudo/produtos-e-servi
cos/framework-e-componentes/web-services/
Testes de Integração / Funcionais
● Arquitetura REST– Representational State Transfer– Arquitetura utilizada para criação de APIs– Trabalha, geralmente, sobre o protocolo HTTP/HTTPS
usando métodos GET, POST, PUT, DELETE, OPTIONS, PATCH e HEAD
– Utiliza respostas no formato JSON ou XML– Demoiselle 2.5
● HTML + REST● Validação dos serviços que a aplicação expõe para outros
sistemas (integração) e que são consumidos pelas telas do próprio software (funcional)
Testes de Integração / Funcionais
● Arquitetura REST– Como testar manualmente:
● Curl em sistemas Unix● Plugins para navegadores: RESTClient, Poster, ...
– RestAssured:● Biblioteca Java para simplificar testes de serviços baseados em
REST● Compatível com os principais métodos● Possui mecanismos de validação de esquema, corpo e
cabeçalho de requisições● Utiliza a sintaxe de especificação por exemplos, o Given-When-
Then, muito conhecida em testes dirigidos por comportamento (BDD)
● https://code.google.com/p/rest-assured/
Testes de Integração / Funcionais
● RestAssured + Demoiselle Behave– Passos para execução das chamadas REST
Testes de Integração / Funcionais
● RestAssured + Demoiselle Behave– Passos para execução das chamadas REST
Testes de Integração / Funcionais
● RestAssured + Demoiselle Behave– Cenários de reuso (passo a passo)
Testes de Integração / Funcionais
● RestAssured + Demoiselle Behave– Configuração e execução dos testes
Testes Funcionais Automatizados
● Demoiselle Behave (http://www.dbehave.com/)● Framework de integração de ferramentas para uso de
técnicas de Desenvolvimento Orientado a Comportamento – Behaviour-Driven Development (BDD)
● Além de uma ferramenta BDD
– Abstração de ferramentas BDD● JBehave
– Abstração de ferramentas de automação de testes● WebDriver● Fest
– Abstração de ferramentas de gestão de testes● RQM
● Subprojeto do Framework Demoiselle
Testes Não Funcionais
● JMeter● Software open-source, 100% escrito em Java, mantido pelo
grupo Jakarta Apache, que tem a capacidade de executar planos de testes configurados através da sua ferramenta gráfica
● Pode ser utilizado para teste de performance de aplicativos, simulando uma determinada demanda
● Também é possível adaptá-lo para testes de caixa preta
Ambiente de Integração Contínua
● Jenkins (http://jenkins.aic.serpro/)– Ambiente AICAT– Slaves dedicados a execução de testes automatizados– Registro dos resultados no RQM e geração de relatórios– Qualquer pessoa pode disparar os testes– Possibilidade de disparar, antes da execução dos testes
funcionais automatizados, o job responsável por gerar e publicar a build do sistema a ser testado
Radar de Práticas SUPDEhttp://10.200.118.38/techradar/examples/
Conclusão
● A qualidade interna do código deve favorecer a resposta rápida à mudanças, acelerando a identificação de falhas no ciclo de desenvolvimento. Isso só é possível com o uso frequente de testes (desde os unitários até os funcionais de sistema), tanto para atuar na prevenção de defeitos (já que os testes guiam o desenvolvimento) como para proporcionar a velocidade adequada na detecção de falhas
● Com o código sendo construído desde o início com qualidade, os testes exploratórios e de aceitação deverão, oportunamente, levantar as possíveis falhas de negócio que poderiam comprometer o produto
● É fundamental balancear o uso dos diversos níveis de testes!
Obrigado!
Delmar de Castro Mehret Filho
SUPDE/DECTA/DE9CT
#41 8584