Maximizando Eficiência e Confiança: A Estratégia de Testes do Sicredi

Henrique Luis Schmidt
Sicredi Tech
Published in
5 min readOct 28, 2023

TL;DR (Resumo)

  • Filosofia do Sicredi: Testes de software desde o início do desenvolvimento, focando na confiança e qualidade.
  • Pirâmide de Testes: Mais testes em ambiente local (base) e menos em ambiente integrado (topo).
  • Ambiente Local: Testes sem dependência de dados, rapidez, execução local e na pipeline.
  • Ambiente Integrado: Testes com foco na jornada do usuário, com integração com sistemas externos.

Já se perguntou qual é a melhor forma de testar uma aplicação ou que tipo de teste escrever? No Sicredi, não deixamos essas questões ao acaso. Com uma equipe altamente especializada em Engenharia e Qualidade de Software, estabelecemos padrões de excelência e oferecemos diretrizes claras para nossos times de desenvolvimento. Neste artigo, compartilharemos nossa abordagem recomendada para testar sistemas, abrangendo tanto front-end quanto back-end.

A Filosofia do Sicredi em Testes de Software

Os testes de software são fundamentais. Eles não são apenas uma etapa do processo de desenvolvimento, mas um elemento integrado desde o início. Nossa abordagem é clara: desenvolvemos testes simultaneamente ao código fonte, garantindo que eles estejam sempre alinhados e atualizados.

O foco principal não é apenas alcançar uma alta cobertura de testes, mas construir confiança. Queremos que nossos desenvolvedores sintam-se seguros ao colocar o código em produção, sabendo que ele é robusto e confiável. Para nós, os testes são mais do que números; eles são a garantia de qualidade que define nosso compromisso com a excelência em software.

Para colocar essa filosofia em prática efetivamente, é essencial saber como dividir e organizar os testes de maneira eficiente. Nas próximas seções, exploraremos exatamente isso: como testar cada camada do código de forma estratégica, garantindo que nossa abordagem de testes seja tão eficaz quanto profunda.

Divisão dos Testes: Ambiente Local vs. Ambiente Integrado

Em nossa jornada para alcançar a excelência em testes de software, é crucial entender a diferença entre os testes realizados em ambiente local e aqueles realizados em ambiente integrado. Para ilustrar isso, utilizamos uma pirâmide de testes dividida em duas partes distintas.

Testes em Ambiente Local (Base da Pirâmide)

Na base da nossa pirâmide de testes, priorizamos os Testes em Ambiente Local. Essa ênfase se deve a várias razões pragmáticas e estratégicas:

  1. Independência de Massa de Dados Externa: Testes em ambiente local são menos dependentes de massas de dados complexas, que podem ser desafiadoras de obter ou simular em ambientes integrados. Isso facilita a execução de testes de forma mais controlada e focada.
  2. Rapidez e Eficiência: Estes testes são significativamente mais rápidos, pois não requerem interações com sistemas externos ou infraestruturas complexas. Essa rapidez é essencial tanto para o desenvolvimento diário quanto para a integração contínua, pois permite que testes sejam executados frequentemente sem atrasos significativos.
  3. Execução Local e na Pipeline: Os testes em ambiente local podem ser executados tanto na máquina do desenvolvedor quanto na pipeline de CI/CD. Isso proporciona flexibilidade e agilidade, permitindo que problemas sejam identificados e corrigidos rapidamente, independente do estágio de desenvolvimento.
  4. Validação de Cenários de Exceção: Em um ambiente local, é mais fácil simular e validar cenários de exceção, como uma API externa estar indisponível ou responder com lentidão. Isso permite que os desenvolvedores garantam que a aplicação reaja de forma adequada a essas situações adversas.
  5. Falhas Mais Previsíveis: Geralmente, quando esses testes falham, as causas são mais diretas — ou há um erro no próprio teste ou na lógica da aplicação. Isso contrasta com as falhas em ambientes integrados, que muitas vezes envolvem complexidades adicionais relacionadas à infraestrutura ou interações com outras aplicações.

Por essas razões, escrevemos uma quantidade maior de testes em ambiente local. Eles formam a base sólida da nossa pirâmide de testes, garantindo que cada componente do código seja robusto e confiável antes de ser integrado a sistemas mais amplos.

Testes em Ambiente Integrado (Topo da Pirâmide)

Embora desafiadores, os Testes em Ambiente Integrado no topo da nossa pirâmide são fundamentais. Aqui estão alguns detalhes essenciais sobre eles:

  • Seleção Cuidadosa de Cenários: Devido à natureza mais lenta e complexa desses testes, geralmente selecionamos cenários críticos e representativos para esta etapa. A ideia é complementar, não duplicar, os testes já realizados em ambiente local. Os cenários escolhidos são aqueles que realmente geram valor ao serem testados em um ambiente integrado, como fluxos de interação entre sistemas.
  • Foco na Interação com Sistemas Externos: O objetivo principal desses testes é validar as interações da aplicação com sistemas externos e outros componentes. Eles garantem que, além de funcionar bem isoladamente, a aplicação se comunique e se integre corretamente no contexto mais amplo do ecossistema de software.
  • Massa de Dados: Um grande desafio aqui é a geração de massa de dados adequada para a execução dos testes. Os dados precisam ser representativos e suficientes para simular condições reais, o que pode ser uma tarefa complexa em ambientes integrados. Um exemplo no Sicredi é um teste para realizar um investimento, onde é necessário ter uma conta ativa e saldo disponível.
  • Impacto na Confiança do Sistema: A realização efetiva desses testes aumenta significativamente a confiança na estabilidade e robustez do sistema como um todo. Eles são o teste final antes de considerarmos uma aplicação pronta para enfrentar o mundo real.

Em resumo, os Testes em Ambiente Integrado são uma etapa crítica para garantir que a aplicação não só funciona isoladamente, mas também opera harmoniosamente dentro do ecossistema de software mais amplo. Eles são a verificação final de que todos os componentes do sistema funcionam bem juntos, assegurando um produto final confiável e eficiente.

Conclusão e Próximos Passos

Neste artigo, exploramos a estratégia de testes utilizada no Sicredi para aplicações, destacando a importância de testes em ambiente local e integrado. Vimos como a divisão estratégica dos testes na pirâmide de testes pode maximizar eficiência e confiabilidade.

Entretanto, cada camada dessa pirâmide merece uma atenção detalhada. Por isso, fiquem atentos para os próximos posts. Em publicações futuras, vamos mergulhar em cada uma das camadas de testes, começando pelos testes em ambiente local. Detalharemos como realizamos testes unitários, de integração e E2E, oferecendo insights valiosos sobre nossa abordagem e melhores práticas.

Em seguida, abordaremos os testes em ambiente integrado, discutindo os desafios e estratégias para garantir que nossas aplicações funcionem harmoniosamente dentro do ecossistema de software.

Fique de olho na página do SicrediTech no Medium para não perder essas valiosas informações. Nosso compromisso é compartilhar conhecimento e práticas que elevam a qualidade e eficácia do desenvolvimento de software.

Seu feedback é valioso para nós! Deixe seus comentários e perguntas abaixo. Até a próxima!

#engenharia-de-software

--

--