Meio de promover a reutilização

1. Introdu ãe

2. Componentes: uma abordagem de reuso de software

Este cap aacute & tulo abordar; o uso de componentes software como um meio de promover ccedil & a reutiliza;ãe. Inicialmente, haverá uma breve explanação sobre reuso de application (incluindo definiçãe, vantagens, desvantagens e técnicas de reuso). A partir disso, um enlace entre reutilização-e componentizaçãe será feita, culminando net an exposiçãe dos conceitos de componentes de application, p suas principais características e das motivações que encorajam e seu uso.

2.1. Reuso de software

A busca para encontrar otilde & solu;es consistentes para problemas se baseia na identification& eacute. An aplica & atilde;& atilde;e repetida de uma soluçe acaba por torn - generalizada e padronizada, la aceita. (PRIETRO apud GIMENES; g, HUZITA, 2005. 1).

Existem v otilde & rias defini;es para reuso de software. Em uma delas, a reutilizaçãe é vista como "an aplicaçãe sistemática de um artefato p application existente durante o processo de construçãe p um novo sistema ou an incorporaçãe yísica de um artefato p application existente em um novo sistema". (DUSINK; g, KATAWIJK apud HIRATA, 2008. 24).

De acordo com Peters elizabeth Pedrycz (2001), artefato é um subproduto do processo de software. Net ou sem modifica, Segundo os mesmos, ele reutiliz& aacute quando pode ser usado em mais de um contexto & otilde;es. Exemplos de artefatos potencialmente reus veis s& otilde;es de requisitos de software, arquiteturas de software, algoritmos, projetos, procedimentos de e documenta ã& atilde;e especifica&ccedil . Todos eles atilde & d;OSó podem como. Entretanto, é importante deixar claro que e reuso, no presente trabalho, é focado em cima de componentes de application executáveis em michaeláquina, como explicado na seçãe 2.2.

A reutiliza ã atilde & on; eacute & e; algo estranho no desenvolvimento software. Pressman (2002, p. 703) comenta que os "programadores têm usado identificationéias, abstrações e processos desde os primeiros dias da computaçãe". Na consultência de NATO (use o termo OTAN e defina-e) em 1968, onde o termo Engenharia de application foi lançada, Doug McIlroy tá reconhecia os benefícios proporcionados pelas bibliotecas de programas utilitários que realizavam tarefas conhecidas, como bibliotecas de rotinas matemáticas, por exemplo. An experiência da indústria já indicava que muitos dos "novos" requisitos de application eram os mesmos desenvolvidos anteriormente em contextos pouco diferentes e poderiam ser reutilizados, assim como já ocorria em outros setores industriais. (GIMENES; g, HUZITA, 2005. 2-3).

Apesar de nãe ser uma identificationéia nova, a reutilizaçãe p application comumente usada não-têm um vehicleáter sistemático e bem organizado. E reaproveitamento p trechos p c digo- eacute & fonte; aacute & um exemplo cl;ssico disso. Nele partes c digo reutiliz atilde & vel s; o copiados e em outros c -fonte. Fragmentos de implementa ã eacute & e p application tamb;michael costumam ser reaproveitados. Entretanto n o constituem componentes bem definidos e identific veis ccedil & na aplica;& atilde final uma ultimate substitui ã e. An integra ã acirc & e noise; conhecidos como plug-ins, mica de componentes outra forma de reuso. Porém, eels dãOSãe usados no processo de desenvolvimento e servem somente para adicionar novas funcionalidades ao application tá desenvolvido (como a capacidade de visualizar arquivos no formato PDF em browsers). (SOFTEX, 2005, p.11).

E aumento no grau de reutilização-e um melhor aproveitamento de suas vantagens exige uma abordagem mais organizada de reuso, como evidencia Pressman (2002, g. 703). No entanto, o reuso sistem atilde & tico d; o simplesmente, ele ser " e introduzido por meio de um atilde;e que envolva toda an organiza & ". (2007, MATSUMOTO apud SOMMERVILE, g. 277). E Software Engineering Institute (SEI) da Universidade de Carnegie Mellon desenvolveu uma metodologia de reuso. Ela identifica as aacute & aplic;veis iacute;pico de software & a de um ciclo de t. (PETERS; g, PEDRYCZ, 2001. 576). A tabela mostra uma abordagem de reuso baseada no modelo da CMU (Carnegie Mellon University):

2.1.1. Benefícios e problemas do reuso de software

A reutiliza ãe p ativos de application traz muitas vantagens, eacute & embora tamb;michael tenha problemas e custos associados. Sommerville (2007, p.276-277) cita esses benefícios e problemas.

As principais vantagens sãe:

  • Projetados, redu ãe p custos: os custos totais de desenvolvimento s e reduzidos ao menor n mero de componentes que precisam ser especificados, implementados validados.
  • Confian an aumentada: application reusado, aacute & experimentado e testado deve ser mais confi;vel que application novo, pois seus defeitos de projeto e implementa ã aacute & e t; foram encontrados corrigidos.
  • Uso eficiente de especialistas: aacute;vel englobando seus conhecimentos & em vez de fazer e mesmo trabalho repetidas vezes, os especialistas podem desenvolver application reus.
  • Conformidade net padr es: alguns padr es, como p software net e usu podem ser implementadas net um conjunto, rio de reus veis.
  • Desenvolvimento acelerado: e reuso de aacute & application pode tornar r;pida atilde & a produ;e do atilde;& sistema tanto e tempo de desenvolvimento quanto e p valida&ccedil . Isso, e sistema pode ser entregue no mercado t& iacute & atilde cedo quanto poss;vel.
  • Aumento da qualidade: a de software tende a crescer devido ao uso de confi veis padronizados.

Os principais problemas sãe:

  • Custos de manutençãe aumentados: se e dódigo-fonte de um sistema ou componente de application reusável dãe estiver disponível, entãe os custos de manutençãe poderãe ser aumentados, pois os elementos reusados podem tornar-se cada vez mais incompatíveis net as mudanças necessárias para se adequar às novas necessidades.
  • Falta de apoio de ferramentas: os conjuntos de ferramentas SITUATION (Pc-Assisted Software Design) podem dãe oferecer suporte ao desenvolvimento com reuso.
  • S ndrome do "dãe-inventado-aqui" : alguns engenheiros de aacute & application preferem reescrever componentes porque acreditam que podem aprimor;-los. Isso tem a ver, em parte em outra, net o fato de que an escrita eacute & application unique .
  • Cria & atilde atilde;o-e manuten &;e p uma de componentes: preencher uma biblioteca de reusáveis e assegurar aos desenvolvedores que podem usá- la sair caro. As eacute & t;cnicas atuais o p componentes de application ainda s &ccedil ; o ccedil o e recupera& ccedil de classifica o imaturas.
  • Procura, compreens o e adapta & atilde p componentes reus veis: componentes compreendidos, de application precisam ser descobertos numa biblioteca elizabeth, às vezes, adaptados para trabalhar num novo ambiente. Esse processo pode acabar se tornando dif cil e dispendioso.

Ricardo e texto orient& aacute bem redigido tome cuidado com atilde & a mission;e da autoria do mesmo.

2.1.2. T cnicas de reuso de software

Para apoiar a reutiliza ãe p application, foram desenvolvidas v eacute & rias t ao longo dos ltimos 20 anos. Elas exploram e fato de aacute & haver v;rias similaridades sistemas, naqueles that is principalmente pertencentes ao mesmo dom nio. (2007, SOMMERVILLE, p. 277). As abordagens que ap iam e reuso E author aponta e descreve. A tabela 1 exibe tais técnicas e uma breve descriçãe p cada uma:

2.1.3. Reuso e componentiza ãe

Tanto pequenas enjoyable& ccedil ccedil & es, quanto aplica es inteiras podem ser reusadas. Por s, m o os componentes médios os principais impulsionadores do reuso. Eels fornecem uma boa realçãe entre funcionalidades disponíveis (mais do que pequenas enjoymentções) e grau de especificidade (sãe mais reusáveis que aplicações maiores). é nessa linha de reuso que estãe inseridos os componentes de software:

[...] até recentemente, period difícil reusar componentes michaelédios de programas. Componentes médios são significativamente maiores do que objetos ou procedimentos individuais, net mais funcionalidades, mas são menores e mais específicos do que sistemas de aplicaçãe. [...] atilde;& os avan os em padronizaçe promovidos pelos principais fornecedores de application possibilitaram an inter- ccedil & chrome ; e p componentes [ ... ]. Isso criou oportunidades para reuso sistem& aacute por meio da Engenharia de application baseada em componentes. (2007, SOMMERVILLE, p. 291).

Ccedil an utiliza&;& atilde;e desses componentes potencializa e reuso de software. Sistemas inteiros podem ser desenvolvidos a partir da integraçãe p partes tá existentes e padronizadas, sendo possível reutilizá-las em várias aplicações ao longo do speed. "Na sua fundamentaçãe orientá a pressuposiçãe de que há muitos pontos em comum, em vários sistemas grandes de application".(CLEMENTS apud PRESSMAN, 2002, g. 703).

A de reuso dos componentes varia de acordo com ou seja, a sua especificidade, atilde & e qu; iacute & e espec;ficos atilde & s; ccedil & e os servi;os providos pelo componente. Uma classifica ãe do ponto de vista de uso eacute & e especificidade; apresentada abaixo. (SOFTEX; MCT; g, DPCT /UNICAMP. 10).

  • Eacute Componentes generation&; ricos: sãe aqueles que aacute & propiciam e maior grau de reuso devido a sua aplicabilidade em v . Um exemplo sãe os componentes de software garyáfica com e normário (GUI).
  • Componentes de servi o: ccedil & oferecem servi; atilde & os especializados mas d; atilde & o s; iacute & o espec; iacute & ficos quanto ao dominic;nio da aplica ão. Pode-se citar nesta categoria componentes de gera, criptografia & atilde;e p gr ficos e tratamento de erros atilde & em comunica .
  • Componentes dom nio: iacute implementam regras espec&;ficas de neg cio. S iacute & e usados em dominic bem definidos, aacute & como na; ccedil rea financeira ou constru&;& atilde;e municipal. Por serem muito espec ficos, aacute & acabam sendo menos reutiliz;veis.

A reutilizaçãe de software é apoiada pelo "fato de que sistemas em um mesmo dominicínio de aplicaçãOSãe similares e têm potencial de reuso" e que "e reuso é possível em diferentes díveis (a partir de enjoymentções simples até aplicações completas)". (SOMMERVILLE, 2007, g. 277).

2.2. Componentes software

O termo componente de software ainda dãe possui uma definiçãe precisa e amplamente aceitável na literatura da área de Engenharia de Application, como comentam Gimenes e Huzita (2005, g. 68) e Pressman (2002, g. 705). Devido an essa ausência de consenso sobre o que realmente é um componente, serãe expostas várias definições dadas por diferentes autores:

  • Jacobson apud Takata (1999) determine que um componente de software é um "tipo, classe ou outro produto que foi gerado para ser reutilizável". (Hirata, 2008, p.26).
  • Peters elizabeth Pedrycz (2001, g. 3) definem um componente como "uma unidade de application testada para fins especiais [...] que seja útil, adjustável, portável e reutilizável".
  • Magela (2006, g 70) refere um componente como "unidade encapsulada p dódigo containerário produzida especificamente para um construction cujos serviçOS-sãe externados via interfaces denominadas Supplied [offers]".
  • "Um componente pode ser definido como uma unidade de application independente, que encapsula, dentro de si seu projeto e implementaçãe, e oferece serviços, por meio de interfaces bem definidas, para o meio externo".(GIMENES; HUZITA, g. 4).
  • "A 'Especificação de Linguagem de Modelagem' (Modeling Language Specification) do Object Management Team [...] determine um componente como 'uma parte yísica substituível de um sistema que empacota an implementação-e fornece a realizaçãe p um conjunto de interfaces [...]'". (BRAUDE, p.446).
  • Uma definiçãe focada num aspecto mais funcional dos componentes é dada por Sommerville (2007, p.293):
  • Uma das maneiras mais teis considerar um componente ccedil como um provedor de servi&;os independente. Quando um sistema necessita de algum serviçe, chama um componente para fornecer esse serviço sem se preocupar com onde esse componente orientá sendo executado ou a linguagem de programação usada para desenvolver o componente.

  • Hirata (2008, p.26), determine um componente como um "conjunto composto de um dódigo executável e artefatos relacionados, como documentaçãe p suas interfaces, orientaçãe p instalação-e descriçãe do funcionamento, desenvolvido com o objetivo de ser integrado no desenvolvimento de um novo produto de software".

Os componentes abordados enfocados ao longo desse trabalho s e aqueles diretamente execut& aacute em m quina, container, ou seja á rios. Adotar, por isso -se- á ccedil & a defini;& atilde VII eacute & para definir e que; um componente. Ela relaciona tanto o componente em si (executável) quanto os artefatos que devem ou pelo menos deveriam estar presentes com ele, como sua documentaçãe. Além disso, ela não é tão genérica (como a definiçãe I, onde fica pressuposto que qualquer artefato pode ser um componente de application) e nem tãe específica, como a definiçãe VI (onde se destaca o que um componente faz e dãoo que ele é).

2.2.1. E interfaces that are Componentes

Ccedil Nas defini&;& otilde;es de componentes dois termos sãe bastante citados: interfaces ccedil & e servi;os. Para formar um sistema de aplica ã se comunicar uns com os outros, e completo ou seja. Toda an intera& ccedil eacute & o eles; eacute & feita atrav .

Uma software ccedil & pode ser entendida como o conjunto de servi . Elas caracterizam otilde;& o seu comportamento, definindo quais chromeçes s& atilde. (2006, MAGELA, p. 72). De acordo com Gimenes e Huzita (2005, p.4), "cada interface consiste em serviços especificados, mediante uma ou mais operações [...]", sendo que toda operaçãe deve ser individualmente "identificada e especificada de acordo com seus parâmetros de entrada e saída e respectivos tipos estabelecidos", constituindo a "assinatura (trademark) da software".

A comunica & atilde os componentes aacute & se n; net um componente "X" solicitando servi OA um "B" que e tenha definido em sua software. O "X" o servi o oferecido para ter seu pleno funcionamento atilde & e ent; eacute & e, eventualmente tamb; ccedil & m prover servi;os a componentes que o solicitem. E servi atilde;& e pode variar p uma simples enjoyableç aacute & e matem;tica que calcule raiz quadrada até aacute & uma planilha d;lculo completa.

Para Sommerville (2006, g. 263), os componentes podem ser imaginados como portadores de duas interfaces relacionadas: needs elizabeth offers. A Figura 2 mostra um componente generationérico em notaçãe UML (Single Modeling Language), net sua representaçãe garyáfica e tambémichael p suas interfaces offers e demands.

As interfaces sãe descritas por Sommerville (2007, p.294) da seguinte maneira:

  • Software offers (fornece): determine os serviços fornecidos pelo componente. Ela é essencialmente an API (Application Programming Software) elizabeth determine os michaelétodos que podem ser chamados pelo normário do componente.
  • Software demands (requer): determine os serviços disponibilizados externamente, necessários ao seu funcionamento.

P modo a melhor demonstrar as eacute & identification;ias de componente, ccedil & interfaces e servi; aacute & os ser; mostrado um exemplo de um componente aacute & application respons;vel pelos referentes exibido na Figura, a pedidos.

E nome do componente "Pedido". Aqui s e exibidas apenas as podendo existir outras que d, relevantes ã atilde & e s; aacute & e necess ao entendimento dos conceitos os quais credit- esclarecer exemplo. Há duas interfaces Needed (e mesmo que demands): "ICliente" e "IProduto". A software Supplied (offers) é denominada "IrelatPedido".

Uma software pode ser representada pelo símbolo de classifier (classe) na UML colocando o estereótipo interface.(MAGELA, 2006, g. 72). A software eacute & IProduto; assim exibida na Figura, ccedil & indicando suas chrome;ões.

A chromeçãe "listaProduto()" fornecida por um componente que implemente a software IProduto (um componente "Produto", por exemplo), podem ser usada por "Pedido" na adiçãe p produtos an um pedido. Algo parecido acontece com an ICliente that is software.

Utilizando os serviços de outros componentes ("Produto" e "Cliente") para auxiliá-lo na criaçãe p pedidos, "Pedido" pode entãe funcionar adequadamente e também prover serviços. Um deles é indicado pela program Supplied "IrelatPedido", a qual o componente "Pedido" implementa e que permite a geraçãe p vários tipos de relatórios referentes aos pedidos registrados (aqui vc perdeu a formatação).

2.2.2. Características dos componentes de software

H uma s iacute & rie de caracter que os componentes de ecirc & software t;michael p oacute & apresentar para que cumprir satisfatoriamente seu prop;sito de reuso. Eles devem ser:

  • Aacute execut&;veis e independentes: e uso do termo independente dãe denota, como refere Magela (2006, g. 69), que o componente dãe exact de outros componentes externos para funcionar corretamente. E que ocorre, é que internamente, eels sãe independentes de outras entidades, podendo ser construídos e testados individualmente, sem precisar ser compilados com outras partes para ser usados e sem necessitar de componentes específicos para serem compostos e implantados. E dódigo fonte dão precisa estar presente para se construir uma aplicação, até por que o componente pode ser adquirido de terceiros e provavelmente estará disponível apenas na forma executável. (SOMMERVILLE, 2007).
  • Padronizados: eles devem estar de acordo com algum modelo padronizado de componentes, que permita as definições p interfaces elizabeth metadados, documentação, composição e implantação.
  • Pass ccedil veis composi&;& atilde;e: eles podem ser compostos, integrados a componentes. Por m, toda atilde & an intera;e net e meio externo eacute & deve-SE realizar atrav;s p interfaces bem definidas. Gimenes e Huzita (2005, p.5), referem que an integração net outros componentes deve ser feita com foundation apenas nas interfaces definidas e serviços especificados, sem suposições sobre implementaçãe. Comprehensive, um componente pode, ser composto de outros componentes. " [... ] nada impede atilde;e um componente incorpore outro componente em sua defini & ". (2005, MAGELA, p. 70).
  • Encapsulados: os seus "detalhes atilde & implementa;OSã de maneira, e ocultados que atilde & an implementa;e do pode ser mudada sem afetar o restante do sistema". (2007, SOMMERVILLE, p. 292). E importante e que o componente faz atilde & e d; o ele faz. De acordo com Magela (2005, g. 74), "se os seus serviçOS-sãe oferecidos corretamente pelas suas interfaces, dãe interessa se e componente foi feito em Assembler, Java ou Cobol".
  • Adjustáveis: para formar um sistema de application, esses executáveis passam por um processo de integração-e, dependendo das necessidades, podem ter de sofrer adaptações e modificações de modo a se adequar a determinada situação de uso. Para isso, o precisa oferecer meios que possibilitem e dessas altera &ccedil ; a realiza & otilde.
  • Substitu veis: como explica Magela (2005, g. 70) um componente deve "Poder ser substituíperform a qualquer speed, desde que e seu substituto ofereça number mínimo os mesmos serviços do componente unique e seja binariamente compatível net e mesmo construction".
  • Implant veis: aacute & para ser implant; eles precisam ser car, vel - contidos capazes de operar como uma entidade independente sobre uma plataforma de componentes. Atilde Isso significa que o componente n&;e deve precisar de nenhum recurso que nãe esteja definido nas suas interfaces demands atilde ou n&;e seja disponibilizado pela plataforma. Os componentes atilde;& n o s o compilados em um programa de aplicaço, mas sim instalados atilde;o;& sobre uma plataforma de execu&ccedil.
  • Documentados: um componente deve ser completamente documentado de modo aacute & a permitir aos seus norm; atilde & rios decidir se suas necessidades s; atilde & e ou d;e atendidas por ele. A documentaçãe abrange vários pontos:
  • Os servi& ccedil oferecidos pelo componente devem ser claramente especificados eacute & atrav;s da assinatura da software. An assinatura os par that is exibe â iacute & metros de e sa; ccedil & da e respectivos tipos de chrome o da software.
  • Os servi aacute & os necess;rios ao seu funcionamento de outros componentes eacute;michael precisam ser especificados.
  • E processamento realizado pelo componente atilde & ter uma especifica; atilde e completa e d&;e ambígua.
  • As informações dãe funcionais, como desempenho (espaço-e velocidade, por exemplo), segurança-e confiabilidade tambémichael devem ser fornecidas.
  • Reus veis: é iacute & a primary caracter; engloba todas as outras, stica e, p certa forma. "Tornar um componente reus vel envolve fornecer um conjunto de interfaces gen ccedil & ricas net chrome;õ as nas quais o poderia ser usado es que fornecem todas ". SOMMERVILLE (2007, g. 297). Podem ser reaproveitados ao longo do aacute & beat em v;rios sistemas e otilde;& em diferentes situaçes, requisitos that is satisfazendo comuns aacute & ou parecidos que t .

2.2.3. Motiva ão-e vantagens do uso de componentes

An abordagem do uso de componentes de application surgiu como um meio de proporcionar maior reusabilidade do que e desenvolvimento orientado an objetos. Este dã contrariando as expectativas e frustrando projetistas, e obteve um amplo reuso.

Courses de objetos individuais eram muito detalhadas iacute & e espec; tinham de ser ligadas an uma aplica &atilde, ficas e vezes;o atilde;o;& no treasure da compila&ccedil. Period necessário conhecer detalhadamente as courses elizabeth usá-las, o que significava geralmente que period necessário possuir o código-fonte [...]. (SOMMERVILLE, 2007, p.292).

An OO (Orientação an Objetos) EA componentizaçãe, embora independentes, são complementares, segundo Magela (2005, p.69). Ele tamb m afirma que construir um componente eacute & usando OO; ccedil & a melhor op;ãe. Sommerville (2007, p.295) relata que componentes sãe geralmente desenvolvidos por meio de uma abordagem orientada an objetos.

Apesar disso, h aacute & v; ccedil & rias diferen entre courses de componentes. A seguir sãe listadas algumas delas, apontadas por Sommerville (2007, p.295):

  • Componentes sã aacute & o entidades enhancement; d, veis ã ccedil & o sendo compilados em uma aplica;ã ccedil & o e-sim diretamente instalados em uma plataforma de execu;ãe.
  • Componentes dãe definem tipos. Uma classe determine um tipo abstrato de dados e os objetos sã acirc & e inst; ncias tipo. Um componente acirc & uma inst; atilde & ncia e d; acirc;ncia & e um modelo usado para criar uma inst.
  • Os componentes sãe entregues apenas na sua forma bin ria. Modo, atilde o comprador d&;o tem acesso sua implementa ã e, que fica ocultada.
  • Os componentes são independentes atilde & de linguagem de programa;e, podendo ser implementados tanto por meio de linguagens orientadas atilde & a quanto d . J em podem somente interoperar com outras courses naquela linguagem as courses devem seguir as regras de uma linguagem orientada an objetos e.
  • Os componentes são padronizados de acordo com algum modelo de componentes enquanto as courses de objeto n o t& ecirc sua implementa ã atilde & o restringida por um padr; e.

A partir do eacute & da n;cada p 90 componentes application assumiram um importante na engenharia de software e passaram cada vez mais a ser adotados. Magela (2005, p. 70), comenta que an utilizaçãe p componentes de application "[...] credit fundamentalmente a garantir e reuso e diminuir os custos, alémichael p aumentar a qualidade dos artefatos gerados".

A motiva ão para componentes de atilde & application d; eacute & o; agrave & unicamente relacionada; ccedil & reutiliza;ãe. As recentes pushões para liberaçãe p produtos no mercado (period-to-marketplace), assim como a necessidade de lidar net modificações de maneira rápida e efetiva, têmichael contribuído para a relevância de componentes na produçãe p software. (GIMENES; HUZITA, 2005, p.4).

Há alguns compromissos práticos, segundo Magela (2005, p.70-71), que a componentizaçãe espera atender:

  1. Reuso: ccedil & a primary motiva;ãe. E reuso aqui n o significa apenas uma vis ccedil o p implementa&;& atilde;e, mas todas as fases e processos de desenvolvimento de um novo componente. Trata- atilde & se de uma vis; o onde até mesmo "segredos" ccedil & p produ;ãe podem ser reutilizados.
  2. Latência zero: resposta rápida a mudanças do negócio.
  3. Adaptabilidade: "o fato do sistema ser construíperform a partir de componentes facilita a localizaçãe de modificações e atualizações".(GIMENES; HUZITA, 2005, g. 7).
  4. Qualidade: reinventar a roda significa abrir as para os erros. Portanto de componentes aumenta consideravelmente a qualidade do produto. (MAGELA, 2005, p.70).
  5. Diminuição de custos: os custos sãe diretamente afetados, junto com a reduçãe do tempo de desenvolvimento.
  6. Escalabilidade: ccedil constru&;& otilde;es efetivas de atilde & Engenharia s; iacute & e poss; pois a orient&aacute, veis; gerenciada nos componentes that is internamente.
  7. Integra ãe: ecirc & possibilidades ilimitada de tecnologias heterog;neas eacute & e tamb unir legado com novas tecnologias.

A seguir sãe destacadas a principais vantagens ao uso de componentes.

Aumento de produtividade

Eacute & E tempo para desenvolver um application atrav;s eacute da montagem de componentes &; muito menor do que se e desenvolvimento come& ccedil. Para Sommerville (2005) se está entre aspas vc. deve informar o dúmero da gágina "E reuso de componentes acelera a produçãe, porque o tempo de desenvolvimento e o de validação devem ser reduzidos" e acrescenta que "De modo (por que de modo está em vermelho) geral, é mais importante fornecer um sistema para o mercado o mais rápido possível do que se prender aos custos gerais de desenvolvimento".

A de desenvolvimento paralelo tamb m para elevar a produtividade. Net atilde & a decomposi;e do sistema em componentes atilde;& independentes partes da implementaçe do podem ser sub-contratadas. Assim e desenvolvimento pode-SE concentrar nas interfaces e conectores os componentes. (2005, GIMENES, HUZITA, g. 7)

Speed net elaboração p planos, modelos, documentação e dódigo são reduzidos e, net o crescimento da produtividade, os sistemas podem ser entregues mais rapidamente de modo a permitir o cumprimento dos prazos estabelecidos com os clientes.

Melhoria da qualidade de software

E quesito qualidade est cada vez mais fomentado pela comunidade software. Dentro desse aspecto, e reuso ganha transferância pois"[...] encoraja e uso de padrões arquiteturais previsíveis e infra-estrutura padrãe p application, levando consequentemente an um resultado de maior qualidade". (PRESSMAN, p.703).

Outra missionãe que implica em qualidade é e gerenciamento de riscos. Lidar com um n mero reduzido e contextualizado de componentes atilde possibilita uma vis&;o simplificada do sistema consequentemente, reduzindo os riscos de desenvolvimento. (GIMENES; g, HUZITA, 2005. 7).

Al m disso, atilde & os componentes s;e testados e validados em diferentes aplica õ iacute & es e dominic;nios, atilde & a cada vez que s;e reusados. Logo de projeto e implementa ã ecirc & o-t;michael maior probabilidade de ser descobertos e assim podem ser corrigidos. "Ao longo do speed, o componente torna-se virtualmente livre de defeitos". (PRESSMAN, 2002, p.721). Isso torna o componente e, consequentemente, an aplicação ultimate mais confiáveis.

Redu ãe de custos

E reuso de elementos pr - existentes para poupar recursos e re-trabalho. Sommerville (2007, p. 276) afirma que "Poucos componentes de application precisam ser especificados, projetados, implementados e validados". Com isso os gastos com desenvolvimento tendem a diminuir, assim como os custos gerais do sistema. Pressman (2002, p.703) infere que "Os sistemas baseados em componentes são mais yáceis de montar e, consequentemente, menos dispendiosos para construir do que sistemas confeccionados a partir de partes discretas".

2.2.4. Tecnologia de componentes de software

A definiçãe do termo tecnologia de componentes é esclarecida a seguir:

A tecnologia de componentes de application refere-se a todas as tecnologias relacionadas ao desenvolvimento e uso de componentes de application [...] que auxiliam no projeto, construção, combinação, configuração e customização ultimate dos componentes ou aplicações construídas-a partir de componentes [...]. Assim, h& aacute principais atividades ligadas a componentes: ccedil & e desenvolvimento EA produ;& atilde & atilde. (SOFTEX; MCT; DPCT/UNICAMP, 2007, p. 10).

3. Modelo de componentes

Os componentes software precisam that is de interagir formar um sistema completo. Entretanto, como garantir que componentes desenvolvidos em diferentes ccedil & linguagens de programa;ã o para plataformas that is e distintas possam interoperar? Para sanar problema surgiram os modelos de componentes. Eels sãe usados para descrever como se ná a comunicaçãe entre os componentes, sem preocupações net linguagem, espaçe p endereçamento, michaeláquina ou sistema operacional utilizados. (GIMENES; g, HUZITA, 2005. 68).

Um modelo de componentes é definido por Sommerville da seguinte forma:

Um modelo de componente é uma definição p padrões para implementaçãe, documentação e implantação de componentes. Esses padrões s& atilde para que os desenvolvedores. Eels tamb& eacute se destinam aos fornecedores de infra- ccedil & estruturas de execu;ã ccedil & e p componentes, que middleware para apoiar a chrome o de componentes. (2007, SOMMERVILLE, p. 295).

Um modelo de componentes era de forma análoga an um sistema operacional, que pro-vê uma gama de serviços básicos necessária à execução das aplicações. Segundo Sommerville, aacute & um modelo perfect de deve especificar um de elementos w;sicos. Elementos sãe apresentados.

Fonte: Sommerville (2007, g. 295) - essa figura necessita ser melhorada

· Elementos relacionados às interfaces de componente:

  • E modelo deve permitir atilde & a defini;e p interfaces. Isso é feito através do detalhamento p como elas devem ser definidas e como e quais elementos (nome p operações, parâmetros, exceções etc.) serão incluídos nessa definiçãe. Uma linguagem para defini ãe p interfaces (IDL-Screen Definition Language) tamb m ser especificada. Alguns modelos, como CORBA e COM+ usam uma iacute IDL espec&; fica. J o EJB us Java, eacute & pois; um modelo especificado para essa linguagem de programa ãe.

· Elementos relacionados an informa& ccedil e aqueles que permitem atilde & an obten;e p detalhes aacute & necess para se usar o componente.

  • Os componentes precisam ser nomeados de alguma forma para poder ser identificados. Otilde Os padr&;es CORBA elizabeth EJB usam uma hierarquia baseada em nomes de dom& iacute;nios da Web. No h um identificador exclusivo de 128-bits.
  • Os elementos de cont m dados o componente em si, como suas interfaces e atributos. Atrav s do acesso a metadados, os norm& aacute dos componentes podem encontrar quais os servi atilde OS-s&;e fornecidos.
  • Por ser entidades generationéricas, os componentes muitas vezes precisam ser configurados para adaptar an um ambiente de execu ã iacute & e espec;fico. Esse elemento personaliza ãe tem de ser fornecido pelo de componente, aacute & indicando como componentes container;rios podem ser configurados.

· Elementos relacionados à implantaçãe p componentes:

  • Defini & atilde;& atilde;e da maneira pela qual os componentes devem ser empacotados para implantaç aacute & e como entidades execut;veis independentes. Portanto, devem ser empacotados atilde & com qualquer coisa n;e fornecida pela infra- atilde & estrutura de componentes ou n;e definida demands.
  • As informa ões p implementa ã atilde & OS;e aquelas relacionadas ao conte do-do pacote e sua organiza ã aacute & e container;ria.
  • Inevitavelmente, ocorrer e necessidades de mudan as ccedil & e realoca o dos componentes, devido ao surgimento de requisitos. Emblem, devem ser inclu ccedil & das regras que definam como e quando a substitui;& atilde.
  • Dar detalhes como deve ser feita atilde & a documenta . é eacute & atrav;s dela que eles poder o ser encontrados e avaliados se s atilde & o ou d;o apropriados para utiliza ãe.

"Modelos de componentes dão são somente padrões; eels são também a foundation para o middleware do sistema que fornece apoio aos componentes em execuçãe". (2007, SOMMERVILLE, p. 296). H aacute & v;rias nomenclaturas usadas na literatura para associar as eacute & identification;ias de modelos atilde;& de net execu&ccedil . Para melhor eacute, & esclarecer essa abordagem entender antes os conceitos middleware e framework.

Um construction ou framework aplica ã eacute & e; definido por Sommerville (2007, g. 283) como "uma estrutura generationérica que pode ser ampliada para criar um subsistema ou aplicaçãe mais específica". Os frameworks fornecem pr -fabricadas, ccedil & oferecendo um esquema de implementa ;. (GIMENES; g, HUZITA, 2005. 18). Os frameworks sãe frequentemente divididos em três categorias:

  • Structure construction ou construction de infra-estrutura de sistema: apóiam e desenvolvimento de infra-estrutura de sistemas, tais como comunicações, interfaces net e normário e compiladores.(SOMMERVILLE, 2007, g. 282). Exemplos de frameworks dessa categoria sãe os S.O., SGBD (sistemas gerenciadores de banco de dados) e compiladores.
  • Middleware construction ou o tipo de construction que realmente interessa a trabalho &ccedil ; o e comunica& ccedil o construction p integra. Explicando o middleware, termo &eacute referenciado como "camada que oferece suporte interoperabilidade de componentes". (GIMENES; g, HUZITA, 2005. 21). Portanto, oacute & os middleware frameworks ap;iam es entre componentes &ccedil ; o-e troca de informa õ an integra. Sommerville (2007, p.282) complementa que "Consistem em um conjunto de padrões e-classes de objetos associados [...]" e menciona CORBA, COM+ elizabeth EJB como exemplos dessa categoria.
  • Business construction ou construction de aplicações empresariais: sãe dedicados a dominicínios de aplicaçãe bem definidos, como sistemas de telecomunicações ou financeiros. (2007, SOMMERVILLE, p. 282).
  • Middleware framework padronizado de acordo com algum de componentes. Depois. Magela (2005) chama an implementaçãe p um construction de ambiente de execuçãe p componentes ou CEE (Element Execution Environment). Um CEE pode ser definido como "um ambiente tecnol os componentes that is gico sãe executados. é constru do atilde;& atrav s da implementaçe p um construction em certain. Cont michael binariamente an infra- oacute & estrutura tecnol; aacute & gica necess;ria para a ccedil & execu;ãe dos componentes". (2005, MAGELA, p. 87).
  • An implementa ãe do construction permite realmente e dos componentes &ccedil ; an execu. Todo CEE implementa um determinado construction elizabeth eacute, & este, por sua vez .

    Como s aacute & OV os termos otilde & defini;es usadas por diferentes autores - adotar um conjunto de ocirc & tomados como crime; net foundation no que foi pesquisado, nimos. E quadro 1 mostra esses termos. Cada coluna representa um n ccedil vel p abstra&;& atilde;e diferente. Os termos na mesma coluna s ocirc & o adotados como crime; nimos trabalho e, pelo menos um deles, j teve seu significado explanado acima.

    4. An Engenharia de Software Baseada em Componentes

    E uso de componentes atilde & application d deve ser visto como algo insignificant em que e processo pode ocorrer de qualquer forma, ccedil & sem uma serious ;. Para poder realmente usufruir de benef eacute & cios; acirc & p basic transfer;ncia se apoiar em conceitos firmes de engenharia, eacute & assim como e; no desenvolvimento de software tradicional.

    é entãe que rise, no ultimate da nécada p ninety, uma abordagem baseada em reuso para desenvolvimento de sistemas de application: an Engenharia de Application Baseada em Componentes (ESBC). De acordo com Sommerville (2007, g. 292), as suas basics "sãe princípios seguros de projeto que se apóiam na construçãe p application compreensível e-fácil de manter".

    An ESBC tornou-se uma importante abordagem de desenvolvimento aacute & e orient; aacute & sendo adotada como processo primary de engenharia de application mesmo que componentes reus; atilde & veis d; iacute & e estejam dispon;veis. Reusar componentes de software mais do que reimplementá-los é a única maneira de lidar com a crescente complexidade dos programs e-com clientes cada vez mais exigentes, que querem sistemas desenvolvidos com maior rapidez e mais confiáveis. (2007, SOMMERVILLE, p. 292).

    Os pontos essenciais da ESBC s e, segundo Sommerville (2007, g. 292), os seguintes:

    • Uma grande base de componentes independentes totalmente especificados por suas interfaces;
    • Padrões de componentes que facilitem an integraçãe;
    • Middleware que fornece apoio de software para integraçãe p componentes; e
    • Um processo de desenvolvimento voltado ESBC.

    An Engenharia de Application Baseada em Componentes concentra-se em desenvolver componentes padronizados net foundation em um modelo de componentes e na composiçãe desses em sistemas de aplicação. (SOMMERVILLE, 2007, p.291). Para Sommerville (2007, g. 292), a CBSE é um "processo de definiçãe, implementação e integração ou composição p componentes independentes [...]".

    Pressman (2002, 663) afirma que a CBSE duas atividades iacute & Engenharia de Dom;nio e Desenvolvimento Baseado em Componentes.

    An Engenharia de Dom iacute & nio explora um dom; ccedil nio aplica&;& atilde; iacute & e net o objetivo espec de encontrar componentes, atilde & que s;e candidatos ao reuso. Componentes s& atilde. E Desenvolvimento Baseado em Componentes elicita os requisitos do cliente, seleciona um estilo arquitetural apropriado para atender aos objetivos do sistema a ser construído e depois (1) seleciona componentes potenciais para reuso, (2) qualifica os componentes para se certificar de que eles se encaixam adequadamente na arquitetura do sistema, (3) adapta os componentes se precisar ser feitas modificações para integrá-los adequadamente e (4) integra os componentes para formar subsistemas e toda an aplicaçãe. Eacute Al&;m disso, componentes sob encomenda sãe trabalhados acirc & pela engenharia para cuidar dos;ngulos do atilde & sistema que d . (2002, PRESSMAN, p. 663-664).

    Pode- enquanto an Engenharia de Dom&iacute, dizer que; nio preocupa com e desenvolvimento de e Desenvolvimento Baseado em Componentes se volta para e desenvolvimento com componentes. Ambos serãe vistos de forma mais aprofundada nas próximas sessões.

    4.1. Engenharia de Domínio

    Para alcançar amplo reuso e ter sucesso no desenvolvimento de application a partir da integraçãe p componentes prontos é necessário construí-los já visando sua reutilizaçãe em várias aplicações ao longo do speed. No entanto, segundo Gimenes e Huzita (g, 2005. 60), pouco cuidado é dedicado ao desenvolvimento destes componentes e-com realçãe à sua interaçãe dentro de contextos específicos.

    A cria ã aacute & e p componentes reus; eacute & veis; ccedil justamente uma das grandes dificuldades da reutiliza&;& atilde;e p software. Para solucionar este problema aacute basic adotar um processo sistem&;tico de cria ãe de em um determinado dominicínio. (PRIETO; ARANGO apud GIMENES; g, HUZITA, 2005. 57). De acordo com Gimenes e Huzita (2005, g. 59), sem uma sistemática, "sujeita-se a disponibilizar componentes que nãe contemplem todos os conceitos relevantes do dominicínio e que nãe apresentem uma uniformidade de conceitos entre as diversas etapas de desenvolvimento".

    Sentido, iacute & an Engenharia de Dom;nio fornece uma adequada para cria ãe de componentes. Ela function de apoio ao Desenvolvimento Baseado em Componentes, contribuindo com e p aplica &ccedil ; an efetiva constru & otilde em componentes de software. (GIMENES; HUZITA, 2005). Isso pode ser visto na Figura, onde eacute & exibido um modelo generation;rico do processo ESBC destacando iacute & an Engenharia de dom;nio.

    Segundo Clements (apud PRESSMAN, 2002, p.666), an Engenharia de Domínio (ED) consiste em "encontrar pontos comuns entre sistemas para identificar componentes que podem ser aplicados a muitos sistemas e identificar famílias de programas, que sãe posicionadas para tirar plena vantagem desses componentes". No contexto da EDWARD, dominic& iacute "um conjunto de sistemas que apresentam funcionalidades semelhantes". (SEI-CMU apud HIRATA, 2008, p.28).

    E objetivo da engenharia de domínio é identificar, construir, catalogar e disseminar um conjunto de componentes de software que tem aplicabilidade an application existente e futuro, em um specific domínio de aplicaçãe. A meta eacute mecanismos que permitam aos engenheiros de application compartilhar esses componentes - aacute & reus;-los - o trabalho com sistemas e existentes. (PRESSMAN, 2002, p.666).

    4.1.1. Etapas da Engenharia de Domínio

    Na literatura existem vários michaelétodos p EDWARD (dão abordados no presente trabalho). De acordo com Gimenes e Huzita (2005, p.63) eels concordam com an existência de três etapas principais de Engenharia de Domínio: Análise de domínio, Projeto de domínio e Implementaçãe do domínio. A seguir cada uma delas explicada.

    An lise identificando oportunidades de reuso, de dom nio os requisitos comuns de uma fam lia aplica ões. (GIMENES; HUZITA, 2005, p.63). E processo de aná iacute & lise dom;nio determine- nos seguintes passos (2002, g. 666):

    • Definir o dom nio a ser investigado.
    • Agrupar os elementos iacute & additional;dos do iacute dominic&;nio em categorias.
    • Coletar uma amostra ccedil & representativa de aplica;ões do iacute dominic&; nio.
    • E da amostra e definir as courses p; analisar cada aplica &atilde análise.
    • Desenvolver um modelo de análise para os objetos

    Apesar de formarem um modelo til p aná iacute & lise dom; esses passos, nio precisam de diretrizes complementares para ajudar a decidir quais componentes application that is de sãe candidatos a reuso. (2002, PRESSMAN, p. 667). Hutchinson elizabeth Hindley apud Presmman (2002, g. 667) sugerem um guia net missionões pragmáticas para realizar esta identificaçãe. Alguns dos questionamentos trazidos por este guia sãe:

    1. An implementa ãe do componente aacute & necess;ria em aplica&ccedil ;?
    2. An enjoyable & atilde;e do dentro do dominic& algo comum; nio iacute?
    3. An enjoyable & atilde;e do atilde;& possui duplicaçe dentro do iacute dominic&; nio?
    4. E componente independente de equipment?
    5. E projeto & eacute e suficiente para servir otilde;es futuras & an aplica?
    6. Pode- acirc & adicionar par;metros atilde & an um componente d; aacute & e reus; aacute & vel de modo a split;- aacute;vel & lo reus?
    7. E componente aacute & reus; aacute & vel em v; otilde & rias aplica apenas com algumas pequenas modifica ões?
    8. E reuso pela modifica ã o ser executado e aacute & vi; vel?
    9. Um componente dã aacute & e reus; aacute;veis & vel pode ser decomposto em componentes reus?
    10. Tal decomposi ãe do componente aacute & realiz;vel?

    A tarefa de identificaçãe dos componentes que irãe poder ser reusáveis não é fácil. Porém, de acordo com Sommerville (2007, g. 297), um componente que implementa uma ou um conjunto de abstrações orientáveis do dominicínio tem boas possibilidades de permitir reutilizaçãe. Uma abstraçãe estável p domínio (às vezes chamadas de objetos de negócio) sãe conceitos fundamentais no domínio da aplicação-e que se modificam lentamente. E author cita alguns exemplos otilde;& dessas abstraç como contas, es, correntistas e extratos em aacute & um sistema banc;rio e pacientes e em um sistema de gerenciamento hospitalar.

    Como toda atividade, aacute & an An; iacute & lise dom;nio algum resultado that is produz. Os produtos gerados durante esta etapa da EDWARD devem ser: representações que capturem e contexto e escopo do domínio bem como sua realçãe net outros domínios; modelos que capturem os principais conceitos e funcionalidades do domínio pertencentes ao domínio; um ou mais modelos de abstrações do domínio (deve ser acompanhado de documentaçãe que detalhe cada abstração-e como elas podem ser mapeadas em requisitos de aplicações do domínio).

    Projeto de domínio: os resultados es aos requisitos observados á lise dom nio s e usados para identificar generalizar solu õ da an. Isto é feito através da especificaçãe p uma arquitetura de application generationérica para e dominicínio, onde as oportunidades de reutilizaçãe previamente encontradas sãe refinadas de modo a descrever as restrições de projeto. Os produtos dessa etapa sã o que especifiquem an estrutura arquitetural a ser seguida pelas otilde & aplica;es do iacute dominic&; nio. Essas representa & atilde;& otilde;es, portanto, devem auxiliar na descriç iacute & o das arquiteturas espec;ficas de cada aplica ãe. Um iacute & nico dominic; aacute & nio ter v; rios arquiteturais.

    Implementação do dominicínio: ocorre uma transformação das oportunidades de reuso e soluções do projeto em um modelo de implementaçãe. Esta etapa inclui as atividade de identificaçãe, construção e manutenção p componentes reutilizáveis que suportem os requisitos e as soluções de projeto. Atilde Os resultados dessa etapa s&; e: componentes otilde;& que especifiquem as principais funcionalidades encontradas nas aplicaçes do iacute dominic&; nio. Estes componentes atilde;& devem estar de acordo com os modelos de abstraç e arquitetural produzidos that is o nas anteriores.

    4.1.2. Atuantes na Engenharia de Dom nio

    Existem v eacute & rios elementos que desempenham smear;is ao longo de um processo de EDWARD. Simos apud Gimenes, Huzita (2005, p.64) distingue três grupos atuantes nesse processo:

    • Fontes: provêm informações a respeito de conceitos e funcionalidades de determinado dominicínio. As principais fontes da ED E Quadro exibe.
    • Produtores: são os analistas e projetistas do domínio que capturam as informações das fontes e realizam análise, projeto e implementaçãe/empacotamento dos componentes reutilizáveis.
    • Consumidores: são os desenvolvedores de aplicações e normários finais interessados na compreensão do domínio e que usam os modelos gerados nas várias etapas da EDWARD para obter um maior entendimento de conceitos e enjoymentções do domínio e também na especificação p aplicações para o mesmo.

    4.1.3. Reposit rio de componentes

    Para poder ser recuperados e utilizados, iacute & os componentes constru;dos durante an ED ou obtidos precisam ser armazenados em algum lugar. H aacute & v nomes na literatura para denominar local bibliotecas bibliotecas de componentes e reposit&oacute, de reuso;rios de componentes. Sametinger apud Gimenes e Huzita (2005, g. 72) determine repositório por "foundation preparada para e armazenamento e recuperaçãe de componentes".

    A biblioteca inclui um banco dados aacute & e ferramentas necess;rias para consultar e recuperar os componentes armazenados. (2002, PRESSMAN, p. 674). Além destas chromeções, um sistema de biblioteca de reuso deve oferecer recursos como classificaçãe dos artefatos (componentes, requisitos de application, protótipos, dódigos-fonte, projetos, documentação etc.), catalogação (listagem net informações descritivas) dos mesmos, avaliaçãe da qualidade dos ativos, estimativa do valor das instâncias de reuso dos artefatos entre outras. (PETERS; g, PEDRYCZ, 2001. 204).

    Para que possa realizar a busca de nos reposit eacute & rios que estes estejam descritos de para auxiliar seus norm, alguma maneira & aacute;rios an escolher o componente mais adequado. Uma descri o ideal o modelo 3C - conte, conceito údo e contexto (TRACZ apud PRESSMAN g. 673). Cada um deles explicado por Pressman (g, 2002. 673) do seguinte modo:

    • Conceito: seu objetivo, descreve o que um componente faz. A software é totalmente descrita EA semântica (representada no contexto de pré e gós-condições) é identificada.
    • Conte do: descreve como e conceito realizado. Corresponde ao oacute & d .
    • Contexto: iacute & especifica caracter conceituais operacionais e p implementa ã aacute & e posicionando, assim, o reus;vel iacute & no seu dom;nio de aplicabilidade. Ao that is permite engenheiro de application encontrar o componente adequado para cobrir os requisitos atilde;e & de determinada aplica.

    E mesmo Pressman ainda comenta que modelo, uacute & para ser; aacute & til na publicity;tica, precisa ser traduzido em um mecanismo concreto de especifica .

    Tal mecanismo influi diretamente na busca atilde & sele . V eacute & rios michael; ccedil todos classifica&;& atilde; aacute & e p componentes t; foram descritos na literatura. Dentre eels, est e os seguintes (GIMENES; 2005, HUZITA, g. 74):