Já falei do Brooks e do Lehman, mas meu filósofo favorito na engenharia de software é o Michael Jackson. Não é esse Michael Jackson que você está vendo aí ao lado, é outro, um gentleman inglês dos mais legítimos que escreveu a obra-prima Software Requirements and Specifications. Entre outras coisas, ele me ensinou que para se fazer qualquer sistema direito é preciso entender os requisitos do sistema, e que os requisitos são uma descrição do problema que o sistema deve resolver no mundo real, e não uma descrição da solução do problema - isso seria a especificação do sistema.
Se você é matematicamente orientado, pense assim: os requisitos delimitam o universo total de soluções aceitáveis para um problema, e a especificação determina um ponto específico nesse universo.
Ninguém, mas praticamente ninguém mesmo na minha experiência entende bem e põe em prática essa diferença. Todo mundo começa descrevendo a solução - escrevem "deve haver uma janela para fotos e outra para vídeos" ao invés de "fotos e vídeos não devem ser misturados visualmente". A primeira frase já assume muitos fatores a respeito da solução. A segunda deixa em aberto a forma como o efeito desejado (separar fotos e vídeos) vai ser implementado.
Se não temos bem claro em nossas mentes qual o problema que queremos resolver, as chances são enormes de implementarmos a solução errada. Passei anos absorvendo o conceito de que primeiro temos de entender o que o sistema deve fazer para depois decidir como fazê-lo. Mesmo assim, na hora de colocar em prática, fiz tudo errado. Foi assim:
Quando voltamos do Canadá, trouxemos nossas mesas de trabalho. Eram mesas simples, feitas de um suporte de metal com quatro pernas e uma tampa de madeira parafusada em cima do suporte. Acontece que na hora de despachar a carga, um dos suportes teve de ficar pra trás e veio um suporte e duas tampas.
Aí eu chamei um serralheiro pra me construir um novo suporte. Me achando muito espertinho, dei a ele o suporte que veio e disse que queria outro exatamente igual àquele. Assim ele fez e algum tempo depois, muito mais do que havia prometido, é claro, ele me entregou um suporte que era idêntico ao primeiro nos mínimos detalhes.
Imagine minha surpresa ao perceber que os furos dos parafusos do suporte novo não alinhavam com os furos da tampa de madeira. Irado, já ia ligar para o serralheiro quando resolvi tentar com a outra tampa de madeira... e os buracos se alinhavam perfeitamente. As duas tampas de madeira eram ligeiramente diferentes.
Entenderam meu erro? Eu especifiquei ao serralheiro a solução para o meu problema - quero um suporte igual ao outro. Ao invés disso, eu deveria ter especificado o problema - preciso de um suporte de metal que sirva com essa tampa de madeira, e que tenha 80cm de altura, pra alinhar com a outra mesa. Eu achei que sabia a solução, mas a solução estava errada dado o problema.
Incontáveis sistemas de software são inúteis porque seus desenvolvedores não entendem o problema que o software vai ser usado para resolver. E o seu?
Nossa realmente é a mais pura verdade o que você disse e com certeza quem conseguir absorver essa historia das messas vai se dar muito bem.
ResponderExcluirmassa, me deu outra visão
ResponderExcluir