5 Passos para Desenvolver Software com Qualidade

Planejar o desenvolvimento de software corretamente é uma prática que alguns times têm deixado de lado. Muitas vezes, desenvolvedores começam a codificar assim que recebem uma demanda, sem, no entanto, adotar qualquer estratégia. Essa abordagem, embora pareça uma solução rápida no momento, pode ser perigosa e resultar em sistemas problemáticos.

Um erro comum é a reutilização excessiva de templates de projetos. Embora isso possa parecer prático, cada projeto possui suas particularidades e adaptar um template pode introduzir elementos desnecessários e bugs do sistema original.

Após muitas experiências e estudo, elaborei uma abordagem estruturada em 5 passos, chamada “Massa com Brita”, que pode ajudar a desenvolver projetos de software com estratégia.

A ideia do nome “Massa com Brita” vem da construção de casas. Assim como o pedreiro mistura massa com brita para garantir uma estrutura sólida, no desenvolvimento de software, precisamos seguir etapas bem definidas e usar os componentes certos para construir um sistema robusto. Vamos explorar esse paralelo em 5 etapas fundamentais.

Primeira Etapa: Alicerce

O alicerce é a base de qualquer construção; sem uma fundação sólida, toda a estrutura pode desmoronar. Em um projeto de software, a situação é semelhante: se os requisitos funcionais e não funcionais não forem bem definidos desde o início, a aplicação enfrentará sérios problemas.

Comece pelo básico: compreenda todo o fluxo do sistema. Realize diagramas, realize reuniões (mesmo que não goste), e busque o máximo de informações para compreender as regras de negócio do projeto e, principalmente, os requisitos não funcionais. Avalie se a aplicação precisa ser escalável, se deve ter alta disponibilidade, e outros aspectos que influenciarão na construção do software.

Quanto mais forte for sua base, ou alicerce, melhor será sua capacidade de desenhar a arquitetura do software.

Segunda Etapa: Estrutura

Agora é hora de definir o modelo arquitetural do projeto, com base no seu alicerce. Defina se o sistema será monolítico ou distribuído. Essa escolha é crucial, e ocorre que muitos desenvolvedores cometem o erro de optar por sistemas distribuídos ou micro serviços apenas por serem populares. Isso pode ser um problema.

Avalie os requisitos do projeto e alinhe com o time qual é o melhor modelo. Liste as características desejáveis para o projeto e pontue de 1 a 5 o grau de prioridade de cada item. Realize esse exercício para ambos os modelos e, no final, o que tiver maior pontuação é o mais indicado.

Veja um exemplo de um projeto em que trabalhei. Listamos oito características e fizemos a pontuação usando alguns slides:

Figura 1 – Slides para balancear as prioridades no modelo monolítico
Figura 2 – Slides para balancear as prioridades no modelo distribuído

Você também pode transferir esses valores para uma Matriz de Decisão, onde pode justificar cada nota atribuída. Assim:

Figura 3 – Matriz de decisão arquitetural

No exemplo, o modelo distribuído teve uma pontuação maior. No entanto, é importante lembrar que a arquitetura monolítica também é uma opção válida e deve ser considerada durante o planejamento da estrutura do projeto.

Terceira Etapa: Sustentação

A etapa de sustentação é mais técnica e envolve definir os princípios e padrões a serem utilizados no sistema. Decida se o time utilizará MVC (Model View Controller), MVVM (Model View ViewModel), DDD (Domain Driven Design), TDD (Test Driven Development), Clean Architecture, Repository, entre outros.

Em muitas empresas, essas definições já são padronizadas, o que facilita a decisão. Se não for o caso, reúna-se com o time técnico para discutir como será o desenvolvimento do software e formalize um acordo para seguir essas definições até o fim.

Por exemplo, se o projeto será desenvolvido todo em inglês, nomes de métodos não podem estar em português. Este alinhamento  deve ocorrer nesta etapa.

Quarta Etapa: Cobertura

Defina as tecnologias que serão utilizadas no projeto: linguagem de programação, banco de dados, componentes, etc. Se o sistema for dividido em diversos containers, considere usar um gerenciador de containers como Kubernetes ou Docker Compose. Leve em conta o conhecimento técnico do time em relação às tecnologias disponíveis no mercado.

Levante critérios de aceitação e coloque-os em uma matriz para pontuar e justificar as notas. Exemplos fictícios:

Figura 4 – Análise da linguagem de programação C#
Figura 5 – Análise da linguagem de programação PHP
Figura 6 – Resultado da linguagem de programação

Isso é especialmente útil em fábricas de software onde diversas linguagens e tecnologias são utilizadas.

Outra atividade interessante nesta etapa é pegar os requisitos não funcionais do “alicerce” e descrever as possíveis soluções, restrições e trade-offs de cada um.

Figura 7 – Matriz de Soluções

Quinta Etapa: Acabamento

Agora é o momento de consolidar tudo o que já foi definido e criar o desenho arquitetural. Esta etapa será simples, pois muitas decisões já foram alinhadas com o time. Agora, basta “desenhar” para que todos estejam na mesma página.

Utilize qualquer modelo que preferir para o desenho arquitetural, desde que fique claro. Eu, particularmente, gosto do C4 Model, que apresenta diagramas em quatro níveis, mas você pode usar outras ferramentas, como o “drawio”.

Após a construção do desenho arquitetural, sugiro iniciar uma POC (Prova de Conceito) para validar a arquitetura. Ainda que opte por não fazer isso, desenvolver um software bem planejado será gratificante.

Conclusão

Devs, em resumo estes foram os cinco passos para construir uma fundação sólida para o desenvolvimento de software de qualidade. Embora esse exercício possa não ser necessário para todos os projetos, é importante destacar que muitos dos padrões definidos podem se tornar um padrão em toda a organização.

Você só precisa começar! Como diz uma frase que gosto muito e que se aplica a este exercício: “Afiar o machado para cortar a lenha”. Basicamente, você vai se preparar e planejar para depois construir o software.

“Há um tempo para cada coisa debaixo do sol, tempo de plantar, de colher, de nascer, de viver e de morrer”.

Eclesiastes 3:1

 

Rolar para cima