Professor Roberto Nunes FUNDAMENTOS DA ENGENHARIA DE SOFTWARE
Visão geral da Engenharia de Software Engenharia (do latim ingeniu = “ faculdade inventiva , talento”) é a arte, a ciência e a técnica de bem conjugar os conhecimentos especializados ( científicos) de uma dada área do saber com a sua viabilidade técnico-econômica , para produzir novas utilidades e/ ou transformar a natureza, em conformidade com ideias bem planejadas. Pense em um mundo sem eletrônica. Difícil, não é mesmo? Pois saiba que a grande maioria desses produtos são desenvolvidos com o conhecimento que teremos nesta disciplina . O software envolve não somente o conjunto de programas ou código fonte da aplicação, mas também toda documentação associada gerada durante o processo de desenvolvimento .
Visão geral da Engenharia de Software Há décadas, aplicações de software participam da realização e controle de praticamente todas as atividades na nossa volta. O inesgotável avanço da tecnologia e o aumento constante da exigência dos usuários fazem com que sistemas computacionais se tornem cada vez mais complexos . Neste contexto, o desenvolvimento e construção de sistemas que atendam a estas demandas se tornam um desafio cada vez mais difícil de ser alcançado. A Engenharia de Software é uma área da Ciência da Computação relativamente nova , que surgiu para auxiliar neste processo, visando o desenvolvimento de produtos de software com uma boa relação entre custo e beneficio
Visão geral da Engenharia de Software A Engenharia de Software pode ser definida como uma disciplina que utiliza um conjunto de métodos, técnicas e ferramentas para analisar, projetar e gerenciar o desenvolvimento e manutenção de software, visando produzir e manter software dentro de prazos, custos e qualidade estimados . Estes objetivos são alcançados através de uma abordagem sistemática para o desenvolvimento, operação e descarte de software, aplicando a prática de conhecimento científico ao projeto e construção de software. Esta abordagem tem sua origem nos princípios propiciados pela engenharia tradicional.
Visão geral da Engenharia de Software A Engenharia de Software objetiva o aumento da qualidade do software, visando paralelamente uma maior produtividade da equipe envolvida nas atividades de desenvolvimento e atingindo uma maior satisfação por parte dos clientes . A Engenharia de Software surgiu no contexto da chamada Crise do Software quando, a partir do avanço tecnológico e a consequente redução de custos na aquisição de computadores domésticos, houve um aumento na demanda de software para um mercado profissional que não estava preparado para atender a essa nova realidade.
Visão geral da Engenharia de Software Esta crise teve lugar na década dos 70´s, e foi constatada por um gargalo no processo de desenvolvimento de software, onde a oferta de mão de obra capacitada não conseguia atender à demanda. Algumas consequências deste processo foram : Custos elevados ; Atrasos na entrega; Baixa confiabilidade e corretude do produto; Dificuldade de medição; Gerência do desenvolvimento ineficaz; Alta demanda não atendida; Difícil manutenção do software existente.
Visão geral da Engenharia de Software Na busca por soluções às demandas, pesquisadores, desenvolvedores e demais profissionais se reuniram na Conferência sobre Engenharia de Software da OTAN (Organização do Tratado do Atlântico Norte), em 1968, onde o conceito e atribuições da Engenharia de Software foram oficialmente estabelecidos. A criação desta nova área surgiu em uma tentativa de contornar a crise do software e dar um tratamento de engenharia (mais sistemático e controlado ) ao desenvolvimento de sistemas de software complexos . Um sistema de software complexo se caracteriza por um conjunto de componentes de software abstratos (estruturas de dados e algoritmos) encapsulados na forma de procedimentos, funções, módulos, objetos ou agentes e interconectados entre si, que deverão ser executados em sistemas computacionais. O conjunto destes componentes e suas interconexões determina a arquitetura do software.
Evolução do Software (1950 - 1965) O hardware sofreu contínuas mudanças O software era uma arte " secundária“ para a qual havia poucos métodos sistemáticos O hardware era de propósito geral O software era específico para cada aplicação Não havia documentação
Evolução do Software (1965 - 1975) Multiprogramação e sistemas multiusuários Sistemas de tempo real 1a geração de SGBD’s Produto de software - software houses Bibliotecas de software Cresce o número de sistemas baseado em computador Manutenção quase impossível ..... CRISE DE SOFTWARE
Evolução do Software (1975 - 2005 ) Sistemas distribuídos Redes locais e globais Uso generalizado de microprocessadores produtos inteligentes Hardware de baixo custo Impacto de consumo
Evolução do Software Atualmente Tecnologias orientadas o objetos Sistemas especialistas e software de inteligência artificial usados na prática Software de rede neural artificial Computação paralela Várias outras tecnologias
Processo de Software É um conjunto de atividades e resultados que geram um produto de software Ha 4 atividades fundamentais – comuns a todos os processos de software 1 . Especificação: definição das funcionalidades e restrições 2 . Desenvolvimento: o software deve ser produzido de forma a atender as especificações 3 . Validação: garantia de que o software faz o que o cliente deseja 4 . Evolução: o software deve evoluir para atender as necessidades mutáveis dos clientes Diferentes organizações podem utilizar processos diferentes para produzir o mesmo tipo de produto
Processo de Software É uma representação simplificada de um processo de software , apresentada a partir de uma perspectiva especifica. Um modelo de processo de software define a sequencia em que as atividades do processo serão realizadas Exemplos de Modelos de Processo de Software – Modelo em Cascata (Ciclo de Vida Clássico) – Desenvolvimento Formal (Transformação formal) – Desenvolvimento Evolucionário – Desenvolvimento Orientado a Reuso ( Montagem de um sistema a partir de componentes reutilizáveis)
Engenharia de Software baseada em componentes Baseia-se na existência de um numero significativo de componentes reutilizáveis O processo de desenvolvimento de sistemas se concentra na integração desses componentes em um sistema, em vez de partir do zero Desenvolvimento Baseado em Componentes
Custos da Engenharia de Software A distribuição dos custos ao longo do processo de software depende do modelo de processo utilizado e do tipo de software que esta sendo desenvolvido Aproximadamente 60% dos custos são relacionados ao desenvolvimento e 40% são referentes aos testes para software personalizado (com um longo ciclo de duração), os custos de evolução normalmente excedem os custos de desenvolvimento Software genérico → normalmente tem custo de especificação baixo, porem devem ser extensivamente testados
Métodos da Engenharia de Software Baseiam-se na ideia de desenvolver modelos de um sistema que possam ser representados graficamente e de utilizar esses modelos como uma especificação ou projeto de software Métodos Analise Estruturada Orientados a Objetos (UML – Unified Modeling Language – Linguagem de Modelagem Unificada)
Ferramenta CASE (Computer-Aided Software Engineering) É um software destinado a proporcionar apoio automatizado as atividades de processo de software , como a analise de requisitos, modelagem do sistema, depuração e testes Alguns exemplos de ferramentas CASE RequisitePro DrCase Rational Rose Astah
Quais são os principais desafios enfrentados pela engenharia de software? Desafio da heterogeneidade desenvolver técnicas para construir softwares confiáveis, que sejam flexíveis para atender diferentes tipos de computadores e diferentes sistemas de apoio Desafio da entrega reduzir tempo para entrega de sistemas grandes e complexos, sem comprometer a qualidade Desafio da confiança desenvolver técnicas que demonstrem que o software pode ter a confiança dos seus usuários
A prática da Engenharia de Software A essência da pratica: Compreenda o problema Planeje a solução Execute Monitore Examine o resultado
A prática da Engenharia de Software Princípios gerais (1 ) A razão de existir → usuário e suas demandas (2 ) KISS ( Keep It Simple, Stupid! ) → o ótimo é inimigo do bom! (3 ) Mantenha a visão → foco no escopo do projeto e preserve a convergência dos artefatos ( 4) O que um produz, outros consomem (5 ) Pensem no futuro → software não e produto perecível! (6 ) Planeje , reutilize (7 ) Pense antes de agir
Mitos relativos ao Software Mitos de gerenciamento: Já temos um livro sobre padrões e procedimentos → isso supre meu pessoal do que eles precisam saber Se o cronograma atrasar, poderemos acrescentar mais programadores e ficamos em dia → horda mongol Se eu decidir terceirizar o projeto de software , posso simplesmente relaxar e deixar essa empresa realiza-lo
Mitos relativos ao Software Mitos dos Clientes: Uma definição geral dos objetivos e suficiente para começar a escrever os programas → podemos preencher detalhes posteriormente Os requisitos de software mudam continuamente, mas as mudanças podem ser facilmente
Mitos relativos ao Software Mitos dos Clientes: Uma vez desenvolvido o software e colocado em uso , nosso trabalho esta terminado Até que o software entre em operação, não há maneira de avaliar sua qualidade O único produto passível de entrega e código executável A engenharia de software nos fará criar documentação volumosa e desnecessária, e invariavelmente , produzira atraso no cronograma
Os profissionais da Engenharia de Software Analista de Negócios Analista de Sistemas Programador / Analista de Desenvolvimento Analista de Testes Analista de Qualidade Analista de Suporte / Analista de infraestrutura Administrador de Banco de Dados Administrador de Rede Gerente de Projeto
Referências PRESMANN, R. Engenharia de Software : uma abordagem profissional. 7. ed. Rio de Janeiro : Mc Graw Hill, 2011. Cap. 1 SOMMERVILLE , I. Engenharia de Software . 8. ed . Rio de Janeiro: Pearson, 2007. Cap. 1 e 2 .