Testes são elementos vitais ao longo do ciclo de vida de desenvolvimento de software, garantindo uma entrega com o mínimo de bugs possível e tornando o produto mais confiável.


No entanto, as equipes mais tradicionais ainda optam por construir e executar testes apenas na etapa final do desenvolvimento. Essa abordagem acaba por apresentar falhas, pois não suporta um feedback tão rápido e limita nosso tempo, atrapalhando a identificação precoce de bugs, tornando o teste um processo caro e aumentando o tempo de comercialização para o produto final.


De forma a potenciar feedbacks de testes mais rápidos, estes devem ser realizados no início do ciclo de vida do desenvolvimento de software – esta estratégia de teste é conhecida como Shift-Left e pode ser aplicada a testes funcionais e não funcionais. O teste Shift-Left permite que desenvolvedores e testadores trabalhem em estreita colaboração para criar e executar casos de teste nos estágios iniciais do ciclo de desenvolvimento.

 

 

O que significa Shift-Left?

Shift-Left é uma abordagem que move os testes para o início do ciclo de vida de desenvolvimento de software (portanto, “shifting left”). Se o teste de segurança acontecer apenas quando o código estiver pronto para produção, pode ser tarde demais para voltar atrás e corrigir os problemas rapidamente. Isso pode levar a atrasos, problemas de segurança e silos entre a segurança e as restantes equipes de DevOps.


Em outras palavras, é uma estratégia no desenvolvimento de software que pretende melhorar a qualidade da entrega, assim como prevenir e resolver problemas o mais cedo possível durante o ciclo de desenvolvimento.


Tudo fica mais compreensível quando visualizamos a imagem a seguir:

 

Shift-Left testing flow

 

Do lado esquerdo, é colocado em prática o Shift-Left, onde o desenvolvimento é composto pelas etapas de planejamento, codificação, construção e testes.


A prática foi adotada primeiramente em conceitos como Test-Driven Development (TDD) e Behavior-Driven Development (BDD), porém está sendo aplicada em diferentes áreas. As plataformas de Continuous Integration/Continuous Delivery (CI/CD) permitem que as equipes implantem e utilizem ferramentas para fazer verificações e testes em cada etapa do fluxo.

 

 

Metodologias relacionadas

A abordagem Shift-Left é composta por quatro metodologias que têm como objetivo sanar problemas de diferentes etapas durante o ciclo de desenvolvimento de software. São elas:

  • Incremental: para sistemas grandes e complexos que têm integração com hardware específico. Torna possível garantir que cada segmento seja validado antes de ser incrementado o próximo;
  • Tradicional: para validações mais leves e sistemas menos complexos. Tem como finalidade validar etapas de teste de unidade e testes de integração;
  • Agile/DevOps: baseia-se nos testes feitos em sprints, sendo restritos ao teste de desenvolvimento e não operacional;
  • Model-based: diferente das outras metodologias em que os testes se concentram durante o desenvolvimento, nesta são validados requisitos, arquitetura e design.

 

 

Quando pode ser aplicado o Shift-Left?

À medida que as organizações tentam migrar para uma estrutura mais DevSecOps, é fundamental trazer os testes de segurança mais cedo para o ciclo de vida de desenvolvimento. A maneira de fazer isso é integrando testes de segurança em pipelines de implantação para que o código seja testado continuamente, não se limitando apenas a testes com relação a outros commits no repositório compartilhado, mas também em termos de segurança como um todo.


A integração contínua (CI) é um processo que levanta e defende a bandeira da melhoria da qualidade do código por meio de pipelines de implantação. A segurança pode ser integrada nesses pipelines no início do processo. Sabendo disso, podemos integrar o Shift-Left em pipelines de integração contínua, como:

  • Static Application Security Testing (SAST): é uma forma de automatizar a segurança por meio da integração contínua. O SAST analisa o código-fonte e permite que os desenvolvedores corrijam problemas antecipadamente no ciclo de vida de desenvolvimento do software. No GitLab CI, por exemplo, a pipeline de implantação verifica o relatório SAST e compara as vulnerabilidades entre as ramificações de origem e de destino. Essas descobertas aparecem na solicitação de mesclagem;

  • Dynamic Application Security Testing (DAST): uma metodologia de teste de caixa preta usada para descobrir possíveis falhas de segurança, através da varredura automatizada em um alvo em execução (geralmente funciona em conjunto com o SAST). Enquanto o SAST analisa o código-fonte, o DAST analisa erros de tempo de execução em aplicativos executados. Depois que um aplicativo é implantado, ele fica exposto a novas formas de riscos de segurança, como scripts entre sites ou falhas de autenticação quebradas;

  • Threat Modeling: é o processo de pensar sobre cada decisão tomada em um determinado sistema e de extrapolar como elas podem afetar seu perfil de segurança, seja imediatamente ou no futuro. É um processo baseado nos seguintes objetivos: (1) identificar requisitos de segurança; (2) identificar ameaças à segurança e vulnerabilidades potenciais; (3) quantificar a criticidade das ameaças e vulnerabilidades, de modo a priorizar os métodos de correção. Os métodos de modelagem de ameaças criam estes artefatos:
    • Uma abstração do sistema;
    • Perfis de potenciais invasores, incluindo seus objetivos e métodos;
    • Um catálogo de ameaças que podem surgir.

  • Security architecture review: etapa responsável por identificar, avaliar e mitigar riscos para fortalecer as medidas de segurança de uma organização contra ameaças e riscos presentes e emergentes;

  • Container image scanning: análise de uma imagem de container, camada por camada, para detetar possíveis ameaças à segurança;

  • Code signing: método de colocar uma assinatura digital em um programa, arquivo ou atualização de software para que a autenticidade e a integridade possam ser verificadas na instalação e execução.

Existem ainda outros tipos de testes de segurança como Interactive Application Security Testing (IAST - Teste Interativo de Segurança de Aplicativos) e Runtime Application Self-Protection (RASP - Proteção de Segurança de Aplicativos em Tempo de Execução). O IAST opera colocando um agente dentro de um aplicativo e o RASP é mais uma ferramenta de segurança colocada dentro de um aplicativo que pode responder a ataques ao vivo.

 

 

Benefícios do Shift-Left

Na prática, o conceito de Shift-Left visa encontrar e corrigir vulnerabilidades antecipadamente, no momento do código. Isso não apenas garante melhor segurança, mas também melhora a experiência do usuário, fornecendo software com mais rapidez, frequência e uma qualidade impecável.

 

Basicamente, ele acelera a eficiência do desenvolvimento e também pode reduzir custos indiretos, detetando e solucionando bugs de software no início do ciclo de desenvolvimento.

 

Em resumo, estas são as vantagens principais:

  • Bugs, defeitos e problemas de desempenho que podem ser identificados no início do ciclo de vida do desenvolvimento, facilitando sua correção;
  • Os custos de teste e manutenção podem ser reduzidos significativamente com a deteção precoce;
  • O produto final apresenta maior qualidade, com pouquíssimos bugs e problemas de desempenho;
  • O tempo de mercado é reduzido devido a testes integrados com o desenvolvimento com feedback rápido;
  • Melhor satisfação do cliente com a experiência de usuário.

 

 

Conclusão

Os testes Shift-Left suportam equipes ágeis e práticas de DevOps, além de gerarem produtos de melhor qualidade com custo e tempo reduzidos. Também precisamos considerar que o conceito é popular na comunidade de testadores, pois tem como objetivo encontrar problemas mais cedo com custo de correção menor. Entre os DevOps, está também sendo cada vez mais adotado.


Entretanto, o que preocupa em sua maioria é o fato de tornar o fluxo de desenvolvimento lento e burocrático para lançamento de uma nova funcionalidade em produção. O teste de carga com a abordagem Shift-Left é uma estratégia muito sofisticada para garantir que sua aplicação seja sempre otimizada para um melhor desempenho.

 

Mas as ferramentas são feitas pensando justamente no desenvolvimento ágil, pelo que é preciso levar em conta que poucos minutos acrescentados à sua pipeline podem trazer ganhos expressivos à segurança, garantindo a qualidade do que será entregue ao usuário final e evitando problemas na sua aplicação.

Partilha este artigo