Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

CPBR8: WTF to Test

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.

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', '[email protected]'); 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.