Engenharia de Software Professora Lucélia IEEE Computer Society • Aproximadamente 100.000 membros. • Organização de suporte aos profissionais da computação, provendo informação técnica, serviços a comunidade e personalizados. • Fundada em 1946. • A maior das 39 sociedades do IEEE. • Dedicada ao avanço teórico, prático e aplicação de computadores e tecnologia da informação. • Aproximadamente 40% dos membros vive e trabalha fora dos EUA, fomentando a comunicação internacional, a cooperação e a troca de informação. • Tem um escritório central de serviços em Tokyo, Japão; um escritório de publicação em Los Alamitos, California; e a sede em Washington. The Guide to the SWEBOK • Não é o conhecimento em si, mas uma síntese e uma referência ao material disponível em diversas publicações que se complementam para formar o corpo de conhecimento. • Descreve que parte do conhecimento é geralmente aceita pela comunidade profissional. • Organiza o conhecimento. • Provê acesso por tópicos ao conhecimento. • Patrocinado por empresas como: Rational (IBM), SAP, Boeing, entre outras. Objetivos 1. Promover uma visão consistente da engenharia de software em todo o mundo (500 revisores de 42 países na fase Stoneman, versão Trial, e 120 revisores de 21 países na fase Ironman, versão 2004). 2. Definir as fronteiras de atuação da engenharia de software e as áreas de interseção com outras disciplinas como: engenharia da computação, ciência da computação, gestão de negócios, matemática, gerenciamento de projetos, gestão da qualidade, ergonomia (acessibilidade e usabilidade) e engenharia de sistemas (SWEBOK, capítulo 12). Objetivos (Continuação) 3. Caracterizar o conteúdo da disciplina engenharia de software, subdividindo-o hierarquicamente em áreas de conhecimento (o Apêndice A descreve como as AC devem ser organizadas). 4. Prover acesso por tópicos a base de conhecimento da engenharia de software (material de referência e matriz em cada AC). 5. Fornecer um alicerce para desenvolvimento do currículo, certificação individual e licenciamento de material (conhecimento geralmente aceito: aplica-se a maioria dos projetos e das equipes pelo consenso e pela efetividade). Uma Crise no horizonte • A industria de Software tem tido uma “crise” que a acompanha há quase 30 anos. • Problemas não se limitam ao software que não funciona adequadamente, mas abrange: – desenvolvimento, testes, manutenção, suprimento, etc. Therac-25 • Equipamento de Radioterapia. • Entre 1985 e 1987 se envolveu em 6 acidentes, causando mortes por overdoses de radiação. • Software foi adaptado de uma antecessora, Therac-6: – falhas por falta de testes integrados – falta de documentação • página 382 do Pfleeger. Denver International Airport • Custo do projeto: US$ 4.9 bilhões – – – – – 100 mil passageiros por dia 1.200 vôos 53 milhas quadradas 94 portões de embarque e desembarque 6 pistas de pouso / decolagem Denver International Airport • Problemas: – Erros no sistema automático de transporte de bagagens: – Atraso na abertura do aeroporto com custo total estimado em US$360 Milhões • 86 milhões para consertar o sistema. Ariane 5 Ariane 5 • Projeto da Agência Espacial Européia que custou: – 10 anos. – US$ 8 Bilhões. • Capacidade 6 toneladas. • Garante supremacia européia no espaço. Vôo inaugural em 4/junho/1996 Resultado • Explosão 40 segundos após a decolagem. • Destruição do foguete e carga avaliada em US$ 500 milhões. O que aconteceu? • Fato: o veículo detonou suas cargas explosivas de autodestruição e explodiu no ar. Por que? • Porque ele estava se quebrando devido às forças aerodinâmicas. Mas por que? • O foguete tinha perdido o controle de direção (atitude). O que causou isso? • Os computadores principal e back-up deram shutdown ao mesmo tempo O que aconteceu? (II) • Por que o Shut-down? Ocorrera um run time error (out of range, overflow , ou outro) e ambos computadores se desligaram. De onde veio este erro? • Um programa que convertia um valor em ponto flutuante para um inteiro de 16 bits recebeu como entrada um valor que estava fora da faixa permitida. Especificamente: O que faltou? strict precondition 1: { Set."x"=FLPT and Set."y"=INT16 and -32768 <= x <= +32767 } program code: y := int(x); postcondition: {Set."x"=FLPT and Set."y"=INT16 and y=int(x)} Ironia... • O resultado desta conversão não era mais necessário após a decolagem... Receita Federal dos Estados Unidos No começo da década de 80, a Receita Federal dos Estados Unidos (IRS) contratou a empresa Sperry Corporation para construir um sistema automatizado de processamento de formulários de impostos federais. De acordo com o jornal americano Washington Post, “o sistema se mostrou inadequado à carga de trabalho, custou cerca de duas vezes o esperado e deve ser logo substituído” (Sawyer, 1985) Professora: Lucélia Oliveira (continuação) Em 1985, foi necessário adicionar US$ 90 milhões aos US$ 103 milhões que já haviam sido pagos pelos equipamentos da Sperry. Além disso o problema acarretou o atraso das restituições da IRS aos contribuintes, o que forçou a IRS a pagar US$ 40,2 milhões em juros e US$ 23 milhões em horas extras para os funcionários que tentaram compensar o estrago. Professora: Lucélia Oliveira (continuação) Em 1996, a situação não havia melhorado. O jornal americano Los Angeles Times publicou, em 29 de março daquele ano, que ainda não havia nenhum plano para a modernização dos computadores da IRS, somente um relatório com 6.000 páginas. O congressista americano Jim Lighfoot chamou o projeto de “um fiasco de quatro bilhões de dólares que está afundando por falta de planejamento ” Professora: Lucélia Oliveira Quais são os problemas? • A sofisticação do software ultrapassou nossa capacidade de construção. • Nossa capacidade de construir programas não acompanha a demanda por novos programas. • Nossa capacidade de manter programas é ameaçada por projetos ruins. Importância do Planejamento • Em 1994, uma pesquisa realizada pelo The Standish Group demonstrava que nos Estados Unidos apenas cerca de 19% do total de projetos de software iniciados eram terminados com sucesso. • 52,2% dos projetos eram concluídos com atrasos e acima dos orçamentos. • 31,1% eram cancelados. Professora: Lucélia Oliveira Perguntas que a Engenharia de Software quer responder: • Porque demora tanto para concluir um projeto (não cumprimos prazos)? • Porque custa tanto (uma ordem de magnitude a mais)? • Porque não descobrimos os erros antes de entregar o software ao cliente? • Porque temos dificuldade de medir o progresso enquanto o software está sendo desenvolvido? Causas óbvias • Não dedicamos tempo para coletar dados sobre o desenvolvimento do software - resulta em estimativas “a olho”. • Comunicação entre o cliente e o desenvolvedor é muito fraca. • Falta de testes sistemáticos e completos. Causas menos óbvias • O Software é desenvolvido ou projetado por engenharia, não manufaturado no sentido clássico. • Profissionais recebem pouco treinamento formal. • Falta investimento (em ES). • Falta métodos e automação. Mitos do Software - Administrativos • Um manual oferece tudo que se precisa saber. • Computadores de última geração solucionam problemas de desenvolvimento. • Se estamos atrasados, basta adicionar programadores e tirar o atraso (chamado “conceito de hordas de mongois”). Mitos do Software - do Cliente • Uma declaração geral é suficiente para começar a escrever programas. • Mudanças podem ser facilmente acomodadas em um projeto. Mitos do Software do Profissional • Um programa está terminado ao funcionar. • Quanto mais cedo escrever o código, mais rápido terminarei o programa. • Só posso avaliar a qualidade de um programa em funcionamento. • A única coisa a ser entregue em um projeto é o programa funcionando. Quanto mais tarde a detecção de um erro, mais cara é a sua correção! • Segundo Pfleeger, o custo para a correção de um erro cometido em um projeto durante a etapa inicial da análise é um décimo do custo para corrigir um erro semelhante depois que o sistema foi entregue ao cliente. • Metade dos custos de correção de defeitos encontrados durante a fase de testes e manutenção vem de erros cometidos no início de vida do sistema. Professora: Lucélia Oliveira Sugestão para detecção de erros • Muitos estudantes estão acostumados a desenvolver e testar o seu próprio software; • Seus testes podem ser menos efetivos do que pensam; • Fagan, estudou o modo como os defeitos têm sido detectados: ele descobriu que executar um programa com dados de teste revela somente cerca de um quinto dos defeitos cometidos durante o desenvolvimento do sistema. Professora: Lucélia Oliveira Sugestão para detecção de erros(continuação) • O processo de revisão, realizado por colegas que mutuamente examinam e comentam o código e o projeto que eles criam, revela quatro dos cinco defeitos restantes (Fagan, 1986) • Então, a qualidade do software pode aumentar consideravelmente somente com a revisão e dos trabalhos pelos colegas. Professora: Lucélia Oliveira Qual tem sido o grau de sucesso dos sistemas atuais? • Pense como era a vida das pessoas antes dos processadores de texto, das planilhas eletrônicas, do correio eletrônico, da telefonia sofisticada. • Os produtos de softwares têm apoiado avanços na medicina, na agricultura, nos transportes, etc… • Além de nos permitir realizar as coisas nunca feitas antes, como microcirurgias, educação, multimídia e robótica. Professora: Lucélia Oliveira