540 likes | 663 Views
Engenharia de Software. Professor Mário Dantas. Ementa da Disciplina. Processos Existentes; Ciclo de vida de desenvolvimento de software; Engenharia de Requisitos; Princípios e conceitos de análise e projeto; Métricas de software; Qualidade de software;
E N D
Engenharia de Software Professor Mário Dantas
Ementa da Disciplina • Processos Existentes; • Ciclo de vida de desenvolvimento de software; • Engenharia de Requisitos; • Princípios e conceitos de análise e projeto; • Métricas de software; • Qualidade de software; • Verificação, Validação e Teste de software; • Gerência de Configuração; • Ferramentas Case; • Ambientes de desenvolvimento de software; • Padrões de desenvolvimento; • Reuso; • Engenharia reversa e Reengenharia.
Bibliografia Básica • GUSTAFSON, D. Teoria e Problemas de Engenharia de Software, Bookman, 2003 (Coleção Schaum). • PAULA FILHO, W. de P. Engenharia de Software – Fundamentos, Métodos e Padrões. LTC, 2001 • PFLEEGER, Shari Lawrence. Engenharia de Software - Teoria e Prática, 2ª Edição, Makron Books, 2004. • PRESSMAN, R. S. Engenharia de Software, 6ª Edição, São Paulo: McGraw-Hill 2006. • SOMMERVILLE, Ian. Engenharia de Software, 6ª Edição, São Paulo: Addison-Wesley, 2003.
Bibliografia Complementar • CARVALHO, A.M.B.R. e CHIOSSI, T.C.S.Uma Introdução a Engenharia de Software. São Paulo: Editora da Unicamp, 2001. • McCONNELL, S. Code Complete: um Guia Completo para Construção de Software. Porto Alegre: Bookman, 2000. • REZENDE, D. A. Engenharia de Software e Sistemas de Informações. Brasport, 1999. • VAZQUEZ, C. E., SIMÕES, G. S., ALBERT, R. M. Análise de Pontos de Função. 1 ed., Érica, 2003.
Histórico • Até o iníciodadécada de 60: • O custo de hardware era o fatormaisimportantenaautomatização de tarefas; • Software era uma arte: inexistência de sistematizaçãonasuaconstrução e documentação; • Modelos e documentaçãotécnicaresidiamsomentenacabeça do desenvolvedor.
Histórico • Entre 1965 a 1975: • Desenvolvimento dos primeiros SGBD's; • Surgimento do conceito de software comoproduto; • Surgimento das empresasdesenvolvedoras de software; • Manutençãotorna-se tarefaperigosa: CRISE DO SOFTWARE.
Histórico • A partirdaí... • Disseminação das redes; • Queda no preço do hardware; • Aumento no poder de processamento e armazenamento dos computadores; • Surgimentoda Internet; • E muitomais...
Histórico • Habilidadeemconstruir software deixa a desejaremrelaçãoaopotencial do hardware; • A construção de software não é rápida o suficienteparaatender as necessidades do mercado; • A sociedadedependecadavezmais de software confiável; • O esforçoparaconstruir software confiável e de qualidade é muitogrande; • O suporteaosprogramasexistentes é pobre e de recursosinadequados.
Relatório do Caos • Relatóriodo Standish Group • Projetos construídos dentro do orçamento e no prazo: 16,2%; • Projetos cancelados: 31,1%; • Projetos concluídos atrasados ou fora do orçamento: 52,7%; A Crise do Software
A “crise do software” é caracterizada pela incapacidade da indústria de software de atender a demanda de mercado em entregar produtos dentro dos custos, prazos, qualidade e além de tudo, atendendo aos requisitos contratados. • Crise do Software
Falhas em Projetos de Software • Em 1992 e 1993, mais de 60% dos softwares nos EUA estavam atrasados e mais da metade ultrapassa em 50% o prazo planejado. • Em 1999, 37% dos projetos foram entregues no prazo, dos 63% que atrasaram, 42% ultrapassaram o orçamento.
Desenvolvimento de Software • Por que é tão difícil desenvolver software? • ProcessoJovem;
Conceitos iniciais • Informática: Ciência que tem como objetivo o tratamento da informação através do uso de equipamentos e procedimentos da área de processamento de dados; • Ciência: Conjunto organizado de conhecimentos relativos a determinado objeto (assunto ou tema), especialmente os obtidos mediante a observação, a experiência dos fatos e um métodos próprio;
Conceitos iniciais • Processamento de Dados: Tratamento dos dados por meio de máquinas, com o fim de obter como resultado informação a partir dos dados; • Engenharia: Arte de aplicar conhecimentos científicos e empíricos e certas habilitações específicas à criação de estruturas, dispositivos e processos que se utilizam para converter recursos (hardware e software configurados e programados) em formas adequadas ao atendimento das necessidades humanas.
Engenharia de Software “É a aplicação de uma abordagem sistemática, disciplinada e mensurável ao desenvolvimento, à operação e à manutenção de software” IEEE (Institute of Eletric and Eletronic Engineers)
Objetivos Gerais • Qualidade (adequação às necessidades) • Produtividade (agilidade para construção e manutenção) • Controle (qualidade, prazos e custos)
Cenário • Gasta-se mais na manutenção do software, mas ainda documenta-se pouco (e mal) os produtos e projetos de software. • 55% dos defeitos são inseridos durante a análise de requisitos, mas apenas 18% desses defeitos são localizados nessa fase.
Outros Motivadores • As economias de todos os países (e organizações), em maior ou menor grau, são dependentes de software; • Mais e mais sistemas são controlados por software (“computação invisível”); • As despesas com software representam uma fração significativa do PIB dos países e mundial.
Custo de Software • Geralmente domina o custo total dos sistemas: o custo de software em um PC geralmente é maior que o custo de hardware. • Custa mais para ser mantido do que para ser desenvolvido. • Quando o ciclo de vida é longo, o custo de manutenção é muitas vezes superior ao custo de desenvolvimento.
Custo de Software A Engenharia de Software preocupa-se com o custo efetivo do desenvolvimento, operação e da manutenção de Software.
Software • Processo jovem; • Quando falham: consertados; • Falhas ignoradas, amenizadas, racionalizadas; • Erros continuam sendo cometidos; • Problemas de escopo; • Solicitações de mudanças pelo contratante; • Concluídos fora dos prazos e custos; • Quando entregues não atendem a expectativas do cliente.
Questões freqüentes sobre Engenharia de Software • O que é Software? • O que é Engenharia de Software? • Qual é a diferença entre Engenharia de Software e Ciência da Computação? • Qual é a diferença entre Engenharia de Software e Engenharia de Sistemas? • O que é Processo de Software? • O que é Modelo de Processo de Software? • O que são Métodos da Engenharia de Software? • Quais são os Custos da Engenharia de Software? • O que é CASE (Computer-Aided Software Engineering)? • Quais os atributos de um bom software? • Quais os desafios chave enfrentados pela Engenharia de Software?
O que é software? • Programas de computador e toda a documentação a eles associada (diferente de programa isolado para realização de testes computacionais e sem orientação sistêmica). • Produtos de software podem ser: • Desenvolvidos para um cliente em particular (personalizados) • Desenvolvidos para o mercado em geral (genéricos) • Oferecidos na forma de serviços
Características • O software é desenvolvido e passa por um processo de engenharia; • Software não “se desgasta”; • Os produtos de software podem ser desenvolvidos para um cliente específico ou para um mercado geral; • A maior parte dos softwares continua a ser construída sob encomenda.
Tipos • Software de aplicação • Software científico • Software embutido • Software para linhas de produto • Aplicações Web • Computação ubíqua • Software aberto
O que é Engenharia de Software? • É a engenharia que se ocupa dos aspectos da produção e da manutenção de software. • Produz as especificações para a criação dos programas que compõem o software. • Tem engenheiros de software como protagonistas. • Os engenheiros de software devem adotar uma abordagem sistemática e organizada ao seu trabalho e devem usar ferramentas e técnicas apropriadas, dependendo do problema a ser resolvido, das restrições e dos recursos disponíveis (premissas).
Qual é a diferença entre Engenharia deSoftware e Ciência da Computação? • Ciência da Computação se ocupa da teoria e dos fundamentos (algoritmos, estruturas de dados, etc.), tendo base abstrata; • Engenharia de Software se ocupa das práticas para desenvolver e entregar software de qualidade, valendo-se de conhecimentos científicos e empíricos e da aplicações de habilidades específicas. • As teorias da Ciência da Computação são insuficientes para atuar como suporte completo à Engenharia de Software. • São complementares, pois a segunda fornece infraestrutura de software para que a primeira se ocupe da solução de problemas complexos de alto nível que requerem uma solução baseada em software.
Qual é a diferença entre Engenharia de Software e Engenharia de Sistemas? • Engenharia de Sistemas se ocupa de todos os aspectos do desenvolvimento de sistemas (na disciplina em estudo, os sistemas baseados em computadores), incluindo hardware, software, peoplewaree processos de negócio. • Engenheiros de Sistemas cuidam da especificação, desenho arquitetônico, integração e desenvolvimento de sistemas complexos. • A Engenharia de Sistemas é anterior a Engenharia de Software e, na maioria dos casos, essencial ao sucesso desta. Conhecimento de Ciência da Computação é essencial para os engenheiros de software
O que é processo (metodologia de desenvolvimento) de software? • É um conjunto de atividades cujo objetivo é desenvolver e/ou evoluir um produto de software. • Atividades que fazem parte de todos os processos (de desenvolvimento) de software: • Especificação – o que o sistema deve fazer e quais as suas restrições (requisitos funcionais e não-funcionais). • Construção – produção de um software. • Validação – verificar que o software é o que o cliente deseja. • Evolução – modificar o software em resposta às novas demandas. • Define o ciclo de vida (fases) de um software, usando modelos de processos de software e métodos (paradigmas). • Trata-se da metodologia para desenvolver software. • É uma abstração que se concretiza em projetos de software.
O que é um modelo de processo de software? • Uma representação simplificada e abstrata de um processo de software, que pode ser apresentada a partir de perspectivas. • Exemplos de perspectivas (visões) de processo são: • Workflow (fluxo de trabalho) – seqüência de atividades • Data-flow (fluxo de dados) – fluxo de informações • Role/Action (papeis e ações) – quem faz o quê • Exemplos de Modelos de Processos Abstratos são: • Cascata • Evolucionário • Iterativo (Espiral, Incremental) • Integração a partir de componentes reutilizáveis • Prototipagem Evolutiva (Metodologias Ágeis) • Entrega Evolutiva (Cascata + Prototipagem Evolutiva)
O que são métodos de engenharia de software? • Descrevem modelos, gráficos, diagramas, notações, regras, restrições e práticas de desenho (Notação) • Orientam o processo, recomendando práticas mais adequadas e atividades a serem seguidas • Os métodos podem ser: • Estruturados • Orientados a Dados • Orientados a Objetos • Baseados em Protótipos
Quais os custos da Engenharia de Software? • Grande parte dos custos do processo de software estão concentrados na engenharia (entendimento do problema, desenho e arquitetura da solução e especificação dos programas). • Os custos variam em função do tipo de sistema que está sendo desenvolvido, dos requisitos (funcionais) e dos requisitos de performance e nível de disponibilidade (requisitos não funcionais). • Os custos de distribuição dependem do modelo de processo de desenvolvimento usado (complexidade da gerência de configuração).
Quais os custos da Engenharia de Software? • O processo de engenharia de software em si, assim como qualquer processo de gestão e planejamento, tem um custo e é importante que os stakeholders estejam a par deles. • É papel do engenheiro de software demonstrar a relação entre os custos incorridos e os benefícios auferidos, com base em fatos concretos.
O que é CASE (Computer-Aided Software Engineering)? • Sistemas de Software que servem para dar suporte automatizado às atividades do processo. Ferramentas CASE devem ser usadas. • Upper-CASE • Ferramentas para suportar as atividades desde o início do processo, incluindo requisitos e desenho (Judy, DB Designer, Power Design, Rational Rose). • Lower-CASE • Ferramentas para suportar as atividades finais como programação, depuração e teste de programas (Netbeans, Eclipse, Ant, JUnit).
Quais os atributos de um bom software? • O software deve fornecer as funcionalidades requeridas e atender aos requisitos não funcionais de performance, segurança, confiabilidade, usabilidade, manutenibilidade, entre outros. • Manutenibilidade • Deve poder ser alterado para atender as mudanças de necessidades. • Segurança e Confiabilidade • O sistema do qual faz parte deve ser confiável e seguro física e logicamente. • Eficiência • Não deve desperdiçar recursos do sistema. • Usabilidade e Acessibilidade • Deve ser de fácil utilização para os usuários para os quais foi desenhado e proporcionar acesso universal.
Quais os grandes desafios da engenharia de software? • Lidar com sistemas legados, com grande diversidade de tecnologias, menores tempos de entrega e manutenção. • Sistemas Legados • Antigos, mas ainda úteis, são os sistemas que devem ser mantidos e aprimorados • Heterogeneidade • Os sistemas são distribuídos para várias plataformas e incluem uma composição de hardware e software básico. • Tempo • Existe forte e crescente pressão para uma entrega mais rápida, quase sempre, com clientes subestimando a complexidade. • Manutenção • Os reparos em software são geralmente mais complicados que os reparos em hardware (faltam documentação e boas práticas).
Síntese • Engenharia de Software ocupa-se de todos os aspectos da produção de software. • Produtos de software consistem de programas (desenvolvidos sob encomenda ou não) e toda a documentação associada. • Características essenciais são manutenibilidade, segurança e confiabilidade, eficiência e usabilidade.
Síntese • O processo de software (ou metodologia) consiste em atividades que fazem parte do desenvolvimento de produtos de software. As atividades básicas são: especificação e análise, desenho e construção, teste e validação e evolução. Exemplos: RUP, PRAXIS, Processo Unificado, eXtreme Programming – XP, METODES.
Síntese • Métodos são maneiras organizadas de produzir software. Incluem sugestões a serem seguidas, notações, regras e modelos, orientando o processo de desenvolvimento. Exemplos: Estruturado, Orientado a Dados, Orientado a Objetos, Baseado em Protótipos.
Síntese • Ferramentas CASE são sistemas de software desenhados para dar suporte a atividades do processo de software como: organização de requisitos, produção e consistência de diagramas, rastreamento, codificação e teste de programas.
Síntese • Os Engenheiros de Software devem ir além dos aspectos técnicos, pois, como nos ensina a Teoria Geral de Sistemas, os sistemas são abertos, influenciando e sendo influenciados pelo meio onde estão inseridos. • Software é elemento chave para o sucesso, mas software não é fácil e demanda gerenciamento de projeto eficaz...
Mitos da Gerência • Mito • “Já temos um livro que está cheio de padrões e procedimentos para elaborar o software. Isso não fornece ao meu pessoal tudo que ele precisa saber?”
Mitos da Gerência • Realidade • O livro é usado? Os profissionais sabem da sua existência? Ele reflete as práticas modernas da ES? É Completo? Adaptável? Melhora o prazo de entrega mantendo o foco na qualidade?
Mitos da Gerência • “Se nosatrasarmos no cronograma, podemosadicionarmaisprogramadores e ficaremdia?” • Realidade • “Adicionarpessoas a um projeto de software atrasadoatrasa-o aindamais.”
Mitos da Gerência • “Se eu decidir terceirizar um projeto de software vou poder relaxar e deixar que aquela firma o elabore?” • Realidade • Se uma empresa não sabe como gerir e controlar projetos de software internamente, certamente terá problemas quando terceirizar esses projetos.
Mitos do Cliente • “O estabelecimento geral dos objetivos é suficiente para iniciar a escrita de programas – podemos fornecer os detalhes posteriormente?” • Realidade • Uma descrição formal e detalhada do domínio da informação, da função, do comportamento, do desempenho, das interfaces, das restrições de projeto e dos critérios de validação é ESSENCIAL.
Mitos da Gerência • “Os requisitos de projeto mudam continuamente, mas as mudanças podem ser facilmente acomodadas porque o software é flexível.” • Realidade • O impacto da mudança varia com a época em que é introduzida.