Engenharia de Software Aula 01 – Introdução Prof. Adriana M. Martins Introdução à Engenharia de Software Introdução Definição Histórico Conceitos Concepção Projeto Arquitetura Topologia Introdução Atualmente dependemos de tecnologia praticamente em todos os aspectos da vida. Sistemas complexos dependem de softwares bem desenvolvidos – relação de alto custo x benefício. Os softwares tornam nossa vida mais confortável, eficiente e efetiva. O que é Engenharia de Software? “É uma disciplina de Engenharia, cuja meta é o desenvolvimento de sistemas de software com uma boa relação custo x benefício.” Sommerville Software é algo abstrato e intangível, fácil de se tornar complexo e mais difícil de ser compreendido. O que é Engenharia de Software? “É a engenharia para construção de sistemas, cuja estrutura abrange um processo, um conjunto de métodos e ferramentas, visando que este seja útil e funcione de forma adequada.” Pressman O que é Engenharia de Software? “É a engenharia para construção de sistemas, cuja estrutura abrange um processo, um conjunto de métodos e ferramentas, visando que este seja útil e funcione de forma adequada.” Pressman O que é Engenharia de Software? “É a engenharia utilizada para construção de softwares que nos auxiliem a resolver problemas.” Pflegger Qual a natureza do problema? Problema1 Uso de tecnologia como ferramenta para implementar a solução PROBLEMA Problema2 SOLUÇÃO Problema3 Histórico ESOF é uma engenharia nova; A noção da mesma surgiu em 1968, numa conferência organizada para discutir a “Crise do Software”. A criação de hardwares robustos nesta época indicava a necessidade de softwares mais elaborados e complexos do que os já existentes. TAREFA: Pesquisar sobre a “Crise do Software” Histórico A construção de softwares complexos mostrou necessidade de formalização do processo, pois: Havia atraso na entrega; Custos maiores do que os iniciais, que os tornavam não confiáveis; Possuíam difícil manutenção e Baixo desempenho. Exemplo Prático - Visões de diferentes usuários... O que o líder do projeto entendeu O que o usuário explicou que queria O que o analista projetou Visões de diferentes usuários... O que o consultor definiu O que o programador fez O que foi documentado Visões de diferentes usuários... O que foi cobrado O que foi instalado O que restou após a manutenção Visões de diferentes usuários... O que o usuário realmente precisava!! Histórico Novas técnicas e novos métodos eram necessários para controlar a complexidade inerente dos grandes sistemas de software. O objetivo principal em se utilizar a ‘engenharia’ para construção dos softwares é produzir softwares complexos que atendam às expectativas dos usuários e sejam entregues dentro do orçamento e prazos previstos. Histórico Novas tecnologias resultam em convergência de sistemas computacionais com novos desafios na sua construção. Algumas empresas tem problemas pela ausência de metodologia para construção de softwares. Porém, hoje é possível aplicar um processo e obter melhores resultados no fim da construção. Qual o papel do Engenheiro de Software? Cientistas da Computação: lidam com investigação, provas de teoremas sobre como funcionam os computadores e linguagens de programação por si só. Engenheiros de Software: utilizam linguagens de programação e computadores como ferramentas a serem utilizadas num projeto e na implementação da solução de um problema. Qual o papel do Engenheiro de Software? C. Computação Teorias Funções Computacionais Cliente Problema Engenharia de Software Técnicas e Ferramentas para resolver problemas! Questões Ativas da Indústria de Software No passado, o software era desenvolvido por um programador solitário. Hoje ele é construído por uma equipe de especialistas em software. Cada especialista está concentrado em uma parte da tecnologia necessária para construção do software complexo. Questões Ativas da Indústria de Software Questões: Por que leva-se tanto tempo para construir um software? Por que os custos de desenvolvimento são tão altos? Por que não podemos achar todos os erros antes da entrega do software para o cliente? Por que gastamos tanto tempo e esforço mantendo programas existentes? Porque temos dificuldades em avaliar o progresso enquanto o software é desenvolvido e mantido?