Material cedido por: Profa. Dra. Ana Paula Gonçalves Serra ENGENHARIA DE SOFTWARE Software e Engenharia de Software Capítulo 1 O Papel Evolutivo do Software Globalização Sociedade da Informação Internet ... Passado Programador solitário Atualmente Equipe de Especialistas em software, cada um se concentrando em uma parte da tecnologia necessária para produzir um sistema. Mas as mesmas questões continuam... • Por que leva tanto tempo para construir um software? • Por que os custos de desenvolvimento são tão latos? • Por que não podemos achar todos os erros antes de entregar o software aos clientes? • Por que gastamos tanto tempo e esforço mantendo programas existentes? ... Essas são preocupações que a engenharia de software aborda, tenta responder e minimiza os problemas. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 2 Evolução do software 1. •sistemas batch •distribuição limitada •software dedicado 2. •sistemas multiusuário •tempo real •bancos de dados •produto de software 4. •tecnologia orientada a objetos •computação paralela •Internet •“onda” do desktop •Sistemas especialistas e redes neurais artificiais 5. •computação ubíqua •sistemas portáteis • computação nas nuvens 3. •sistemas distribuídos •hardware de baixo custo •inteligência local •impacto de consumo 5 4 3 2 1 1950 3 1960 1970 1980 1990 2000 O que é software? Algumas definições básicas de software... 1. São instruções (programas de computadores) que quando executadas fornecem as características , funções e desempenho desejado; 2. Estrutura de dados que permitem aos programas manipular adequadamente a informação 3. Documentos que descrevem a operação e o uso dos programas Todos concordam com essas definições? Cada uma delas realmente expressa o que é software? Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 4 O que é software? Software não é somente o programa, mas também conjuntos de dados, arquivos de configuração e documentação necessários para que o software funcione corretamente. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 5 Características do Software Software é desenvolvido e não fabricado. Software não “se desgasta”. Apesar da tendência de utilização de componentes, uma grande parte dos softwares continua sendo construída sob encomenda. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 6 Curva da Falhas para o Software Como seria a curva de falhas para hardware? Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 7 Categorias de Software – Atuais Software de Sistemas São softwares utilizados por outros softwares. Ex: compiladores, sistemas operacionais, componentes,... Software de Aplicação São softwares que tem como objetivo resolver um problema específico de negócio. Ex: sistema de folha de pagamento, sistema de gestão de informações, ... Software de Tempo Real São softwares de aplicação, mas que monitoram, analisam e controlam eventos de tempo real. Ex: sistema do metrô, sistema de aviação, ... Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 8 Categorias de Software – Atuais Software Científico e de Engenharia Antigamente eram caracterizado apenas por softwares que processavam números. Ex: sistema de astronomia, análise automotiva de tensão à dinâmica orbital do ônibus espacial, sistema de manufatura automatizada, sistema de análise molecular, ... Atualmente softwares de apoiado por computadores, simulação de sistemas e outras aplicações interativas podem ser classificadas como esse tipo de software. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 9 Categorias de Software – Atuais Software Embutido São softwares que residem dentro de um produto, sistema ou memória ROM. Ex: controle do teclado forno microondas, controle de combustível de automóvel,... Software para linha de produtos (prateleira) São softwares que atendem uma necessidade específica para ser utilizado por vários usuários diferentes. Ex: sistema de multimídia (jogos), planilhas, editores de texto,... Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 10 Categorias de Software – Atuais Software para Web São softwares desenvolvido para serem disponibilizados em browser. Ex: sites de conteúdo, E-Commerce, E-Business, E-Learning, .... Software para Inteligência Artificial São softwares que utilizam algoritmos não numéricos para resolver problemas complexos que não são passíveis de computação ou análise direta. Ex: robótica, sistemas especialistas, sistema de reconhecimento de padrão (voz, imagens), redes neurais, ... Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 11 Categorias de Software – Atuais/Futuras Computação ubíqua São softwares de aplicação que permitem que pequenos dispositivos móveis, como PDAs e celulares, computadores e sistemas empresariais se comuniquem através de diferentes tipos de redes através da computação distribuída. Ex: acesso a informações via celular, TV digital, multimídia conferência móvel, ... Software Aberto São softwares de aplicação com código aberto, que resulta na distribuição de código fonte, de modo que os usuários possam fazer modificações locais. Ex: sistema de operacionais, sistemas de banco de dados, sistemas de E-learning. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 12 Algumas questões... Forneça exemplo de sistemas que trabalham com uma ou mais categorias de software. O que são softwares legados? Qual sua relação com o desenvolvimento de software? Quais são os possíveis problemas de um software legados? Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 13 Crise do Software Início em 1968 em uma conferência organizada para discutir a chamada “crise do software” Desenvolvimento de Software informal não era suficiente Atrasos constantes Custos maiores do que previsto Não eram confiáveis Difícil manutenção Desempenho inferior ao esperado Declive do custo de hardware Evoluiu-se muito a capacidade de produzir software (preocupação com qualidade, compreensão das atividades de desenvolvimento, criação de técnicas e notações, ... ) Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 14 Crise do Software Crise de tecnologia - hardware caminha mais rápido que o software Crise de oferta - demanda é maior que a capacidade de desenvolvimento Crise de manutenção - projeto mal feito e recursos escassos não permitem manutenção. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 15 Crise e Futuro do Software Ainda vivemos em crise de software? Ver as próximas transparências... Qual é o futuro do software? Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 16 Alguns Exemplos de Problemas de Software Explosão do foguete Arianne V que possuía na sua codificação uma rotina destinada ao Ariana IV, e que não deveria ser ativada. Aeroporto de Denver, que ficou fechado durante anos esperando o funcionamento do sistema de bagagens, o que poderia ser detectado em um sistema de simulação. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 17 Alguns Exemplos de Problemas de Software Explosão do foguete Arianne V (1996) em 40 segundo após decolagem que possuía na sua codificação uma rotina do Ariane IV, que não deveria ser utilizada. A rotina convertia valor flutuante em inteiro e que recebeu como entrada um valor que estava fora da faixa permitida e fez com que os computadores principais e de backup dessem “shut-down” ao mesmo tempo. Projeto da Agência Espacial Européia que custou: 10 anos U$ 8 Bilhões U$ 500 milhões de carga do foguete Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 18 Alguns Exemplos de Problemas de Software Aeroporto de Denver, que ficou fechado durante anos esperando o funcionamento do sistema de bagagens, o que poderia ser detectado em um sistema de simulação. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 19 Problemas de Software Por que os programas não ficam prontos rapidamente? Por que os custos de desenvolvimento são tão altos? Por que os erros não são detectados antes da entrega aos consumidores? Por que é difícil medir o progresso durante o desenvolvimento? Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 20 Mitos de Software Sob o ponto de vista do gerente Aumentar o tamanho da equipe resolve o problema de um projeto atrasado. Terceirizar resolve os problemas de gerência. Sob o ponto de vista da equipe de desenvolvimento Não há como avaliar a qualidade do software até que ele seja efetivamente colocado em produção. O único produto que realmente interessa é o código executável. Uma vez que o programa está pronto, acabou o trabalho do “engenheiro de software”. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 21 Mitos de Software Sob o ponto de vista do usuário/cliente Basta uma visão geral dos objetivos para se iniciar o desenvolvimento do software. É fácil acomodar as mudanças de requisitos durante o desenvolvimento do software. Realidade do impacto da modificação: Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 22 Engenharia de Software em Camadas 23 Qualidade: É a camada que suporta a engenharia de software, tendo como foco um software total com qualidade. Um maior detalhamento será descrito no material de Qualidade e discutido. Processo: É um conjunto de atividades e resultados associados que geram um produto de software. Há quatro atividades de processo fundamentais comuns a todos os processos de software. 1. Especificação do software: as funcionalidades (requisitos funcionais), as restrições tecnológicas (requisitos não-funcionais ou atributos) e as restrições de negócio (requisitos de domínio) devem ser definidas. 2. Desenvolvimento do software: detalhamento, solução e codificação devem ser realizadas de modo que atenda as especificações. 3. Validação do software: o software tem de ser validado para garantir que ele realize o que foi especificado 4. Evolução do software: O software deve evoluir para atender às necessidade mutáveis do cliente/usuário. Um maior detalhamento será descrito no material de Modelos de Processos de Software e discutido. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I Engenharia de Software em Camadas 24 Métodos: São abordagens para o desenvolvimento de software, que incluem: modelos, notações, regras, recomendações e diretrizes. É a camada que fornece a técnica de como fazer para construir softwares, ou seja a maneira de conduzir um processo. Ferramentas: É a camada que proporciona apoio automatizado aos processos e métodos, como por exemplo às ferramentas CASE (Computer Aided Software Engineering). Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I Exercício Exercício-Aula 1.pdf Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 25 Agradecimento Material cedido por: Profa. Dra. Ana Paula Gonçalves Serra Copyright © 2013-2014 Profa. Ana Paula Gonçalves Serra. Todos direitos reservados. Reprodução ou divulgação total ou parcial deste documento é expressamente proibido sem o consentimento formal, por escrito, da Profa. Ana Paula Gonçalves Serra. Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 26 Bibliografia Engenharia de Software Roger Pressman 6ª edição – McGrawHill Profa. Dra. Ana Paula Gonçalves Serra – Engenharia de Software I 27