
Princípios gerais
David Hooker [Hoo96] propôs sete princípios que se concentram na prática da engenharia de
software como um todo. Eles são reproduzidos nos parágrafos a seguir:13
Primeiro princípio: a razão de existir
Um sistema de software existe por uma única razão: gerar valor a seus usuários. Todas as
decisões deveriam ser tomadas tendo esse princípio em mente. Antes de especificar uma necessidade
de um sistema, antes de indicar alguma parte da funcionalidade de um sistema, antes
de determinar as plataformas de hardware ou os processos de desenvolvimento, pergunte a si
mesmo: "Isso realmente agrega valor real ao sistema?". Se a resposta for "não", não o faça. Todos
os demais princípios se apoiam neste primeiro.
Segundo princípio: KISS (Keep It Simple, Stupid!, ou seja: Faça de forma simples, tapado!)
O projeto de software não é um processo casual; há muitos fatores a ser considerados em
qualquer esforço de projeto - todo projeto deve ser o mais simples possível, mas não tão simples
assim. Esse princípio contribui para um sistema mais fácil de compreender e manter. Isso
não significa que características, até mesmo as internas, devam ser descartadas em nome da
simplicidade.
De fato, frequentemente os projetos mais elegantes são os mais simples, o que não significa
"rápido e malfeito" - na realidade, simplificar exige muita análise e trabalho durante as iterações,
sendo que o resultado será um software de fácil manutenção e menos propenso a erros.
Terceiro princípio: mantenha a visão
Uma visão clara é essencial para o sucesso. Sem ela, um projeto se torna ambíguo. Sem uma
integridade conceitual, corre-se o risco de transformar o projeto numa colcha de retalhos de
projetos incompatíveis, unidos por parafusos inadequados... Comprometer a visão arquitetônica
de um sistema de software debilita e até poderá destruir sistemas bem projetados. Ter um arquiteto
responsável e capaz de manter a visão clara e de reforçar a adequação ajuda a assegurar o
êxito de um projeto.
Quarto princípio: o que um produz outros consomem
Raramente um sistema de software de força industrial é construído e utilizado de forma
isolada. De uma maneira ou de outra, alguém mais irá usar, manter, documentar ou, de alguma
forma, dependerá da capacidade de entender seu sistema. Portanto, sempre especifique, projete
e implemente ciente de que alguém mais terá de entender o que você está fazendo. O público para
qualquer produto de desenvolvimento de software é potencialmente grande. Especifique tendo
em vista os usuários; projete, tendo em mente os implementadores; e codifique considerando
aqueles que terão de manter e estender o sistema. Alguém terá de depurar o código que você
escreveu e isso o faz um usuário de seu código; facilitando o trabalho de todas essas pessoas
você agrega maior valor ao sistema
Quinto princípio: esteja aberto para o futuro
Um sistema com tempo de vida mais longo tem mais valor. Nos ambientes computacionais
de hoje, em que as especificações mudam de um instante para outro e as plataformas de
hardware se tornam rapidamente obsoletas, a vida de um software, em geral, é medida em meses.
Entretanto, verdadeiros sistemas de software com força industrial devem durar um período
muito maior - e, para isso, devem estar preparados para se adaptar a mudanças. Sistemas que
obtêm sucesso são aqueles que foram projetados dessa forma desde seu princípio.
Jamais faça projetos limitados, sempre pergunte "e se" e prepare-se para todas as possíveis
respostas, criando sistemas que resolvam o problema geral, não apenas aquele específico.14 Isso
muito provavelmente conduziria à reutilização de um sistema inteiro.
Sexto princípio: planeje com antecedência, visando a reutilização
A reutilização economiza tempo e esforço;15 alcançar um alto grau de reúso é indiscutivelmente
a meta mais difícil de ser atingida ao se desenvolver um sistema de software. A reutilização
de código e projetos tem sido proclamada como o maior benefício do uso de tecnologias
orientadas a objetos, entretanto, o retorno desse investimento não é automático. Alavancar as
possibilidades de reutilização (oferecida pela programação orientada a objetos [ou convencional])
requer planejamento e capacidade de fazer previsões. Existem várias técnicas para levar a
cabo a reutilização em cada um dos níveis do processo de desenvolvimento do sistema. Planejar
com antecedência para o reúso reduz o custo e aumenta o valor tanto dos componentes reutilizáveis
quanto dos sistemas aos quais eles serão incorporados.
Sétimo princípio: pense!
Este último princípio é, provavelmente, aquele que é mais menosprezado. Pensar bem e de
forma clara antes de agir quase sempre produz melhores resultados. Quando se analisa alguma
coisa, provavelmente esta sairá correta. Ganha-se também conhecimento de como fazer correto
novamente. Se você realmente analisar algo e mesmo assim o fizer da forma errada, isso se
tornará uma valiosa experiência. Um efeito colateral da análise é aprender a reconhecer quando
não se sabe algo, e até que ponto poderá buscar o conhecimento. Quando a análise clara fez
parte de um sistema, seu valor aflora. Aplicar os seis primeiros princípios requer intensa reflexão,
para a qual as recompensas potenciais são enormes.
Se todo engenheiro de software e toda a equipe de software simplesmente seguissem os sete
princípios de Hooker, muitas das dificuldades enfrentadas no desenvolvimento de complexos
sistemas baseados em computador seriam eliminadas.
.