Padrões de Projeto - Os 7 princípios básicos do desenvolvimento de software


A princípio supõe-se que todos desejam construir o melhor software possível escrevendo o melhor código possível. Mas desejar é uma coisa e por em prática é outra.

Neste artigo eu apresento os 7 princípios básicos do desenvolvimento de software como descritos por David Hooker, a partir do qual realizei uma tradução livre, acrescentei alguns idéias baseado-me em minha experiência.

O objetivo é fornecer um  material de consulta e reflexão sobre a arte de desenvolvimento de software, sim , arte, pois programar qualquer um programa mas desenvolver software de qualidade é para poucos.

Não encare estes princípios como absolutos mas medite sobre cada um deles, examine-os, e retenha o que for proveitoso para você.

Primeiro Princípio - A razão pelo qual tudo existe

Problema : A tomada de decisões durante o desenvolvimento de software é difícil.

Um sistema de software existe por uma razão: para fornecer valor aos seus usuários.

Todas as decisões devem ser tomadas com isso em mente.

Antes de especificar um requisito do sistema, antes de implementar uma nova funcionalidade no sistema, antes de determinar a plataforma de hardware ou o processo de desenvolvimento a ser usado, faça para si mesmo  a seguinte pergunta:

"Será que isso acrescenta valor real ao sistema ? "

Se a resposta for "não", não faça.

Todos os outros princípios se apóiam neste princípio.

Todas as decisões devem ser 'decisões corretas' , e, somente aquelas que acrescentam valor ao sistema deverão estar presentes no sistema.

Obs: A questão de quais ferramentas e metodologias que devem ser usadas, estão afetadas a organização que vai desenvolver o sistema. Antes de adotar uma ferramenta ou metodologia talvez a pergunta que deve ser feita é : "Isso vai me ajudar a acrescentar e manter valor ao sistema ?"

Segundo Princípio - Mantenha as coisas simples (KISS - Keep It Simple ! Stupid)

Problema : Temos dificuldade em entender os sistemas quando eles se tornam mais complexos

O desenvolvimento de software não é um processo aleatório ou casual. Há muitos fatores a considerar em qualquer esforço de desenvolvimento.

Todo o projeto deve ser o mais simples possível, isso não significa ser desprovido de recursos no sentido de não usar os recursos necessários.

Um projeto simples é fácil de compreender e de manter. Isso não quer dizer que os recursos essenciais para que o projeto tenha sucesso sejam  descartados em nome da simplicidade.

Os modelos mais elegantes são geralmente os mais simples. Simples também não significa "rápido e sujo." Na verdade, muitas vezes simplificar implica em muito trabalho que inclui várias iterações e muita discussão.

A recompensa é um software que é mais fácil de manter e menos suscetível a erros.

Terceiro Princípio - Mantenha a visão (Maintain the Vision)

Problema : Um sistema em construção esta se degradando em uma miscelânea de projetos e subsistemas incompatíveis, ameaçando assim não cumprir o objetivo do projeto.

Uma visão clara e bem definida do sistema é essencial para o sucesso de um projeto de software.

Sem isso, um projeto quase infalivelmente acaba sendo concebido pela iniciativa de uma ou duas mentes restrito à sua própria visão.

Se não existir uma integridade conceitual um sistema ameaça tornar-se uma multiplicidade de modelos incompatíveis unidas pelo tipo errado de parafusos.

Comprometer a visão arquitetônica de um sistema de software enfraquece o projeto e acabará por quebrar mesmo os sistemas mais bem projetados.

Ter um arquiteto com poderes que pode manter a visão e garantir o seu cumprimento ajuda a garantir um projeto de software de sucesso.

Quarto  Princípio - O que você produzir alguém vai consumir (What you produce they  will consume)

Problema: Um monte de software que é produzido é difícil ou impossível de usar, compreender, manter, ampliar, etc.

De alguma forma ou de outra alguém vai usar, manter, documentar ou depender de ser capaz de compreender o seu sistema.

Assim, sempre especifique, projete e implemente tendo em mente que alguém vai ter que entender o que você esta fazendo.

Especifique pensando nos usuários finais. Projete tendo em mente os desenvolvedores. Ao codificar preocupe-se com aqueles que devem manter e ampliar o sistema.

Alguém pode ter que depurar o código que você escreve, e isso faz dele um usuário de seu código.

Tornar mais fácil o trabalho de quem vai consumir o que você produziu agrega valor ao sistema.

Quinto  Princípio - Esteja aberto para o futuro (Build for today Design for tomorrow)

Problema : Como você lida com exigências atuais de forma eficiente em face das necessidades futuras ?

Um sistema com uma longa vida tem mais valor.

No ambiente de desenvolvimento de software atual onde as especificações mudam em um piscar de olhos e onde as plataformas de hardware se tornam obsoletas com meses de uso, o tempo de vida de um produto de software geralmente é medido em meses ao invés de anos.

Porém sistemas de softwares robustos e bem projetadas tendem a durar por mais tempo em produção.

Para fazer um produto de software com esse perfil de sucesso um projeto deve estar apto a se adaptar às necessidades em constantes mudanças do usuários. Isso somente é possível para projetos que foram concebidos desde o princípio levando isso em conta.

Sempre pergunte : "O que acontece se...?"

E prepare-se para todos os tipos de respostas possíveis de forma a criar sistemas que resolvam não um problema específico mas um problema geral.

Sempre escreva o código necessário na implementação e assegure-se sempre de que a arquitetura do projeto seja flexível e extensível de modo a ser capaz de envolver cenários futuros.

Adotando essa postura um projeto de software se torna mais reutilizável.

Sexto  Princípio - Planeje com antecedência para Reutilização (Plan ahead for Reuse)

A reutilização economiza tempo e esforço.

Alcançar um elevado nível de reutilização é sem dúvida o objetivo mais difícil de alcançar no desenvolvimento de um sistema de software.

A reutilização de código e de projetos, foi proclamada como um dos principais benefícios do uso de tecnologias orientadas a objeto. No entanto, o retorno sobre este investimento não é automático.

Para alavancar as possibilidades de reutilização que oferece a programação Orientada a Objetos é necessário planejamento e premeditação.

Existem várias técnicas para realizar a reutilização em todos os níveis do processo de desenvolvimento de sistemas, e , aquelas relacionadas ao projeto detalhado e ao nível de código são bem conhecidas e documentadas.

Embora exista uma grande quantidade de  literatura que aborda a reutilização de projetos na forma de padrões de software, é preciso mais que isso; é preciso comunicar as oportunidades de reuso para outras pessoas na organização, isso é fundamental.

Como você pode reutilizar algo que você não sabe que existe ?

Planejar adiante para reutilização reduz o custo e aumenta o valor dos componentes e dos sistemas que estão incorporados.

Obs: Este princípio precisa ser examinado com cuidado pois segundo Kent Beck ele ignora a força mais importante no projeto de software:  o risco;  e ainda  sugere: Programe para hoje pois amanhã pode nunca chegar. ( Program for Today, for Tomorrow May Never Come.)

Sétimo  Princípio - Pense ! (Think!)

Este último princípio é provavelmente o mais negligenciado.

Colocando o pensamento antes da ação quase sempre se produz os melhores resultados.

Quando você pensa sobre algo, esta mais propenso a fazê-lo direito. Você também ganha conhecimento sobre como fazê-lo.

Se você pensa em algo e ainda assim a coisa sai errado,  isso é incorporado a sua base de experiência e torna-se experiência valiosa.

Além disso pensar é aprender a reconhecer quando você não sabe algo, e a que ponto você pode pesquisar a resposta.

Quando o pensamento claro entra em um sistema, o valor sai.

Aplicar os seis primeiros princípios requer um grande esforço de pensamento, mas as recompensas potenciais são enormes.

Com diz o ditado popular : "Bom senso e canja de galinha não fazem mal a ninguém..."

"Não se turbe o vosso coração;crede em Deus, crede também em mim." (João 14:1)

Referências:


José Carlos Macoratti