Reúso de Software: Vantagens, Desafios e Estratégias Essenciais
Classificado em Computação
Escrito em em português com um tamanho de 11,91 KB
Vantagens Principais do Reúso de Software
As principais vantagens do reúso de software incluem:
- Confiança Aumentada
- Risco de Processo Reduzido
- Uso Eficaz de Especialistas
- Conformidade com Padrões
- Desenvolvimento Acelerado
Problemas Associados ao Reúso de Software
Os principais problemas associados ao reúso de software são:
- Maiores Custos de Manutenção
- Falta de Ferramentas de Suporte
- Síndrome do 'Não Inventado Aqui'
- Criação, Manutenção e Uso de uma Biblioteca de Componentes
- Encontrar, Compreender e Adaptar os Componentes Reutilizáveis
Fatores-Chave no Planejamento do Reúso de Software
Ao planejar o reúso de software, os seguintes fatores-chave devem ser considerados:
Cronograma de Desenvolvimento do Software
Caso o software necessite ser desenvolvido rapidamente, você deve tentar reusar sistemas de prateleira em vez de componentes individuais. Estes são ativos de alta granularidade reutilizáveis. Embora eles não se ajustem perfeitamente aos requisitos, essa abordagem minimiza a quantidade de desenvolvimento necessária.
Expectativa de Duração do Software
Caso você esteja desenvolvendo um sistema de vida longa, você deve centrar-se na manutenção do sistema. Você não deve apenas pensar nos benefícios imediatos do reúso, mas também nas implicações a longo prazo. Ao longo de sua vida, você terá de adaptar o sistema aos novos requisitos, o que significa fazer alterações em partes do sistema. Caso você não tenha acesso ao código-fonte, você pode preferir evitar componentes de prateleira e sistemas de fornecedores externos; fornecedores podem não ser capazes de continuar dando suporte ao software reutilizado.
Conhecimento e Habilidades da Equipe de Desenvolvimento
Todas as tecnologias de reúso são bastante complexas, e é necessário muito tempo para compreendê-las e usá-las eficazmente. Portanto, se a equipe de desenvolvimento tem habilidades em uma área específica, provavelmente essa é a área em que você deve se concentrar.
Importância do Software e Requisitos Não Funcionais
Para um sistema crítico que precisa ser certificado por um regulador externo, talvez seja necessário criar um caso de confiança para o sistema. Isso é difícil, caso você não tenha acesso ao código-fonte do software. Se o software tiver requisitos de desempenho rigorosos, pode ser impossível usar estratégias como o reúso baseado em geradores, em que você gera o código a partir de uma representação específica de domínio reutilizável de um sistema. Esses sistemas geralmente geram códigos relativamente ineficientes.
Domínio da Aplicação
Em alguns domínios de aplicação, como manufatura e sistemas médicos de informação, existem diversos produtos genéricos que podem ser reutilizados, sendo configurados a uma situação local. Se estiver trabalhando em tal domínio, você sempre deve considerar essa opção.
Plataforma de Execução do Sistema
Alguns modelos de componentes, como .NET, são específicos para plataformas Microsoft. Da mesma forma, sistemas de aplicação genéricos podem ser específicos de determinada plataforma e você só poderá reusá-los se seu sistema for projetado para a mesma plataforma.
Classes de Frameworks (Fayed e Schmidt)
Fayed e Schmidt classificam os frameworks em três classes de aplicação:
- Frameworks de Infraestrutura de Sistema: Esses frameworks apoiam o desenvolvimento de infraestruturas de sistema, como comunicações, interfaces de usuário e compiladores (SCHMIDT, 1997).
- Frameworks de Integração de Middleware: Trata-se de um conjunto de normas e classes de objetos associadas que oferecem suporte a componentes de comunicação e troca de informações. Exemplos desse tipo de framework incluem o .NET da Microsoft e o Enterprise Java Beans (EJB). Esses frameworks fornecem suporte para modelos de componentes padronizados.
- Frameworks de Aplicações Corporativas: Esses estão relacionados com domínios de aplicação específicos, como telecomunicações ou sistemas financeiros (BAUMER et al., 1997). Eles incorporam conhecimentos sobre domínios de aplicações e apoiam o desenvolvimento de aplicações de usuário final.
Recursos Suportados por Frameworks de Aplicação Web (WAFs)
A maioria dos frameworks de aplicação Web (WAFs) suporta os seguintes recursos:
Proteção
WAFs podem incluir classes para ajudar a implementar a autenticação de usuário (login) e controle de acesso, para garantir que os usuários só possam acessar a funcionalidade permitida no sistema.
Páginas Web Dinâmicas
As classes são fornecidas para ajudar na definição de templates de páginas Web e para preenchê-los dinamicamente, com dados específicos do banco de dados do sistema.
Suporte a Banco de Dados
Geralmente, os frameworks não incluem um banco de dados, mas assumem que um banco de dados separado, como MySQL, será usado. O framework pode fornecer classes que proporcionam uma interface abstrata para bancos de dados diferentes.
Gerenciamento de Sessão
Classes para criar e gerenciar sessões (um número de interações com o sistema por um usuário) são geralmente parte de um WAF.
Interação do Usuário
Atualmente, a maioria dos frameworks Web fornece suporte a AJAX (HOLDENER, 2008), que permite que sejam criadas páginas Web mais interativas.
Tipos de Especialização de Linhas de Produtos de Software
Quatro tipos de especialização de uma linha de produtos de software são:
- Especialização de Plataforma: As versões da aplicação são desenvolvidas para diferentes plataformas. Por exemplo, versões da aplicação podem existir para plataformas Linux, Windows e Mac OS. Nesse caso, a funcionalidade da aplicação costuma ser inalterada. Apenas os componentes que fazem interface com o hardware e o sistema operacional são modificados.
- Especialização de Ambiente: Versões da aplicação são criadas para lidar com ambientes operacionais específicos e dispositivos periféricos. Por exemplo, um sistema para os serviços de emergência pode existir em versões diferentes, dependendo do sistema de comunicações do veículo. Nesse caso, os componentes de sistema são alterados para refletir a funcionalidade do equipamento de comunicação usado.
- Especialização Funcional: Versões da aplicação são criadas para diferentes clientes, com requisitos específicos. Por exemplo, um sistema de automação de biblioteca pode ser modificado dependendo se ele é usado em uma biblioteca pública, uma biblioteca de referência ou uma biblioteca universitária. Nesse caso, os componentes que implementam a funcionalidade podem ser modificados, e novos componentes, adicionados ao sistema.
- Especialização de Processo: O sistema é adaptado para lidar com processos específicos de negócios. Por exemplo, um sistema de pedidos pode ser adaptado para lidar com um processo de solicitação centralizado, em uma empresa, e um processo distribuído, em outra.
Etapas para Criar uma Nova Aplicação em Linhas de Produtos
As etapas necessárias para entender uma linha de produtos de software ao se criar uma nova aplicação são:
- Elicitar Requisitos de Stakeholders: Você pode começar com um processo normal de engenharia de requisitos. No entanto, como já existe um sistema, você precisará demonstrá-lo, e que os stakeholders o experimentem expressando suas necessidades como modificações nas funções fornecidas.
- Selecionar o Sistema Mais Próximo aos Requisitos: Ao criar um novo membro de uma linha de produtos, você pode começar com a instância de produtos mais próxima. Os requisitos são analisados e o membro da família que é a opção mais próxima é escolhido para a modificação.
- Renegociar Requisitos: Assim que surgirem mais detalhes sobre as alterações necessárias e o projeto for planejado, podem ocorrer algumas renegociações de requisitos para minimizar as mudanças necessárias.
- Adaptar Sistema Existente: Novos módulos são desenvolvidos para o sistema existente e módulos de sistemas existentes são adaptados para novos requisitos.
- Entregar Novo Membro da Família: A nova instância da linha de produtos é entregue ao cliente. Nessa etapa, você deve documentar suas principais características para que possam ser usadas como base para futuros desenvolvimentos de sistema.
Benefícios Principais do Reúso de COTS
Os principais benefícios do reúso de COTS (Commercial Off-The-Shelf) são:
- Assim como em outros tipos de reúso, pode ser possível a implantação mais rápida de um sistema confiável.
- É possível ver qual funcionalidade é fornecida pelas aplicações e, portanto, é mais fácil julgar se elas são suscetíveis de serem adequadas. Outras empresas podem usar as aplicações para disponibilizar a experiência dos sistemas.
- Alguns riscos de desenvolvimento são evitados usando-se softwares existentes. No entanto, essa abordagem tem seus próprios riscos, como discuto adiante.
- As empresas podem concentrar-se em sua atividade principal sem precisar dedicar uma grande quantidade de recursos para desenvolvimento de sistemas de TI.
- Como as plataformas operacionais evoluem, as atualizações das tecnologias podem ser simplificadas, já que são de responsabilidade do fornecedor do produto COTS, e não do cliente.
O que é um Sistema ERP?
Os sistemas ERP (Enterprise Resource Planning), assim como aqueles produzidos pela SAP e BEA, são sistemas integrados em grande escala, projetados para oferecer suporte a práticas de negócios, como encomenda e faturamento, gerenciamento de inventário e programação de manufatura. Para esses sistemas, o processo de configuração envolve a coleta de informações detalhadas sobre negócios do cliente e processos de negócios e a incorporação destes em um banco de dados de configuração, o que exige, muitas vezes, o conhecimento detalhado da configuração, notações e ferramentas, e geralmente é realizado por consultores e clientes.
Opções de Projeto na Integração de Produtos COTS
Ao integrar produtos COTS para criar soluções de sistema COTS, as seguintes opções de projeto devem ser consideradas:
- Quais produtos COTS oferecem a funcionalidade mais apropriada? Normalmente, há vários produtos COTS disponíveis, que podem ser combinados de maneiras diferentes. Se você não tiver experiência com um produto COTS, pode ser difícil decidir qual é o mais adequado.
- Como os dados serão trocados? Normalmente, produtos diferentes usam formatos e estruturas de dados exclusivos. Você precisa escrever adaptadores que convertam de uma representação para outra. Esses adaptadores são sistemas em tempo de execução que operam junto com os produtos COTS.
- Quais características de um produto serão realmente usadas? Um produto COTS pode ter mais funcionalidade do que você precisa e pode ser duplicado em diferentes produtos. Você precisa decidir quais recursos de quais produtos são mais adequados para seus requisitos. Se possível, você também deve negar acesso à funcionalidade não usada, pois isso pode interferir no funcionamento normal do sistema. A falha do primeiro voo do foguete Ariane 5 (NUSEIBEH, 1997) foi consequência de uma falha em um sistema de navegação inercial que foi reutilizado do sistema Ariane 4. No entanto, a funcionalidade que falhou não era realmente necessária no Ariane 5.