O documento discute as vantagens e desafios do reuso de software, incluindo menores custos, entregas mais rápidas e aumento da qualidade. Aborda diferentes técnicas de reuso como desenvolvimento baseado em componentes, geradores de programas, frameworks de aplicações e reuso de produtos comerciais. Destaca a importância do planejamento para evitar retrabalho e mudanças organizacionais para apoiar iniciativas de reuso.
2. Introdução Uso em outras disciplinas Engenharia Mecânica Eletrônica Objetivo: Reuso do Software Existente Somente nos últimos anos sua aplicação tornou-se mais ativa Reposta às demandas: Menores custos Manutenção de Software Entregas mais rápidas Aumento da qualidade Direções opostas
3. Introdução Visão Empresarial Os itens de reuso passam a fazer parte de um ativo valioso Promovem reuso para aumentar seu retorno sobre investimentos de software
4. Benefícios Confiança aumentada Risco de processo reduzido Uso eficiente de especialistas Conformidade com padrões Desenvolvimento acelerado
5. Problemas Custos de manutenção aumentados Código do componente indisponível Falta de apoio de ferramenta Muitas ferramentas CASE não apóiam o reuso Síndrome do não-inventado-aqui Preferência em reescrever o componente Criação e manutenção de uma biblioteca de componentes Imaturidade na organização de uma biblioteca de componentes Procura, compreensão e adaptação de componentes reusáveis
6. Panorama Várias técnicas foram desenvolvidas nos últimos 20 anos Reuso possível em diferentes níveis Funções simples até aplicações completas Padrões facilitam o reuso Design patterns Desenvolvimento de Software Orientado a Aspectos Linhas de produtos de aplicação Framewors de aplicação Geradores de programa Empacotamento de sistemas legados Integração de COTS Desenvolvimento baseado em componentes Sistemas orientados a serviços Aplicações verticais configuráveis Bibliotecas de Programas
7. Panorama Qual a técnicas mais apropriada? Requisitos Tecnologia Ativos reusáveis Conhecimento da equipe
8. Considerações no planejamento do reuso Cronograma de desenvolvimento do software Quanto mais curto for o prazo, a tendência em reusar sistemas prontos em vez de componentes individuais aumenta Ciclo de vida previsto do software Ciclo de vida longo Se concentrar na facilidade de manutenção Além das possibilidades de reuso, deve-se também pensar nas implicações a longo prazo Adaptação do sistema aos novos requisitos – mudanças nos componentes Se você não tem acesso ao código-fonte, evite o uso de componentes e sistemas de fornecedores externos Conhecimento, habilidades e experiência da equipe de desenvolvimento Tecnologias de reuso são bastante complexas Treinamento
9. Considerações no planejamento do reuso Importância do software e seus requisitos não funcionais Softwares com requisitos de desempenho Uso de geradores de programas pode ser ineficaz Não acesso ao código fonte pode trazer problemas Domínio da aplicação Alguns domínios de aplicação trazem produtos genéricos que podem ser reutilizados Alguns permitem a exportação e importação de dados Plataforma sobre a qual o sistema será executado Buscar componentes compatíveis
10. Considerações no planejamento do reuso A gama de técnicas é grande – há possibilidade de reuso de software Empregar reuso é frequentemente uma decisão mais gerencial do que técnica Gerentes Podem não desejar comprometer seus requisitos com o reuso Podem decidir que o desenvolvimento de componentes ajudará a criar uma base de ativos de software Podem não compreender os riscos associados ao reuso da mesma forma que compreendem os riscos de desenvolvimento original Preferem riscos conhecidos a desconhecidos
11. Desenvolvimento baseado em Componentes Criados com o objetivo de conduzir ao reuso Surgiu da frustração de que o desenvolvimento orientado a objetos não tinha conduzido a um extensivo reuso Classes e objetos são muito detalhadas e específicas Componentes são mais abstratos que as classes de objetos e podem ser considerados provedores de serviços Os componentes devem ser bem documentados para ajudar o projetista a compreendê-los e adaptá-los a uma nova aplicação
12. Desenvolvimento baseado em Componentes Pontos essenciais na engenharia baseada em componentes: Componentes independentes Deve haver uma clara separação entre a interface do componente e sua implementação Padrões de componentes Permitem o uso em mais de uma linguagem de programação Middleware Permitir que componentes independentes e distribuídos trabalhem juntos Processo de desenvolvimento
13. Reuso Baseado em Geradores Conhecimento reusável é capturado em um sistema gerador de programas Pode ser programado por especialistas A descrição da aplicação especifica, de maneira abstrata, quais componentes reusáveis serão empregados Aplicações de mesmo domínio têm arquiteturas comuns Podemos ter: Geradores de parser para processamento de linguagem Geradores de código em ferramentas CASE Podem gerar códigos ineficientes Podem trazer riscos, pois tem um custo inicial alto na definição e implementação de conceitos do domínio
14. Reuso Baseado em Geradores Gerador de Programa Programa Gerado Descrição da Aplicação Conhecimento de domínio da aplicação Banco de Dados
15. Reuso Baseado em Geradores Software Orientado a Aspectos Resolve o problema da separação de assuntos - princípio básico do projeto Cada unidade ou componentes deve realizar uma, e somente uma função Exemplos Componente dedicado à busca de informações Componente dedicado à impressão de documentos Componente dedicado à conexão com o banco de dados Contudo, estes componentes acabam de alguma forma se cruzando Orientação a Aspectos busca realizar a integração separando e organizando o código de acordo com a sua importância para a aplicação
16. Frameworks de Aplicações É um projeto de subsistema composto por um conjunto de classes abstratas e concretas e as interfaces entre elas. 3 classes de Frameworks: Frameworks de infra-estrutura de sistemas Frameworks de integração de middleware Frameworks de aplicações empresariais É uma estrutura genérica que pode ser ampliada para criar um subsistema ou aplicação mais específica Ampliar o Framework pode envolver a adição de classes concretas que herdam operações de classes abstratas no Framework O maior problema está na sua complexidade e tempo para aprender a usá-lo
17. Reuso do Sistema de Aplicações Envolve o reuso de sistemas de aplicações inteiras Pode-se alcançar o objetivo: Pela configuração de um único sistema Pela integração de um ou mais sistemas para criar uma nova aplicação É frequentemente a técnica mais eficiente de reuso Envolve o reuso de grandes ativos que podem ser rapidamente configurados para criar um novo sistema
18. Reuso de Produto COTS Um produto comercial (COTS) é um sistema de software que pode ser usado sem alterações pelo comprador Exemplo: Sistemas Gerenciadores de Banco de Dados Escolhas que precisam ser feitas quando usamos COTS Quais produtos COTS oferecem a funcionalidade mais apropriada? Como os dados serão trocados? Quais recursos de um produto serão realmente usados?
19. Reuso de Produto COTS Cliente Navegador Web Sistema de e-mail Servidor Sistema de e-commerce Sistema de pedidos e faturas Adaptador Sistema de e-mail Adaptador
20. Reuso de Produto COTS Problemas de integração de sistemas COTS: Falta de controle sobre a funcionalidade e o desempenho Problemas com a interoperabilidade de sistemas COTS Nenhum controle sobre a evolução do sistema Suporte dos fornecedores de COTS
21. Linhas de Produtos de Software É um conjunto de aplicações com uma arquitetura comum específica de aplicação Cada aplicação específica é especializada de alguma maneira O núcleo comum é reusado cada vez em que uma nova aplicação é necessária O novo desenvolvimento pode envolver a configuração de componentes específicos, a implementação de componentes adicionais e a adaptação de alguns componentes
22. Linhas de Produtos de Software Tipos de especialização em uma LPS: Especialização da plataforma Somente componentes que fazem interface com o hardware e o sistema operacional são modificados Especialização de ambiente Exemplo: componentes do sistema são alterados para refletir a funcionalidade do equipamento de comunicação usado Especialização funcional Requisitos diferentes. Adição ou modificação de componentes Especialização de processo Adaptação do sistema para lidar com processo de negócios específicos
23. Linhas de Produtos de Software Linhas de produtos de software podem ser configuradas em dois pontos no processo de desenvolvimento: Configuração em tempo de implantação ERP (Enterprise ResourcePlanning) ou SIGE (Sistemas Integrados de Gestão Empresarial) Configuração em tempo de projeto Levantar os requisitos dos stakeholders Escolher um membro da família mais adequado Renegociar requisitos Adaptar o sistema existente Entregar novo membro de família
24. Considerações Finais Não temos ferramentas apropriadas Muitas organizações ainda não estão preparadas Não entendem que o esforço inicial pode ser revertido em benefícios para as próprias empresas Grandes organizações como HP e Motorola já adotam o reuso Empresas tem medo de perder seu staff momentaneamente para o reuso Estudos indicam que empresas que possuem iniciativas de reuso de ativos de software podem aumentar sua produtividade, qualidade e agilidade em, pelo menos, 5 vezes
25. Considerações Finais O planejamento é fundamental para evitar re-trabalho na reutilização de ativos de software Pode requerer uma reestruturação na área de TI da empresa Requer mudança de cultura É preciso de um plano de comunicação bem estruturado Motivar as equipes de projeto a gerar componentes de uma maneira que eles possam ser facilmente encontrados e reutilizados Capacitar as equipes envolvidas