Reuso de SoftwareProf. Agnaldo Volpe Lovato
IntroduçãoUso em outras disciplinasEngenharia MecânicaEletrônicaObjetivo: Reuso do Software ExistenteSomente nos últimos anos sua aplicação tornou-se mais ativaReposta às demandas:Menores custosManutenção de SoftwareEntregas mais rápidasAumento da qualidadeDireções opostas
IntroduçãoVisão EmpresarialOs itens de reuso passam a fazer parte de um ativo valiosoPromovem reuso para aumentar seu retorno sobre investimentos de software
BenefíciosConfiança aumentadaRisco de processo reduzidoUso eficiente de especialistasConformidade com padrõesDesenvolvimento acelerado
ProblemasCustos de manutenção aumentadosCódigo do componente indisponívelFalta de apoio de ferramentaMuitas ferramentas CASE não apóiam o reusoSíndrome do não-inventado-aquiPreferência em reescrever o componenteCriação e manutenção de uma biblioteca de componentesImaturidade na organização de uma biblioteca de componentesProcura, compreensão e adaptação de componentes reusáveis
PanoramaVárias técnicas foram desenvolvidas nos últimos 20 anosReuso possível em diferentes níveisFunções simples até aplicações completasPadrões facilitam o reusoDesign patternsDesenvolvimento de Software Orientado a AspectosLinhas de produtos de aplicaçãoFramewors de aplicaçãoGeradores de programaEmpacotamento de sistemas legadosIntegração de COTSDesenvolvimento baseado em componentesSistemas orientados a serviçosAplicações verticais configuráveisBibliotecas de Programas
PanoramaQual a técnicas mais apropriada?RequisitosTecnologiaAtivos reusáveisConhecimento da equipe
Considerações no planejamento do reusoCronograma de desenvolvimento do softwareQuanto mais curto for o prazo, a tendência em reusar sistemas prontos em vez de componentes individuais aumentaCiclo de vida previsto do softwareCiclo de vida longoSe concentrar na facilidade de manutençãoAlém das possibilidades de reuso, deve-se também pensar nas implicações a longo prazoAdaptação do sistema aos novos requisitos – mudanças nos componentesSe você não tem acesso ao código-fonte, evite o uso de componentes e sistemas de fornecedores externosConhecimento, habilidades e experiência da equipe de desenvolvimentoTecnologias de reuso são bastante complexasTreinamento
Considerações no planejamento do reusoImportância do software e seus requisitos não funcionaisSoftwares com requisitos de desempenhoUso de geradores de programas pode ser ineficazNão acesso ao código fonte pode trazer problemasDomínio da aplicaçãoAlguns domínios de aplicação trazem produtos genéricos que podem ser reutilizadosAlguns permitem a exportação e importação de dadosPlataforma sobre a qual o sistema será executadoBuscar componentes compatíveis
Considerações no planejamento do reusoA gama de técnicas é grande – há possibilidade de reuso de softwareEmpregar reuso é frequentemente uma decisão mais gerencial do que técnicaGerentesPodem não desejar comprometer seus requisitos com o reusoPodem decidir que o desenvolvimento de componentes ajudará a criar uma base de ativos de softwarePodem não compreender os riscos associados ao reuso da mesma forma que compreendem os riscos de desenvolvimento originalPreferem riscos conhecidos a desconhecidos
Desenvolvimento baseado em ComponentesCriados com o objetivo de conduzir ao reusoSurgiu da frustração de que o desenvolvimento orientado a objetos não tinha conduzido a um extensivo reusoClasses e objetos são muito detalhadas e específicasComponentes são mais abstratos que as classes de objetos e podem ser considerados provedores de serviçosOs componentes devem ser bem documentados para ajudar o projetista a compreendê-los e adaptá-los a uma nova aplicação
Desenvolvimento baseado em ComponentesPontos essenciais na engenharia baseada em componentes:Componentes independentesDeve haver uma clara separação entre a interface do componente e sua implementaçãoPadrões de componentesPermitem o uso em mais de uma linguagem de programaçãoMiddlewarePermitir que componentes independentes e distribuídos trabalhem juntosProcesso de desenvolvimento
Reuso Baseado em GeradoresConhecimento reusável é capturado em um sistema gerador de programasPode ser programado por especialistasA descrição da aplicação especifica, de maneira abstrata, quais componentes reusáveis serão empregadosAplicações de mesmo domínio têm arquiteturas comunsPodemos ter:Geradores de parser para processamento de linguagemGeradores de código em ferramentas CASEPodem gerar códigos ineficientesPodem trazer riscos, pois tem um custo inicial alto na definição e implementação de conceitos do domínio
Reuso Baseado em GeradoresGerador de ProgramaPrograma GeradoDescrição da AplicaçãoConhecimento de domínio da aplicaçãoBanco de Dados
Reuso Baseado em GeradoresSoftware Orientado a AspectosResolve o problema da separação de assuntos - princípio básico do projetoCada unidade ou componentes deve realizar uma, e somente uma funçãoExemplosComponente dedicado à busca de informaçõesComponente dedicado à impressão de documentosComponente dedicado à conexão com o banco de dadosContudo, estes componentes acabam de alguma forma se cruzandoOrientaçã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
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 sistemasFrameworks de integração de middlewareFrameworks de aplicações empresariaisÉ uma estrutura genérica que pode ser ampliada para criar um subsistema ou aplicação mais específicaAmpliar o Framework pode envolver a adição de classes concretas que herdam operações de classes abstratas no FrameworkO maior problema está na sua complexidade e tempo para aprender a usá-lo
Reuso do Sistema de AplicaçõesEnvolve o reuso de sistemas de aplicações inteirasPode-se alcançar o objetivo:Pela configuração de um único sistemaPela integração de um ou mais sistemas para criar uma nova aplicaçãoÉ frequentemente a técnica mais eficiente de reusoEnvolve o reuso de grandes ativos que podem ser rapidamente configurados para criar um novo sistema
Reuso de Produto COTSUm produto comercial (COTS) é um sistema de software que pode ser usado sem alterações pelo compradorExemplo:Sistemas Gerenciadores de Banco de DadosEscolhas que precisam ser feitas quando usamos COTSQuais produtos COTS oferecem a funcionalidade mais apropriada?Como os dados serão trocados?Quais recursos de um produto serão realmente usados?
Reuso de Produto COTSClienteNavegador WebSistema de e-mailServidorSistema de e-commerceSistema de pedidos e faturasAdaptadorSistema de e-mailAdaptador
Reuso de Produto COTSProblemas de integração de sistemas COTS:Falta de controle sobre a funcionalidade e o desempenhoProblemas com a interoperabilidade de sistemas COTSNenhum controle sobre a evolução do sistemaSuporte dos fornecedores de COTS
Linhas de Produtos de SoftwareÉ um conjunto de aplicações com uma arquitetura comum específica de aplicaçãoCada aplicação específica é especializada de alguma maneiraO núcleo comum é reusado cada vez em que uma nova aplicação é necessáriaO novo desenvolvimento pode envolver a configuração de componentes específicos, a implementação de componentes adicionais e a adaptação de alguns componentes
Linhas de Produtos de SoftwareTipos de especialização em uma LPS:Especialização da plataformaSomente componentes que fazem interface com o hardware e o sistema operacional são modificadosEspecialização de ambienteExemplo: componentes do sistema são alterados para refletir a funcionalidade do equipamento de comunicação usadoEspecialização funcionalRequisitos diferentes. Adição ou modificação de componentesEspecialização de processoAdaptação do sistema para lidar com processo de negócios específicos
Linhas de Produtos de SoftwareLinhas de produtos de software podem ser configuradas em dois pontos no processo de desenvolvimento:Configuração em tempo de implantaçãoERP (Enterprise ResourcePlanning) ouSIGE (Sistemas Integrados de Gestão Empresarial)Configuração em tempo de projetoLevantar os requisitos dos stakeholdersEscolher um membro da família mais adequadoRenegociar requisitosAdaptar o sistema existenteEntregar novo membro de família
Considerações FinaisNão temos ferramentas apropriadasMuitas organizações ainda não estão preparadasNão entendem que o esforço inicial pode ser revertido em benefícios para as próprias empresasGrandes organizações como HP e Motorola já adotam o reusoEmpresas tem medo de perder seu staff momentaneamente para o reusoEstudos indicam que empresas que possuem iniciativas de reuso de ativos de software podem aumentar sua produtividade, qualidade e agilidade em, pelo menos, 5 vezes
Considerações FinaisO planejamento é fundamental para evitar re-trabalho na reutilização de ativos de softwarePode requerer uma reestruturação na área de TI da empresaRequer mudança de culturaÉ preciso de um plano de comunicação bem estruturadoMotivar as equipes de projeto a gerar componentes de uma maneira que eles possam ser facilmente encontrados e reutilizadosCapacitar as equipes envolvidas

Reuso de software

  • 1.
    Reuso de SoftwareProf.Agnaldo Volpe Lovato
  • 2.
    IntroduçãoUso em outrasdisciplinasEngenharia MecânicaEletrônicaObjetivo: Reuso do Software ExistenteSomente nos últimos anos sua aplicação tornou-se mais ativaReposta às demandas:Menores custosManutenção de SoftwareEntregas mais rápidasAumento da qualidadeDireções opostas
  • 3.
    IntroduçãoVisão EmpresarialOs itensde reuso passam a fazer parte de um ativo valiosoPromovem reuso para aumentar seu retorno sobre investimentos de software
  • 4.
    BenefíciosConfiança aumentadaRisco deprocesso reduzidoUso eficiente de especialistasConformidade com padrõesDesenvolvimento acelerado
  • 5.
    ProblemasCustos de manutençãoaumentadosCódigo do componente indisponívelFalta de apoio de ferramentaMuitas ferramentas CASE não apóiam o reusoSíndrome do não-inventado-aquiPreferência em reescrever o componenteCriação e manutenção de uma biblioteca de componentesImaturidade na organização de uma biblioteca de componentesProcura, compreensão e adaptação de componentes reusáveis
  • 6.
    PanoramaVárias técnicas foramdesenvolvidas nos últimos 20 anosReuso possível em diferentes níveisFunções simples até aplicações completasPadrões facilitam o reusoDesign patternsDesenvolvimento de Software Orientado a AspectosLinhas de produtos de aplicaçãoFramewors de aplicaçãoGeradores de programaEmpacotamento de sistemas legadosIntegração de COTSDesenvolvimento baseado em componentesSistemas orientados a serviçosAplicações verticais configuráveisBibliotecas de Programas
  • 7.
    PanoramaQual a técnicasmais apropriada?RequisitosTecnologiaAtivos reusáveisConhecimento da equipe
  • 8.
    Considerações no planejamentodo reusoCronograma de desenvolvimento do softwareQuanto mais curto for o prazo, a tendência em reusar sistemas prontos em vez de componentes individuais aumentaCiclo de vida previsto do softwareCiclo de vida longoSe concentrar na facilidade de manutençãoAlém das possibilidades de reuso, deve-se também pensar nas implicações a longo prazoAdaptação do sistema aos novos requisitos – mudanças nos componentesSe você não tem acesso ao código-fonte, evite o uso de componentes e sistemas de fornecedores externosConhecimento, habilidades e experiência da equipe de desenvolvimentoTecnologias de reuso são bastante complexasTreinamento
  • 9.
    Considerações no planejamentodo reusoImportância do software e seus requisitos não funcionaisSoftwares com requisitos de desempenhoUso de geradores de programas pode ser ineficazNão acesso ao código fonte pode trazer problemasDomínio da aplicaçãoAlguns domínios de aplicação trazem produtos genéricos que podem ser reutilizadosAlguns permitem a exportação e importação de dadosPlataforma sobre a qual o sistema será executadoBuscar componentes compatíveis
  • 10.
    Considerações no planejamentodo reusoA gama de técnicas é grande – há possibilidade de reuso de softwareEmpregar reuso é frequentemente uma decisão mais gerencial do que técnicaGerentesPodem não desejar comprometer seus requisitos com o reusoPodem decidir que o desenvolvimento de componentes ajudará a criar uma base de ativos de softwarePodem não compreender os riscos associados ao reuso da mesma forma que compreendem os riscos de desenvolvimento originalPreferem riscos conhecidos a desconhecidos
  • 11.
    Desenvolvimento baseado emComponentesCriados com o objetivo de conduzir ao reusoSurgiu da frustração de que o desenvolvimento orientado a objetos não tinha conduzido a um extensivo reusoClasses e objetos são muito detalhadas e específicasComponentes são mais abstratos que as classes de objetos e podem ser considerados provedores de serviçosOs componentes devem ser bem documentados para ajudar o projetista a compreendê-los e adaptá-los a uma nova aplicação
  • 12.
    Desenvolvimento baseado emComponentesPontos essenciais na engenharia baseada em componentes:Componentes independentesDeve haver uma clara separação entre a interface do componente e sua implementaçãoPadrões de componentesPermitem o uso em mais de uma linguagem de programaçãoMiddlewarePermitir que componentes independentes e distribuídos trabalhem juntosProcesso de desenvolvimento
  • 13.
    Reuso Baseado emGeradoresConhecimento reusável é capturado em um sistema gerador de programasPode ser programado por especialistasA descrição da aplicação especifica, de maneira abstrata, quais componentes reusáveis serão empregadosAplicações de mesmo domínio têm arquiteturas comunsPodemos ter:Geradores de parser para processamento de linguagemGeradores de código em ferramentas CASEPodem gerar códigos ineficientesPodem trazer riscos, pois tem um custo inicial alto na definição e implementação de conceitos do domínio
  • 14.
    Reuso Baseado emGeradoresGerador de ProgramaPrograma GeradoDescrição da AplicaçãoConhecimento de domínio da aplicaçãoBanco de Dados
  • 15.
    Reuso Baseado emGeradoresSoftware Orientado a AspectosResolve o problema da separação de assuntos - princípio básico do projetoCada unidade ou componentes deve realizar uma, e somente uma funçãoExemplosComponente dedicado à busca de informaçõesComponente dedicado à impressão de documentosComponente dedicado à conexão com o banco de dadosContudo, estes componentes acabam de alguma forma se cruzandoOrientaçã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 sistemasFrameworks de integração de middlewareFrameworks de aplicações empresariaisÉ uma estrutura genérica que pode ser ampliada para criar um subsistema ou aplicação mais específicaAmpliar o Framework pode envolver a adição de classes concretas que herdam operações de classes abstratas no FrameworkO maior problema está na sua complexidade e tempo para aprender a usá-lo
  • 17.
    Reuso do Sistemade AplicaçõesEnvolve o reuso de sistemas de aplicações inteirasPode-se alcançar o objetivo:Pela configuração de um único sistemaPela integração de um ou mais sistemas para criar uma nova aplicaçãoÉ frequentemente a técnica mais eficiente de reusoEnvolve o reuso de grandes ativos que podem ser rapidamente configurados para criar um novo sistema
  • 18.
    Reuso de ProdutoCOTSUm produto comercial (COTS) é um sistema de software que pode ser usado sem alterações pelo compradorExemplo:Sistemas Gerenciadores de Banco de DadosEscolhas que precisam ser feitas quando usamos COTSQuais 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 ProdutoCOTSClienteNavegador WebSistema de e-mailServidorSistema de e-commerceSistema de pedidos e faturasAdaptadorSistema de e-mailAdaptador
  • 20.
    Reuso de ProdutoCOTSProblemas de integração de sistemas COTS:Falta de controle sobre a funcionalidade e o desempenhoProblemas com a interoperabilidade de sistemas COTSNenhum controle sobre a evolução do sistemaSuporte dos fornecedores de COTS
  • 21.
    Linhas de Produtosde SoftwareÉ um conjunto de aplicações com uma arquitetura comum específica de aplicaçãoCada aplicação específica é especializada de alguma maneiraO núcleo comum é reusado cada vez em que uma nova aplicação é necessáriaO 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 Produtosde SoftwareTipos de especialização em uma LPS:Especialização da plataformaSomente componentes que fazem interface com o hardware e o sistema operacional são modificadosEspecialização de ambienteExemplo: componentes do sistema são alterados para refletir a funcionalidade do equipamento de comunicação usadoEspecialização funcionalRequisitos diferentes. Adição ou modificação de componentesEspecialização de processoAdaptação do sistema para lidar com processo de negócios específicos
  • 23.
    Linhas de Produtosde SoftwareLinhas de produtos de software podem ser configuradas em dois pontos no processo de desenvolvimento:Configuração em tempo de implantaçãoERP (Enterprise ResourcePlanning) ouSIGE (Sistemas Integrados de Gestão Empresarial)Configuração em tempo de projetoLevantar os requisitos dos stakeholdersEscolher um membro da família mais adequadoRenegociar requisitosAdaptar o sistema existenteEntregar novo membro de família
  • 24.
    Considerações FinaisNão temosferramentas apropriadasMuitas organizações ainda não estão preparadasNão entendem que o esforço inicial pode ser revertido em benefícios para as próprias empresasGrandes organizações como HP e Motorola já adotam o reusoEmpresas tem medo de perder seu staff momentaneamente para o reusoEstudos 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 FinaisO planejamentoé fundamental para evitar re-trabalho na reutilização de ativos de softwarePode requerer uma reestruturação na área de TI da empresaRequer mudança de culturaÉ preciso de um plano de comunicação bem estruturadoMotivar as equipes de projeto a gerar componentes de uma maneira que eles possam ser facilmente encontrados e reutilizadosCapacitar as equipes envolvidas