Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software Professor: César Olavo Livros Texto • PRESSMAN, Roger S – Software Engineering: A Practitioner’s Approach. Editora: McGraw-Hill. Ano: 2010. 7ª Edição • SOMMERVILLE, Ian - Software Engineering Editora: Addison Wesley. Ano: 2010. 9ª Edição. • BOOCH, Grady, et. al – Unified Modeling Language User Guide. Editora: Addison-Wesley. Ano: 2005. 2ª Edição • FOWLER, Martin. UML Distilled: A Brief Guide to the Standard Object Modeling Language Editora: Addison-Wesley. Ano: 2003. 3ª Edição. Livros Texto • PRESSMAN, Roger S – Software Engineering: A Practitioner’s Approach. Editora: McGraw-Hill. Ano: 2010. 7ª Edição • SOMMERVILLE, Ian - Software Engineering Editora: Addison Wesley. Ano: 2010. 9ª Edição. • BOOCH, Grady, et. al – Unified Modeling Language User Guide. Editora: Addison-Wesley. Ano: 2005. 2ª Edição • FOWLER, Martin. UML Distilled: A Brief Guide to the Standard Object Modeling Language Editora: Addison-Wesley. Ano: 2003. 3ª Edição. Agenda 1. Introdução 2. Definições de Engenharia de Software (ES) 3. Origens históricas da ES: • A crise do software 4. A crise de software nos dias atuais 5. Engenharia de Software 6. Características do software Introdução 1) O MP3 faliu as gravadoras. 2) A Netflix faliu as locadoras. 3) O Booking complicou as agências de turismo. 4) O Google faliu páginas amarelas e enciclopédias. 5) O AirBnB está complicando os hotéis. 6) O WhatsApp está tirando o sono das operadoras de telefonia. 7) As mídias sociais estão dificultando a vida dos veículos de comunicação. 8) O Uber está complicando os taxistas. Introdução 9) O OLX acabou com os classificados de jornal. 10) A Câmera digital acabou com as revelações fotográficas (e por sua vez sumiu com o celular). 11) O ZipCar está complicando as locadoras de veículos. 12) A Tesla está complicando a vida das montadoras de automóveis. 13) O e-mail prejudicou os Correios. 14) O Waze acabou com aparelhos de GPS. Introdução 15) O Original e o Nubank ameaçam o sistema bancário tradicional. 16) A "nuvem" está substituindo maquinário físico. 17) O Youtube complica a vida das TVs (adolescentes não assistem mais canais abertos) 18) O comércio eletrônico está quebrando o comércio tradicional. Conclusão: Artefatos estão se desmaterializando bits estão substituindo átomos nos custos das coisas • A proporção dos custos com software e hardware vem mudando bastante ao longo do tempo. Introdução Introdução: A Revolução do Computador O projeto separa-se do físico, tornando-se um conceito totalmente abstrato. Máquinas antes impossíveis ou impraticáveis de serem construidas fisicamente tornaram-se possíveis Projeto pode ser modificado sem remanufatura. Maquina de proposito geral Software Maquina de proposito especifico Engenharia de Software O que é? Ciência vs Engenharia “The scientist builds in order to study; the engineer studies in order to build.” Fred Brooks A Natureza da analise Cientifica A Natureza da Engenharia E onde entra a Engenharia de Software? 1) Aplicação da engenharia à area de software 2) Campo da ciência da computação que trata de sistemas: Grandes e complexos, construído por equipes, existem em muitas versões, duram muitos anos, sofrem mudanças Definições da Literatura Aplicação de uma abordagem sistemática, disciplinada, e quantificável ao desenvolvimento, operação e manutenção de software [IEEE 1990] Construção, por múltiplas pessoas, de software com multiplas versões (Parnas 1978) Disciplina que se preocupa com problemas práticos inerentes ao desenvolvimento de sistemas de grande porte. – Não é só ciência da computação; – Tampouco é simplesmente programação; – Uso de teorias, métodos, e ferramentas na resolução de problemas. Características da Engenharia de Software Engenharia de Software refere-se a software (sistemas) desenvolvidos por grupos ao invés de indivíduos; Engenharia de Software usa princípios de engenharia - ao invés de arte; Engenharia de Software inclui tanto aspectos técnicos quanto não técnicos. Engenheiro de Software Engenheiro de Software? "The existence of the mere term has been the base of a number of extremely shallow --and false-- analogies, which just confuse the issue...Computers are such exceptional gadgets that there is good reason to assume that most analogies with other disciplines are too shallow to be of any positive value, are even so shallow that they are only confusing.“ E. W. Djikstra Porque a vida do Engenheiro de Software não é fácil? (1) Se você é um engenheiro civil que constrói barragens, então, tudo o que você precisa saber é sobre construção de barragens. Porém, um engenheiro de software precisa saber sobre o domínio no qual o software vai ser aplicado (que pode ser qualquer um, inclusive, barragens) Alguns problemas requerem longos períodos de pesquisa (anos, décadas, ou até mais). Obviamente, não podemos considerar esse tipo de pesquisa como parte da engenharia de software. Grandes sistemas são “one of a kind” Porque a vida do Engenheiro de Software não é fácil? (2) A capacidade de aprender rapidamente novas e diversas disciplinas e seus processos de negócios. A capacidade de comunicar-se com especialistas de domínio, extrair um modelo abstrato do problema a partir de um fluxo de informações fornecidas no jargão específico do problema e formular uma solução que faça sentido no contexto do negócio do cliente. A capacidade de projetar um sistema de software que realize a solução proposta e graciosamente evolua com as necessidades de negócios. Engenheiro de software não é (só) programador O engenheiro de software tem por objetivo: 1) compreender o problema do negócio 2) propor uma solução e 3) elaborar “abstrações" da solução 4) soft skills O foco do programador é no código do programa, garantindo que ele implemente fielmente os “modelos” elaborados pelo engenheiro de software A Engenheiro de Software preocupa-se com todo o ciclo de vida do software (concepção, implementação, uso e manutenção) Engenharia de Software Histórico e Crise do Software Uma crise no horizonte • A industria de Software tem tido uma “crise” que a acompanha há mais de 40 anos: • Problemas não se limitam ao software que não funciona adequadamente, mas abrange: –desenvolvimento, – testes, –manutenção, – suprimento, –etc. A Crise de Software: principais problemas • Os grandes softwares não funcionam adequadamente; • Os projetos de software estão sempre atrasados • Os custos dos projetos de desenvolvimento de software são sempre maiores do que o previsto. A Crise de Software: principais problemas • Os computadores estão cada vez mais rápidos, sofisticados e baratos: The major cause of the software crisis is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has become an equally gigantic problem. (Edsger Dijkstra, The Humble Programmer) Crise do software: consequências Conferência da OTAN sobre Engenharia de Software, em Garmisch Partenkirchen (Alemanha), 1968O próprio termo Engenharia de Software –A área de Engenharia de Software nasceu no fim dos anos 60, em resposta às dificuldades crônicas que grandes projetos de software tinham em respeitar calendário e orçamento. Alguns erros clássicos • Ariane • Therac 25 • Denver Airport Ariane 5 • Projeto da Agência Espacial Européia que custou: – 10 anos. – US$ 8 Bilhões. • Capacidade 6 toneladas. • Garantiria supremacia européia no espaço. Resultado • Explosão 40 segundos após a decolagem. • Destruição do foguete e carga avaliada em US$ 500 milhões. Therac-25 • Equipamento de Radioterapia. • Entre 1985 e 1987, envolveu-se 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 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 • 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 Engenharia de Software A Crise de Software nos dias atuais A Crise de Software nos Dias Atuais Os softwares estão cada vez maiores e mais sofisticados, e a produtividade não segue a demanda; A Crise de Software nos Dias Atuais Os custos com manutenção são muito altos: para sistemas com uma longa vida, eles são várias vezes maiores do que os custos de desenvolvimento. A Crise de Software nos Dias Atuais Há uma carência global de desenvolvedores Se não bastasse, os melhores desenvolvedores gastam, em média, 50% do tempo tirando bugs e a maior parte do tempo restante com tarefas repetitivas, em vez de construir novas funcionalidades. A Crise de Software nos Dias Atuais Tampouco é possível resolver o problema simplesmente adquirindo computadores mais velozes, agora que a barreira do silicio foi atingida (processadores acima de 4GHz não são viaveis, por consumir muita energia - pense em termos de vida util da bateria e de calor) – A solução seriam arquiteturas multicore e, na realidade, fabricantes vêm oferecendo máquinas com 4, 8, 16 e até 512 cores! – O problema passa a ser a falta de programadores que saibam tirar proveito desse paralelismo; na realidade, as próprias liguagens de programação modernas são baseadas na premissa de que o computador faz apenas uma coisa por vez. planejamento testes codificação Custos de desenvolvimento 1/3 planejamento 1/6 codificação 1/4 teste de componente 1/4 teste de sistema Custos de manutenção Custos de desenvolvimento Manutenção Manutenção de software: 20% - correção de erro* 20% - adaptação (adaptar ao ambiente, software e hardware, que evoluem) 60% - melhorias (adaptação aos requisitos do usuário) *maior parte dos erros deriva de requisitos e não de código Perguntas que Engenharia de Software quer responder: • Porque demora tanto para concluir um projeto (não cumprimos prazos)? • Porque custa ($) tanto (às vezes, 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? • Porque a Engenharia de Software não pode ter resultados mais rigorosos, como outras areas da ciência da computação? – Que partes em um projeto e construção de software podem ser formais? – Uma resposta pode ser encontrada na figura a seguir: Características da Engenharia de Software A linha demarcatoria da ciência da computação Engenharia de Software Características do Software Software é um produto diferente... Diferentemente da maioria dos outros produtos, software é intangível e difícil de visualizar. A maioria das pessoas experimenta software por meio do que ele faz, através de suas entradas e saídas. é provavelmente o mais complexo artefato existente - consiste em tantos pedaços, bem como suas relações. Um único bit trocado pode mudar todo o sentido de um programa. é certamente o mais flexível artefato: pode ser facilmente e radicalmente modificado em qualquer fase do processo de desenvolvimento, conseguindo, assim responder rapidamente às mudanças nos requisitos do cliente. Características do software, segundo Brooks (1/2) Fred Brooks (No Silver Bullet): Complexidade. Vista como uma propriedade essencial do software, onde não ha’ duas partes iguais e sistemas possuem muitos estados durante execução. Essa complexidade é arbitraria, dependendo mais do projetista do que do problema. Conformidade. Por ser “moldavel” espera-se que o software adapte-se a outros componentes (hardware, padrões, software legado, etc.) "Software is the resting place of afterthoughts." Características do software, segundo Brooks (2/2) Modificabilidade: Todo software sofre uma constante necessidade de mudança (ironicamente, pela aparente facilidade de mudança). Invisibilidade. Por ser ‘invisivel’, não se pode estabelecer links visuais entre um software e sua representação, o que facilitaria estabelecer relações entre os dois. Algumas inconveniências da invisibilidade... Hardware: muito alto! - Projetos devem ser concluidos antes de serem manufaturados e vendidos - Falhas: retorna Hardware Software: baixo - Pra que retirar os bugs antes, se isso pode ser feito depois? E com a ajuda do próprio cliente! - Falhas: espera-se nova versão Hardware degrada, software não! Software vs. Hardware Custo do reparo Bugs... 18/09/12 Aula 3 - Gestão de Projectos 52 Software vs Hardware: Desgaste com o tempo Software vs Hardware: Desgaste com o tempo Leis de Belady e Lehman: • O software mudará continuamente. • O software ficará cada vez mais desestruturado à medida que é alterado. Custo do software geralmente domina o custo do desenvolvimento. – Os custos do software de um PC são geralmente maiores do que do hardware Software custa mais para manter do que para desenvolver! Para sistemas com uma longa vida, os custos de manutenção são várias vezes maiores do que o de desenvolvimentoa Características do Software ou coisas com que um software de garagem não se preocupa Manutenibilidade – Deve ser possível para o software evoluir de forma a atender a requisitos que mudam Confiabilidade – Software não deve causar prejuízo físico ou econômico no caso de uma falha Eficiência – “Capacidade do produto de software de apresentar desempenho apropriado, relativo à quantidade de recursos usados, sob condições especificadas”.(NBR ISO/IEC 9126) Usabilidade – “Capacidade do produto de software de ser compreendido, aprendido, operado e atraente ão usuário, quando usado sob condições especificadas”. (NBR ISO/IEC 9126) Características do Bom Software Usabilidade Portabilidade – Capacidade do produto de software de ser transferido de um ambiente para outro”. Adaptabilidade – Capacidade do produto de software de ser adaptado para diferentes ambientes especificados, sem necessidade de aplicação de outras ações ou meios além daqueles fornecidos para essa finalidade pelo software considerado Estabilidade– “Capacidade do produto de software de evitar efeitos inesperados decorrentes de modificações no software”. (NBR ISO/IEC 9126) Testabilidade – “Capacidade do produto de software de permitir que o software, quando modificado, seja validado”. (NBR ISO/IEC 9126) Características do Bom Software A importância relativa destas características depende do produto e do ambiente em que ele será usado. Em alguns casos, alguns desses atributos podem ser mais importantes que outros: – Em sistemas de segurança-críticos de tempo-real, os atributos chave podem ser confiabilidade e eficiência custos tendem a aumentar exponencialmente se altos níveis de um dado atributo são necessários: Características do Software
Compartilhar