Testing sucks

Click here to load reader

  • date post

    17-May-2015
  • Category

    Technology

  • view

    930
  • download

    2

Embed Size (px)

description

Presentation given in BrazilJS 2012

Transcript of Testing sucks

  • Testing SucksLeo Balter - BrazilJS 2012 JS

  • Testar chato!

  • Testes vs Testar!

  • Testes humanos Repetitivos Estressantes Cansativos

  • Concentrao polarizada

    Nos concentramos em um nico ponto No vemos os demais falsa sensao de segurana

  • Olhar Viciado

  • Testes de Trollagem

  • Pare de ficar testando seu cdigo

  • JSHint/JSLint no testa cdigo!

    Conveno de estilo Erros comuns As Boas Partes

  • Mito do Compilador

  • Pnico vs Benefcios

    Muito fcil criar testes para algo que ainda no existe

    No to simples quando a aplicao j existe e est no ar.

  • Aplicao no testada

  • A Sndrome do o que est

    funcionando no se deve mexer.

  • Quebre a aplicao! Criamos testes simples que passem Teste o que est em produo Cobertura de testes O que crtico? Especificao O que falta testar? Testes de Trollagem

  • Acredite:Sua aplicao vai falhar!

  • J viu essa sndrome?

    No vai ao mdico pra evitar descobrir um mal grave

    Pode haver um problema latente que vai falhar em um momento crtico

    Pode acabar em morte

  • Na aplicao

    No testamos para no descobrir o que falha

    H problemas latentes que vo falhar em momentos crticos (Por exemplo: um sistema de pagamento do seu e-commerce)

    Sua empresa morre (vai a falncia)

  • Estabelea o que crtico

    Quo crtico cada parte do seu sistema? Se no funcionar, quais as consequncias?

  • Impacto

    Ocorrncia

    Baixo

    Baixo Alto

    Alto

    Risco de baixo nvel

    Risco de nvel mdio

    Risco Crtico

    http://bit.ly/11tTwNGerenciamento de Risco

    http://bit.ly/11tTwNhttp://bit.ly/11tTwN
  • Automatizao

    --Retrabalho --Surpresas Mais tempo para o que interessante Menos tempo para testar tudo novamente

  • Automatizao

    --Retrabalho --Surpresas Mais tempo para o que interessante Menos tempo para testar tudo novamente

  • Metodologias geis

    Aplicar testes uma rotina contida em Metodologias geis

    Testes no dependem de metodologias geis Ex.: jQuery

  • Funciona

    Faz o que deveria

  • Esse cdigo funciona!

    Um cdigo pode funcionar perfeitamente

    Estar 100% testado e no cumprir 10%

    do seu papel

  • Fluxo

  • Especificao

    Fluxo

  • Especificao

    Plano de Testes

    Fluxo

  • Especificao

    Plano de Testes

    TestesFluxo

  • Validao

  • Plano de Testes

    Validao

  • Especificao

    Plano de Testes

    Validao

  • Especificao

    Plano de Testes Testes

    Validao

  • Especificao

    Plano de Testes Testes

    Aplicao

    Validao

  • Testes no validam especificao!

    Testes no criam especificao!

  • Testes vs Especificao

    Se os testes validassem especificao, no poderiamos prever correes de bugs e comportamentos de ambientes.

    Bugs no fazem parte de uma especificao.

  • Baby Steps (Testes Unitrios)

    Teste que Falha Cdigo Refatorar

  • Sempre em Baby Steps

    timo para pegar o ritmo funo 1, 2, 3, pin Treino do Lutador

  • Coberturade

    Cdigo

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • function foo( bar ) { if ( bar ) { console.log( 'yes!' ); else { console.log( 'no!' ); }}

  • Cdigo 100% cobertopor testes!

  • JSCoverage CoverJS

  • Tudo testvel

    Complexidade vs Criticidade window.location.replace()

  • Testes em JavaScript

    JS

  • Testes

    Unitrios

    FuncionaisInterface

    IntegraoDesempenho

  • Open Web

    vrios ambientes

  • Chrome

    Firefox

    Opera

    IE 8, 9[, 10, ...]

  • Chrome

    Firefox

    Opera

    IE 8, 9[, 10, ...]

    Mobile

  • PhantomJS

    Webkit

  • Ferramentas

    QUnit

    JasmineMocha

    NodeUnit

    Vows

  • Estilos de Testes

    TDD BDD Exports

  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • module( "Basics" );

    test( "hello test", function() {ok( 1 == "1", "Passed!" );});

    http://qunitjs.com/

    TDD

    http://qunitjs.comhttp://qunitjs.com
  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • QUnit Example

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • describe("A suite", function() { it("spec with an expectation",

    function(){ expect(true).toBe(true); });

    });

    BDD

  • Exports

    module.exports = { test1: function (test) { test.equals(this.foo, 'bar'); test.done(); }};

  • Exports

    module.exports = { test1: function (test) { test.equals(this.foo, 'bar'); test.done(); }};

  • Exports

    module.exports = { test1: function (test) { test.equals(this.foo, 'bar'); test.done(); }};

  • Exports

    module.exports = { test1: function (test) { test.equals(this.foo, 'bar'); test.done(); }};

  • Exports

    module.exports = { test1: function (test) { test.equals(this.foo, 'bar'); test.done(); }};

  • Como comear?

  • HTML Esttico

    JavaScript

    Testes

  • QUnit Example bar

  • QUnit Example bar

  • Cdigo testado tem bom desempenho?

    Testes unitrios no medem desempenho Existem testes de desempenho Cdigo sem erros pode evitar lentido

  • DexterJS

  • Dexter.spy

  • http://jsbin.com/osijuq/7/edit

    function carly( crazy ) { if ( typeof ( crazy ) === 'number' ) { return 'Call me maybe?'; } else { return 'Hey, I just met you!, and this is ' + crazy; }}

    function meSad( maybe ) { return carly( maybe ? 5555555 : 'crazy!' );}

    http://jsbin.com/osijuq/3http://jsbin.com/osijuq/3
  • http://jsbin.com/osijuq/7/edit

    function carly( crazy ) { if ( typeof ( crazy ) === 'number' ) { return 'Call me maybe?'; } else { return 'Hey, I just met you!, and this is ' + crazy; }}

    function meSad( maybe ) { return carly( maybe ? 5555555 : 'crazy!' );}

    http://jsbin.com/osijuq/3http://jsbin.com/osijuq/3
  • http://jsbin.com/osijuq/7/edit

    function carly( crazy ) { if ( typeof ( crazy ) === 'number' ) { return 'Call me maybe?'; } else { return 'Hey, I just met you!, and this is ' + crazy; }}

    function meSad( maybe ) { return carly( maybe ? 5555555 : 'crazy!' );}

    http://jsbin.com/osijuq/3http://jsbin.com/osijuq/3
  • http://jsbin.com/osijuq/7/edit

    function carly( crazy ) { if ( typeof ( crazy ) === 'number' ) { return 'Call me maybe?'; } else { return 'Hey, I just met you!, and this is ' + crazy; }}

    function meSad( maybe ) { return carly( maybe ? 5555555 : 'crazy!' );}

    http://jsbin.com/osijuq/3http://jsbin.com/osijuq/3