Importância de Testes Automatizados para Continuous Delivery & DevOps

Preview:

Citation preview

Ajudamos empresas a criar produtos digitais de sucesso

@samantacicilia

Importância de Testes Automatizados para Continuous Delivery & DevOps

@samantacicilia

Conteúdo:

● Importância de Testes Automatizados● Quadrante de Testes● Pirâmide de Testes & Anti-padrões● Tipos de Teste & Continuous Delivery● Demo● Referências

Importância de Testes Automatizados

@samantacicilia

Testes automatizados?

Testes automatizados?

● Feedback rápido;

Testes automatizados?

● Feedback rápido; ● Menos passível de erro de execução;

Testes automatizados?

● Feedback rápido; ● Menos passível de erro de execução; ● Executar testes automatizados no decorrer do pipeline ++

qualidade;

Testes automatizados?

● Feedback rápido; ● Menos passível de erro de execução; ● Executar testes automatizados no decorrer do pipeline ++

qualidade; ● Melhoria Contínua na Estratégia de Testes;

Testes automatizados?

● Feedback rápido; ● Menos passível de erro de execução; ● Executar testes automatizados no decorrer do pipeline ++

qualidade; ● Melhoria Contínua na Estratégia de Testes; ● Testes = especificação executável do comportamento do

sistema;

Testes automatizados?

● Feedback rápido; ● Menos passível de erro de execução; ● Executar testes automatizados no decorrer do pipeline ++

qualidade; ● Melhoria Contínua na Estratégia de Testes; ● Testes = especificação executável do comportamento do

sistema; ● Feedback, Feedback, Feedback;

Quadrante de Testes

@samantacicilia

Pirâmide de Testes

@samantacicilia

Anti-padrões

@samantacicilia

Tipos de Teste & Continuous Delivery

@samantacicilia

Testes Unitários

@samantacicilia

Testes Unitários:

Testes Unitários:

● Feedback extremamente rápido;

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming);

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções…

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;● Segurança para fazer mudanças (eXtreme Programming);

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;● Segurança para fazer mudanças (eXtreme Programming); ● Qualidade também nos testes unitários!

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;● Segurança para fazer mudanças (eXtreme Programming); ● Qualidade também nos testes unitários! ● Test Driven Development;

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;● Segurança para fazer mudanças (eXtreme Programming); ● Qualidade também nos testes unitários! ● Test Driven Development; ● Design de Código que permita testes;

Testes Unitários:

● Feedback extremamente rápido; ● 10-minute build (eXtreme Programming); ● Testes de valores limite, diferentes combinações, exceções… ● Cobertura de Código;● Segurança para fazer mudanças (eXtreme Programming); ● Qualidade também nos testes unitários! ● Test Driven Development; ● Design de Código que permita testes; ● Mocks;

Ferramentas:

Link das Ferramentas:

● http://junit.org/junit4/● http://www.nunit.org/● http://testng.org/doc/index.html● https://phpunit.de/● http://jasmine.github.io/● https://mochajs.org/● http://robolectric.org/● http://rspec.info/● https://docs.python.org/2.7/library/unittest.html

Cobertura & Análise Estática:

Cobertura & Análise Estática:

● Verificar qual a % do seu código da aplicação está coberto por testes;

Cobertura & Análise Estática:

● Verificar qual a % do seu código da aplicação está coberto por testes; ● Analisar seu código de acordo com algumas regras;

Cobertura & Análise Estática:

● Verificar qual a % do seu código da aplicação está coberto por testes; ● Analisar seu código de acordo com algumas regras; ● Verificação por estilo (identação, espaços, convenção de nomes,

comentários…);

Cobertura & Análise Estática:

● Verificar qual a % do seu código da aplicação está coberto por testes; ● Analisar seu código de acordo com algumas regras; ● Verificação por estilo (identação, espaços, convenção de nomes,

comentários…); ● Verificação por boas práticas (duplicação de código, encoding, tamanho de

métodos e classes, criação de variáveis desnecessárias…);

Cobertura & Análise Estática:

● Verificar qual a % do seu código da aplicação está coberto por testes; ● Analisar seu código de acordo com algumas regras; ● Verificação por estilo (identação, espaços, convenção de nomes,

comentários…); ● Verificação por boas práticas (duplicação de código, encoding, tamanho de

métodos e classes, criação de variáveis desnecessárias…); ● Verificação por bugs (antecipar possíveis problemas);

Ferramentas:

Link das Ferramentas:

● https://coverage.readthedocs.io/en/coverage-4.0.3/● https://github.com/colszowka/simplecov● http://emma.sourceforge.net/● https://github.com/jacoco/jacoco● https://www.ncover.com/● http://blanketjs.org/● https://github.com/jonreid/XcodeCoverage● https://coveralls.io/

Ferramentas:

Link das Ferramentas:

● http://www.sonarqube.org/● https://codeclimate.com/● https://github.com/es-analysis/plato/● https://github.com/dafiti/cs/● http://checkstyle.sourceforge.net/● http://findbugs.sourceforge.net/● https://www.pylint.org/● https://stylecop.codeplex.com/

Testes de Mutação:

Testes de Mutação:

● Testar seus Testes Unitários;

Testes de Mutação:

● Testar seus Testes Unitários; ● Ferramenta introduz mutações no seu código e executa os testes unitários;

Testes de Mutação:

● Testar seus Testes Unitários; ● Ferramenta introduz mutações no seu código e executa os testes unitários; ● Se os testes falharem = OK!

Testes de Mutação:

● Testar seus Testes Unitários; ● Ferramenta introduz mutações no seu código e executa os testes unitários; ● Se os testes falharem = OK! ● Se os testes passarem = NOK!

Testes de Mutação:

Ferramentas:

Link das Ferramentas:

● http://pitest.org/● https://pypi.python.org/pypi/MutPy● https://ninjaturtles.codeplex.com/● http://visualmutator.github.io/web/● https://github.com/mbj/mutant● http://jumble.sourceforge.net/

Testes de Serviços

@samantacicilia

Testes de Serviços:

Testes de Serviços:

● Depois dos Testes de Unidade e antes dos Testes de UI;

Testes de Serviços:

● Depois dos Testes de Unidade e antes dos Testes de UI; ● Testar seu app + módulos, componentes, banco de dados;

Testes de Serviços:

● Depois dos Testes de Unidade e antes dos Testes de UI; ● Testar seu app + módulos, componentes, banco de dados; ● Sem interface;

Testes de Serviços:

● Depois dos Testes de Unidade e antes dos Testes de UI; ● Testar seu app + módulos, componentes, banco de dados; ● Sem interface; ● Stubs;

Testes de Serviços:

●Integração/Componentes●Contratos●API/Webservices

Ferramentas:

Link das Ferramentas:

● https://www.soapui.org/● https://github.com/jayway/rest-assured● http://flask-restless.readthedocs.io/en/stable/● http://frisbyjs.com/● https://github.com/visionmedia/supertest● https://github.com/svanoort/pyresttest● https://github.com/rest-client/rest-client● https://github.com/brooklynDev/airborne

Testes de UI

@samantacicilia

Testes Funcionais:

Testes Funcionais:

● Lentos :(

Testes Funcionais:

● Lentos :( ● Fluxos principais da aplicação;

Testes Funcionais:

● Lentos :( ● Fluxos principais da aplicação; ● Diferentes browsers (IE, Firefox, Chrome, Safari & Headless);

Testes Funcionais:

● Lentos :( ● Fluxos principais da aplicação; ● Diferentes browsers (IE, Firefox, Chrome, Safari & Headless); ● Mobile;

Ferramentas:

Link das Ferramentas:

● http://www.seleniumhq.org/● https://github.com/jnicklas/capybara● http://angular.github.io/protractor/#/● https://github.com/RobotiumTech/robotium● http://calaba.sh/● http://appium.io/

Testes de Regressão Visual:

● Comparação de Imagens;

Testes de Regressão Visual:

● Comparação de Imagens;

Ferramentas:

Link das Ferramentas:

● https://github.com/yahoo/kobold● https://github.com/Huddle/PhantomCSS● https://applitools.com/● https://dpxdt-test.appspot.com/● https://github.com/BBC-News/wraith● https://github.com/xebia/VisualReview

Testes de Performance:

Testes de Performance:

● Comportamento da aplicação diante de uma carga conhecida;

Testes de Performance:

● Comportamento da aplicação diante de uma carga conhecida; ● Baselines;

Testes de Performance:

● Comportamento da aplicação diante de uma carga conhecida; ● Baselines; ● Ter um ambiente para esses testes;

Testes de Performance:

● Comportamento da aplicação diante de uma carga conhecida; ● Baselines; ● Ter um ambiente para esses testes; ● Definir as métricas;

Testes de Performance:

● Comportamento da aplicação diante de uma carga conhecida; ● Baselines; ● Ter um ambiente para esses testes; ● Definir as métricas; ● Análise automática???

Ferramentas:

Link das Ferramentas:

● http://www.radview.com/pt-br/baixe-o-webload/● https://smartbear.com/product/loadcomplete/overview/● http://www.neotys.com/neoload/overview● http://jmeter.apache.org/● http://grinder.sourceforge.net/● http://locust.io/● http://gatling.io/● https://www.loadui.org/

E Continuous Delivery?

@samantacicilia

Testes X Estágios:

Testes X Estágios:

● Estágio de Commit:

● Testes Unitários ● Testes de Mutação

Testes X Estágios:

● Estágio de Commit:

● Testes Unitários ● Testes de Mutação● Testes de Integração

● Estágio de Aceite (primeiro ambiente):

● Testes de API

Testes X Estágios:

● Estágio de Commit:

● Testes Unitários ● Testes de Mutação● Testes de Integração

● Estágio de Aceite (primeiro ambiente):

● Testes de API● Estágio de Aceite (pré-produção):

● Testes de UI ● Testes de Regressão Visual ● Testes de Performance

Ferramentas:

Link das Ferramentas:

● https://semaphoreci.com/● https://travis-ci.org/● http://circleci.com/● https://jenkins.io● https://www.go.cd/● https://snap-ci.com/

Demo

@samantacicilia

Ruby:

Unitário (Rspec) Mutação (mutant-rspec)

https://github.com/samycici/mutation_example

Exemplo 1:

Exemplo 1:

Exemplo 1:

Exemplo 1:

Exemplo 2:

Exemplo 2:

Exemplo 2:

App em Python usando Flask:

Unitário (unittest + fixtures) Integração (unittest + sqlite)

API (pyresttest) Funcional (selenium)

Performance (locust.io)

https://github.com/samycici/todoapp-flask

Referências

@samantacicilia

● http://www.guru99.com/mutation-testing.html● http://blog.arkency.com/2015/05/mutation-testing-and-continuous-integration/● http://blog.arkency.com/2015/06/how-good-are-your-ruby-tests-testing-your-tests-with-

mutant/● https://blog.blockscore.com/how-to-write-better-code-using-mutation-testing/● http://www.slideshare.net/stefanteixeira/vr-dev-summit-2016-primeiros-passos-em-

automao-de-testes● http://pt.slideshare.net/fredoriginal/palestra-de-como-testar-sua-api-rest-no-grupo-de-

teste-carioca● https://css-tricks.com/visual-regression-testing-with-phantomcss/● http://www.softwaretestinghelp.com/performance-testing-tools-load-testing-tools/● https://talkingabouttesting.com/2015/08/19/mao-na-massa-com-visual-review-e-

protractor/● https://robots.thoughtbot.com/how-to-stub-external-services-in-tests● http://www.devmedia.com.br/como-adotar-a-analise-estatica-de-codigo/32727

insideoutproject.com.br

insideoutproject.com.br/mulheres-palestrantes

Comunidades:

● meetup.com/pt-BR/DevOps-Carioca/● meetup.com/pt-BR/Grupo-de-Testes-Carioca/● meetup.com/pt-BR/Data-Science-Meetup-Rio-de-Janeiro/● facebook.com/RioAgile/● agiletesters.com.br ● insideoutproject.com.br

Contatos:

● testedesoftware.com ● rtstreinamentos.com.br ● medium.com/@samantacicilia

● Linkedin: Samanta Cicilia ● Twitter: @samantacicilia ● Slideshare: pt.slideshare.net/samantacicilia/ ● Email: samycici@gmail.com

www.concretesolutions.com.brblog.concretesolutions.com.br

Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030

São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449

Recommended