Grupo de Interesse em Engenharia de Software FEUP, Fevereiro de 2006 (v.0.2) Índice • Engenharia de Requisitos de Software – – • Desenho de Software – – – – • – Princípio fundamental da Arquitectura de Software – Lei de Arquimedes da Arquitectura de Software – Princípio fundamental da Desconfiança Homem-Máquina - Paradoxo da Redundância Lei Lei Lei Lei nº nº nº nº 7 – Princípio fundamental da Verificação & Validação 8 – Limitação fundamental da Engenharia de Software 9 – Princípio fundamental da Qualidade de Software 10 – Lema fundamental do Teste de Software Lei nº 11 – Princípio da incerteza no Planeamento de Projectos Lei nº 12 – Dinâmica do Deslizamento de Prazos 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 – • 3 4 5 6 Satisfação de Clientes em Projectos de Software – – • nº nº nº nº Gestão de Projectos de Software – – • Lei Lei Lei Lei Verificação & Validação de Software – – – – • Lei nº 1 – Lei fundamental da Engenharia de Requisitos Lei nº 2 – Lei dos 3 éfes da Gestão de Prioridades 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º) Funcionalidade 2º) Fiabilidade 3º) 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 afundarse-á 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.