Post on 28-May-2015
description
Todas as abordagens de teste dentro do ágil!
@eliasnogueira
Elias NogueiraTester, professor
http://about.me/eliasnogueira@eliasnogueira
TDC - The Developers ConferenceTestDayJenkins User Conference – São Paulo
Nós fizemos o deploy em produção esta manhã!
Os testes irão levar 4 dias para executarem...Em 4 dias eu retorno com o resultado!
Agile Testing
Agile Testing
Agile Testing é uma prática de Teste de Software que segue os princípios do desenvolvimento ágil
Agile Testing
Feedback contínuoEntrega de valor ao cliente
Comunicação face-to-face
Coragem
Simplicidade
Resposta a mudançasAuto-organização
Foco em pessoas
Como a maioria dos “Agile Testers” são hoje!
Não sabem o que é Ágil
Não sabem programar
O desenvolvedor é seu maior inimigo
Programador frustrado ou querendo ser BA
Não querem “passar trabalho”
Testadores hoje
Desenvolvedores ágeis são “test infected”
Agile Testers e Desenvolvedores colaboram
Agile Testers colaboram com o usuário
TODO O TIME é responsável por teste!
Todos devem entender do negócio
Separação clara dos papéis
AUTOMATIZAM!!!
http://www.shino.de/2012/07/30/the-testing-quadrants-we-got-it-wrong/
Pirâmide de Automação de Teste
Inicio da entrada da qualidade no produto
Tem um suporte de refatoração
É a base de uma suíte de automação
TODO O TIME é responsável por teste!
Todos devem entender do negócio
Build Tools• Judson/Jenkins
Unit Test Tools• xUnit• Mocking
Testar os serviços da aplicação sem UI
Preenche o gap entre Unit x UI
Descrita de uma forma clara para o cliente
Tanto tester quanto dev podem criar
Podemos referencia-lo como “integração”• API Test• Integration Test• Component Test
BDD Tools• Cucumber• Jbehave• SpecFlow
Unit Test Tools• xUnit
Fixture Tools• Fitnesse
Teste da UI / E2E
Focar em smoke tests
Mais caro e mais frágil
Desenvolvido no final do ‘done; de teste
Usualmente fácil para testadores ágeis
ATDD Tools• Selenium• Robot Framework
TDD – Test Driven Development
Sou pago pra desenvolver, não testar
“Done” é quando eu dou checkin
Todos conhecem o código
O projeto é curto
Não há cliente
TDD – Test Driven DevelopmentPequeno mal entendido
BDD – Behavior Driven Development
BDD pode ser visto como uma técnica de desenvolvimento ágil que encoraja colaboração entre os desenvolvedores, analistas, QA e o pessoal não técnico (stackeholders) para o sucesso de um projetoÉder Ignatowicz (@ederig)
BDD – Behavior Driven Development
BDD pode ser visto como uma técnica de desenvolvimento ágil que encoraja colaboração entre os desenvolvedores, analistas, QA e o pessoal não técnico (stackeholders) para o sucesso de um projeto
O suficiente é o suficiente
Entregar valor para os stackholders
Tudo é comportamento
BDD – Behavior Driven Development
BDD – Behavior Driven Development
Feature: <description of the feature>
As a <user/actor>I want <goal to be achieved>so that <the reason you want to achieve the goal>
User Story
Funcionalidade: <descrição da funcionalidade>
Como um <usuário/ator>Eu quero <meta a ser alcançada>De modo que <a razão para alcançar a meta>
BDD – Behavior Driven Development
Scenario: <description of the test>Given <a known state>When <an event occurs>Then <then this should happen>
Acceptance Criteria
Cenário: <descrição do teste>Dado <um estado conhecido>Quando <um determinado evento ocorre>Então <isso deve ocorrer>
BDD – Behavior Driven DevelopmentFuncionalidade: Leitor de tipos de Triângulo
Para conhecer o tipo de um triânguloComo um aluno da matemáticaEu quero informar os tamanhos do lado de um triângulo e saber qual seu tipo
NARRATIVA
Um triângulo com todos os lados iguais é chamado EquiláteroUm triângulo com dois lados iguais é chamado IsóscelesUm triângulo com todos os lados diferentes é chamado Escaleno
FORA DE ESCOPO - Validar triângulos inválidos - Exibir o triangulo graficamente - Validação de entrada de dados do usuário
http://www.bugbang.com.br/entendendo-bdd-com-cucumber-parte-i/
BDD – Behavior Driven Development
Cenário: Consultando um triangulo Escaleno
Dado que eu estou na página de consulta de triângulosQuando quando eu informo os lados do triangulo
| lado1 | lado 2 | lado 3 |
| 3 | 4 |5 |
Então o sistema informa que o triangulo é “Escaleno”
ATDD é uma prática onde todo o time, colaborativamente, discute critérios de aceitação através de exemplos antes de começar o desenvolvimento. Também garante que todos tenham a mesma definição do done.
ATDD – Acceptance Test Drive Development
ATDD – Acceptance Test Drive Development
Os usuários agora precisam utilizar senhas seguras (string de, no mínimo, 6 caracteres com pelo menos uma letra, um número e um símbolo)
Exemplo
ATDD – Acceptance Test Drive Development
ATDD – Acceptance Test Drive Development
Durante uma reunião de planejamento
O que acontece se o usuário inserir uma senha não segura?
E se o usuário colocar um espaço?
Como fica as contas já existentes?
Discutir o requisito
ATDD – Acceptance Test Drive Development
Pensando em um formato para ferramenta
Destilar em um formato amigável
Ação ArgumentoO teste deve ser válido p@ssw0rd
O teste deve ser válido @@@000dd
O teste deve ser válido p@ss w0rd
O teste deve ser inválido password
O teste deve ser inválido p@ss3
O teste deve ser inválido passw0rd
O teste deve ser inválido @@@000
Teste: Validar senhas válidas e inválidas
ATDD – Acceptance Test Drive Development
Implementação em qualquer formato
Desenvolver o código
public class ValidateLoginPage {WebDriver driver;
public String loginValidation(String username, String password) {
driver.findElement(By.id(“user”)).sendKeys(username);
driver.findElement(By.id(“passwd”).sendKeys(password);driver.findElement(By.id(“submit”).click();
String result = driver.findElement(By.cssSelector(“result”)).getText()
}}
ATDD – Acceptance Test Drive Development
Implementação em qualquer formato
Desenvolver o código
public class TestLogin {WebDriver driver = new FirefoxDriver();
@Test (dataProvider = ”data")public String testAllScenarios (String username, String
password, String result) {ValidateLoginPage testLogin = new
ValidationLoginPage(driver);String result = testLogin.loginValidation(username,
password);Assert.assertEquals(expected, result);
}
@DataProvider(name = ”data”) public Object[][] createData() {
Object[][] obj ={{”fred","p@ssw0rd",”Valid Password"}, {{”jack","passw0rd",”Invalid
Password!”}}
}
ATDD – Acceptance Test Drive Development
Execução do teste em ambiente controlado
Demostrar o teste
Mas cadê o topo da
pirâmide?
Testes Exploratórios
Simultâneamente ....... aprender sobre o software... desenvolver mais testes... executar testes
Usando o feedback do último teste para executar o próximo!
Todos os testes unitáriosPassaram com sucesso!A build está OK!
Essa user story de segurança passou nos
meus teste de aceitação!
Alguém já se deu conta que o usuário pode
colocar ele mesmo como administrador?
SBT - Session Based Testing Charter
Explorar áreas/features [com recursos, condições , restrições] para descobrir informação
Explorar o site em diversos browsers e configurações para descobrir riscos relacionados a configurações não suportadas
SBT - Session Based Testing Charter
Descrição e objetivoTempoÁrea de ConcentraçãoSetupObservaçõesBugs