Recomendações para padronização de ferramentas e processos
Aplica-se a esta recomendação de lista de verificação de Excelência Operacional do Azure Well-Architected Framework:
OE:04 | Otimize os processos de desenvolvimento de software e garantia de qualidade seguindo práticas comprovadas pelo setor para desenvolvimento e testes. Para uma designação inequívoca de funções, 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 Use a integração contínua
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 trabalho de alta qualidade. Equipes de alto desempenho usam ferramentas e processos comprovados pelo setor para minimizar o desperdício de esforços e possíveis erros de código.
Principais estratégias de design
O primeiro passo para otimizar as práticas de desenvolvimento é padronizar ferramentas e processos. Sempre que 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ê padroniza, implemente treinamentos para que suas equipes os entendam e os usem de forma eficiente. Para definir padrões que ajudem a otimizar suas práticas de desenvolvimento, considere as recomendações a seguir.
Use ferramentas conhecidas e maduras prontas para uso
Use ferramentas conhecidas e maduras prontas para uso 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, testes, colaboração e integração contínua e entrega contínua (CI/CD). Muitas empresas dão 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 para sua carga de trabalho. As ferramentas prontas a usar devem fornecer as seguintes funções:
Planeamento do trabalho e gestão do 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 às suas necessidades 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 oferecem. 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 AI quando possível. 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 de código, revisões e otimização.
Padronize sua estratégia de ramificação
Escolha um modelo baseado em tronco sempre que possível. A ramificação baseada em tronco mantém a equipe de desenvolvimento da carga de trabalho sincronizada e incentiva a entrega contínua. Defina políticas de ramificação para proteger ramificações importantes, como a ramificação principal. Para obter mais informações, consulte Adotar uma estratégia de ramificação do Git e Políticas e configurações de ramificação.
Avaliar métricas para quantificar a eficácia do desenvolvimento
As equipas de desenvolvimento de software e de garantia de qualidade só podem melhorar se conseguirem quantificar a 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.
Prazo de execução: o tempo que leva para uma tarefa ou história de usuário passar da lista de pendências para uma implantação de produção.
Tempo médio de resolução: o tempo médio gasto na correção de 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 controlar 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 normas claramente definidas pode facilitar o seu processo de formação. 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 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, ramificações, compilações e execuções.
Você também deve definir diretrizes e padrões para o grau permitido de variância 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. Testar a sua viabilidade e substituir as tecnologias existentes, quando adequado.
Use registros de decisão de arquitetura (ADRs) para manter um registro histórico das decisões de projeto 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. Certifique-se de que os ADRs são controlados por versão.
Na sua resolução alternativa de litígios, inclua:
Ferramentas e tecnologias específicas, por exemplo, usando SQL ou NoSQL, que sua equipe escolhe.
As razões para as decisões da sua equipa.
Outras opções que foram consideradas, o que ajuda a contextualizar a decisão final.
Requisitos funcionais e não funcionais que são tidos em conta nas decisões.
O contexto do processo de tomada de decisão, como o problema que foi abordado.
Implementar normas 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 o acúmulo. Abordar a dívida técnica como uma tarefa regularmente recorrente na lista de pendências.
Por exemplo, suponha que sua equipe padronizou em uma biblioteca. Com o tempo, você precisa alternar para uma biblioteca diferente para 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 suportando duas tecnologias porque elas não podem fazer uma transição totalmente suave. 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 têm menos probabilidade de considerar a dívida técnica.
Padronize 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 eles usam. 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 certos à medida que sua carga de trabalho evolui.
Implementar uma abordagem de deslocamento à esquerda para testar
Implemente uma abordagem de turno à esquerda para os testes, realizando testes de unidade no início 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 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 todos os lugares, incluindo a produção. Escreva testes que você pode executar em cada ambiente de desenvolvimento sem levar em conta fatores específicos de um ambiente, como segredos criptografados ou configurações.
Projete sua carga de trabalho para testes. Ao desenvolver seu aplicativo, torne a capacidade de teste um requisito.
Trate o código de teste como código de 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. Desenvolver e manter código de teste com código de aplicação. 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 é proprietária de seus testes e não deve depender de outras equipes para testar seu código.
Automatize os testes tanto quanto possível. O código automatizado alivia a carga sobre sua equipe de carga de trabalho e impõe uma qualidade consistente.
Para obter orientações detalhadas sobre como implementar uma estratégia de teste de DevOps, consulte Shift testing left with unit tests.
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. Devem seguir estas práticas, sem exceção. Para obter mais informações, consulte Guia do ciclo de vida do 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 permitem segurança, automação, relatórios e governança de recursos em assinaturas e grupos de recursos.
Alguns dos benefícios do uso de 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 faturamento, monitoramento, segurança e conformidade.
- Eles oferecem suporte ao gerenciamento do ciclo de vida dos 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, é fundamental identificar rapidamente os sistemas afetados, as funções que esses sistemas suportam 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 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 compilação e lançamento para dar suporte ao CI/CD de seus aplicativos.
O Azure Boards é uma ferramenta de gestão de trabalho baseada na Web que suporta práticas ágeis 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ído 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 das partes interessadas.
Os Artefatos do Azure são usados para permitir que os desenvolvedores compartilhem seu código e gerenciem seus pacotes com eficiência.
O GitHub Actions for 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 pull para seu repositório ou implantar solicitações 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 o IaC. O Terraform é outra ferramenta IaC suportada pelo Azure que você pode usar para implantar e gerenciar a infraestrutura.
O Visual Studio é uma ferramenta de desenvolvimento robusta que se integra com o Azure e suporta muitas 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. Copilot está disponível como uma extensão no Visual Studio e 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 em alta escala simulando o tráfego para seus aplicativos, independentemente de onde eles estão hospedados.
Alinhamento organizacional
O Cloud Adoption Framework for 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.
Ligações relacionadas
- Adopt a Git branching strategy (Adotar uma estratégia de ramificação do Git)
- Políticas e definições de ramos
- Padrões de design na nuvem
- Velocidade do desenvolvedor
- Desenvolva sua estratégia de nomenclatura e marcação para recursos do Azure
- Centro de recursos de DevOps
- Habilite o DevSecOps com o Azure e o GitHub
- Visão geral da análise do código-fonte
- Guia do ciclo de vida do desenvolvimento de segurança
- Segurança em DevOps (DevSecOps)
- Teste de deslocamento para a esquerda com testes de unidade
- Série de vídeos: Introdução ao GitHub CoPilot
Lista de verificação de Excelência Operacional
Consulte o conjunto completo de recomendações.