Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Engenharia de Software Sobre mim Graduação: Ciência da Computação no Centro Universitário de Formiga – UNIFOR; Pós-Graduação: Engenharia de Software centrada em Métodos Ágeis na UNA – BH; Experiência de trabalho: 12 anos na área de tecnologia, atuando como professor, desenvolvedor, analista e coordenador de TI. Nos últimos 5 anos atuando como analista de sistemas na Federação das Unimeds de Minas Gerais em Belo Horizonte; Sobre vocês Para conhecê-los: Apresente-se; Diga se está trabalhando na área de tecnologia ou se já teve experiência na área de tecnologia, especialmente com engenharia de software; Contrato – Objetivos Ter uma compreensão dos fundamentos, métodos e padrões da Engenharia de Software; Perceber os benefícios no uso de Engenharia de Software Ágil; Trabalhar com artefatos de elaboração requisitos, desenvolvimento, desenho e documentação de usuário, baseados em processo; Formar a base em processos, modelos, técnicas, práticas e ferramentas que auxiliarão no desenvolvimento de software com qualidade; Referências PRESSMAN, Roger S. Engenharia de Software. 6. ed. São Paulo: McGraw Hill, 2006. SOMMERVILLE, Ian. Engenharia de Software. 6. ed. São Paulo: Pearson Addison Wesley, 2005. BOOCH, Grady; JACOBSON, Ivar. UML Guia do Usuário. 2. ed. Rio de Janeiro: Campus, 2000. SHORE, James; WARDEN, Shane. A arte do Desenvolvimento Ágil. Rio de Janeiro: Alta Books, 2008. Ementa Introdução à Engenharia de Software; Desenvolvimento Ágil; Engenharia de Requisitos; UML; Ementa Introdução à Engenharia de Software; Desenvolvimento Ágil; Engenharia de Requisitos; UML; "Aquele que pergunta é um tolo por cinco minutos, mas aquele que não pergunta permanece um tolo para sempre.“ Provérbio O que é engenharia? O que é Engenharia? Conforme o Dicionário Aurélio, engenharia é: s.f. Ciência, técnica e arte da construção de obras de grande porte, mediante a aplicação de princípios matemáticos e das ciências físicas. O que um engenheiro faz? As funções do engenheiro consistem na materialização de uma ideia na realidade. Em outros termos, através de técnicas, desenhos e modelos e com o conhecimento proveniente das ciências, a engenharia pode resolver problemas e satisfazer necessidades humanas. O que é software? Qual o conceito de software Conforme o Dicionário Aurélio, software é: s.m. (pal. ing.) Conjunto de instruções armazenadas em disco(s) ou em chips internos do computador que determinam os programas básicos, utilitários ou aplicativos, que ele tem para serem usados. Qual o conceito de software? Em 1970, menos de 1% da público conseguiria definir o que é um software de computador; Hoje, a maioria dos profissionais e do público em geral pensam que entendem o que é um software; São instruções que quando executadas fornecem as características, funções e desempenho desejados; estruturas de dados que permitem aos programas manipular adequadamente a informação; documentos que descrevem a operação e o uso dos programas; Qual o conceito de software? Software de computador é um produto que os profissionais de software constroem, e depois, mantém ao longo do tempo; Abrange programas que executam em computadores de qualquer tamanho e arquitetura; Documentos tanto em forma impressa quanto virtual que combinam todas as formas de mídia eletrônica; O que é engenharia de software? O que é a engenharia de software Trata de aspectos relacionados ao estabelecimento de processos, métodos, técnicas, ferramentas e ambientes de suporte ao desenvolvimento de software; Abordagem sistemática para o desenvolvimento de software; Disciplina da engenharia que se ocupa de todos os aspectos da produção de software, desde os estágios iniciais de especificação do sistema até a manutenção desse sistema, depois que ele entrou em produção; É a criação e utilização de sólidos princípios de engenharia a fim de obter softwares econômicos que sejam confiáveis e que trabalhem eficientemente em máquinas reais; O que é a engenharia de software Software não é mais desenvolvido de maneira artesanal; São passos claros e com uma sequência lógica desses passos para que o software seja desenvolvido com qualidade e critérios e para que se haja controle entre todos os envolvidos no processo sobre o que está sendo desenvolvido; Engenharia de software veio para melhorar a qualidade dos softwares, devido a falta de credibilidade dos mesmos; Objetivos da Engenharia de software Controle sobre o desenvolvimento de software dentro de custos, prazos e níveis de qualidade desejados; Produtividade no desenvolvimento, operação e manutenção de software; Qualidade x Produtividade; Permitir que profissionais tenham controle sobre o desenvolvimento de software dentro de custos, prazos e níveis de qualidade desejados; Características da Engenharia de software Refere-se a softwares desenvolvidos por grupos ao invés de indivíduos; Usa princípios da engenharia ao invés da arte; Inclui tanto aspectos técnicos quanto não-técnicos; A importância do software Um software é considerado bem-sucedido quando satisfaz as necessidades das pessoas que o usam; Tem desempenho sem falhas durante um longo período de tempo; É fácil de modificar e ainda mais fácil de usar; O software não é bem-sucedido quando os usuários ficam insatisfeitos; Demora na entrega ou custos acima dos planejados; Com tendência a erros; Difíceis de modificar e mais difíceis de usar Desenvolvimento x Programação Programação de software envolve escrever código; Desenvolvimento de software não é apenas escrever código. Envolve todo um processo: Comunicação com o cliente; Especificação dos requisitos; Escrita do código; Testes; Documentação; Entrega; etc.; Software não se desgasta, mas deteriora Diferentemente do hardware que se desgasta, o software se deteriora; Durante sua vida, o software passará por modificações; Conforme modificações são feitas, é provável que erros sejam introduzidos causando falhas; Falhas indicam um erro no projeto, ou no processo pelo qual o projeto foi traduzido para código de máquina executável; Categorias de software Software de sistemas; Software de aplicação; Software científico e de engenharia; Software embutido; Software para linha de produtos; Aplicações da Web; Software para inteligência artificial; Software de sistemas Programas escritos para servir a outros programas (compiladores, editores e utilitários para gestão de arquivos); Interação intensa com o hardware do computador; Uso intenso de múltiplos usuários; Operação concorrente que requer ordenação, compartilhamento de recursos e sofisticada gestão de processos; Estruturas de dados complexas e interfaces externas múltiplas; Software de aplicação Programas isolados que requerem uma necessidade específica do negócio; Processam dados comerciais ou técnicos de modo que facilitam as operações e gestão de decisões do negócios; Controle de funções do negócio em tempo real: processamento de transações de PDV, controle de processo de fabricação em tempo real; Software científico e de engenharia Softwares que vão da astronomia à vulcanologia; Análise automotiva de tensões à dinâmica orbital do ônibus espacial; Biologia molecular; Manufatura automatizada; Software embutido Reside dentro de um produto ou sistema; É utilizado para implementar e controlar características e funções para o usuário final; Funções limitadas e particulares; Teclado de forno micro-ondas, funções digitais de um automóvel; Software para linhas de produtos Fornecer capacidade específica a ser usada por muitos clientes diferentes; Softwares para controle de estoque; Processamento de texto, planilhas, gráficos, multimídia, entretenimento, gestão de banco de dados, aplicações financeiras pessoais e empresariais; Aplicações da Web Cobrem uma ampla gama de aplicações; Conjunto de arquivos ligados por hipertexto (HTML) que apresentam informações usando texto e poucos gráficos; E-commerce; Sofisticados ambientes computacionais que fornecem não apenas características isoladas, funções de computação e conteúdo para o usuário final, mas também integradasa bancos de dados de empresas e às aplicações do negócio; Software para inteligência artificial Faz uso de algoritmos não-numéricos para resolver problemas complexos que não são passíveis de computação ou análise direta; Incluem robótica, sistemas especialistas, reconhecimento de padrões (imagem e voz), redes neurais artificiais, prova de teoremas e jogos; Software legado Softwares criados sem engenharia de software; Softwares antigos, muito antigos; Foram desenvolvidos a décadas atrás e têm sido continuamente modificados para satisfazer a mudanças nos requisitos do negócio e nas plataformas de computação; Dispendiosos de manter e arriscados de evoluir; Má qualidade; Documentação pobre ou inexistente; Mitos do software “Se eu decidir terceirizar um projeto de software vou poder relaxar e deixar que aquela firma o elabore”; “O estabelecimento geral de objetivos é suficiente para iniciar a escrita de programas, podemos fornecer os detalhes posteriormente”; “Os requisitos de projeto mudam continuamente, mas as mudanças podem ser facilmente acomodadas porque o software é flexível”; Mitos do software “Quando escrevemos um programa e o fazemos funcionar, nosso trabalho está completo”; “Até que eu esteja com o programa “rodando” não tenho como avaliar sua qualidade”; “O único produto de trabalho que pode ser entregue para um projeto de software bem-sucedido é o programa executável”; “A engenharia de software vai nos fazer criar documentação volumosa e desnecessária que certamente nos atrasará”; Mitos do Software “Se nos atrasarmos no cronograma, podemos adicionar mais programadores e ficar em dia”; FALSO!!! Mitos do Software 9 meses 1 mês??? Mitos do Software Mitos do Software Se colocarmos mais pessoas, os atrasos podem ser ainda maiores; O agregados precisam aprender o sistema e quem irá treiná-los? As pessoas que estavam fazendo o trabalho. Se estão ensinando os novatos, não podem fazer o trabalho e o projeto atrasa ainda mais; Outro problema é a comunicação. Com mais pessoas, aumenta a quantidade de canais de comunicação e a complexidade de comunicação do projeto como um todo; Comunicação é essencial, mas cada novo membro requer esforço adicional e tempo adicional; Evolução da engenharia de software 1968: Crise do software; Década de 70: Programação estruturada e Projeto Estruturado; Década de 80: Análise Estruturada (surgimento das ferramentas CASE); Década de 90: Análise e Projetos Orientados a Objetos; Crise do software Termo utilizado no final dos anos 60 para descrever as dificuldades enfrentadas no desenvolvimento de software, quando a engenharia de software não existia; Expressa as dificuldades do desenvolvimento de software frente ao rápido crescimento da demanda, a complexidade dos problemas a serem resolvidos e a inexistência de técnicas estabelecidas para o desenvolvimento de sistemas que funcionassem adequadamente; Possíveis causas da crise Estimativas de prazo e custo frequentemente são imprecisas; Não dedicamos tempo para coletar dados sobre o processo de desenvolvimento de software; Com poucos dados históricos como guia, as estimativas tem sido a olho, com resultados previsivelmente ruins; A produtividade das pessoas não tem acompanhado a demanda por seus serviços; Projetos de desenvolvimento de software normalmente são efetuados apenas com um vago indício das exigências do cliente; Possíveis causas da crise Qualidade de software as vezes é menos que adequada; Software existente é difícil de manter; Necessidades incompreendidas, expectativas não realistas, estimativas infundadas; Incapacidade de negociar conflitos entre os envolvidos (equipe, clientes, usuários e qualquer outro afetado pelo projeto); Mudanças contínuas; Manifestação da crise do software Projetos estourando o orçamento; Projetos estourando o prazo; Software de baixa qualidade; Software que não atinge os requisitos; Projetos ingerenciáveis; Código difícil de manter; Muitos projetos atuais continuam com estes problemas, ou seja, a crise do software continua na atualidade; Crise do software 1968: NATO Software Engineering Conference; Conferência da OTAN sobre Engenharia de Software; Objetivo era estabelecer práticas mais maduras para o processo de desenvolvimento; É considerado o nascimento da disciplina de Engenharia de Software; Chaos report 1995 Em 1995, a organização The Standish Group publicou um estudo analisando as estatísticas sobre o sucesso e fracasso dos projetos de desenvolvimento de software: o Chaos Report; 84% dos projetos de software são mal-sucedidos, sejam cancelados, fora do prazo ou fora do orçamento, ou com menos funcionalidades que o planejado; Agências governamentais e companhias privadas americanas gastaram US$ 81 bilhões apenas em projetos cancelados e mais US$ 59 bilhões em projetos concluídos fora do prazo; Chaos report 2006 Em 2006, 35% dos projetos foram bem sucedidos; 65% dos projetos ainda eram mal sucedidos; 50 anos de experiência no desenvolvimento de software não bastaram para melhorar efetivamente a qualidade do software; Seria a dificuldade existente no desenvolvimento de software uma característica inerente ao próprio software? Chaos report 2009 24% 32% 44% Uso das funcionalidades 45% 19% 13% 16% 7% Crise do Software “Muito da crise de software é auto-infligida, como quando um executivo-chefe de informática diz: ‘Eu preferia ter isso errado do que atrasado. Podemos sempre corrigir isso depois.” Mark Paulk
Compartilhar