3. Quem
somos
● Alex Warmling - alex@chaordic.com.br
○ 3+ anos de QA
○ Já atuou como DEV
○ Instrutor de teste de software no programa
GeraçãoTEC;
○ FullStack QA na Chaordic
4. Quem
somos
● Fausto Siqueira - siqueira@chaordic.com.br
○ 8+ anos de QA
○ Trabalhou na EDS e IBM
○ Agile test lead na Chaordic
○ ISTQB Certified Foundation Level Tester
6. Apresentação dos
participantes
● Trabalha em ambiente ágil ou tradicional?
● É QA?
● Sua equipe escreve testes unitários?
● Sua equipe pratica TDD ou outra prática
test-driven?
12. Testes consistem na verificação dinâmica do
funcionamento de um programa em um conjunto
finito de casos de teste, selecionado dentro de
domínio infinito de entradas, contra seu
funcionamento esperado (SWEBOK, 2004)
● Dinâmico – Execução
● Finito – Existem muitos casos de teste
● Selecionado – Técnicas diferem na
seleção
● Esperado – Funcionamento esperado
deve ser verificado
Definição
13. ● Encontrar e documentar defeitos
● Fornecer base para percepção da qualidade do
software
● Avaliar se o produto de software funciona como
projetado e esperado
● Garantir que os problemas encontrados sejam
corrigidos
Objetivos
14. ● Muitos bugs são gerados e não são encontrados
quando o software ainda esta em desenvolvimento
● Com os sistemas para internet o número de usuários
é milhares de vezes maior
● Necessidade de equipes especializadas em testes
● O custo destes bugs se torna cada vez maior
Cenário atual
16. Então, testando
eliminamos
todos os
defeitos?
Segundo MYERS (1979), em seu livro The art of sotware
testing:
● Testes unitários podem remover de 30% a 50% dos
defeitos
● Testes de sistemas podem remover de 30% a 50%
dos defeitos remanescentes
● Revisão de código pode ainda reduzir entre 20% e
30% do restante
● Software em produção ainda com ~40% de defeitos
17. “Qualidade não é uma
fase do ciclo de
desenvolvimento de
software, é parte de
todas as fases”
21. Como faço para
saber o que
testar primeiro
então?
● Identificar componentes e features do software a
serem testados:
○ Priorizar
○ Positivos/negativos
○ Os mais graves
○ Os mais prováveis
○ Falhas anteriores
○ …
● Considerar aspectos funcionais e não-funcionais
● Considerar tempo, recursos, riscos
● Nem tudo pode ser testado, e o que é testado não
pode ser completamente testado.
27. Razões para
automatizar
● Escalabilidade de execução de testes
● Repetição controlada
● Ambientes controlados e definidos
● Execução rápida e contínua, idealmente robusta
● Entra na Integração Contínua
28. Integração
contínua
● Área de Staging
● Confiança para deploy
● Visibilidade sobre a integridade da build
● Regressão da aceitação evita quebra de regra de
negócios
30. Integração
contínua
● Feedback contínuo para a equipe DEV
● Feedback para área de negócios, testes de
aceitação
● Servidores de integração contínua
○ Jenkins Ci
■ Ci-reporter gem
○ Circle Ci
36. Test::Unit
● Implementação do framework xUnit para
Ruby
● Test::Unit::Assertions
○ assert
○ assert_equal
○ assert_not_equal
○ assert_raise
37. Um teste automático por re-
teste de bug fix evita a
recorrência do problema
Re-teste de
bugs
● Bug fix é validado com um teste script
automático
● Script é adicionado à suite de regressão
● Evitar recorrência de bugs é fundamental
38. Testes de
aceitação
● Feedback contínuo para o cliente
● Visibilidade sobre o status do sistema
● Transparência com o cliente
● Documentação dinâmica e ativa
● Confiança
● Regressão
39. Bug tracking
Adotar?
● Comunicação
● Agilidade em corrigir bugs
● Priorização para correções VS. novas funcionalidades
● Métricas
● Knowledge base
● Auditoria
● Evidências
40. Bug tracking
Adotar?
● Times distribuídos
● Grandes equipes
● Ferramenta de comunicação
● Rastreabilidade entre requisitos
● Bugs em produção
42. Desafios
● Atitude
● Coragem para codificar
● Conhecimento
● Curva de aprendizado
● Investimento inicial
● Não quer ser DEV
43. Instalação
Ruby em
Linux
● RVM - Ruby Version Manager
○ “RVM gives you compartmentalized independent
ruby setups. This means that ruby, gems and irb
are all separate and self-contained - from the
system, and from each other.”
● https://rvm.io/rvm/install
● Linux
$ curl -sSL https://get.rvm.io | bash -s stable --ruby
$ ruby -v
44. Instalação
Ruby em
Linux
● $ source /home/siqueira/.rvm/scripts/rvm
● Criar GemSet
○ $ rvm create gemset academia_chaordic
52. Comentários
● De linha
● De bloco
# for i in 0..5
# if i > 2 then
# break
# end
# puts "Valor da variavel local seria #{i}"
# end
=begin
for i in 0..5
if i > 2 then
break
end
puts "Valor da variavel local seria #{i}"
end
=end
55. Escopo de
variáveis
● Locais
a. Escopo de método
b. Variáveis locais começam com letra minúscula ou _.
● Instância:
a. Escopo de objeto.
b. Nome precedido por @
● Classe:
a. Escopo de classe.
b. Característica de uma classe.
c. Disponível para diferentes objetos.
d. Precedidas por @@
● Globais:
a. Disponível entre classes.
b. Nome precedido por $
83. File I/O
● Imprima em um arquivo o maior e o menor valor de
um array com 10 números inteiros
● Aqui você pode utilizar os conceitos de Array, if e
for
85. Automate your web browser
beautifully, nicely and
easily with some very sweet
syntactic sugar.
86. What is Watir?
● Open-source web test automation framework
● Bibliotecas Ruby
● Independente de tecnologia da app
● Simula input de usuário no navegador
87. Watir drives browsers the
same way people do. It
clicks links, fills in forms,
presses buttons. Watir also
checks results, such as
whether expected text
appears on the page. [watir.
com]
Re-teste de
bugs
88. Watir-classic
● Somente Internet Explorer
● Manipula o navegador via OLE - Object Linking and
Embedding sobre a arquitetura COM - Component
Object Model
● IE -> serve objetos, expondo seus métodos
● Ruby -> cliente, manipula os objetos
89. Watir-webdriver
● Versão moderna da API Watir baseada em Selenium
2.0 com WebDriver
● Jari Bakken implementou
● Construída a partir da especificação HTML
● W3C compatível
90. Watij
● Web Application Testing in Java
● Simplicidade do Watir com poder do Java
● Pode-se usar JRuby e o interpretador IRB
91. Vantagens
● Comunidade ativa
● Ruby nativa
● Suporte a multiplos browsers
● Poderosa, leve e fácil de utilizar
● Sem gravadores - Test records
92. Vantagens
● Sem find_element(s) === menos código;
● Specific methods (divs, buttons, links…);
Selenium: driver.find_element(:class, 'product-
title')
Watir: driver.div :class => ‘product-title’
● Explicit waits for AJAX (Selenium :timeout => 10)
● JavaScript alerts
93. Vantagens
● Fácil de lidar com iFrames
● Utilizar com rubygem PageObject
● Possível medir performance da página com Watir-
WebDriver-Performance gem
101. Exemplo
require 'watir-webdriver'
firefox = Watir::Browser.new :firefox
firefox.goto 'google.com'
firefox.text_field(:name => 'q').set 'chaordic'
firefox.button(:name => 'btnG').click
begin
firefox.links.each do |link|
link.click if link.href == 'http://www.chaordic.com.br/'
end
rescue Selenium::WebDriver::Error::StaleElementReferenceError
nil
end
firefox.quit
102. Performance
● Measure page performance gem
“The Watir-WebDriver-Performance gem aims to
provide a set of navigation timing metrics for Watir-
WebDriver actions using a W3C page performance
standard. This is a perfect solution to capture
response time metrics, and it’s very straightforward
to do but currently only works in Chrome and IE9l, so
there’s no Firefox support.”
109. Cenários
de Aceitação
1. Usuário do ecommerce
fastshop.com.br quer colocar um
produto no carrinho e calcula o
frete
● Quais seriam as validações a
serem feitas?
121. ● Implementa o padrão Page Object em Watir
WebDriver e Selenium WebDriver para Ruby
○ https://github.com/cheezy/page-object
Page Object
cheezy
gem
“...facilitate creating abstraction layers in your
tests to decouple the tests from the item they
are testing and to provide a simple interface to
the elements on a page.”
122. ● ATDD - Acceptance Testing Driven Development
● Linguagem simples para interagir com o conteúdo
da página web
● Integração fácil com rspec e cucumber
Page Object
cheezy
gem
123. ● A Simple way of dealing with Frames and iFrames
● Robust way of dealing with Ajax Calls
● A clean way of handling Javascript Popups
● Support for most html Elements
Page Object
cheezy
gem