Slide 1

Slide 1 text

Testes automatizado no desenvolvimento de software Jack Makiyama Tech Lead um papo sobre os fundamentos, custos e práticas dos testes automatizados

Slide 2

Slide 2 text

Sumário Introdução 2 Fundamentos Custo do testes automatizados para o projeto Mão na massa

Slide 3

Slide 3 text

3 ● Quem conhece testes automatizados? ● Quem usa testes automatizados? ● Quem nunca ouviu falar em testes automatizados?

Slide 4

Slide 4 text

Quem sou eu?

Slide 5

Slide 5 text

5 Atuo com desenvolvimento web(backend) desde 2008, Trabalhei em algumas empresas, como: ● Clickbus ● Nitro2Code/Leady E em Sinop: ● - TicketSys(Bilhete Agora) ● - Evo Networks Também trabalhei em algumas agências/fábricas de sites em Sinop e fiz muito freela na vida. Jack Makiyama - Tech Lead - Objective

Slide 6

Slide 6 text

6 ● Arquitetura ● Comunidades ● Design de código ● PHP ● Processos ágeis ● Testes automatizados Atualmente esses tem sido alguns dos temas que tenho voltado minha atenção:

Slide 7

Slide 7 text

O que é um teste? 7 Antes de tudo precisamos entender de qual teste estamos falando aqui. Acredito que toda iteração que fazemos com o software de forma a confirmar algum funcionamento é um teste. Então em um cenário ausente de testes automatizados, ao longo do desenvolvimento de uma aplicação temos sempre presente um ciclo que se repete até a finalização da atividade: ● escrever um trecho de código de produção ● estimular a aplicação através da interface de usuário para expressar o interesse deste código inserido.

Slide 8

Slide 8 text

8 Podemos ver o exemplo da solução do FizzBuzz:

Slide 9

Slide 9 text

Qualidade de software 9 A qualidade de um software é um reflexo que provém da cultura da equipe que irá desenvolvê-lo e mantê-lo. Se for desenvolvido por uma equipe que tenha na sua cultura um processo voltada a boas práticas, fazendo uso de padrões e convenções de projetos muito bem conhecidas e usadas extensivamente pela comunidade de software, é provável que seu software terá menos bugs que uma equipe que tem a cultura que promove apenas um grande volume de entregas e esses com prazos duvidosos.

Slide 10

Slide 10 text

10 Algumas preocupações que podem contribuir para o aumento da qualidade de software: ● Design estratégico ● Arquitetura ● Testes automatizados ● Análise estática de código ● CI/CD ● Code Reviews ● SOLID ● Design Pattern ● Documentações

Slide 11

Slide 11 text

Onde entra a automatização? 11 Como qualquer tipo de automação, no desenvolvimento de software também automatizamos para poupar o esforço físico que resultaria da repetição de uma ação humana. Padronizamos o fluxo das informações de cada ação que se repete para representar suas intenções em forma de código de testes na aplicação.

Slide 12

Slide 12 text

Contras 12 ● Sem o mindset dos testes automatizados parece que não rende o trabalho ● Criar a base de código do testes do zero é onerosa ● Difícil de aplicar em códigos legados

Slide 13

Slide 13 text

Prós 13 ● Garantia de que o que existe está realmente funcionando ● Segurança em fazer manutenção ou adicionar novas features ● Antecipação de possíveis bugs ● Os testes exigem um bom design de código ● Tendem a guiar o desenvolvimento ● Servem para documentar o funcionamento de um contexto

Slide 14

Slide 14 text

Software feito para durar, como os testes contribuem para a longevidade de um software? 14 A menos que você esteja fazendo uma PoC, você irá precisar dar suporte para a sua aplicação, não apenas você dará suporte, mas também outros membros da equipe que você participa. Tendo isso em mente não podemos apenas adicionar novas features de acordo com a exigência do cliente, precisamos ter em mente que sempre virá mudanças de requisitos e temos que garantir que o crescimento e a sustentação da base de código se mantenham sob controle e continue entregando os resultados esperados para seus consumidores. Os testes automatizados além de garantir o funcionamento de um determinado contexto também promove o uso de boas práticas para programarmos para abstrações e contratos ao invés de grandes implementações e estimula uso de um bom design de código.

Slide 15

Slide 15 text

O que precisamos então ter em mente para começarmos a usar testes automatizados? 15 Acredito que precisamos inicialmente ter em mente a forma que olhamos para a aplicação para entender o intuito dos testes que vamos automatizar. Podemos considerar duas formas de olhar para a aplicação pensando em testes, que seria quando conhecemos o comportamento interno do código que chamamos de White Box e chamamos de Black Box quando temos apenas conhecimento da API pública de uma aplicação.

Slide 16

Slide 16 text

White Box 16 Onde temos conhecimento do funcionamento interno do código e com o uso de testes unitários ou integração podemos influenciar a aplicação resolver uma tarefa com valores previamente injetados ou esperar que um método de uma dependência seja estimulado, focando em pequenos contextos.

Slide 17

Slide 17 text

Black Box 17 Onde não temos conhecimento do funcionamento interno do código, olhamos para as interfaces de usuário da aplicação e geralmente são usados testes que descrevem comportamentos, testes de tela e testes de ponta a ponta(e2e).

Slide 18

Slide 18 text

Pirâmide dos testes 18 Imagem retirada do artigo A PIRÂMIDE DE AUTOMAÇÃO DE TESTES no portal Tecnisys: http://www.tecnisys.com.br/noticias/2019/a-piramide-de-automacao-de-testes

Slide 19

Slide 19 text

Testes Unitário 19 ● Cada método público deve ter pelo menos um teste para cada fluxo conhecido ● Um teste não pode ter dependência de outros testes ● Em um teste fazemos mocks das dependências do método alvo para induzir um comportamento esperado e comprovar nossas expectativas ● Testes unitários sempre irão exigir um bom design de código.

Slide 20

Slide 20 text

Testes de Integração 20 Com intuito de garantir o funcionamento do fluxo de um serviço, os testes de integração oferecem uma boa relação entre uma menor verbosidade referente aos testes unitários e a garantia de que as unidades interagem corretamente. Tendo sempre a premissa de que se não temos testes unitários, devemos no mínimo ter um teste de integração.

Slide 21

Slide 21 text

Testes de Aceitação 21 ● Geralmente focado na interface de usuário com o intuito de comprovar que os requisitos de uma demanda está garantida. ● Testes e2e sempre irão exigir um bom funcionamento das features de acordo com os requisitos funcionais do software.

Slide 22

Slide 22 text

Testes de código 22 São os testes mais usados onde estimulamos diretamente o código que estamos desenvolvendo com um framework de testes tipo o PHPUnit do PHP ou Jest do JavaScript.

Slide 23

Slide 23 text

Padrão Triple A 23 É muito utilizado o padrão Triple A onde promove a organização em: ● Arrange para levantarmos as dependências do teste ● Act onde estimulamos o alvo do nosso teste ● Assert onde fazemos as asserções que esperamos.

Slide 24

Slide 24 text

Testes de comportamento 24 São os testes focado em descrever o comportamento da nossa aplicação, muita das vez é incorporado nos testes de código, mas também podemos usar ferramentas dedicadas a esse estilo de teste, por exemplo a conhecida sintaxe Gherkin que é uma DSL usando as palavras chaves: Given, When, Them.

Slide 25

Slide 25 text

TDD 25 Imagem retirada do artigo Afinal, o que é TDD? no portal treinaweb: https://www.treinaweb.com.br/blog/afinal-o-que-e-tdd

Slide 26

Slide 26 text

Qual é o custo para o projeto em automatizar seus testes? 26

Slide 27

Slide 27 text

27 Quem já escutou frases semelhantes a essas: ● "Meu chefe não deixa usar testes automatizados" ● "Faço testes em produção" ● "Minha equipe não faz uso de testes" ● "Temos um QA na equipe para fazer os testes" ● "Escrever testes faz demorar mais para entregar a feature"

Slide 28

Slide 28 text

28 Eu já tive que escutar todo tipo de variação dessas frases, desde gestores evitando um possível tempo maior de desenvolvimento, custo adicional não previsto ou mesmo achando que iria economizar sem esses testes. Até desenvolvedores que não tinham conhecimento sobre testes automatizados que preferiam o apego em continuar na zona de conforto. Por isso precisamos ter uma noção de como mostrar o valor dos testes automatizados, mas sem colocá-los como uma venda casada que seria um custo a mais que demoraria mais tempo de desenvolvimento por causa deles e sim entregar códigos testados de fato.

Slide 29

Slide 29 text

Como atuar sendo: 29 Júnior ○ Onde é esperado que esteja aprendendo sobre testes, mas infelizmente é o momento da carreira mais difícil de influenciar uma equipe, mas claro que não deve deixar de ser feito. O ideal é focar em praticar testes automatizados como estudo fora do trabalho, resolver problemas propostos no formato de Dojos e levar exemplos de como essa prática fora do trabalho tem feito sentido e como poderia melhorar os projetos da empresa.

Slide 30

Slide 30 text

Como atuar sendo: 30 Pleno ○ Deveria já ter uma noção prática de testes automatizados, mesmo precisando de suporte de um senior em alguns casos mais complexos, mas já poderia se arriscar a entregar pequenos contextos com testes e buscar defender a motivação de entregar códigos com testes automatizados para tentar influenciar a equipe.

Slide 31

Slide 31 text

Como atuar sendo: 31 Senior ○ Se você não está entregando códigos com testes automatizados, eu vou duvidar da sua senioridade. No mínimo você deveria incomodar a equipe inteira pela ausência de testes no projeto.

Slide 32

Slide 32 text

E como usar testes automatizados? 32 Você e a equipe: ● O primeiro passo com certeza é a conscientização, é preciso falar sobre testes, fomentar a ideia e praticar os testes junto com a equipe para passar a fazer parte do mindset da equipe. ● Promover sessões de Dojos para criar uma consciência coletiva de como fluir com os testes. ● Evidenciar partes do sistema onde faria sentido ter um teste ● Promover código testado

Slide 33

Slide 33 text

E como usar testes automatizados? 33 Sistema legado ● Tentar cobrir os principais fluxos com testes de ponta a ponta(e2e). ● Fazer uso de Pull Requests e Code review para não deixar mais entrar código sem testes. ● Cobrir de testes o que precisar alterar para garantir que a sua alteração não vai implementar novos bugs.

Slide 34

Slide 34 text

E como usar testes automatizados? 34 Sistema do zero ● Aqui é um pouco mais fácil, pois podemos começar a construção do projeto já pensando em testes automatizados, assim já definindo as convenções para fazer os testes serem parte do processo de desenvolvimento.

Slide 35

Slide 35 text

E como usar testes automatizados? 35 Ferramental ● Framework de testes ● CI/CD ● Code Coverage

Slide 36

Slide 36 text

Vamos para a prática!

Slide 37

Slide 37 text

Obrigado!

Slide 38

Slide 38 text

SÃO PAULO | SP Rua Peixoto Gomide, 996 6º andar | Cerqueira César CEP: 01409-000 +55 11 3176-8100 CURITIBA | PR Av. João Gualberto, 1740 9º andar | Juvevê CEP: 80030-001 +55 41 3122-9100 MARINGÁ | PR Av. Horácio Raccanelo Filho, 5355 Sala 1 | Zona 7 CEP: 87020-035 +55 44 3032-9150 CHICAGO | IL | USA 222 Merchandise Mart Plaza Suite 1225 | Chicago | Illinois 60654 +1 312 885-7619