Para fazer revisões de arquitetura devemos considerar alguns pontos importantes.
As soluções/projetos devem estar adequadas ao um padrão especifico, para isso deve-se validar periodicamente a estrutura das mesmos para que sua evolução seja o mantida dentro do padrão, reduzindo o impacto com relação a manutenção/sustentação.
Caracteristicas implícitas
As implementações devem ser analisadas levando em consideração os seguintes aspectos:
- O que esta sendo feito:
- Satisfaz os casos de uso/requisitos do sistema;
- Resiste a mudanças efetuadas no ambiente de implementação;
- É de fácil manutenção e entendimento;
- O procedimento de implementação é claro;
- Tem fácil adaptação a possíveis mudanças validas efetuadas nos requisitos (Nível de dimensionamento mais complexo).
Objetivos diretos
Observar com precisão os seguintes pontos:
- Dimensionar falhas no disign da solução;
- Manter a consistência e integridade na arquitetura das aplicações;
- Identificar oportunidade de:
- Refactory;
- Reutilização de código;
- Criação de componentes;
- Observar se as fronteiras das camadas são respeitadas no design da aplicação;
- As camadas estão sendo utilizadas para encapsular as fronteiras conceituais entre os tipos de serviço, Ex:
- Negocio: domínio da solução;
- Facade: aplicação, distribuição de fluxos entre web e negocio e demais camadas;
- Web: interface com o usuário;
- Infra: cross-cutting, camada transversal que serve as demais;
- Repositorio: persistência dos dados;
- A abstração das camadas facilita a compreensão do design;
- Detectar incopatibilidade entre os casos de uso:
- Design execessivo;
- Requisitos não realistas/ausentes;
- Analisar aspectos não-funcionais:
- Desempenho;
- Confiabilidade;
- Segurança;
Sugestão de verificação
São necessárias algumas verificações para garantir a qualidade dos fontes em e da estrutura da aplicação, são eles:
- Mecanismos de Arquitetura/Design
- Furo de camadas;
- Documentos/arquivos dispersos;
- Recuperação ou tratamento de erros;
- Exibição e interfaces comuns (exibição em janelas, captura de dados, condicionamento de sinais etc.);
- Para componentes TCE, esta utilizando os pacotes nuGet;
- Assembly information;
- Nomenclaturas
- Pastas;
- Projetos;
- Classes;
- Interfaces;
- Arquivos;
- Mensagens;
- Nível de abstração de componentes;
- Qualidade:
- Cobertura de código com relação aos testes unitários;
- Testes de carga;
- Testes de regressão;
- Testes de de interface (Automatizados);
- (…)
- Código fonte:
- Nomespaces;
- Duplicação de código;
- “Using” desnecessário;
- Nomes de variáveis;
- Heranças;
- Visibilidade de métodos;
- Classes por arquivo (Deve ser somente uma classe);
- Poluição do código:
- Comentários desnecessários;
- Metodos sem nenhuma referência;
- Métodos com escopos vazios;
- Mensagens/strings fora do resource;
- Padrões SOLID;
- Reponsabilidade única;
- Linhas de código por método;
- Fechado para alteração, aberto para extenção;
- Complexidade do método;
- Deve ser possível substituir uma classe base por suas classes derivadas em quanquer ponto do código.
- Uso da classe base e herança da forma correta;
- Classes dependem somente de interfaces e não de classes concretas;
- Uso do NEW dentro das classes;
- Injeção de dependência / Inversão de controle;
- Construtor com as interfaces necessárias;
- Reponsabilidade única;
Verificação adicional
A verificação adicional é para garantir a evolução adequada das estruturas paralelas relacionas ao projeto como documentação, banco de dados e versionador de código;
- Repositorio (Team Explorer)
- Nomenclatura
- Pastas;
- Branches;
- Banco de dados
- Nomenclatura
- Tabelas;
- Views;
- StoredProcedures;
- Funções;
- Colunas;
- FK, PK, UK;
- Normalização adequada;
- Nomenclatura
- Documentação
- Técnica (DA – Documento de arquitetura)
- Visão logica (diagrama de sequência);
- Visão dos dados (DER);
- Negocio (UC – Casos de uso);
- Técnica (DA – Documento de arquitetura)
- Nomenclatura