Baixe o app para aproveitar ainda mais
Prévia do material em texto
MATA62 Engenharia de Software I Rita Suzana Pitangueira Maciel (Professor) Rausth (Estágio Docente) Bibliografia Engenharia de Software. Ian Sommerville. 8 Edição. Addison Wesley. Engenharia de Software. Roger S. Presman. 6 Edição. Makron Books. ABRAN, A. et al., Eds., Guide to the Software Engineering Body of Knowledge. RAJLICH, V.T. , BENNETT, K.H. A staged model for the software life cycle. FEBBRARO,Neal, RAJLICH, V.T. The Role of Incremental Change in Agile Software Processes . RAJLICH,V.T. GOSAVI, Prashant Incremental Change in Object-Oriented Programming. AVALIAÇÃO Teóricas 28 de novembro 28 de janeiro Trabalhos Projeto e Desenvolvimento de Software. Gerência de Mudanças e Manutenção Datas serão definidas ao longo do semestre Engenharia de Software Introdução Rita Suzana Agenda • Conceitos de Engenharia de Software • Processo de desenvolvimento de software Engenharia de software Conceitos CENÁRIO INICIAL • Desenvolvimento informal e não suficiente • Software tinham anos de atraso no desenvolvimento • Custo geralmente acima do previsto • Desempenho insatisfatório 7 Crise do software (1968) Final do anos 60 Muitos projetos de software começaram a falhar. Preço do hardware caia Preço do software subia… A causa deste fenômeno foi o contínuo aumento do tamanho e complexidade requeridos do software Ausencia de metodologias e tecnologia adequadas para lidar com projetos de software de grande porte. Surge entao “A engenharia de software” objetivo resolver a crise de software. Engenharia de software “Disciplina da engenharia relacionada com todos os aspectos da produção de software desde estágios iniciais de especificação até a manutenção” Disciplina de engenharia: • aplicação de teoria, métodos e ferramentas; • descoberta de soluções; • trabalha com restrições organizacionais e financeiras Todos os aspectos da produção de software: • técnicos; • gerenciais; • desenvolvimento de métodos, teorias e ferramentas de apoio. 9 ENGENHARIA DE SOFTWARE Análise versus síntese de um problema ENGENHARIA DE SOFTWARE Análise versus síntese de um problema O processo de síntese Por que a engenharia de software? Método ou técnica: procedimento para a produção de um resultado. Ferramenta: instrumento ou sistema automatizado para realizar alguma coisa. Procedimento: receita de combinação de ferramentas e técnicas. Paradigma: estilo de fazer algo, representa uma abordagem ou filosofia para a construção de software Ex.: um chefe de cozinha prepara um molho combinando ingredientes em uma ordem e momentos específicos. Ex.: máquina de escrever, tesoura. Ex.: plano de testes. Ex.: cozinha francesa, chinesa, orientado a objetos, procedural. Engenharia de software “Desenvolvimento de software com alta qualidade dentro de custos adequados” 13 O QUE É UM SOFTWARE? Todos os artefatos utilizados na produção e execução Programa, Dados, Documentos, Configuração, Sites, ou seja, todos os elementos necessários para que o software funcione. Genérico ou por encomenda O QUE É UM SOFTWARE? Detalhando os Elementos Especificação de Requisitos e do Projeto Especificação da Arquitetura Geral Elementos espeçificos Código fonte e código objeto Interface homem-máquina Documentação e manuais Planos de alterações Versões (projeto, fonte, e objeto) Plano de Testes Relatórios de erros Documentação de mudanças e manutenção Ferramentas envolvidas CARACTERÍSTICAS DO SOFTWARE Software é intangível e abstrato Não é limitado por materiais, controlado por leis da física ou processos de manufatura Não existe limitação física ou potencial para software. Difcil de Visualizar especialmente ao nível de código fonte A existência de senso comum é altamente dependente do domínio. 1 6 CARACTERÍSTICAS DO SOFTWARE (2) Software é desenvolvimento Produção? Fábricas de software desejam mudar este paradigma Atividade massivamente humana Tecnologias Métodos Forte influência da cultura Muita variação. Pode facilmente se tornar extremamente complexo e difícil de ser compreendido. Software Termo criado em 1967 Ciência relativamente nova Muito ainda a ser feito Como melhorar os modelos Compreender os limites das tecnologias Realizar e controlar os experimentos Complexidade de um Software Software de grande porte Envolve várias pessoas e diferentes papéis Torna-se uma entidade complexa que não pode ser facilmente entendida por um único indivíduo. O produto de software é normalmente descrito e desenvolvido de forma hierárquica. Sistemas são decompostos em subsistemas Subsistemas em novos subsistemas Etc. Engenheiro de software Alto poder de abstração e capacidade de navegação nesta hierarquia. Capaz de rapidamente navegar Atributos de um bom software • Facilidade de manutenção • permitir evoluções (as empresas são dinâmicas). • Confiança: confiabilidade, proteção e segurança • Não deve causar danos físicos ou econômicos no caso de falha do sistemas. • Eficiência: • não deve desperdiçar recursos do sistema. • Eficiência inclui tempo de resposta, tempo de processamento e utilização de memória. • Usabilidade: • usável, sem esforço excessivo. Apresentar boa interface com o usuário e documentação adequada. 2 0 Complexidade do Sofwtare Como Lidar? Conceitos importantes para lidar com as complexidades de sistemas de software: Programação estruturada simplicidade no fluxo de controle Modularidade Acoplamento (deve ser baixo) Coesão (deve ser alta) Encapsulamento (esconder detalhes internos) Componentização e reuso: uso de bibliotecas e ligadores Polimorfismo (tipos abstratos de dados) Herança (programação orientada a objetos) 2 2 Software é dividido em componentes Os componentes são nomeados e chamados de módulos Integra-se estes componentes para satisfazer os requisitos do sistema. Dividir para conquistar Cuidado: Dividir demais pode ser prejudicial Aumenta o número de módulos => aumenta o esforço de integração Modularidade (1) 2 3 Como saber se um módulo está no tamanho adequado? •Decompor o módulo de maneira que ele diminua a complexidade do problema. •Permitir que módulos possam ser integrados para serem reaproveitados. •Ser uma unidade autônoma. •Permitir a continuidade e reduzir efeitos colaterais. • É possível fazer evoluções localizadas. •Oferecer proteção. • Problemas devem ser contidos no módulo. Modularidade (2) 2 4Realizar uma única tarefa sem muito relacionamento com o mundo externo. Modularidade : Coesão 2 5 • Medida de interconexão entre os módulos. • Depende da complexidade de interação entre os módulos. Modularidade : acoplamento 2 6 Independência modular alta coesão e baixo acoplamento SITUAÇÃO IDEAL 2 7 Como saber se definimos os módulos corretos? •Definir módulos cuja função seja previsível: • caixas pretas. •Minimizar estrutura de alta convergência. •Não deixe que um módulo tenha muita influencia sobre outro. •Avaliar as interfaces para reduzir a complexidade. Modularidade (3) Ciclo de vida de um Software Um software possui um ciclo de vida. Começa desde os primeiros estágios de especificação, passa pela sua construção, manutenção e termina quando este édesativado. 2 8 Membros de uma equipe de desenvolvimento Os papéis da equipe de desenvolvimento Custos da Engenharia de Software 60 % no desenvolvimento 40% nos testes Custos de evolução (software de encomenda) excedem o custo do software 3 0 MÉTODO DE ENGENHARIA DE SOFTWARE Abordagem estruturação para o desenvolvimento de software. Incluem: • modelos de sistemas; • notações; • regras; • recomendações de projeto; • guias. 3 1 Engenharia de Software Ciência desenvolvimento de software em escala industrial e de forma profissional Objetivo desenvolver software em um tempo planejado com a qualidade, desempenhos e funcionalidades requeridas pelo CLIENTE Software em escala industrial Grande ou médio porte Envolvendo várias pessoas esforço de uma equipe e não de um só indivíduo Investimento financeiro do cliente Tempo de vida medido em anos Muitas linhas de código Milhares(???) Exige modificação e manutenção para atender as mudanças do dominio Desafios da Engenharia de Software • Heterogeneidade: • inclui execução em plataformas distintas, redes heterogêneas, sistemas legados. •Desenvolver técnicas para construção de software que seja flexível para adaptar-se a heterogeneidade • Entrega: •técnicas demandam tempo e são necessárias para obter qualidade • Confiança: • sistemas críticos, sistemas web, etc. 3 4 Disciplina de engenharia de software Noções fundamentais que formam a base de uma disciplina de engenharia de software efetiva (algumas) Abstração Métodos e notações de análise e projeto Protótipo da interface com o usuário Arquitetura de software Processo de software Reuso Medição Ferramentas e ambientes integrados
Compartilhar