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ício da década de 60: O custo de hardware era o fator mais importante na automatização de tarefas; Software era uma arte: inexistência de sistematização na sua construção e documentação; Modelos e documentação técnica residiam somente na cabeça do desenvolvedor.
Histórico Entre 1965 a 1975: Desenvolvimento dos primeiros SGBD's; Surgimento do conceito de software como produto; Surgimento das empresas desenvolvedoras de software; Manutenção torna-se tarefa perigosa: CRISE DO SOFTWARE.
Histórico A partir daí... Disseminação das redes; Queda no preço do hardware; Aumento no poder de processamento e armazenamento dos computadores; Surgimento da Internet; E muito mais...
Histórico Habilidade em construir software deixa a desejar em relação ao potencial do hardware; A construção de software não é rápida o suficiente para atender as necessidades do mercado; A sociedade depende cada vez mais de software confiável; O esforço para construir software confiável e de qualidade é muito grande; O suporte aos programas existentes é pobre e de recursos inadequados.
Relatório do Caos A Crise do Software Relatório do 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
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.
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? Processo Jovem;
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.
Comparativo de Indicadores
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 de Software 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, peopleware e 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 ENGENHARIA DE SOFTWARE
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 nos atrasarmos no cronograma, podemos adicionar mais programadores e ficar em dia?” Realidade “Adicionar pessoas a um projeto de software atrasado atrasa-o ainda mais.”
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.
Mitos do Profissional “Quando escrevemos um programa e o fazemos funcionar, nosso trabalho está completo.” Realidade “Quanto mais cedo você começar a escrever código, mais vai demorar para acabar.” Entre 60% e 80% de todo o esforço despendido em software vai ser despendido depois de ele ser entregue ao cliente pela primeira vez.
Mitos do Profissional “Até que eu esteja com o programa ‘rodando’ não tenho como avaliar a sua qualidade.” Realidade E a revisão? Garantindo a qualidade em todas as etapas, o produto final não terá qualidade?
Mitos do Profissional “O único produto de trabalho que pode ser entregue para um projeto de software bem sucedido é o programa executável.” Realidade E a documentação?
Mitos do Profissional “A engenharia de software vai nos fazer criar documentação volumosa e desnecessária que certamente nos atrasará.” Realidade A ES não se relaciona à criação de documentos. Refere-se à criação de qualidade. Melhor qualidade leva à redução de re-trabalho. E menor re-trabalho resulta em tempos de entrega mais rápidos.