Compartilhar via


Estratégias de arquitetura para padronizar ferramentas e processos

Aplica-se a esta recomendação de lista de verificação da Excelência Operacional do Azure Well-Architected Framework:

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

Este guia descreve as recomendações para definir padrões para ferramentas e processos de desenvolvimento de software. Definir 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.

A primeira etapa de 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 de baixo código e sem código. Essas ferramentas permitem concentrar esforços em seu aplicativo e ajudá-lo a economizar tempo. Para todas as ferramentas e processos que você padroniza, implemente o treinamento para que suas equipes entendam e as usem com eficiência. Para definir padrões que ajudem a otimizar suas práticas de desenvolvimento, considere as recomendações a seguir.

Usar ferramentas bem conhecidas e maduras de prateleira

Use ferramentas bem conhecidas e maduras prontas para uso e padronizar o 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 CI/CD (integração contínua e entrega contínua). Muitas empresas oferecem aos desenvolvedores uma opção entre algumas ferramentas, mas todas as opções são ferramentas padrão para a organização e são validadas internamente. O mais importante é escolher ferramentas que atendam aos requisitos da 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 de qualidade, como teste de integração, teste de fumaça, teste de usuário sintético, simulação, caos e outros testes

  • 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 entre 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 oferecem. Considere os custos únicos versus os custos recorrentes. Na maioria dos casos, ferramentas prontas para uso fornecem maior valor à sua equipe.

Use ferramentas de baixo código, sem código e IA quando prático. Ferramentas de baixo código e sem código economizam tempo para 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, nas revisões e na otimização do código.

Padronizar sua estratégia de ramificação

Escolha um modelo baseado em tronco quando possível. A ramificação baseada em tronco mantém a equipe de desenvolvimento de carga de trabalho em sincronia e incentiva a entrega contínua. Defina políticas de ramo para proteger ramos importantes, como o ramo principal. Para obter mais informações, consulte Adotar uma estratégia de ramificação Git e políticas e configurações de ramificação.

Avaliar métricas para quantificar a eficácia do desenvolvimento

As equipes de desenvolvimento de software e garantia de qualidade só poderão 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 definem KPIs. Exemplos dessas métricas incluem:

  • Frequência de implantação: o número de implantações que cada desenvolvedor implanta todos os dias.

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

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

  • Alterar a taxa de falha: o percentual de alterações que resultam em uma falha.

Para ajudar os stakeholders 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, analisa e documenta códigos

Padronize como sua equipe de carga de trabalho escreve, analisa e documenta códigos 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 seu processo de treinamento. 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 código em busca de estilo, qualidade, manutenção, design e outros problemas. Para Infraestrutura como Código (IaC), você pode usar Checkov ou 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, branches, builds e execuções.

Você também deve definir diretrizes e padrões para o grau permitido de variação em seus ambientes. Se houver novos idiomas, 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 uma área restrita ou ambiente inferior. Teste sua viabilidade e substitua as tecnologias existentes quando apropriado.

Use os ADRs (registros de decisão de arquitetura) para manter um registro histórico das decisões de design da sua 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. Verifique se os ADRs são controlados por versão.

Em sua ADR, inclua:

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

  • Os motivos para as decisões da 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 conta nas decisões.

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

Implementar padrões para lidar com dívidas técnicas

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

Por exemplo, suponha que sua equipe tenha adotado uma biblioteca como padrão. Ao longo do tempo, você precisa mudar para uma biblioteca diferente para uma nova funcionalidade na carga de trabalho. Essa transição pode resultar em dívida técnica. Com frequência, transições como essa podem deixar a equipe encarregada de duas tecnologias porque não conseguem fazer a transição completa sem problemas. A equipe de trabalho deve priorizar a conclusão da transição porque, quando a carga de trabalho atinge a nova funcionalidade, os stakeholders ficam satisfeitos e tendem a considerar menos o passivo técnico.

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

Padronizar como você aplica o controle de versão aos artefatos e como o controle de versão é exposto internamente 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 porque o cliente pode comunicar facilmente qual versão ele 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 aplicativo comprovados pelo setor para garantir que seu aplicativo seja confiável, com desempenho 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. Examine regularmente os padrões de design para garantir que você use os padrões certos à medida que sua carga de trabalho evolui.

Implementar uma abordagem shift-left para testes

Implemente uma abordagem shift-left para o teste, realizando testes de unidade com antecedência e, muitas vezes, 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 de deslocamento para a esquerda, 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 todos os lugares, 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 criptografados ou configurações.

  • Projete sua carga de trabalho para teste. Ao desenvolver seu aplicativo, torne a capacidade de teste 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 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 possui seus testes e não deve contar com outras equipes para testar seu código.

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

Implemente uma variedade de tipos de teste, como unidade, fumaça, integração e teste de aceitação. Para obter uma revisão detalhada desses tipos de testes, consulte a seção de teste do guia de recomendação da cadeia de fornecimento de carga de trabalho .

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 o guia de ciclo de vida de desenvolvimento de segurança.

Implementar padrões para nomear e marcar recursos

Implementar 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 habilitam segurança, automação, relatórios e governança de recursos entre 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, no PowerShell, na CLI e nas APIs.
  • Elas habilitam a filtragem e o agrupamento de recursos para fins de cobrança, monitoramento, segurança e conformidade.
  • Eles dão suporte ao gerenciamento do ciclo de vida de recursos, como provisionamento, descomissionamento, backup e recuperação.
  • Eles são essenciais para fins de segurança. Se você se deparar com um incidente de segurança, é essencial identificar rapidamente os sistemas afetados, as funções que esses sistemas dão suporte e o potencial 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 marcas de metadados aos 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 empacota uma das seguintes soluções:

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

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

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

    • Os Planos de Teste do Azure são 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 compilam e testam cada solicitação de pull para seu repositório ou implantam solicitações de pull mescladas em produção.

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

  • As ferramentas de baixo código e sem código incluem:

  • Os modelos do Azure Resource Manager e o Bicep são ferramentas nativas do Azure que você pode usar para implantar 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 muitos idiomas.

  • 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 conforme 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 estão hospedados.

Alinhamento da organização

O Cloud Adoption Framework para Azure fornece diretrizes gerais e recomendações 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.