Como ler e corrigir 100,000 linhas de código em uma semana

Como ler e corrigir 100,000 linhas de código em uma semana
No início é sempre difícil entender um projeto grande e antigo. A arquitetura é uma das atividades da avaliação de um arquiteto. Normalmente você tem que trabalhar com projetos grandes e antigos, e os resultados devem ser entregues em uma semana.

Como avaliar um projeto de 100 mil ou mais linhas de código em uma semana e ainda fornecer resultados que sejam realmente úteis para o cliente.

A maioria dos arquitetos e líderes técnicos encontrou avaliações de projetos semelhantes. Isto pode parecer um processo semiformal ou um serviço separado como é feito em nossa empresa, de uma forma ou de outra a maioria de vocês já lidou com isso.

O original em inglês para seus amigos que não falam russo está aqui: Avaliação de Arquitetura em uma semana.

A abordagem da nossa empresa

Vou te contar como funciona em nossa empresa e como atuo em situações semelhantes, mas você pode facilmente alterar essa abordagem de acordo com a necessidade do seu projeto e empresa.

Existem dois tipos de avaliação de arquitetura.

Interno – normalmente fazemos isso para projetos dentro da empresa. Qualquer projeto pode solicitar uma avaliação de arquitetura por vários motivos:

  1. A equipe acha que seu projeto é perfeito e isso é suspeito. Já tivemos casos assim e, muitas vezes, nesses projetos tudo está longe do ideal.
  2. A equipe quer testar seu projeto e suas soluções.
  3. A equipe sabe que as coisas estão ruins. Eles podem até listar os principais problemas e causas, mas querem uma lista completa de problemas e recomendações para melhorar o projeto.

Externo é um processo mais formal do que uma avaliação interna. O cliente sempre vem apenas em um caso, quando tudo está ruim - muito ruim. Normalmente o cliente entende que existem problemas globais, mas não consegue identificar corretamente as causas e dividi-las em componentes.

Avaliar uma arquitetura para um cliente externo é um caso mais complexo. O processo deveria ser mais formal. Os projetos são sempre grandes e antigos. Eles têm muitos problemas, bugs e códigos tortos. Dentro de algumas semanas no máximo deverá ficar pronto um relatório sobre o trabalho realizado, que deverá incluir os principais problemas e recomendações de melhoria. Portanto, se tratarmos da avaliação externa do projeto, a avaliação interna será moleza. Consideremos o caso mais difícil.

Avaliação da arquitetura do projeto empresarial

Um projeto típico a ser avaliado é um projeto empresarial grande, antigo e com muitos problemas. Um cliente vem até nós e nos pede para consertar seu projeto. É como um iceberg, o cliente vê apenas a ponta dos seus problemas e não tem ideia do que está debaixo d'água (nas profundezas do código).

Problemas dos quais o cliente pode reclamar e dos quais pode estar ciente:

  • Problemas de desempenho
  • Problemas de usabilidade
  • Implantação de longo prazo
  • Falta de unidade e outros testes

Problemas que o cliente provavelmente não conhece, mas que podem estar presentes no projeto:

  • Problemas de segurança
  • Problemas de projeto
  • Arquitetura errada
  • Erros algorítmicos
  • Tecnologias inadequadas
  • Dívida técnica
  • Processo de desenvolvimento errado

Processo formal de revisão da arquitetura

Este é um processo formal que seguimos como empresa, mas você pode customizá-lo dependendo da sua empresa e projeto.

Solicitação de um cliente

O cliente pede para avaliar a arquitetura do projeto atual. O responsável do nosso lado coleta informações básicas sobre o projeto e seleciona os especialistas necessários. Dependendo do projeto, podem ser especialistas diferentes.

Solução de arquitetura – a principal pessoa responsável pela avaliação e coordenação (e muitas vezes a única).
Empilhe especialistas específicos – .Net, Java, Python e outros especialistas técnicos dependendo do projeto e tecnologias
Especialistas em nuvem – podem ser arquitetos de nuvem Azure, GCP ou AWS.
Infraestrutura – DevOps, administrador de sistema, etc.
Outros especialistas – como big data, aprendizado de máquina, engenheiro de desempenho, especialista em segurança, líder de controle de qualidade.

Coletando informações sobre o projeto

Você deve coletar o máximo de informações possível sobre o projeto. Você pode usar diferentes técnicas dependendo da situação:

  • Questionários e outros métodos de comunicação via correio. A maneira mais ineficaz.
  • Reuniões on-line.
  • Ferramentas especiais para troca de informações como: Google doc, Confluence, repositórios, etc.
  • Reuniões “ao vivo” no local. A maneira mais eficaz e mais cara.

O que você deve obter do cliente?

Informação básica. Qual é o projeto? Seu propósito e valor. Principais objetivos e planos para o futuro. Metas e estratégias de negócios. Principais problemas e resultados desejados.

Informações do Projeto. Pilha de tecnologia, frameworks, linguagens de programação. Implantação no local ou na nuvem. Se o projeto estiver na nuvem, quais serviços serão utilizados. Quais padrões arquitetônicos e de design foram usados.

requisitos não Funcionais. Todos os requisitos relacionados ao desempenho, disponibilidade e facilidade de uso do sistema. Requisitos de segurança, etc.

Casos de uso básicos e fluxos de dados.

Acesso ao código-fonte. A parte mais importante! Definitivamente, você deve ter acesso aos repositórios e à documentação sobre como construir o projeto.

Acesso à infraestrutura. Seria bom ter acesso ao palco ou à infraestrutura de produção para trabalhar com o sistema ao vivo. É um grande sucesso se o cliente possuir ferramentas de monitoramento de infraestrutura e desempenho. Falaremos sobre essas ferramentas na próxima seção.

Documentação. Se o cliente tiver documentação, este é um bom começo. Pode estar desatualizado, mas ainda é um bom começo. Nunca confie na documentação - teste-a com o cliente, na infraestrutura real e no código-fonte.

Processo de avaliação de arquitetura

Como é possível processar uma quantidade tão grande de informações em tão pouco tempo? Em primeiro lugar, paralelize o trabalho.

O DevOps deve olhar para a infraestrutura. Líder técnico no código. Engenheiro de desempenho para visualizar métricas de desempenho. Um especialista em banco de dados deve se aprofundar nas estruturas de dados.

Mas este é um caso ideal quando você tem muitos recursos. Normalmente, uma a três pessoas avaliam um projeto. Você mesmo pode realizar a estimativa, o que geralmente acontece se você tiver o conhecimento e a experiência adequados em todas as áreas do projeto. Nesse caso, você precisa automatizar ao máximo todos os processos.

Infelizmente, você terá que ler a documentação manualmente. Com a experiência certa, você pode compreender rapidamente a qualidade da documentação. O que é verdade e o que claramente não coincide com a realidade. Às vezes você pode ver uma arquitetura na documentação que nunca funcionará na vida real. Isso é um gatilho para você pensar como foi feito na realidade no projeto.

Ferramentas úteis para automatizar a avaliação de projetos

A avaliação do código é um exercício simples. Você pode usar analisadores de código estático que mostrarão problemas de design, desempenho e segurança. Aqui estão alguns deles:

Estrutura 101 é uma ótima ferramenta para um arquiteto. Ele mostrará o panorama geral, as dependências entre os módulos e as áreas potenciais para refatoração. Como todas as boas ferramentas, custa um bom dinheiro, mas você pode aproveitar as vantagens de uma versão de teste de 30 dias.

SonarQubeGenericName - uma boa e velha ferramenta. Uma ferramenta para análise estática de código. Permite identificar códigos incorretos, bugs e problemas de segurança em mais de 20 linguagens de programação.

Todos os provedores de nuvem possuem ferramentas de monitoramento de infraestrutura. Isso permitirá avaliar adequadamente a eficácia da sua infraestrutura em termos de custo e desempenho. Para AWS isso é conselheiro de confiança. É fácil para o Azure Consultor Azure.

O monitoramento e registro de desempenho adicionais ajudarão a encontrar problemas de desempenho em todos os níveis. Começando com um banco de dados com consultas ineficazes, o backend e terminando com o frontend. Mesmo que o cliente não tenha instalado essas ferramentas anteriormente, você poderá integrá-las ao sistema existente rapidamente para identificar problemas de desempenho.

Como sempre, boas ferramentas valem a pena. Posso recomendar algumas ferramentas pagas. Claro que você pode usar código aberto, mas isso levará mais tempo. E isso deve ser feito antecipadamente, e não durante o processo de avaliação arquitetônica.

New Relic – uma ferramenta para avaliar o desempenho do aplicativo
Datadog – serviço de monitoramento de sistema em nuvem

Existem muitas ferramentas disponíveis para testes de segurança. Desta vez, recomendarei uma ferramenta gratuita de verificação do sistema.

ZAP OWASP – uma ferramenta para verificar aplicativos da web quanto à conformidade com os padrões de segurança.

Vamos juntar tudo em um todo.

Preparando um relatório

Comece seu relatório com os dados coletados do cliente. Descreva os objetivos do projeto, restrições e requisitos não funcionais. Depois disso, todos os dados de entrada devem ser mencionados: código-fonte, documentação, infraestrutura.

Próxima Etapa. Liste todos os problemas encontrados manualmente ou usando ferramentas automatizadas. Coloque grandes relatórios gerados automaticamente no final da seção de aplicativos. Deve haver evidências curtas e sucintas dos problemas encontrados.
Priorize os problemas encontrados na escala de erro, aviso e informação. Você pode escolher sua própria escala, mas esta é a geralmente aceita.

Como um verdadeiro arquiteto, é sua responsabilidade fornecer recomendações para corrigir os problemas encontrados. Descreva as melhorias e o valor comercial que o cliente receberá. Como mostrar o valor do negócio a partir de refatoração de arquitetura discutimos anteriormente.

Prepare um roteiro com pequenas iterações. Cada iteração deve conter tempo para conclusão, descrição, quantidade de recursos necessários para melhoria, valor técnico e valor comercial.

Concluímos a avaliação da arquitetura e fornecemos ao cliente um relatório

Nunca envie apenas um relatório. Pode não ser lido ou pode não ser lido e compreendido sem a devida explicação. Resumindo, a comunicação ao vivo ajuda a eliminar mal-entendidos entre as pessoas. Você deve agendar uma reunião com o cliente e conversar sobre os problemas encontrados, focando nos mais significativos. Vale chamar a atenção do cliente para problemas dos quais ele talvez nem tenha conhecimento. Como questões de segurança e explique como elas podem impactar os negócios. Mostre seu roadmap com melhorias e discuta diferentes opções mais adequadas ao cliente. Pode ser tempo, recursos, quantidade de trabalho.

Como resumo da sua reunião, envie seu relatório ao cliente.

Em conclusão

A avaliação da arquitetura é um processo complexo. Para realizar a avaliação adequadamente, você precisa ter experiência e conhecimento suficientes.

É possível entregar ao cliente resultados úteis para ele e seu negócio em apenas uma semana. Mesmo se você fizer isso sozinho.

Com base na minha experiência, muitas melhorias foram baixadas no meio e, às vezes, nunca iniciadas. Aqueles que escolheram o meio-termo e fizeram apenas parte das melhorias mais úteis para o negócio com custos mínimos de mão de obra melhoraram significativamente a qualidade de seu produto. Aqueles que não fizeram nada poderiam encerrar completamente o projeto depois de alguns anos.

Seu objetivo é mostrar ao cliente o máximo de melhorias pelo preço mínimo.

Outros artigos da seção arquitetura você pode ler quando quiser.

Desejo a você um código limpo e boas decisões arquitetônicas.

Nosso grupo no Facebook - Arquitetura e Desenvolvimento de Software.

Fonte: habr.com

Adicionar um comentário