Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CPBR8: WTF to Test

Avatar for Edson Hilios Edson Hilios
January 27, 2015

CPBR8: WTF to Test

Apresentação feita na CampusParty BR Edição 8 em 4 de Fev, 2015.

Insights de qualidade de software na prática, de um time internacional de desenvolvimento ágil, mas o que testar, como testar e principalmente como garantir um app de qualidade para o seu cliente mantendo o desenvolvimento legal.

Avatar for Edson Hilios

Edson Hilios

January 27, 2015
Tweet

More Decks by Edson Hilios

Other Decks in Programming

Transcript

  1. WTF to Test Qualidade de software na prática 4 de

    Fevereiro 2015 #qa #tdd #agile #ci #dev
  2. Por quê testar? • Manter sua sanidade mental; • Ajuda

    a encontrar/resolver de bugs; • Facilita refatoração; • Documentação; • Melhora o design do código; TL; DR: Garante um trabalho com qualidade.
  3. Uma questão de processo • Critérios de aceitação • Test

    case • Code review • Test review • Testes manuais • Testes automáticos
  4. Curva de produtividade Ínicio do projeto (poucas features) Maturação do

    projeto Muito tempo de projeto (muitas features) Produtividade Tempo
  5. 0 1 2 3 4 5 6 7 8 9

    10 Test unitario test('fibonacci function', function() { expect(fibonacci(0)).to.be(0); expect(fibonacci(1)).to.be(1); expect(fibonacci(2)).to.be(1); expect(fibonacci(3)).to.be(2); expect(fibonacci(2)).to.be(3); expect(fibonacci(2)).to.be(5); // ... expect(fibonacci(10)).to.be(55); });
  6. • Controllers / Activities • Views / Fragments • Models

    • Rotas • Serviços globais Software padrão 2015
  7. Test case • Faz a chamada do modelo correto? •

    Expõe as váriavies corretas? • Renderiza o template correto? • Variaveis são exibidas no template?
  8. 0 1 2 3 4 5 6 7 8 9

    10 View test test('element should render correctly', function() { var template = '<form>' + '<input type="email">' + '</form>'; expect(element.html()).to.be.equal(template); });
  9. Use com moderação Testes unitários só são uteis quando trabalham

    isolados, isto é, com poucas ou nenhuma dependencia e interação simples.
  10. Mocks Fixtures ... Controller Views Models Scripts Resultado renderizado Testes

    E2E Prepara ambiente Executa pré-condições Executa teste
  11. Fixtures e mocks Fixtures são os dados iniciais do seu

    app, necessários para a execução dos testes. Mocks são respostas ficticias para uma determinada função (ex: resposta de uma API).
  12. Test case Como um usuário logado quando entro em LiveTV,

    eu vejo a lista de canais disponiveis, com nome, numero do canal, o programa atual e o próximo programa com hora de inicio e fim.
  13. 0 1 2 3 4 5 6 7 8 9

    10 Teste E2E beforeTest('element should render', function() { loginAs('userWithHBO'); }); test('element should render correctly', function() { var channel = 'HBO HD'; var currentShow = 'Game of Thrones'; expect(element.html()).contains(orderNum); expect(element.html()).contains(status); });
  14. 0 1 2 3 4 5 6 7 8 9

    10 Teste E2Fail test('element should render correctly', function() { expect(element.html()).have.element('h1.main'); expect(element.html()).have .element('ul.channel-list'); var channelList = element.html().find('ul.channel-list'); expect(channelList).to.have.length.gt(0); expect(channelList.html()) .contains('<strong>HBO HD</strong>') });
  15. 0 1 2 3 4 5 6 7 8 9

    10 Teste E2E automatizado startApp(); # Login clickLink('login'); fill('Usuario', 'john@host.com'); fill('Senha', '1234'); clickButton('Login'); # Pedidor clickLink('Meus pedidos'); findText('Pedido 1', 'Pedido 2', ...); findText('Status: Aprovado'); findText('Status: Em andamento');
  16. O que testar? Teste apenas o caminho crítico do seu

    negócio e/ou cliente: • Pipeline de pagamento • Registro de usuários • Regra de negócio importante • Login • ...
  17. Visita todos as views de um app procurando por erros

    comuns: • Campo vazio • Erro nos scripts • Página não carregou • Nenhuma imagem quebrada • ... Smoke test
  18. 0 1 2 3 4 5 6 7 8 9

    10 links = ['/'] visited = [] # Visita todos os links e verifica se há erros while len(links) > 0: uri = links.pop(0) visited.append(uri) assert page_is_ok(uri) for a in get_all_links(): if a.get('href') not in visited: links.append(a.get('href')) One test to rule them all!
  19. 0 1 2 3 4 5 6 7 8 9

    10 Teste de interface test('element should render correctly', function() { expect(element).to.have .css('background-color', '#ff0000'); expect(element).to.have .css('font', 'Arial'); ... });
  20. A falácia do Code Coverage Code coverage como métrica de

    qualidade é uma mentira, pois nos leva a crêr que escrever um teste por si só, já é o suficiente.
  21. Regra do dedão Testes, assim como funcionalidades, tem que ter

    prioridade e objetivo, que representem os requisitos dos stackholders.
  22. Cenário ideal • Caminho critíco coverage de 100% • Teste

    de formulários • Smoke test • Regressão de layout • 1 bug = 1 teste
  23. A definição de qualidade é conformidade com os requerimentos do

    projeto (tanto do ponto de vista de produto quanto do consumidor) – Crosby, P. B.