340 likes | 443 Views
Reuso de Software. FATEC SBC Informática p/ a Gestão de Negócios Fundamentos de Eng. de Software. Integrantes. Adelino Moreira Marcial Neto Alex A. Toniatto Gabriela Santini. Introdução.
E N D
Reuso de Software FATEC SBC Informática p/ a Gestão de Negócios Fundamentos de Eng. de Software
Integrantes • Adelino Moreira Marcial Neto • Alex A. Toniatto • Gabriela Santini
Introdução A crescente busca por melhorias e soluções na área de desenvolvimento de software tem estimulado o estudo e construção de melhores formas de trabalho. A utilização do reuso de software de maneira eficiente tem trazido grandes benefícios e demonstrado ser um excelente diferencial competitivo para as empresas.
Definição de Reutilização • Reuso de software • É o processo de criar sistemas de software a partir de software que já existe, ao invés de construí-lo desde a fase zero.
Objetivo do Reuso de Software • O principal objetivo do reuso de software é evitar se refazer o trabalho no desenvolvimento de um novo projeto, capitalizando trabalhos anteriores, fazendo com que as soluções já desenvolvidas sejam imediatamente implementadas em novos contextos.
Benefícios da reutilização • Maior produtividade; • Produtos com melhor qualidade, mais consistentes e padronizados; • Diminuição de custos e tempo gastos no desenvolvimento;
Benefícios da reutilização • Facilidade na manutenção e evolução da estrutura do software produzido; • Desenvolvimento com menos perda de tempo; • Conformidade aos padrões, diminuindo os erros cometidos pelo usuário;
Qual a maior motivação para adotar esta nova tecnologia? Os engenheiros de software tem observado que de 40% a 60% dos códigos de programação são reusáveis (em aplicações); 75% das funções são comuns a mais de um programa e somente 15% dos códigos são únicos.
Dificuldades • Identificação, recuperação e modificação de sistemas reutilizáveis; • Compreensão dos sistemas recuperados; • Qualidade de sistemas reutilizáveis; • Criação de aplicações a partir de componentes reutilizáveis;
Dificuldades • Maior custo de manutenção; • Poucas ferramentas de apoio; • Barreiras psicológicas, legais e econômicas; • É necessário uma política de incentivos à reutilização;
Os tipos mais comuns de reuso • Padrões de projetos (Design Patterns) • Frameworks • Componentes • Biblioteca de Classes
Padrões de projetos (Design Patterns) Descreve soluções para problemas recorrentes no desenvolvimento de sistemas de software. Visa facilitar a reutilização de soluções de desenho, isto é, soluções na fase de projeto do software, sem considerar reutilização de códigos. Também acarreta um vocabulário comum de desenhos, facilitando a comunicação, documentação e aprendizado do sistema de software.
Padrões de Projetos • Diversas categorias: - Padrões de processo, - Padrões arquiteturais, - Padrões de análise, - Padrões de projeto, - Padrões de programação.
Padrões de Projeto • Leaf: representa objetos “folha” na composição; define o comportamento para objetos primitivos na composição • Composite: define o comportamento para componentes que têm filhos; armazena componentes filhos e implementa operações relacionadas aos filhos na interface Component • Client: manipula objetos na composição através da interface Component
Vantagens de Padrões • Reuso de soluções encontradas por especialistas experientes -> aumento de produtividade e qualidade • Melhoria na comunicação entre projetistas • Uniformidade na estrutura do software • Menor complexidade (blocos construtivos)
Exemplo de Código (SampleCode) classEquipment{ public: virtual ~Equipment(); constchar* Name(){return_name;} virtual Watt Power(); virtual CurrencyNetPrice(); virtual CurrencyDiscountPrice(); virtual voidAdd(Equipment*); virtual voidRemove(Equipment*); virtual Iterator* CreateIterator(); protected: Equipment(constchar*); private: constchar* _name; }; classCompositeEquipment: publicEquipment{ public: virtual ~CompositeEquipment(); virtual Watt Power(); virtual CurrencyNetPrice(); virtual CurrencyDiscountPrice(); virtual voidAdd(Equipment*); virtual voidRemove(Equipment*); virtual Iterator* CreateIterator(); protected: CompositeEquipment(constchar*); private: List_equipment; };
Padrões de Projeto classFloppyDisk: publicEquipment{ public: FloppyDisk(constchar*); virtual ~FloppyDisk(); virtual Watt Power(); virtual CurrencyNetPrice(); virtual CurrencyDiscountPrice(); };
Frameworks • É um conjunto de classes abstratas e concretas que fornecem uma infra-estrutura genérica de soluções para um conjunto de problemas. • Contribuem para a reutilização porque possuem uma base bem definida para construção de software ou componentes, e podem ser divididos em duas categorias: frozen spots e hot spots.
Frameworks • Frozen Spots : Definem a arquitetura geral de um sistema, com seus componentes básicos e o relacionamento entre eles, que se mantém intacta em qualquer instanciação do framework de aplicação
Frameworks • Hot Spots Representam as partes do framework de aplicação que são específicas para cada sistema de software. São projetadas para serem genéricos e adaptáveis às necessidades da aplicação desenvolvida.
Frameworks • Framework Caixa Branca - reuso provido por herança • Framework Caixa Preta - reuso provido por composição • Framework Caixa Cinza - mistura
Framework Caixa-Branca x Caixa-Preta • Framework caixa branca é mais fácil de projetar • Framework caixa preta é mais fácil de usar • Frameworks caixa-branca evoluem para se tornar mais caixa preta •Aumenta o numero de objetos, mas eles ficam menores •Complexidade está na interconexão •Objetos compostos de objetos menores •O “Scripting” fica mais importante e as linguagens visuais tornam-se possíveis
Classificação de Frameworks de aplicação • Frameworks de Infra-estrutura do Sistema -Simplificam o desenvolvimento da infra-estrutura de sistemas portáveis e eficientes, -Exemplos: sistemas operacionais, comunicação, interfaces com o usuário e ferramentas de processamento de linguagem -Em geral são usados internamente em uma organização de software e não são vendidos a clientes diretamente
Classificação de Frameworksde aplicação • Frameworks de Integração de Middleware - usados em geral para integrar aplicações e componentes distribuídos. - projetados para melhorar a habilidade de desenvolvedores em modularizar, reutilizar e estender sua infra-estrutura de software para funcionar “sem costuras” em um ambiente distribuído - exemplos: Object Request Broker(ORB), middleware orientado a mensagens e bases de dados transacionais
Classificação de Frameworksde aplicação • Frameworks de Aplicação Empresarial - Voltados a domínios de aplicação mais amplos e são a pedra fundamental para atividades de negócios das empresas. - Exemplos: telecomunicações, aviação, manufatura e engenharia financeira. -São mais caros para desenvolver ou comprar, mas podem dar um retorno substancial do investimento, já que permitem o desenvolvimento de aplicações e produtos diretamente
Componentes • Um componente pode ser definido como uma unidade de software independente, que encapsula, dentro de si, seu projeto e implementação, e oferece serviços, por meio de interfaces bem definidas, para o meio externo.
Componentes • Objetivo: quebra de blocos monolíticos em componentes inter-operáveis • Um componente provê um conjunto de serviços acessíveis por meio de uma interface bem definida • Motivações: desenvolvimento da Internet/WWW, arquitetura cliente/servidor, computação distribuída, Orientação a Objetos, Componentware, dentre outros
Características básicas dos Componentes • Componentes são reutilizáveis; • Alguns são de uso mais geral e outros têm uso mais específico, mas todos são genéricos dentro do escopo considerado; • Componentes interagem com outros componentes.
Bibliotecas de Classes • Classes de uso genérico podem ser disponibilizadas para reuso e importadas em múltiplas aplicações • Em geral são incorporadas ao código final da aplicação, ou seja, são compiladas juntamente com o restante do código.
Desenvolvimento para Reutilização (Reuso Produtor) • Questões a serem consideradas: • Faça seu componente o mais geral possível, prevendo condições similares às que podem ocorrer; • Separe as dependências de forma que seções modificáveis sejam isoladas das que devem permanecer iguais; • Mantenha a interface geral e bem-definida;
Desenvolvimento para Reutilização (Reuso Produtor) • Inclua informações sobre problemas encontrados e resolvidos; • Use convenções claras para nomeação; • Documente as estruturas de dados e algoritmos; • Separe as seções de comunicação e tratamento de erros.
Reuso Consumidor • Perguntas a serem feitas: - O componente executa a função e fornece os dados que você precisa? - Se forem necessárias mudanças mínimas, trata-se de menos esforço do que construir o componente do zero? - O componente está bem documentado, de forma que possa ser estendido sem ter que entender linha por linha do código? - Existe um registro completo do teste do componente e histórico da revisão, para certificar que ele não tem erros?
Conclusão O reuso de software nos projetos tem contribuído para o ganho de produtividade e diminuição de retrabalho nos projetos desenvolvidos pelas equipes. Além disso, os projetos estão cada vez mais confiáveis e com melhor qualidade, já que os erros anteriormente existentes são corrigidos.