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
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.
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.
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.
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
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.
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.
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.
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).
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.
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.
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.
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.
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.
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"
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.
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.
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.
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.
• 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
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.
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.