AN INTRODUCTION TO SOFTWARE ENGINEERING

Documentos relacionados
AN INTRODUCTION TO SOFTWARE ENGINEERING

ENGENHARIA DE SOFTWARE

Análise e Projeto de Software

Engenharia de Software I - Aula 02

Introdução a Engenharia de Software

Engenharia de Software

Prof. Luiz A. Nascimento

Tópicos desta Aula: O que é Engenharia de Software? O que é Software? Para que serve? Qual sua importância?

Por que estudar Engenharia de Software AULA PROF. ABRAHAO LOPES

Apresentação da Disciplina de Engenharia de Software II

ENGENHARIA DE SOFTWARE

Introdução a Engenharia de Software. Professor Joerllys Sérgio

Custos da Ausência da Engenharia de Software

Engenharia de Software. Engenharia de Software. . Atualmente existe um destaque todo especial para a. Engenharia de Software

ENGENHARIA DE SOFTWARE

Introdução. Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior

Engenharia de Software

Problemas e Práticas Recomendadas no Desenvolvimento de Software

Apresentação do Curso de Engenharia de Software 2

Desenvolvimento de Projetos

Engenharia de Software: Uma Visão Geral. SSC Engenharia de Software I Profa. Dra. Elisa Yumi Nakagawa 2 o semestre de 2012

ENGENHARIA DE SOFTWARE

Refere-se a um conjunto de problemas encontrados no desenvolvimento de software:

Prof. Tiago Alves de Oliveira

Engenharia de Software I

Apresentação do Curso de Engenharia de Software 2

Engenharia de Software

Introdução à Engenharia de Software

Apresentação do Curso de Engenharia de So5ware II

Apresentação do Curso de Engenharia de Software /2

Crise do Software. Crise de tecnologia - hardware caminha mais rápido que o software

Engenharia de Software I

Verificação e Validação

ANÁLISE E PROJETO DE SISTEMAS

Qualidade de software. Prof. Emiliano Monteiro

1. A função DevOps, que se concentra principalmente em Produtos & Serviços:

Data Warehouse ETL. Rodrigo Leite Durães.

Engenharia de Software: Uma Visão Geral. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1 o semestre de 2015

Engenharia de Software: Uma Visão Geral. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa 1 o semestre de 2017

Perguntas da Aula 2. Respostas da Pergunta 2. Respostas da Pergunta 1. Respostas da Pergunta 4. Respostas da Pergunta 3. Processos de Software

FUNDAMENTOS DE ENGENHARIA DE SOFTWARE. Professor: Paulo Vencio

Apresentação do Curso de Engenharia de So5ware II

Engenharia de Software

Tópicos da Aula. O que é anunciado. Falha de Comunicação no Desenvolvimento de Software. Engenharia de Software: Conceitos Fundamentais

Estimativa de Esforço. Estimativas de Software. Subjetividade da Estimativa. Incerteza de Estimativa. Técnicas de Estimativas

ENGENHARIA DE SOFTWARE

Apresentação do Curso de Gerência de Projetos de So7ware

Falha de Comunicação no Desenvolvimento de Software

Segurança e Controle em Sistemas de Informação. Profa. Ellen Francine ICMC-USP

Processos de Software

Gerência de Projetos e Qualidade de Software. Prof. Walter Gima

Definições e ciclo de vida

Engenharia de Software I

Leitura: Cap : Sommerville; cap20: Pressman

ARCHITECTURAL DESIGN. Ian Sommerville, 8º edição Capítulo 11 Aula de Luiz Eduardo Guarino de Vasconcelos

O Estudo de Viabilidade. Prof. Nilton Prof. Pedro

PDS. Aula 1.4 Modelos de Processo. Prof. Dr. Bruno Moreno

Engenharia de Software II

Qualidade de Software: Visão Geral. SSC 121-Engenharia de Software 1 Profa. Dra. Elisa Yumi Nakagawa

Verificação e Validação. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 22 Slide 1

Engenharia de Software II

Projeto Integrador. <Projeto Integrador> Documento Visão. Versão <1.0>

ENGENHARIA DE SOFTWARE. Introdução

Gerência e Planejamento de Projeto. Engenharia de Software Profa. Elisa Yumi Nakagawa 1 o semestre de 2016

INTRODUÇÃO A ENGENHARIA DE SOFTWARE

Análise de Sistemas CONTEXTUALIZAÇÃO

Engenharia de Software Sistemas Sociotécnicos

P R O C E SSO D E D E S E N VOLVIMENTO D E S O F T WAR E

Introdução INTRODUÇÃO AO SWEBOK. Origens do corpo de conhecimentos da Engenharia de Software: Introdução a Computação e Engenharia de Software

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA ENGENHARIA DE SOFTWARE

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ANÁLISE E PROJETO DE SISTEMAS. Aula 5. Agenda

Principais Motivos para Usar o MySQL

Apresentação do Curso de Engenharia de So5ware II

Manutenção Leitura: Sommerville; Pressman

Engenharia de Software Introdução

Tecnologias da Informação TI /2 Material de apoio ler bibliografia recomendada (Stair)

Ciência da Computação ENGENHARIA DE SOFTWARE. Capítulo 1 Introdução

Engenharia de Software

Avaliação de Desempenho

Software: na visão da ES

MODELOS DE PROCESSOS (PARTE 2)

Introdução à Engenharia de Software

CK119: Engenharia de Software

Bruno R. N. Matheus. Engenharia de Software Prof. Paulo Masiero

Introdução 2014/1 Prof. Luís Fernando Garcia

Engenharia de Software II

Qualidade de Software: Visão Geral. Engenharia de Software Profa. Dra. Elisa Yumi Nakagawa

Projeto Físico e Lógico de Redes de Processamento. Kleber A. Ribeiro

Engenharia de Software. Introdução. Leitura: Cap1: Sommerville Pressman - Ariadne

Transcrição:

AN INTRODUCTION TO SOFTWARE ENGINEERING Ian Sommerville, 8º edição Capítulo 1 Aula de Luiz Eduardo Guarino de Vasconcelos

Objetivos Entender o que é engenharia de software e porque ela é importante Entender questões profissionais e éticas, relevantes para os engenheiros de software

Introdução Onde os softwares são usados? Qual o impacto do software na sociedade? Quando desenvolver para web ou desktop? Como desenvolver? O que o software produz? O que levar em consideração ao desenvolver um software? Layout, IHM, Padronização, LP, BD, Redes, Segurança, Qualidade (nível de cobertura de testes), Público, Plataforma, SO, Multiusuário Pensar no hoje e no amanhã

Evolução do software Por que demora tanto tempo para que os programas sejam concluídos? Por que os custos são tão elevados? Por que não descobrimos todos os erros antes de entregarmos o software ao nosso cliente? Porque temos dificuldade em medir o progresso enquanto o software está sendo desenvolvido?

Conseqüências Aplicações escritas há 30 anos, modificadas ao longo do tempo, são impossíveis de manter. Pequenas alterações podem fazer o sistema falhar. Não há quem conheça estes sistemas Falta de documentação do desenvolvimento Sistemas críticos (e.g. tráfego aéreo) não são substituídos Não há sistemas para substitui-los

Curva de falhas para o hardware

Curva de falhas para o software

Curva de falhas real para o SW

Mitos do software - Gerente Temos um manual repleto de padrões e procedimentos que oferecerá tudo o que os desenvolvedores precisam saber Ele é usado? As técnicas são adequadas ao software sendo desenvolvido? Ele é completo?

Mitos do software - Gerente Temos os computadores mais modernos do mercado Ferramentas (SW) que auxiliam o desenvolvimento são mais úteis Se o cronograma está atrasado adicionaremos mais programadores para tirar o atraso Perda de produtividade na educação dos novos programadores

Mitos do software - Cliente Uma declaração geral dos objetivos é suficiente para começar a escrever o programa. Os detalhes podem ser preenchidos mais tarde. Definição inicial ruim Principal causa do fracasso de projetos de desenvolvimento de software

Mitos do software - Cliente Os requisitos modificam-se continuamente, mas as mudanças podem ser facilmente acomodadas. O impacto negativo das mudanças é maior conforme o projeto vai se desenvolvendo Definição (1x) Implementação (1,5x a 6x) Manutenção (60x a 100x) Pode ser mais barato desenvolver outro SW

Mitos do software - Desenvolvedor Depois de escrever e colocar o programa em funcionamento nosso trabalho estará terminado De 50% a 70% do esforço é gasto depois de entregar a primeira versão do sistema ao cliente Enquanto não tiver o programa funcionando não posso medir sua qualidade A qualidade não deve ser garantida por testes, mas por todas as atividades de desenvolvimento

Mitos do software - Desenvolvedor A única coisa a ser entregue em um projeto bem-sucedido é o programa funcionando A documentação bem feita é crucial para as manutenções futuras

Algumas dicas.

Não estabeleça prazos audaciosos demais

Sempre ouça o mercado

Usuários odeiam bugs

Experiência em simulação ajuda

Nem toda apresentação será um sucesso

O que serve para um cliente pode não servir para outro

Busque soluções eficientes

SUPORTE! Ferramentas diferentes para situações diferentes

Previsão e otimização podem ser complexas

Observe os atributos significativos do seu cliente

Observe os atributos significativos do seu cliente

http://heartbleed.com/

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 Erros no sistema automático de transporte de bagagens (misloaded, misrouted, jammed): Atraso na abertura do aeroporto com custo total estimado em US$360 Milhões 86 milhões para consertar o sistema

Ariane 5 Veículo Lançador de Satélites 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.

Resultado = Fogos de Artifício Explode 37 segundos após seu lançamento. Falha no sistema (software) que calculava a trajetória e atitude, leva a uma pane nos sistemas adjacentes. Estes, enviam sinais de diagnóstico para os motores que os interpreta como dados comuns... Destruição do foguete e carga avaliada em US$ 500 milhões Falha de Teste...BOOM.

Bugs 39 Ariane 5 Sistema de controle Conversão de dados Falta de Testes Mars Climate Orbiter (MCO) Erro de Software Conflito de dados do sistema métrico e sistema de medidas inglês Mars Polar Lander (MPL) Identificação de sinal espúrio Interpretação incorreta pelo software

http://info.abril.com.br/noticias/seguranca/2015/02/erro-em-linha-de-codigo-derrubou-trafego-aereo-ingles-por-uma-hora.shtml Em 12 de dezembro de 2014, o sistema de controle de tráfego aéreo travou. Dezenas de aviões passaram a voar em círculos e centenas de aeronaves não puderam decolar, milhares de passageiros ficaram sem entender o que estava acontecendo. O motivo do caos? Uma única linha de programação errada fez o servidor do sistema de plano de voos inglês ficar fora do ar. Na segunda-feira (9), a Agência de Aviação Civil do Reino Unido publicou um relatório sobre a falha que levou à interrupção do sistema, responsabilizando o software do servidor pelo problema. Richard Deakin, presidente da empresa privada que controla o tráfego aéreo na Grã-Bretanha, afirmou que uma única linha de programação, das 4 milhões que fazem os 50 sistemas do controle dos ares do país, causou o seguinte problema: No Reino Unido, os planos de voos usados pelos pilotos são sincronizados a um servidor central, que tem uma capacidade limite. Um dos controladores apertou o botão "selecionar setores", que coloca a estação de trabalho no "modo de vigilância". Ou seja, uma estação de trabalho consegue ver o que está sendo mostrado em outra estação. Quando isso aconteceu, o sistema principal de voos achou que tinha mais funções atômicas ativas do que a capacidade máxima do servidor. Nesses caos, o sistema de voos é desenvolvido para desligar, evitando o risco de enviar dados incorretos para uma estação de controle. O mesmo erro aconteceu no backup do sistema de plano de voos, que estava usando o mesmo código do principal. Segundo o relatório, pela primeira vez na história os servidores dos sistemas de voos, principal e reserva, falharam ao mesmo tempo. De acordo com Deakin, a empresa irá investir "uma grande quantia" em novas tecnologias para colocar o sistema britânico na vanguarda do monitoramento de voos europeu.

Taxa de sucesso http://www.versionone.com/assets/img/files/chaosmanifesto2013.pdf

Taxa de sucesso http://www.versionone.com/assets/img/files/chaosmanifesto2013.pdf

Defects per Project size maximum number of errors medium number of errors minimum number of errors

Defects per KLOC KLOC IS CALLED AS 1000 lines of code (a) Industry Average: "about 15-50 errors per 1000 lines of delivered code. (b) Microsoft Applications: about 10-20 defects per 1000 lines of code during in-house testing, and 0.5 defect per KLOC in released product. Book "Code Complete" by Steve McConnell

Por quê? Sintomas Compreensão incompleta ou imprecisa das necessidades do usuário Falta de habilidade de lidar com requisitos que evoluem Módulos incompatíveis Dificuldades de estender ou manter software Descoberta de defeitos graves no projeto em etapas avançadas de desenvolvimento ou mesmo em época de implantação ou uso Desempenho inaceitável do software Falta de coordenação na equipe

Por quê? Causas frequentes Gerência de requisitos sem processo definido Comunicação ambígua e imprecisa entre partes envolvidas Complexidade crescente Inconsistências não detectadas em nível de análise, projeto e implementações Testes insuficientes Dificuldade em lidar e gerenciar riscos Falta de controle sobre propagação de mudanças Automação insuficiente Ubiqüidade (disponível o tempo todo em qualquer lugar) Diversidade de plataformas Comunicação entre o cliente e o desenvolvedor é muito fraca.

Nem tudo está perdido Sistemas complexos e grandes foram, são e serão desenvolvidos. Simuladores de aeronaves, veículos Telemetria, processamento em tempo real Geoprocessamento Construção de plataformas, edificações Análise de imagem, etc, etc, etc

Engenharia de Software - Resumo As economias de todos os países dependem de sistemas complexos baseado em computadores. Mais e mais sistemas são controlados por software Engenharia de Software se concentra nas teorias, métodos e ferramentas para desenvolvimento de software profissional. Despesas com software representam uma fração significativa dos gastos de todos os países desenvolvidos

NATO Software Engineering Conference, 1968

O que é engenharia de software? Eng. Software é uma disciplina da engenharia que esta concentrada em todos os aspectos da produção de software (Sommerville, 2007) Disciplina que integra processo, métodos e ferramentas para o desenvolvimento de software. (Pressman, 95) Engenheiros de Software devem adotar uma abordagem sistemática e organizada para trabalhar e usar ferramentas e técnicas apropriadas dependendo de cada problema a ser solucionado (considerar plataforma, SO, escopo, imediatismo, etc). (Sommerville, 2007) O estabelecimento e uso de sólidos princípios de engenharia para que se possa obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais. (Fritz Bauer, 1969)

FAQs sobre Engenharia de Software O que é software? O que é engenharia de software? Qual a diferença entre engenharia de software e engenharia de sistemas? O que é um processo de software? Etapas do Ciclo de Vida O que é um modelo de processo de software? e.g. Cascata, Scrum

Quais são os custos da engenharia de software? Aproximadamente 60% do custo é para desenvolvimento, 40% para testes, mas isso pode variar. Para softwares personalizados os custos com evolução podem exceder os custos de desenvolvimento e são difíceis de planejar. Custos variam e dependem do processo e do tipo de sistema a ser desenvolvido, além dos atributos (imediatismo, performance, plataforma, segurança, disponibilidade, etc). Distribuição do custo depende do modelo que está sendo usado.

Quais são os atributos de um bom software? Maintainability / Fácil manutenção Software deve ser escrito de modo que possa evoluir de acordo com as mudanças necessárias; Dependability /Confiança Software deve ter trustworthy (confiança). Não deve causar danos físicos ou econômicos em caso de falhas (COMPLICADO); Efficiency / Eficiência Software não deve desperdiçar os recursos do sistema; Acceptability / Usabilidade Software deve ser usável, sem esforço excessivo, pelo tipo de usuário para o qual foi projetado

Quais são os desafios-chave da engenharia de software? Heterogeneity Desenvolver técnicas para operar em sistemas distribuídos em plataformas e ambientes de execução diferentes; Delivery Desenvolver técnicas para diminuir os tempos de entrega dos sistemas grandes e complexos sem comprometer a qualidade; Trust Desenvolver técnicas que demonstrem que o software pode ter a confiança dos usuários.

ACM/IEEE Código de Ética http://www.acm.org/ http://www.ieee.org.br/ As sociedades profissionais tem cooperado para produzir um código de ética e de prática profissional. O Código contém 8 Princípios que relacionam comportamento e decisões sobre o engenheiro de software profissional que inclui educadores, gerentes, supervisores, desenvolvedores de política, estagiários e estudantes

Código de ética - Princípios PÚBLICO Engenheiros de software devem agir consistentemente com o interesse público. CLIENTE E EMPREGADOR Os Engenheiros de software devem agir dentro dos melhores interesses de seu cliente e empregador, de forma consistente com o interesse público. PRODUTO Engenheiros de software devem assegurar que seus produtos e modificações a eles relacionadas atendam aos mais altos padrões profissionais possíveis.

Código de ética - Princípios JULGAMENTO Engenheiros de software devem manter a integridade e a independência do seu julgamento profissional. GERENCIAMENTO Gerentes e líderes de engenharia de software devem aceitar e promover uma abordagem ética no gerenciamento de desenvolvimento e manutenção de software. PROFISSÃO Engenheiros de software devem promover a integridade e a reputação da profissão de forma consistente com o interesse público.

Código de ética - Princípios COLEGAS Engenheiros de software devem ser honestos e colaborativos com seus colegas. INDIVÍDUO Engenheiros de software devem participar, ao longo da vida, aprendendo, respeitando e promovendo uma abordagem ética na prática da profissão

Dilemas éticos Discordar, em princípio, das políticas da alta gerência. Seu empregador age sem ética e entrega versões de sistemas críticos sem finalizar os testes. Participação de desenvolvimento militar ou nuclear. Você deve ter seu entendimento. A posição ética depende inteiramente do ponto de vista dos indivíduos envolvidos

Apresentação 1 Apresentação (até 3% na nota) 2 apresentadores 4 a 6 minutos de apresentação Máximo 7 slides (sendo o primeiro com a identificação do tema e dos alunos, e o último slide com as referências) Abordar conceitos, principais características/funcionalidades, exemplos de uso, estatísticas de uso. Usar referências boas. Apresentar o máximo de informação importante. Entregar no e-mail du dot guarino at gmail dot com Entregar 1 dia antes da aula Assunto do e-mail: FES_AP1 Nome do Anexo: FES_AP1_TEMA_Nomes e.g. FES_AP1_CMS_JoaoSilva_MariaSilva, FES_AP1_JAVA_LuizGuarino_JoaoSouza

Tema Alunos Tempo (10%) Apres. Completa 60%) Entrega no Prazo (10%) Nomenclatura correta (10%) Referências boas (10%) CMS (Joomla) Wordpress Framework de desenvolvimento Java Framework de desenvolvimento.net Ruby on Rails Framework de persistência Design Patterns Usabilidade Testes de software Segurança de software Cloud Computing Big Data Internet of Things Obs.: Informações incorretas causarão descontos na nota