Início

topics

Teste "Shift-left"

O que é o teste shift-left?
Explore a solução de teste shift-left da IBM Inscreva-se para receber atualizações sobre IA
Diagrama mostrando como o teste shift-left funciona
O que é o teste shift-left?

O teste shift-left é uma abordagem no desenvolvimento de software que foca na antecipação das atividades de teste no processo de desenvolvimento para melhorar a qualidade do software, aumentar a cobertura de testes, fornecer feedback contínuo e acelerar o tempo de lançamento no mercado.

Você já participou de um projeto de software que estourou o orçamento e ultrapassou todos os prazos? Claro que sim, todos nós já passamos por isso. Na verdade, se não passou, você é uma raridade e eu gostaria de ouvir sua história.

No início da minha carreira na área de desenvolvimento de software, aprendi a importância de trabalhar retroativamente a partir de um prazo final. Se um projeto deve ser concluído até uma data específica e os testes levarão um certo tempo, podemos usar essa informação para definir uma data de entrega adequada. Parece fácil, não é?

Bem, não é bem assim. Embora reservar tempo para testes manuais reduzisse o estresse nos dias finais dos projetos, ainda surgiam muitas surpresas.

Planejar tempo para testes de QA é ótimo na teoria, mas desmorona na prática assim que o primeiro bug ou defeito é identificado.

Quanto tempo levará para corrigir esse defeito? Quanto isso impactará o cronograma? Novos bugs serão introduzidos? Como garantiremos que cada correção seja verificada com tempo para consertar qualquer coisa que quebramos enquanto corrigíamos a primeira?

No fim, nunca consegui determinar o tempo correto para alocar para QA. No fim, as correções de última hora sempre acabavam sendo feitas às pressas; passei a reservar algumas semanas após grandes lançamentos para lidar com os problemas que deixamos escapar (ou causamos) durante a corrida contra o tempo.

O problema, no fim das contas, não era o tempo disponível para testes, mas o momento em que os testes eram realizados. Eu precisava de testes mais cedo e com mais frequência. Eu precisava de testes shift-left.

Se imaginarmos nosso processo de desenvolvimento de software como uma linha do tempo fluindo da esquerda para a direita, então "teste shift-left" torna-se autoexplicativo. Simplificando, é a prática de testar nas etapas iniciais, envolvendo membros da equipe, incluindo testadores, desenvolvedores e stakeholders na estratégia de teste, e integrar testes com mais frequência no ciclo de desenvolvimento, tanto para funcionalidades existentes quanto para novas.

 

The Total Economic Impact da IBM Robotic Process Automation

Veja uma análise de custo e benefício do IBM Robotic Process Automation (RPA).

Conteúdo relacionado Leia um guia sobre automação inteligente
O modelo em V do desenvolvimento de software

O modelo em V é uma forma útil de conceituar ciclos de desenvolvimento de software. Se pegarmos o fluxo tradicional em cascata e "invertermos" o eixo Y na fase de implementação, obtemos o modelo em V.

Um ciclo de desenvolvimento começa com requisitos de alto nível. Essas exigências são reduzidas em cada estágio ao longo do "V", até chegar à implementação no nível do código propriamente dito. Em seguida, verificamos a implementação, começando pelos testes unitários mais detalhados e subindo pelo "V" até os testes de aceitação do usuário.

Em um processo em cascata, todo o projeto é composto por um único "V". Como setor, aprendemos que deixar toda a validação para o final de um projeto complexo é basicamente preparar-se para o fracasso.

Em um processo iterativo, podemos pensar em cada sprint ou iteração como um "V" menor. Teoricamente, alcançamos nossos objetivos de shift-left: testando mais cedo e com mais frequência. Problema resolvido, certo? Bem, não é bem assim.

Tipos de testes shift-left

Você deve ter notado que há duas etapas no canal de feedback incorporado ao modelo em V: verificação e validação. Ambas são importantes.

Precisamos validar se os requisitos do usuário realmente resolvem os problemas que nos propusemos a solucionar. Também precisamos verificar se nossa implementação corresponde às especificações derivadas desses requisitos.

Testes automatizados podem ser aplicados tanto na validação quanto na verificação. O BDD (Projeto Orientado por Comportamento) levou à criação de tecnologias como o Cucumber, que automatizam partes do processo de validação. Para os propósitos deste artigo, vamos focar nos testes automatizados para verificação.

Teste de unidade

Testes unitários verificam a funcionalidade de um módulo específico dentro de uma aplicação maior. O módulo é testado de forma isolada e toda a comunicação com outros processos externos é simulada. Testes unitários e TDD representam a primeira fase de desenvolvimento no teste shift-left.

Testes de integração

Os testes de integração tentam verificar a funcionalidade geral de um serviço ou aplicação, incluindo efeitos colaterais. Esse processo é um antipadrão por razões que discutiremos mais adiante.

Teste de API e teste de contrato

Testes de API verificam os endpoints externos de um único serviço. O escopo dos testes de API é semelhante ao dos testes de integração; porém, em um contexto de SOA ou microsserviços, podemos considerar os testes de API como os novos testes unitários.

Testes de IU

Os testes de IU verificam a funcionalidade completa de uma aplicação a partir da camada de interface do usuário. Ferramentas como o Selenium tornam os testes de IU automatizados amplamente acessíveis.

Mais do que apenas automação

Shift-left não se trata apenas de automação. Outra forma de testar mais cedo e com mais frequência é garantir que seus especialistas em QA estejam envolvidos em cada etapa do processo, desde a descoberta até a coleta de requisitos. Os engenheiros de teste podem ter um desempenho melhor quando entendem mais a implementação geral, e seus insights podem ajudar a tornar a arquitetura mais transparente e resiliente.

Como começar com testes shift-left

Quando pensamos em testar "mais cedo e com mais frequência", uma palavra vem à mente: continuidade. Muitas equipes de desenvolvimento de software estão praticando alguma forma de integração e entrega contínua. Testes contínuos são um ciclo de feedback vital nesse ciclo de DevOps.

Testes contínuos

Se pensarmos no TDD como um "shift-left para monólitos", então o teste contínuo é o "shift-left para arquiteturas distribuídas."

O TDD nos fez focar em testes unitários. Para testes contínuos, devemos focar em testes de API e de contrato. Os testes de API têm uma série de benefícios:

  • Os testes de API podem prevenir uma das formas mais comuns de introduzir erros em uma aplicação de microsserviços: alterar uma dependência fora de sincronia com seus serviços upstream ou downstream.

  • Os testes de API podem ser de responsabilidade da mesma equipe que possui o serviço.

  • Os testes de API evitam a fragilidade de testar efeitos colaterais e detalhes de implementação.

Idealmente, esses testes de API serão executados continuamente em ambientes de produção e pré-produção. As ferramentas de teste de contrato podem ajudar a automatizar esse processo, mas isso requer infraestrutura adicional.

E se pudéssemos usar testes contínuos de API integrados à nossa ferramenta de observabilidade? A próxima funcionalidade de testes sintéticos de API da Instana permitirá que você execute testes de API continuamente em todos os seus ambientes com mínimo esforço.

Melhores práticas para teste shift-left no desenvolvimento ágil

Shift-left envolve mover as atividades de teste para mais perto do início do ciclo de desenvolvimento de software, permitindo feedback mais rápido e reduzindo o tempo e esforço necessários para corrigir bugs. Aqui estão algumas melhores práticas para teste shift-left no desenvolvimento ágil:

  1. Envolvimento antecipado: as atividades de teste devem começar o mais cedo possível no processo de desenvolvimento. Os testadores devem participar desde a fase de coleta de requisitos para entender o escopo do projeto, os objetivos e as expectativas dos usuários.

  2. Colaboração e comunicação: promova colaboração e comunicação estreitas entre desenvolvedores, testadores e outros stakeholders. Incentive reuniões diárias de stand-up, sessões de planejamento de sprint e retrospectivas regulares para garantir entendimento compartilhado e alinhamento.

  3. Automação de testes: invista em automação de testes para possibilitar testes frequentes e eficientes. Os testes automatizados devem ser criados junto com o processo de desenvolvimento e integrados aos pipelines de integração contínua e implementação. Isso ajuda a detectar defeitos cedo, reduzir problemas de regressão e acelerar os ciclos de feedback.

  4. Desenvolvimento orientado por testes (TDD): incentive a prática de TDD, em que os desenvolvedores escrevem casos de teste antes de escrever o código. Essa abordagem do teste shift-left ajuda a definir o comportamento desejado e os resultados esperados desde o início, levando a um código mais robusto e testável.

  5. Integração contínua e entrega contínua (CI/CD): implemente pipelines de CI/CD para automatizar os processos de criação, teste e implementação. Essa prática garante que cada alteração de código seja totalmente testada e implementada em ambientes de produção de forma rápida e frequente, reduzindo o risco de problemas de integração.

  6. Teste de segurança shift-left: considere integrar práticas de testes de segurança no início do processo de desenvolvimento. Realize revisões de código de segurança, análise estática de código e testes focados em segurança para identificar vulnerabilidades e resolvê-las proativamente.

  7. Testes exploratórios: além dos testes automatizados, incentive testes exploratórios para analisar a aplicação a partir da perspectiva do usuário. Testadores experientes podem identificar potenciais problemas de usabilidade, casos extremos e cenários que os testes automatizados podem não detectar.

  8. Testes de desempenho: realize testes de desempenho cedo para identificar potenciais gargalos e problemas de escalabilidade. Isso ajuda a otimizar o desempenho da aplicação e garantir que ela atenda aos critérios exigidos.

  9. Ambientes de teste e dados: disponibilize ambientes de teste que se assemelhem aos ambientes de produção para garantir testes realistas. Além disso, garanta que dados de teste suficientes e representativos estejam disponíveis para simular cenários reais.

  10. Aprendizado e melhoria contínuos: promova uma cultura de aprendizado e melhoria contínuos. Organize reuniões de retrospectivas regularmente para refletir sobre os processos de teste, identificar os gargalos e implementar mudanças visando melhorar a eficiência dos testes shift-left.

Ao implementar essas melhores práticas, equipes ágeis podem alcançar melhor colaboração, feedback mais rápido e produtos de software de maior qualidade por meio do teste shift-left.

Os benefícios do teste shift-left

Os ciclos de feedback mais curtos incorporados aos processos de shift-left nos fortalecem de várias maneiras. Problemas são detectados mais rapidamente, as correções são aplicadas de forma mais eficiente, e os aprendizados de uma fase podem ser aproveitados na próxima, entre outros benefícios.

Independentemente da metodologia de gerenciamento de projetos ou cadência de lançamentos que sua equipe tenha, é possível se beneficiar dos ciclos de feedback de verificação mais curtos do teste shift-left.

Economia de custo

Um defeito encontrado por um teste unitário automatizado na máquina local de um desenvolvedor custa menos para identificar e corrigir. Mas quando um defeito chega ao ambiente do cliente, o custo para corrigi-lo aumenta.

Bem-estar dos desenvolvedores

Quando realizados corretamente, os testes automatizados e a integração contínua podem fornecer a confiança que os engenheiros de software precisam para implementar com frequência, até mesmo às sextas-feiras. Encontrar defeitos mais cedo significa menos momentos de pânico para toda a equipe. Como os lançamentos são tão simples, corrigir os poucos erros que passam também se torna mais rápido e fácil.

Arquitetura resiliente

Assim como um software mais acessível é geralmente mais fácil de usar para todos nós, um software mais testável pode ser mais fácil de entender e manter. Pensar nos testes desde o início pode levar a uma melhor separação de responsabilidades e a uma arquitetura geral mais resiliente.

Maior qualidade geral

Melhorar a experiência do cliente é nosso objetivo final. O shift-left pode eliminar alguns incidentes que os usuários finais poderiam enfrentar e reduzir o impacto de outros. Podemos usar a observabilidade para completar esse ciclo de feedback e melhorar a integridade geral do nosso software.

Os perigos do teste shift-left

Com ferramentas poderosas de automação à nossa disposição, pode ser tentador implementar todo tipo de teste em cada linha de código. Este é um caminho perigoso.

Testar efeitos colaterais, como verificar se aquele registro foi realmente salvo no banco de dados, é uma ideia atraente. Mas testar detalhes de implementação é um antipadrão, pois esses tipos de testes são extremamente frágeis. Eles podem precisar ser alterados sempre que sua aplicação mudar. A interface do usuário também é um detalhe de implementação, então os testes de IU estão na mesma situação.

Os testes de verificação se preocupam apenas com o "o quê", não com o "como" ou o "por quê". Idealmente, os requisitos do usuário foram concebidos para validar o "por quê". Para responder ao "como", podemos contar com uma automação mais poderosa na forma de uma plataforma de observabilidade.

Shift-left vs shift-right

Os testes shift-right referem-se à prática de postergar os testes no processo de desenvolvimento, geralmente em ambientes de produção. Embora possa parecer estranho, os testes shift-left (precoces) e shift-right (tardios) são complementares.

O teste shift-right nos permite identificar problemas em produção antes dos nossos clientes. Os ciclos de feedback mais curtos do teste shift-left nos dão a capacidade de responder e resolver rapidamente esses problemas em produção.

Testes sintéticos de API como parte da sua plataforma de observabilidade são a maneira perfeita de combinar os benefícios das práticas de shift-left e shift-right.

Produtos shift-left
IBM Instana


Aumente a funcionalidade e a observabilidade no seu APM empresarial; melhore o gerenciamento de desempenho de aplicações e acelere as pipelines de CI/CD, independentemente de onde as aplicações estejam.

Explore o IBM Instana

Recursos de teste de "Shift-left" O que é observabilidade?

Explore como a observabilidade oferece visibilidade detalhada em aplicações modernas distribuídas para identificação e resolução de problemas mais rápidas e automatizadas.

O que são testes contínuos?

Leia como os testes contínuos desempenham um papel crucial na aceleração do desenvolvimento de software, melhorando a qualidade do código e evitando gargalos dispendiosos.

O que é DevOps?

Explore como o DevOps acelera a entrega de software de alta qualidade ao combinar e automatizar o trabalho das equipes de desenvolvimento de software e operações de TI.

O que é monitoramento sintético?

Aprenda tudo o que você precisa saber sobre monitoramento sintético, incluindo o que é, como usá-lo, seus desafios e muito mais.

O que é automação?

Saiba como a aplicação de tecnologia, programas, robótica ou processos pode ajudar a alcançar resultados com mínima intervenção humana.

O que é gerenciamento de desempenho de aplicações (APM)?

Preveja e previna problemas de desempenho antes que afetem seu negócio com gerenciamento de desempenho de aplicações.

Dê o próximo passo

O IBM Instana fornece observabilidade em tempo real que todos e qualquer um podem usar. Ele proporciona um rápido time to value enquanto verifica se sua estratégia de observabilidade pode acompanhar a complexidade dinâmica dos ambientes atuais e futuros. Do celular ao mainframe, o Instana é compatível com mais de 250 tecnologias e está crescendo. 

Explore o IBM Instana Agende uma demonstração em tempo real