Recomendações para padronização de ferramentas e processos

Aplica-se a esta recomendação da lista de verificação do Azure Well-Architected Framework Operational Excellence:

OE:04 Otimize os processos de desenvolvimento de software e garantia de qualidade seguindo práticas comprovadas no setor para desenvolvimento e teste. Para uma designação de função inequívoca, padronize as práticas em todos os componentes, como ferramentas, controle do código-fonte, padrões de design de aplicativos, documentação e guias de estilo.

Guia relacionado: Melhorar a velocidade | de construção Usar a integração contínua

Este guia descreve as recomendações para definir padrões para ferramentas e processos de desenvolvimento de software. A definição de práticas consistentes leva a uma equipe de carga de trabalho eficiente e a um trabalho de alta qualidade. As equipes de alto desempenho usam ferramentas e processos comprovados pelo setor para minimizar o esforço desperdiçado e possíveis erros de código.

Principais estratégias de design

A primeira etapa da otimização das práticas de desenvolvimento é padronizar ferramentas e processos. Quando possível, use soluções comprovadas pelo setor em vez de desenvolver soluções internas. Para otimizar ainda mais suas práticas, adote ferramentas low-code e no-code. Essas ferramentas permitem que você concentre esforços em seu aplicativo e ajudam a economizar tempo. Para todas as ferramentas e processos que você padronizar, implemente treinamentos para que suas equipes os entendam e usem com eficiência. Para definir padrões que ajudam a otimizar suas práticas de desenvolvimento, considere as recomendações a seguir.

Use ferramentas prontas para uso conhecidas e maduras

Use ferramentas prontas para uso conhecidas e maduras e padronize seu uso. Equipes de engenharia altamente eficazes adotam as melhores ferramentas da categoria. Essa abordagem minimiza a necessidade de desenvolver soluções para planejamento, desenvolvimento, teste, colaboração e integração contínua e entrega contínua (CI/CD). Muitas empresas oferecem aos desenvolvedores uma escolha entre algumas ferramentas, mas todas as opções são ferramentas padrão para a organização e são validadas internamente. Mais importante ainda, escolha ferramentas que atendam aos requisitos de sua carga de trabalho. As ferramentas prontas para uso devem fornecer as seguintes funções:

  • Planejamento de trabalho e gerenciamento de backlog

  • Controle de versão e repositórios

  • Pipelines de CI/CD

  • Testes, como integração, fumaça, usuário sintético, simulação, caos e outros testes de qualidade

  • Desenvolvimento de código

Em alguns casos, uma ferramenta ou um conjunto de ferramentas pode fornecer várias funções. Certifique-se de entender os recursos de suas ferramentas e suas limitações para que elas atendam aos seus requisitos em todas as funções.

Determine se você deve investir em ferramentas caras ou versões premium de ferramentas. Considere o tempo e o esforço de desenvolver suas próprias soluções em comparação com os recursos que as ferramentas premium fornecem. Considere custos únicos versus custos recorrentes. Na maioria dos casos, as ferramentas prontas para uso fornecem maior valor para sua equipe.

Use ferramentas low-code, no-code e IA quando possível. As ferramentas low-code e no-code economizam tempo de desenvolvedores experientes, permitindo que eles conectem facilmente a funcionalidade em vez de executar todo o processo de desenvolvimento de código. Essas ferramentas também permitem que os membros da equipe de carga de trabalho que podem não ser desenvolvedores treinados contribuam para a operação da carga de trabalho. As ferramentas de IA podem ajudar no desenvolvimento, revisões e otimização de código.

Padronize sua estratégia de ramificação

Escolha um modelo baseado em troncos quando possível. O branching baseado em tronco mantém a equipe de desenvolvimento de carga de trabalho sincronizada e incentiva a entrega contínua. Defina políticas de branch para proteger branches importantes, como o branch principal. Para obter mais informações, consulte Adotar uma estratégia de ramificação do Git e Políticas e configurações do branch.

Avalie as métricas para quantificar a eficácia do desenvolvimento

As equipes de desenvolvimento de software e garantia de qualidade só podem melhorar se puderem quantificar sua eficácia. Para quantificar a eficácia, eles devem identificar as métricas que medem a velocidade do desenvolvedor e definir KPIs. Exemplos dessas métricas incluem:

  • Frequência de implantação: o número de implantações que cada desenvolvedor implanta a cada dia.

  • Tempo de entrega: o tempo que leva para uma tarefa ou história de usuário ir da lista de pendências para uma implantação de produção.

  • Tempo médio de resolução: o tempo médio gasto corrigindo bugs ou defeitos no código.

  • Taxa de falha de alteração: a porcentagem de alterações que resultam em uma falha.

Para ajudar as partes interessadas e a equipe de carga de trabalho a rastrear facilmente a velocidade, visualize os KPIs usando painéis ou outras ferramentas de relatório.

Padronize como sua equipe de carga de trabalho escreve, revisa e documenta o código

Padronize como sua equipe de carga de trabalho escreve, revisa e documenta o código usando um guia de estilo. Um estilo padrão facilita a colaboração e ajuda na integração de novos desenvolvedores. Para trabalhar de forma eficaz, os novos desenvolvedores precisam saber como a equipe de carga de trabalho opera. Um guia de estilo com padrões claramente definidos pode facilitar o processo de treinamento deles. No guia de estilo, defina padrões para linguagens de desenvolvimento, bibliotecas, estruturas e outras convenções.

Quando for prático, use ferramentas para impor padrões de formatação de código. Por exemplo, o Visual Studio oferece várias ferramentas que verificam o código em busca de estilo, qualidade, capacidade de manutenção, design e outros problemas. Para infraestrutura como código (IaC), você pode usar o Checkov ou o Terrascan para Terraform.

Para garantir a consistência e evitar possíveis confusões, o guia de estilo deve incluir convenções de nomenclatura padrão para artefatos, ambientes, ramificações, compilações e execuções.

Você também deve definir diretrizes e padrões para o grau permitido de variação em seus ambientes. Se houver novas linguagens, estruturas ou outras tecnologias que os membros da equipe de carga de trabalho desejam adicionar à lista padrão, implemente um processo para usar essas ferramentas em um ambiente de área restrita ou inferior. Teste sua viabilidade e substitua as tecnologias existentes quando apropriado.

Use ADRs (registros de decisão de arquitetura) para manter um registro histórico das decisões de design da equipe de carga de trabalho. Os ADRs ajudam suas equipes a manter uma nova compreensão da carga de trabalho. Eles também ajudam os novos membros da equipe a aprender sobre as decisões de design que são tomadas durante o ciclo de vida da carga de trabalho. Certifique-se de que os ADRs sejam controlados por versão.

Em sua ADR, inclua:

  • Ferramentas e tecnologias específicas, por exemplo, usando SQL ou NoSQL, que sua equipe escolher.

  • As razões para as decisões de sua equipe.

  • Outras opções que foram consideradas, o que ajuda a contextualizar a decisão final.

  • Requisitos funcionais e não funcionais que são levados em consideração nas decisões.

  • O contexto do processo de tomada de decisão, como o problema que foi abordado.

Implementar padrões para lidar com a dívida técnica

Adote uma mentalidade de que a dívida técnica é intencional e necessária para as entregas da sua equipe de carga de trabalho. Essa mentalidade motiva sua equipe a considerar e lidar com dívidas técnicas regularmente para evitar acúmulo. Trate a dívida técnica como uma tarefa recorrente e regular na lista de pendências.

Por exemplo, suponha que sua equipe padronizou uma biblioteca. Com o tempo, você precisa alternar para uma biblioteca diferente para obter novas funcionalidades na carga de trabalho. Essa transição pode resultar em dívida técnica. Frequentemente, transições como essa podem deixar a equipe de carga de trabalho dando suporte a duas tecnologias porque elas não podem fazer a transição totalmente sem problemas. A equipe de carga de trabalho deve priorizar a conclusão da transição porque, quando a carga de trabalho atinge a nova funcionalidade, as partes interessadas ficam satisfeitas e são menos propensas a considerar a dívida técnica.

Padronizar a forma como você aplica o controle de versão aos seus artefatos

Padronize como você aplica o controle de versão aos seus artefatos e como o controle de versão é exposto interna e externamente. Por exemplo, os sistemas voltados para o cliente devem expor sua versão em execução na interface do usuário. Essa técnica é útil quando a equipe de carga de trabalho soluciona problemas, pois o cliente pode comunicar facilmente qual versão usa. As interfaces REST podem expor versões para determinados componentes ou bancos de dados. Você pode usar uma tabela específica nos metadados de um esquema para expor a versão do esquema.

Use padrões de design de aplicativos comprovados pelo setor para garantir que seu aplicativo seja confiável, eficiente e seguro. Use esses padrões para economizar tempo e esforço em comparação com o desenvolvimento de suas próprias soluções para seu aplicativo. Escolha os padrões que beneficiam sua carga de trabalho. Revise regularmente os padrões de design para garantir que você use os padrões corretos à medida que sua carga de trabalho evolui.

Implemente uma abordagem shift-left para testar

Implemente uma abordagem shift-left para testes executando testes de unidade antecipadamente e com frequência durante todo o processo de desenvolvimento. Testes frequentes em cada ambiente de desenvolvimento ajudam os desenvolvedores a ganhar confiança em seus aplicativos. Para ajudar a criar sua estratégia de teste com uma abordagem shift-left, considere os seguintes princípios:

  • Escreva testes no nível mais baixo possível. Favoreça testes com o menor número de dependências externas e execute testes como parte da compilação.

  • Escreva testes uma vez e execute testes em qualquer lugar, incluindo produção. Escreva testes que você pode executar em todos os ambientes de desenvolvimento sem levar em conta fatores específicos de um ambiente, como segredos ou configurações criptografadas.

  • Projete sua carga de trabalho para teste. Ao desenvolver seu aplicativo, torne a testabilidade um requisito.

  • Trate o código de teste como código do aplicativo. Aplique os mesmos padrões de qualidade e desenvolvimento ao código do aplicativo e ao código de teste. Armazene o código de teste junto com o código do aplicativo. Desenvolva e mantenha o código de teste com o código do aplicativo. Para garantir a qualidade dos testes, descarte os testes que não são confiáveis.

  • Considere a propriedade do teste, que se baseia na propriedade da carga de trabalho. Sua equipe de carga de trabalho é proprietária de seus testes e não deve depender de outras equipes para testar seu código.

  • Automatize os testes o máximo possível. O código automatizado alivia a carga de trabalho de sua equipe de carga de trabalho e impõe uma qualidade consistente.

Para obter diretrizes detalhadas sobre como implementar uma estratégia de teste de DevOps, consulte Teste de turno à esquerda com testes de unidade.

Exija práticas de DevSecOps como parte de seus procedimentos operacionais padrão. Sua equipe de carga de trabalho deve entender as práticas de segurança relacionadas ao desenvolvimento de software e à garantia de qualidade. Eles devem seguir essas práticas sem exceção. Para obter mais informações, consulte Guia do ciclo de vida de desenvolvimento de segurança.

Implementar padrões para nomear e marcar recursos

A implementação de convenções de marcação e nomenclatura é uma prática recomendada para gerenciar e organizar recursos do Azure. As convenções de marcação e nomenclatura ajudam a identificar, classificar e agrupar recursos com base em atributos comuns, como ambiente, aplicativo, proprietário ou centro de custo. Eles também permitem segurança, automação, relatórios e governança de recursos em assinaturas e grupos de recursos.

Alguns dos benefícios de usar convenções padronizadas de marcação e nomenclatura são:

  • Eles fornecem consistência e clareza para identificação e gerenciamento de recursos, facilitando a descoberta e a pesquisa no portal do Azure, PowerShell, CLI e APIs.
  • Eles permitem a filtragem e o agrupamento de recursos para fins de cobrança, monitoramento, segurança e conformidade.
  • Eles oferecem suporte ao gerenciamento do ciclo de vida dos recursos, como provisionamento, desativação, backup e recuperação.
  • Eles são essenciais para fins de segurança. Se você se deparar com um incidente de segurança, é fundamental identificar rapidamente os sistemas afetados, as funções que esses sistemas suportam e o possível impacto nos negócios.

Para obter mais informações sobre como usar convenções de nomenclatura para seus recursos de nuvem, consulte Definir sua convenção de nomenclatura. Para obter mais informações sobre como aplicar tags de metadados aos seus recursos de nuvem, consulte Definir sua estratégia de marcação.

Facilitação do Azure

  • O Azure DevOps é uma coleção de serviços que você pode usar para criar uma prática de desenvolvimento colaborativa, eficiente e consistente. O Azure DevOps agrupa as seguintes soluções:

    • O Azure Pipelines fornece serviços de build e versão para dar suporte à CI/CD de seus aplicativos.

    • Azure Boards é uma ferramenta de gerenciamento de trabalho baseada na Web que dá suporte a práticas ágeis como Scrum e Kanban.

    • Azure Repos é uma ferramenta de controle de versão que dá suporte ao sistema de controle de versão distribuído Git e ao sistema de controle de versão do Team Foundation.

    • O Azure Test Plans é uma solução de gerenciamento de teste baseada em navegador que fornece recursos necessários para testes manuais planejados, testes de aceitação do usuário, testes exploratórios e coleta de comentários dos stakeholders.

    • O Azure Artifacts é usado para permitir que os desenvolvedores compartilhem seu código com eficiência e gerenciem seus pacotes.

  • O GitHub Actions para Azure é uma ferramenta que você pode usar para automatizar processos de CI/CD. Ele se integra diretamente ao Azure para simplificar as implantações. Você pode criar fluxos de trabalho que criam e testam cada solicitação de pull em seu repositório ou implantar solicitações de pull mescladas na produção.

  • O GitHub Projects é uma ferramenta de gerenciamento de trabalho que você pode usar para criar quadros Kanban, relatórios, painéis e outras funções.

  • As ferramentas low-code e no-code incluem:

  • Os modelos do Azure Resource Manager e o Bicep são ferramentas nativas do Azure que você pode usar para implantar a IaC. O Terraform é outra ferramenta de IaC com suporte do Azure que você pode usar para implantar e gerenciar a infraestrutura.

  • O Visual Studio é uma ferramenta de desenvolvimento robusta que se integra ao Azure e dá suporte a várias linguagens.

  • O GitHub Copilot é um serviço de IA que atua como um programador de pares e fornece sugestões de estilo de preenchimento automático à medida que você codifica. O Copilot está disponível como uma extensão no Visual Studio e em várias outras ferramentas de desenvolvimento.

  • O Teste de Carga do Azure é um serviço de teste de carga totalmente gerenciado que você pode usar para gerar carga de alta escala simulando o tráfego para seus aplicativos, independentemente de onde eles estejam hospedados.

Alinhamento da organização

O Cloud Adoption Framework para Azure fornece diretrizes e recomendações gerais para marcar e nomear recursos do Azure, bem como regras e exemplos específicos para diferentes tipos de recursos.

Lista de verificação de Excelência Operacional

Consulte o conjunto completo de recomendações.