Engenharia de Software Introdução Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O que é Software? • Há 20 anos, pouquíssima gente sabia explicar o que era software. • Hoje, praticamente todo mundo acha que sabe ... • Software não é só os programas! • A documentação necessária para instalar, usar, e manter os programas são uma parte integrante do software. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Algumas características do Software • O software é desenvolvido/projetado, ao invés de manufaturado/fabricado. • Software não se desgasta com o uso: não existem peças de reposição. • Software não pode ser visto ou tocado: para analisar o progresso de um projeto de software é preciso recorrer à sua documentação. • Grandes sistemas de software são normalmente desenvolvidos uma única vez. Assim, a experiência adquirida com outros projetos tem um valor limitado. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Algumas características do Software • A maioria dos softwares é feita sob medida (por encomenda), ao invés de ser montada a partir de componentes. – Produtos Genéricos: sistemas produzidos por uma organização e vendidos a todos os clientes que quiserem comprá-los. – Produtos Customizados: sistemas que são encomendados e desenvolvidos para um determinado cliente. – O maior gasto de software é em produtos genéricos, mas o maior esforço de desenvolvimento está nos produtos customizados. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Contexto • A economia de todos os países do mundo depende cada vez mais de software • Existem cada vez mais sistemas controlados por software. • Os gastos com desenvolvimento de software representam uma fração significativa do PIB de muitos países. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Contexto: primórdios • O desenvolvimento de software era puramente artesanal; • As pessoas desenvolvendo sistemas erravam constantemente nas suas estimativas de custo e tempo; • Os sistemas continham muitos erros; • Consertar erros geralmente produzia mais erros; • Tamanho dos sistemas crescendo consistentemente. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Contexto: Custo do Software • • • Custo do software geralmente domina o custo do desenvolvimento. Os custos do software de um PC são geralmente maiores do que do hardware Software custa mais para manter do que para desenvolver! Para sistemas com uma longa vida, os custos de manutenção são várias vezes maior do que o de desenvolvimento Engenharia de Software trata do desenvolvimento de software de forma eficaz Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Contexto: Custo do Software • A proporção dos custos com software e hardware mudou bastante ao longo do tempo: – Década de 60: 20% -- 80% – Década de 70: 50% -- 50% – Década de 90: 80% -- 20% Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Contexto: exemplos interessantes • Estudo feito em 1979 pelo governo dos Estados Unidos em relação ao software produzido: – 2% Funcionava; – 3% Funcionaria com poucas correções; – 45% Entregues mas nunca foram usados com sucesso; – 20% Usados, mas tremendamente modificados ou abandonados; – 30% Pagos, mas nunca foram terminados e/ou entregues. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software • O que é esta crise? • Métodos de desenvolvimento de software existentes não são bons o bastante para o desenvolvimento de software de grande porte. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: principais problemas • Os grandes softwares não funcionam adequadamente; • Os projetos de software estão sempre atrasados; • Os custos dos projetos de desenvolvimento de software são sempre maiores do que o previsto. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: principais problemas • Os computadores estão cada vez mais rápidos, sofisticados, e baratos; • Os softwares estão cada vez maiores e mais sofisticados, e a produtividade não acompanha a demanda; • Os custos com manutenção são muito altos: para sistemas com uma longa vida, eles são várias vezes maiores do que os custos de desenvolvimento. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: outras dificuldades • Dedica-se pouco tempo à coleta de dados (requisitos dos clientes): – Normalmente apenas um subconjunto das necessidades do cliente são levadas em conta ... – Os profissionais estão sempre com muita pressa para começar a programar ... Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: outras dificuldades • A qualidade geralmente é suspeita ... – Testes sistemáticos e tecnicamente completos raramente são feitos; – A flexibilidade da maioria dos softwares também é bastante limitada; – A concorrência com software barato, mas sem qualidade, feito por pessoas sem qualificação adequada é grande. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: outras dificuldades • Não há muito interesse em se gastar tempo para se entender mais a respeito de estimativas, produtividade, precisão e eficácia de novos métodos e novas ferramentas, etc. • A resistência a mudanças é grande ... Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho A Crise de Software: existe solução? • O uso de melhores técnicas, métodos, e ferramentas. • Mais treinamento e educação: – atualmente se investe muito pouco! Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições de Engenharia de Software • É uma disciplina que se preocupa com os problemas práticos inerentes ao desenvolvimento de sistemas. – Não é simplesmente programação; – Também não é só ciência da computação; – Uso de teorias (resultados), métodos, e ferramentas na resolução de problemas. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições de Engenharia de Software • É o estabelecimento e uso de sólidos princípios de engenharia visando obter economicamente um software que seja confiável e que funcione eficientemente em máquinas reais [Bauer69] • Engenharia de Software trata do desenvolvimento de software de forma eficaz. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições de Engenharia de Software • É a aplicação de ciência e matemática visando tornar as capacidades do equipamento úteis para o ser humano através de programas, procedimentos e documentação; • É a abordagem sistemática ao desenvolvimento, operação, manutenção, e aposentadoria de Software. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definições de Engenharia de Software • É a disciplina de engenharia que se preocupa com todos os aspectos da produção de software; • Os Engenheiros de Software devem adotar uma abordagem de trabalho sistemática e organizada e utilizar técnicas e ferramentas apropriadas, dependendo do problema a ser resolvido, das restrições do projeto e dos recursos disponíveis. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Características da Engenharia de Software • Engenharia de Software se refere a softwares desenvolvidos por grupos ao invés de indivíduos; • Engenharia de Software usa princípios de engenharia ao invés de arte, e • Engenharia de Software inclui tanto aspectos técnicos quanto não técnicos. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Características da Engenharia de Software • O principal objetivo da Engenharia de Software é produzir, a um custo baixo, software de qualidade. – Custo é fácil de ser medido. – Qualidade não é. • O processo de planejamento é crucial na engenharia de software. A implementação é só uma parte do processo. • A Engenharia de Software engloba todo o ciclo de vida do software (concepção, implementação, uso e manutenção). Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Características da Engenharia de Software • Alguns desafios: – Lidar com sistemas legados, heterogeneidade e prazos apertados – Sistemas legados: • Sistemas antigos e valiosos que devem ser mantidos ou melhorados – Heterogeneidade • Diversas tecnologias, hardware + firmware + software – Prazos apertados • Pressão para entregar o produto de forma cada vez mais rápida Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O que é Software de qualidade? • É software que “funciona” (é confiável): – ele não deve falhar mais do que o especificado na documentação. • É software que funciona de acordo com a sua especificação: – Mesmo software que aparentemente funciona pode não estar satisfazendo a sua especificação. • É software que é fácil de manter. – Código bem escrito – Documentação apropriada. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho O que é Software de qualidade? • É software que funciona de maneira eficiente. – Software mais eficiente não é necessariamente software que roda mais rápido ou que gasta menos memória/disco. – A complexidade do código e o custo também são fatores importantes. • É software que possui uma boa interface com o usuário: – Muitos softwares não funcionam direito porque são difíceis de usar. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Atributos dos produtos de Software • Manutenibilidade – • Dependenbilidade – • Software não deve causar prejuízo físico ou econômico no caso de uma falha Eficiência – • Deve ser possível para o software evoluir de forma a atender a requisitos que mudam Software não deve desperdiçar recursos do sistema Usabilidade – O software deve ter um interface de usuário adequada e ser documentado Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Importância das características do produto • • A importância relativa destas características depende do produto e do ambiente em que ele será usado Em alguns casos, alguns dos atributos podem ser mais importantes – • Em sistemas de segurança-critícos de tempo-real, os atributos chave podem ser dependenbilidade e eficiência Os custos tendem a aumentar exponencialmente se altos níveis de um atributo são necessários Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Custos da Eficiência Cost Ef ficiency Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software • • • • Propagam desinformação e confusão. No passado eram tomados como verdades absolutas. Ainda há resquícios: é difícil mudar hábitos antigos. Existem 3 tipos de mitos: – Do cliente – Administrativos, e – Do profissional. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos do cliente • Uma declaração geral dos objetivos é suficiente para começar a escrever os programas: podemos preencher os detalhes mais tarde. – Uma definição inicial ruim é a principal causa da maioria dos fracassos no desenvolvimento de software. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos do cliente • As necessidades do projeto mudam continuamente mas isto não é problema pois o software é flexível. – Os requisitos do software podem mudar, mas o custo da mudança varia bastante dependendo da fase em que ela ocorre: • Definição . . . . . . . . . . . . . . . . . x • Desenvolvimento . . . . . . . . . . 1.5x a 1.6x • Manutenção . . . . . . . . . . . . . . 60x a 100x Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos administrativos • Temos um manual de padrões e procedimentos para a construção de software: isto basta! – – – – O manual é usado? Os profissionais de software sabem que ele existe? Ele reflete as técnicas mais modernas? Ele é completo? Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos administrativos • Temos ferramentas de desenvolvimento de última geração pois compramos os computadores mais novos! – Em geral, ter ferramentas de auxílio ao desenvolvimento de software (ex. CASE) é mais importante do que ter a última geração em termos de hardware. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos administrativos • Estamos atrasados no prazo: podemos tirar o atraso colocando mais programadores no projeto. – Normalmente isto não funciona! – As novas pessoas precisam se integrar ao projeto ... Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos do profissional • Assim que escrevermos o programa e ele funcionar o nosso trabalho está terminado. – Em geral, mais de 70% de todo o esforço gasto num programa ou sistema ocorre depois que ele foi entregue ao cliente (manutenção). – Na maioria das vezes, quanto mais cedo se começa a escrever o código mais tempo se gastará para terminá-lo. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos do profissional • Enquanto o programa não estiver funcionando não há como avaliar a sua qualidade. – Revisões técnicas podem ser feitas desde o começo de um projeto e são uma das formas mais efetivas de garantia de qualidade de software. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Mitos do Software: mitos do profissional • A única coisa a ser entregue em um projeto bem sucedido é o programa funcionando. – O programa funcionando é só uma parte. – Uma boa documentação incluindo os requisitos, projeto das estruturas de dados, especificação de testes, etc. é o alicerce para um projeto bem sucedido e serve como guia de manutenção. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Responsabilidade e ética profissional • A Engenharia de Software envolve responsabilidades maiores do que a simples aplicação de habilidades técnicas • Engenheiros de Software devem se comportar de forma honesta e eticamente responsável se quiserem se tornar profissionais respeitados • Comportamento ético é mais do que simplesmente seguir a lei. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Aspectos da responsabilidade profissional • Confidencialidade – Os Engenheiros de Software devem respeitar a confidencialidade de seus empregadores e clientes, mesmo se não existir um acordo formal de confidencialidade. • Competência – Os Engenheiros de Software devem ser sinceros quanto ao seu nível de competência. Eles não devem aceitar tarefas que estão sabidamente além das suas competências. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Aspectos da responsabilidade profissional • Propriedade intelectual – Engenheiros de Software devem conhecer as leis de patentes e copyright. Eles devem ser cuidadosos para garantir que a propriedade intelectual de empregadores e clientes será respeitada. • Uso indevido do computador – Engenheiros de Software não devem usar suas habilidades técnicas para usar indevidamente computadores de outras pessoas. O uso indevido do computador vai desde coisas relativamente simples (jogar no computador da empresa, por exemplo) até situações extremamente sérias (disseminação de vírus). Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Dilemas éticos • Incompatibilidade entre seus princípios e as políticas da gerência. • O empregador age de forma não ética e libera um sistema crítico sem terminar os testes do sistema. • Participação no desenvolvimento de armas militares ou sistemas nucleares. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho