Resumo: Não há Bala de Prata
"No Silver Bullet: essence and accidents of software engineering"
Frederick P. Brooks

Christian Reis
<kiko@async.com.br>

Resumo:

Este artigo (Brooks, 1986) defende a inexistência de um avanço tecnológico que gere uma melhora de ordem de magnitude na produtividade, simplicidade e confiabilidade da construção de software. O autor ainda aponta alguns caminhos promissores ainda em desenvolvimento.

Introdução

Há, hoje, grande discussão em torno de promover grande melhora na produtividade da construção de sistemas complexos. Existem duas partes bastante separadas que constituem as atividades relacionadas ao desenvolvimento do software: atividades essenciais, que envolvem a criação de um modelo conceitual para o sistema, e atividades acidentais, que envolvem a própria implementação do sistema em um programa. O objeto deste artigo é defender que avanços significativos conquistados até hoje foram promovidos em cima das questões acidentais do software, e que ganhos da mesma proporção no desenvolvimento das atividades essenciais são muito mais difíceis de serem alcançados.

O desenvolvimento de software deve ser difícil?

A própria natureza do software torna improvável que exista uma solução mágica para o problema da construção de sistemas, como a integração eletrônica representaram para o problema de construção de hardware complexo. Não é que o software evolui muito lentamente; na realidade, o hardware é que evolui muito rapidamente; não existem paralelos tecnológicos no mundo com a velocidade da inovação em hardware.

Analisando os problemas inerentes à essência do problema do desenvolvimento de software, existem os seguintes pontos particulares:

Conquistas passadas resolvem problemas acidentais

Passando pelas conquistas do passado que promoveram melhoras de produtividade na criação do software, temos:

Proposições de soluções mágicas

Ataques promissores à essência do problema

A tarefa à mão, melhorar o desenvolvimento de software, deve atacar os aspectos essenciais do software.

Comprar Componentes Prontos

Uma solução boa para a construção é justamente não construí-lo; há já disponíveis grandes quantidades de componentes prontos, tornando muito mais rápido e barato desenvolver. Custos baixos de hardware e a aplicação geral da computação têm levado os usuários a requererem menos solução customizadas para seus problemas, de forma que software padronizado passa a ser uma alternativa.

Refinamento de Requisitos e Prototipagem rápida

A tarefa mais difícil é sempre decidir o que construir. Uma técnica excelente para resolver o problema é extrair e refinar iterativamente a funcionalidade do sistema; permite que os requisitos evoluam, o que é muito mais natural do que forçar os clientes a especificarem 100

Desenvolvimento Incremental

A forma mais natural de se desenvolver é justamente criar um esqueleto inicialmente desprovido de funcionalidade, e adicionar esta funcionalidade incrementalmente. Esta técnica se aplica bem tanto a projetos pequenos quanto a projetos grandes.

Usar Bons Projetistas

A grande questão de melhorar o processo de desenvolvimento envolve melhorar a qualidade do pessoal atribuído às atividades de desenvolvimento. Bons desenvolvedores e gerentes são raros, mas são o ponto único de maior impacto na produtividade de uma equipe de desenvolvimento.

Bibliografia

Brooks, F. P. (1986),
No silver bullet: essence and accidents of software engineering, in H. Kugler, ed., `Information Processing 86', Elsevier Science (North Holland), pp. 1069-1076.

Parnas, D. (1985),
`Software aspects of strategic defense systems', Communications of the ACM 28(12), 1326-1335.



Christian Reis 2000-09-14