1166 (2(244) ) Leis Fundamentais Leis Fundamentais da Engenharia de da Engenharia de SoftwareSoftware
João Pascoal Faria
Grupo de Interesse em Engenharia de SoftwareFEUP, Fevereiro de 2006 (v.0.2)
Índice• Engenharia de Requisitos de Software
– Lei nº 1 – Lei fundamental da Engenharia de Requisitos– Lei nº 2 – Lei dos 3 éfes da Gestão de Prioridades
• Desenho de Software– Lei nº 3 – Princípio fundamental da Arquitectura de Software– Lei nº 4 – Lei de Arquimedes da Arquitectura de Software– Lei nº 5 – Princípio fundamental da Desconfiança Homem-Máquina– Lei nº 6 - Paradoxo da Redundância
• Verificação & Validação de Software– Lei nº 7 – Princípio fundamental da Verificação & Validação– Lei nº 8 – Limitação fundamental da Engenharia de Software– Lei nº 9 – Princípio fundamental da Qualidade de Software– Lei nº 10 – Lema fundamental do Teste de Software
• Gestão de Projectos de Software– Lei nº 11 – Princípio da incerteza no Planeamento de Projectos– Lei nº 12 – Dinâmica do Deslizamento de Prazos
• Satisfação de Clientes em Projectos de Software– Lei nº 13 – Paradoxo de Zenon do Software– Lei nº 14 – Princípio da Conservação da Não-Aceitação
• Alteração de Software– Lei nº 15 – Lei fundamental da Gestão de Alterações
• Responsabilidade Social e Profissional do Engenheiro de Software– Lei nº 16 – Responsabilidade social do Engenheiro de Software
Lei nº 1 – Lei fundamental da Engenharia de Requisitos
Os requisitos terminam onde começa a liberdade do implementador.
Lei nº 2 – Lei dos 3 éfes da Gestão de Prioridades
1º) Funcionalidade2º) Fiabilidade3º) Eficiência
Lei nº 3 – Princípio fundamental da Arquitectura de Software
Qualquer problema de estruturação de software resolve-se introduzindo níveis de indirecção.
Corolário: Qualquer problema de desempenho resolve-se removendo níveis de indirecção.
(Jim Gray, Transaction Processing Systems)
Lei nº 4 – Lei de Arquimedes da Arquitectura de Software
Um sistema de software fundado numa má arquitectura afundar-se-á sob o peso do seu próprio sucesso.
Lei nº 5 – Princípio fundamental da Desconfiança Homem-Máquina
Inteligência artificial é melhor do que estupidez natural.
Lei nº 6 - Paradoxo da Redundância
A redundância é fonte de erros, mas também permite revelar erros.
Lei nº 7 – Princípio fundamental da Verificação & Validação
Um programa que cumpre perfeitamente uma péssima especificação é um péssimo programa, não um programa perfeito. (Cem Kaner, Testing Computer Software)
Lei nº 8 – Limitação fundamental da Engenharia de Software
É praticamente impossível provar que um programa está correcto.
Corolário: Desenvolver software é conjecturar soluções para problemas.
Lei nº 9 – Princípio fundamental da Qualidade de Software
Todo o programa tem erros.
Além disso, o número de erros de um programa é dado precisamente pela fórmula
n > a,em que a é um inteiro qualquer. (*) (leis de Murphy dos computadores)
(*) Não é possível fixar com segurança um limite inferior para o nº de erros de um programa.
Lei nº 10 – Lema fundamental do Teste de Software
Os bugs escondem-se nos cantos e reúnem-se nas fronteiras.
(Boris Beizer, Software Testing Techniques)
Lei nº 11 – Princípio da incerteza no Planeamento de Projectos
Não é possível fixar simultaneamente o resultado, custo e duração de um projecto de software.
Lei nº 12 – Dinâmica do Deslizamento de Prazos
Falta cada vez mais tempo para acabar o projecto.
Lei nº 13 – Paradoxo de Zenon do Software
Não basta fazer o que falta fazer para satisfazer o cliente (*).
(*) A satisfação do cliente é um alvo em movimento.
Lei nº 14 – Princípio da Conservação da Não-Aceitação
Os X% que falta implementar têm (100-X)% de importância para o cliente.
Lei nº 15 – Lei fundamental da Gestão de Alterações
Fazem-se sempre mais alterações, até não haver mais tempo para fazer alterações.
Corolário: A última alteração é a que deu cabo de tudo.
Lei nº 16 – Responsabilidade social do Engenheiro de Software
O mundo pode acabar devido a uma catástrofe.
E é aí que entram os Engenheiros de Software (*).
(*) como causadores, entenda-se.