Engenharia de Software Respostas do Questionário 01 Engenharia de Software As economias de todos os países desenvolvidos são dependentes de software. Mais e mais sistemas são controlados por software. Engenharia de software preocupa-se com as teorias, modelos, métodos, processos e ferramentas para os desenvolvedores de software. As despesas com software representam uma fração significativa do PIB em todos os países desenvolvidos. Custo de Software O custo de software geralmente domina o custo dos sistemas e o custo de software em um PC geralmente são maiores que o custo de hardware. Software custa mais para ser mantido do que para ser desenvolvido. Para sistemas com um ciclo de vida longo, o custo de manutenção é muitas vezes superior ao custo de desenvolvimento. A engenharia de software preocupa-se com o custo efetivo do desenvolvimento de software. Questões freqüentes sobre engenharia de software 1. O que é software? 2. O que é engenharia de software? 3. Qual é a diferença entre engenharia de software e ciência da computação? 4. Qual é a diferença entre engenharia de software e engenharia de sistemas? 5. O que é processo de software? 6. O que é modelo de processo de software? 7. O que são métodos da engenharia de software? 8. Quais são os custos da engenharia de software? 9. O que é Ferramenta CASE (Computer-Aided Software Engineering)? 10. Quais os atributos de um bom software? 11. Quais os desafios chave enfrentados pela engenharia de software? 1. O que é software? Programas de computador e toda a documentação a eles associada. Produtos de software podem ser desenvolvidos para um cliente em particular (personalizados) ou podem ser desenvolvidos para o mercado em geral (genéricos). 2. O que é engenharia de software? É uma disciplina da engenharia que se ocupa de todos os aspectos da produção e da manutenção de 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). 3. 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; engenharia de software se ocupa das práticas para desenvolver e entregar software de qualidade. As teorias da Ciência da Computação são insuficientes para atuar como suporte completo à Engenharia de Software. São complementares, pois a primeira fornece infraestrutura de software para que a segunda se ocupe da solução de problemas complexos de alto nível que requerem uma solução baseada em software. 4. Qual é a diferença entre engenharia de software e engenharia de sistemas? Engenharia de Sistemas (suportados por computador) se ocupa de todos os aspectos do desenvolvimento de sistemas baseados em computadores, incluindo hardware, software, peopleware e o processo de engenharia. Engenheiros de Sistemas cuidam da especificação, desenho arquitetônico, integração e desenvolvimento de sistemas. A Engenharia de Sistemas é anterior a Engenharia de Software. 5. O que é processo de software? É um conjunto de atividades cujo objetivo é desenvolver ou evoluir um produto de software. Atividades que fazem parte de todos os processos (de desenvolvimento) de software: • • • • Especificação – o que o sistemas deve fazer e quais as suas restrições (requisitos). Desenvolvimento – 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 e métodos de software. Trata-se de uma metodologia para desenvolver software. Exemplos de Processos de Software Processo Unificado (Jacobson, Booch, Rumbaugh) RUP – Rational Unifided Process (Rational/IBM) PRAXIS – Processo para Aplicativos eXtensíveis InterativoS (Wilson de Pádua Paula Filho) • XP – eXtreme Programming • Para projetos realizados individualmente ou por pequenas equipes, com duração de seis meses a um ano. Projetos cujos requisitos mudam com muita freqüência, orientados a objetos, desenvolvido por equipes de até 12 desenvolvedores, com processo incremental (ou interativo). SEA UP (SEA Tecnologia) MetoDeS – Desenvolvida por Alunos como TCC 6. O que é modelo de processo de software? Uma representação simplificada e abstrata de um processo de software, apresentada a partir de uma perspectiva específica. Exemplos de perspectivas 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ê Modelos de Processos Abstratos são: • • • • • • Cascata Evolucionário Incremental Transformação Formal Integração a partir de componentes reutilizáveis Modelos ágeis (como eXtreme Programing) 7. O que são métodos de engenharia de software? Os métodos, de acordo com o SWEBOK, Capítulo 10, são: • • • • Abordagem Estruturada Orientada a Dados Orientada a Objetos Baseado em Protótipos Descrevem modelos, gráficos, diagramas, notações, regras, restrições, práticas de desenho, Orientam o processo, recomendando práticas mais adequadas e atividades a serem seguidas Associações entre Modelos, Métodos, Processos, Fases, Artefatos e Projetos 8. Quais os custos da engenharia de software? Aproximadamente 60% do custo está no desenvolvimento e 40% está nos testes. Para software customizado, o custo de evolução quase sempre supera o custo de desenvolvimento. Custos variam em função do tipo de sistema que está sendo desenvolvido e dos requisitos, incluindo performance e nível de disponibilidade. Custos de distribuição dependem do modelo de processo de desenvolvimento usado. 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. 9. O que é CASE (Computer-Aided Software Engineering)? Sistemas de Software que servem para dar suporte automatizado às atividades do processo. Ferramentas CASE devem ser sempre usadas. Upper-CASE • Ferramentas para suportar as atividades desde o início do processo, incluindo requerimentos e desenho (Jude, DB Designer, Power Design, Rational Rose). Lower-CASE • Ferramentas para suportar as atividades finais como programação e depuração e teste de programas (Netbeans, Eclipse, Ant, JUnit). 10. 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 • Segurança e Confiabilidade • Software deve ser confiável e seguro física e logicamente. Eficiência • Software deve poder ser alterado para atender as mudanças de necessidades. Software não deve desperdiçar recursos do sistema. Usabilidade • Software deve ser de fácil utilização para os usuários para os quais foi desenhado. 11. Quais os grandes desafios da engenharia de software? Lidar com sistemas legados, com a cada vez maior diversidade de tecnologias e demandas por menores tempos de entrega. Sistemas Legados • Heterogeneidade • Antigos, mas ainda úteis são os sistemas que devem ser mantidos e aprimorados Os sistemas são distribuídos para várias plataformas e incluem uma composição de hardware e software. Entrega • Existe forte e crescente pressão para uma entrega mais rápida, muitas vezes com clientes subestimando a complexidade. 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. O processo de software (ou metodologia) consiste em atividades que fazem parte de 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 (RUP, PRAXIS, Processo Unificado, eXtreme Programming – XP, METODES, PDS). Métodos são maneiras organizadas de produzir software. Incluem sugestões a serem seguidas, notações, regras, modelos, orientando o processo de desenvolvimento (Estruturada, Orientada a Dados, Orientada a Objetos, Baseada 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. 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.