Conteúdo programático Engenharia de Software Unidade I Visão Geral Prof. Francisco Gerson A. de Meneses O que é Produtos de Software Distribuição de Software Um sistema de Software O software em um cenário problemático O que fazer? franciscogerson10@gmail.com O que é Um sistema de Software Software não é apenas o programa, são os programas de computador com sua documentação associada e os dados de configuração necessários para fazer com que esses programas operem corretamente. Um sistema de software, usualmente, consiste em: uma série de programas separados, arquivos de configuração que são usados para configurar esses programas, documentação do sistema, que descreve a estrutura desse sistema, documentação do usuário, que explica como utilizar o sistema, e em alguns casos sites Web para que os usuários possam fazer download das informações recentes do produto. Produtos de Software Há dois tipos de produtos de software: Os desenvolvidos para o mercado (produtos genéricos). Ex.: O pacote MS Office, SGBD s (Sistemas Gerenciadores de Bancos de Dados). Os desenvolvidos para um cliente específico (produtos sob encomenda ou personalizados) Ex: Programas de Controle de Estoque ou para Controle de Vendas em uma determinada Loja, Sistema para um determinado Supermercado. Não há um consenso sobre as categorias genéricas que poderiam ser aplicadas para enquadrar os softwares que são desenvolvidos; porém pode-se atribuir uma classificação conjugando-se o ambiente e a finalidade para os quais se destina. Além dos softwares: Básicos (Sistemas Operacionais), Aplicativos (Funcionalidades aos usuários) e Utilitários (Manutenção e preservação dos dados) Podemos destacar:
Software embutido: pode assumir características de software básico, software aplicativo ou ambos simultaneamente. Em geral o software embutido cuida de toda a operacionalidade de um dispositivo e reside em uma memória só de leitura (read-only). Tais dispositivos vão desde um simples relógio de pulso, um palm, chips com funções de controle em automóveis, celulares, fornos de microondas etc. Software de tempo real (real time): Refere-se ao imediatismo de resposta decorrente de sua atividade de monitoração, análise ou controle, que tanto pode ser parte de um software básico quanto aplicativo. Software inteligente : Refere-se ao uso de algoritmos e recursos oriundos da área da Inteligência Artificial, que favorecem funções que são direcionadas para a solução de problemas específicos. Software especialista: Refere-se ao software especialmente desenvolvido para uma área do conhecimento, ou negócio restrito, onde exige-se alto grau de especialização, funcionando, inclusive, como um assistente técnico no auxílio ao usuário. Quando incorporam softwares inteligentes, pode-se dizer que se trata da inteligência aplicada a uma especialidade. Distribuição de Software Software comercial Software shareware Software livre (Free Software) Software gratuito (Freeware) Segundo definição do SEI (Software Engineering Institute): Engenharia é a aplicação sistemática do conhecimento cientifico na criação e construção de soluções para problemas práticos a serviço do gênero humano. Engenharia de Software é uma forma de engenharia que aplica os princípios da ciência da computação e matemática para alcançar soluções com melhor custo-benefício para o problema do software. (SEI, 1990). Para o IEEE (Institute of Electrical and Electronic Engineers): Engenharia de Software trata-se da aplicação sistemática, disciplinada, quantificável para o desenvolvimento, operação e manutenção do software. (IEEE, 1990). A atividade de engenharia não pode prescindir da garantia da qualidade do produto, da conformidade às normas, e do planejamento e gerenciamento de custos e prazos. O Software como fruto da engenharia é o grande objetivo que se busca, a fim de conseguir obter-se um produto confiável, funcionando de maneira eficiente e economicamente viável. Por funcionamento eficiente deve-se considerar que o software deverá atender às necessidades do usuário, SOB A ÓTICA DELE.
Os fundamentos científicos para a engenharia de software envolvem o uso de modelos abstratos e precisos que permitem ao engenheiro especificar, projetar, implementar e manter sistemas de software, avaliando e garantindo sua qualidade. A engenharia de software deve oferecer mecanismos para se planejar e gerenciar o processo de desenvolvimento. A partir da década de 1960: Aumento da demanda pela criação de software motivados por: a acentuada quebra da hegemonia da aplicação de computadores nas áreas militares e acadêmicas, ascensão da aplicação na indústria, o surgimento de novas linguagens de programação (COBOL, por exemplo), O desenvolvimento de software ocorria de maneira informal, sem a aplicação de qualquer método. O desenvolvimento de software dependia totalmente de quem o construía, caracterizando-se mais por uma obra de arte do que propriamente um produto de formalismo técnico. Os profissionais que desenvolviam o software, por sua vez, estavam envolvidos com a realidade da tecnologia em si e não propriamente com os problemas que deveriam ser resolvidos. Haviam características do hardware que mereciam muita atenção nos projetos a serem desenvolvidos e, não raramente, eram restritivas, especialmente aquelas pertinentes ao dimensionamento de recursos, já que o hardware era o item de maior custo. À medida que tais softwares eram desenvolvidos e crescia o número de sistemas baseados em computadores, passou-se a verificar que os desenvolvimentos eram marcados por: atrasos e falhas na maioria dos projetos que resultavam em metas não atingidas, custos imprevisíveis e sistemas de difícil manutenção. Em 1968, constatada a situação caótica em que se encontrava o desenvolvimento de software, que ficou conhecida como a crise do software, foi realizada na Alemanha, uma conferência internacional como uma tentativa de se encontrar caminhos que viessem a melhorar o desenvolvimento de software. A conferência foi promovida pelo grupo de estudo em ciência da computação, do comitê de ciências da OTAN, figurando como principal organizador o Professor Fritz Bauer, que escolheu deliberadamente para título da conferência a frase Engenharia de Software, por ser provocativa, implicando a necessidade de um software que fosse concebido sobre critérios, que tivesse fundamentações teóricas, por meio de práticas disciplinadas, ou seja, que fosse criado segundo processos formais de engenharia. A partir de então passou-se a criar uma consciência da urgência de padrões e deu-se então o surgimento de alguns modelos ao longo do tempo, como os conhecidos: Modelo Estruturado Modelo Essencial Modelo Orientado a Objetos Embora se tenha caminhado muito, sob o ponto de vista das padronizações e conseqüentes vantagens oferecidas pelo conceito de engenharia, o que falta, ainda, efetivamente, é que se pratique o que se prega.
O software em um cenário problemático Os modelos criados vivem um processo constante de maturação adequando-se a novas realidades dos negócios. Assim o que falta é simplesmente colocar algum método em prática e, definitivamente, abandonar o descaso do desenvolvimento anárquico e suas conseqüências. (TONSIG, 2008). É ainda mais freqüente do que se imagina a presença de desenvolvedores entregando aos seus clientes, softwares sem qualidade: Mal estruturados, Consumidores de recursos de máquina, Que não atendem completamente às necessidades reais dos usuários, Atrasos na entrega, quer seja um novo desenvolvimento ou customizações, Com custos elevados, Não utilizam qualquer tipo de método formal na gestão do projeto e documentação do produto. O software em um cenário problemático O que fazer? O aumento do grau de complexidade dos softwares: normalmente tratam uma gama muito grande de variáveis, são intervenientes nos processos automatizados, clientes cada vez mais exigentes. portanto, é fator fundamental o planejamento, como parte integrante da aplicação de um modelo de desenvolvimento. Os paradigmas de engenharia de software propiciam métodos e técnicas que mostram exatamente como deve-se proceder para construir software. Por método pode-se entender um caminho a ser percorrido em etapas, onde se aplica um conjunto de técnicas, o que permitirá a construção de um software eficiente e seguro. Decorrentes de aprimoramento das melhores práticas, hoje existem vários métodos para o desenvolvimento de software. O objetivo básico do estabelecimento de um método padronizado de desenvolvimento de sistemas é obter: maior consistência no trabalho, trabalho sistematizado, padronização de documentos e linguagens, melhor qualidade oferecida ao usuário, maior facilidade de treinamento de novos analistas, melhor controle dos resultados obtidos, maximização dos resultados. Ainda sobre o método, para Roger Pressman (Pressman 1995), Os métodos envolvem um amplo conjunto de tarefas que incluem: planejamento e estimativa de projeto, análise de requisitos de software e de sistemas, projeto da estrutura de dados, arquitetura de programa e algoritmo de processamento, codificação, teste manutenção.
Exercício Assim como um engenheiro civil ou um médico seguem determinados procedimentos diante de diversas situações quanto às suas atividades profissionais, também um desenvolvedor de software deve seguir procedimentos na construção de um sistema de informação. Se tais procedimentos não existirem, a construção de software estará ligada ao caos; portanto, um método visa proporcionar procedimentos a serem seguidos em cada etapa do desenvolvimento de um software. Para cada etapa de um determinado método aplicam-se uma ou várias técnicas. 1. Formule um conceito para software? 2. Explique os tipos de produtos de software? 3. Liste as categorias de software e comente cada uma? 4. Diferencie software livres de softwares gratuitos 5. Formule um conceito para Engenharia de 6. O que motivou o surgimento da Engenharia de 7. Quais os problemas mais comuns, ainda existentes, na produção de software? 8. Quais os objetivos básicos do estabelecimento de métodos padronizados no desenvolvimento de sistemas? 9. Os métodos envolvem um amplo conjunto de tarefas que incluem várias atividades, cite-as: 10.Quais as vantagens de se aplicar os conceitos da Engenharia de Bibliografia TONSIG, S. L. Engenharia de Software Análise e Projeto de Sistemas. Editora Ciência Moderna, 2ª Edição, 2008. SOMMERVILLE, Ian. Engenharia de Software. São Paulo: Addison-Wesley, 6ª Edição, 2003. PRESSMAN, Roger S. Engenharia de Software. Rio de Janeiro: McGraw-Hill, 2007. Notas de aula