• No results found

Governance

In document NORGES BANK' S (sider 25-41)

A inferˆencia de padr˜oes de concep¸c˜ao num projecto de software pode ter v´arias finalidades. Pode ser, por exemplo, utilizada como medida de qualidade, obten- ¸c˜ao de informa¸c˜ao extra, entre outras possibilidades. A identifica¸c˜ao de padr˜oes pode tamb´em surgir no contexto de manuten¸c˜ao de um projecto. Nesta fase de manuten¸c˜ao de um projecto, quando ´e preciso fazer correc¸c˜oes no mesmo, surge a necessidade de analisar detalhadamente o software em quest˜ao. Por norma para

perceber o software a alto n´ıvel a ´unica solu¸c˜ao ´e a an´alise da documenta¸c˜ao, que normalmente ´e obsoleta e incompleta, tornando-se in´util. Resta ent˜ao fazer uma an´alise manual, por leitura do c´odigo fonte. Uma solu¸c˜ao a este problema passa por obter o modelo do projecto e fazer a an´alise de padr˜oes presentes no c´odigo [31].

A capacidade de inferˆencia de padr˜oes ´e o segundo componente da ferra- menta proposta. Depois da cria¸c˜ao de diagramas de classes ou PIM/ PSM com base no c´odigo, a ferramenta dever´a ser capaz de inferir poss´ıveis padr˜oes de concep¸c˜ao existentes nesse software. Este processo pode ser feito de v´arias for- mas distintas e espec´ıficas. O resultado final (em quantidade e qualidade) vai depender da abordagem feita ao problema [16].

Como descrito por v´arios autores, a ideia base consiste em analisar o c´odigo e recolher os elementos relevantes. Normalmente esses elementos s˜ao classes, rela¸c˜oes, m´etodos e inova¸c˜oes. Com os dados recolhidos, ´e criada uma represen- ta¸c˜ao interm´edia. Outro componente da ferramenta respons´avel por identificar e mostrar os padr˜oes processa esta representa¸c˜ao. Alguns autores demonstraram que para este processo, existem diversas abordagens razo´aveis [17, 75, 36, 44].

Existem trˆes abordagens a ter em conta no processo de an´alise: estrutural, comportamental e semˆantica, sendo a ´ultima a menos usada. A an´alise estru- tural foca-se na estrutura dos componentes de um software (em Java para as classes, interfaces, etc.). A an´alise comportamental observa o comportamento desses componentes, na forma como interagem bem como resultados que produ- zem (objectos). Por fim a an´alise semˆantica analisa o interior de cada um desses componentes. A abordagem mais usada ´e a estrutural baseada na representa- ¸c˜ao interna, por vezes combinada com a comportamental. De acordo com Jing Dong et al. [16], a an´alise estrutural permite a obten¸c˜ao de bons resultados. Combinado a an´alise estrutural com a comportamental podem ser melhorados os resultados. Normalmente a adi¸c˜ao da an´alise semˆantica n˜ao tr´as melhorias significativas.

A forma como estas ferramentas fazem a sua representa¸c˜ao interna ´e muito distinta em v´arios aspectos. As abordagens podem ser separadas em categorias: representa¸c˜ao como grafo (ou ´arvore) onde a hierarquia dos elementos ´e pre- servada, representa¸c˜ao como matriz, representa¸c˜ao numa forma sint´actica que pode ser analisada e processada e representa¸c˜ao numa linguagem de programa- ¸c˜ao (como Prolog [15]). De acordo com Jing Dong et al. [16], as matrizes e grafos levam a bons resultados podendo ser obtidos a partir das representa¸c˜oes de diagramas de classes, o que ´e importante neste contexto. Para al´em disso, a representa¸c˜ao nessas formas ´e facilmente manipul´avel e j´a provou ser uma boa abordagem [33]. Outras abordagens tˆem vantagens e desvantagens quando com- paradas com estas, mas como a ferramenta proposta tem como objectivo ter uma representa¸c˜ao pr´evia como diagrama de classes, a abordagem como grafo (ou ´arvore) parece ser adequada.

2.5. INFER ˆENCIA DE PADR ˜OES 29 ferˆencia dos padr˜oes de concep¸c˜ao. Tamb´em aqui existem diversas abordagens poss´ıveis, que ser˜ao de seguida apresentadas. A ideia base consiste na compara- ¸c˜ao entre padr˜oes de concep¸c˜ao e uma representa¸c˜ao interna, onde ambos tˆem de estar na mesma linguagem. Nesta compara¸c˜ao s˜ao procuradas similaridades entre ambas as representa¸c˜oes [16]. Todas as alternativas consistem em varia- ¸c˜oes desta abordagem. Uma abordagem em espec´ıfico consiste em representar os padr˜oes em diagramas de classes, e de seguida procurar por similaridades estruturais [17, 70]. DeMIMA, uma ferramenta de an´alise de padr˜oes, espec´ıfica um processo em trˆes passos: modelar o c´odigo fonte, enriquecer o modelo com rela¸c˜oes e especializar o modelo [36]. Existe tamb´em a possibilidade de represen- tar os padr˜oes em matrizes e de seguida utilizar um algoritmo de “pontua¸c˜ao” (scoring) onde ´e testada a similaridade entre duas matrizes, uma contendo a representa¸c˜ao do c´odigo, outra a representa¸c˜ao de um padr˜ao. De seguida ´e calculado uma “pontua¸c˜ao” (score) que indica qual o grau de similaridade des- tas matrizes [83]. Uma abordagem diferente consiste em fingerprinting onde o c´odigo ´e analisado pelos atributos externos, que foram catalogados em padr˜oes de concep¸c˜ao previamente. Para estas abordagens importa ainda referir que algumas levam `a identifica¸c˜ao de padr˜oes exactos, enquanto que outras apenas extraem aproxima¸c˜oes de padr˜oes [16].

EmDeMIMA [36] ´e proposta uma ligeira altera¸c˜ao ao processo, introduzindo o conceito de multi-camada. Este processo consiste em trˆes n´ıveis no processo: analisar o c´odigo e gerar um modelo, representar o modelo de acordo com um idioma, e por fim descrever esse modelo na mesma linguagem dos padr˜oes [36]. Esta variante n˜ao prova trazer melhorias significativas aos resultados obtidos.

J´a Andrea et al. [53] descreve um processo com an´alise de baixo n´ıvel que permite bons resultados. Para tal, o c´odigo ´e analisado e a informa¸c˜ao estrutural com os m´etodos e suas invoca¸c˜oes ´e extra´ıdo. A an´alise estrutural cria candidatos a padr˜oes e com esta informa¸c˜ao auxiliada da informa¸c˜ao de m´etodos e invoca¸c˜oes, uma an´alise de baixo n´ıvel ´e efectuada onde os padr˜oes s˜ao ent˜ao inferidos.

Um problema conhecido na an´alise de padr˜oes ´e a possibilidade de falsos positivos. Este problema consiste na detec¸c˜ao de padr˜oes onde na verdade n˜ao existem. Algumas ferramentas, comoFujaba sugerem uma abordagem top-down ap´os extra´ıdos os padr˜oes, para fazer evitar falsos positivos [23]. Outras ferra- mentas optam por fazer uma selec¸c˜ao mais rigorosa ao identificar padr˜oes, sendo que esta abordagem pode levar a falsos negativos ignorando poss´ıveis padr˜oes [75].

Em Ptidej [31] ´e feita uma abordagem com algumas diferen¸cas que ser˜ao descritas de seguida. Para come¸car ´e definido um metamodelo, e s˜ao definidos trˆes n´ıveis de abstrac¸c˜ao: idiom´atico, de concep¸c˜ao e implementa¸c˜ao. O n´ıvel de implementa¸c˜ao corresponde ao c´odigo fonte do programa em quest˜ao. O n´ıvel de concep¸c˜ao ´e o n´ıvel mais alto de abstrac¸c˜ao, correspondente ao PSM. O n´ıvel idiom´atico ´e um novo n´ıvel definido pelo autor, como um n´ıvel interm´edio entre

os n´ıveis anteriores. O n´ıvel idiom´atico cont´em informa¸c˜ao est´atica (Java) e di- nˆamica (para o comportamento, execu¸c˜oes, afecta¸c˜ao, etc.), e o autor descreve um metamodelo para representar esta informa¸c˜ao. O autor considera ainda que as propriedades fundamentais para a identifica¸c˜ao de padr˜oes residem nas re- la¸c˜oes entre as classes, e considera que a ambiguidade na especifica¸c˜ao destas em UML s˜ao um problema na sua identifica¸c˜ao. Assim, define detalhadamente estas rela¸c˜oes e algoritmos para demonstrar a sua tese. A identifica¸c˜ao de pa- dr˜oes ´e feita com an´alise est´atica e dinˆamica. Para a an´alise dinˆamica recorre `a linguagem Prolog, onde cria uma base de conhecimento de forma dinˆamica que posteriormente consulta [31].

A inferˆencia de padr˜oes com base em factos numa base de conhecimento n˜ao ´e uma abordagem nova. Foi j´a proposta uma abordagem similar com a gera¸c˜ao de factos para um software, juntamente com Smalltalk Open Unification Language (SOUL). Neste caso o que ´e feito ´e a gera¸c˜ao de factos (semelhantes a factos Prolog) com base no c´odigo fonte de um software. S˜ao tamb´em definidas regras que representam padr˜oes de concep¸c˜ao. Posteriormente ´e utilizado o SOUL para fazer a inferˆencia dos padr˜oes existentes com base nos factos e nas regras definidas [87]. Existe pelo menos uma implementa¸c˜ao deste conceito e que prova que esta ´e uma boa abordagem e que permite a sua utiliza¸c˜ao em contexto real, sendo mais do que um mero conceito [57].

Prop˜oe-se assim uma ferramenta com base nas alternativas apresentadas. Dado um software, este ser´a mapeado num metamodelo adequado previamente definido. Este metamodelo dever´a contemplar n˜ao s´o informa¸c˜ao est´atica, mas tamb´em alguma informa¸c˜ao dinˆamica como ´e o caso de invoca¸c˜ao de m´etodos. Dessa representa¸c˜ao ser´a extra´ıda a informa¸c˜ao num formato externo de repre- senta¸c˜ao de factos. Recorrendo a uma ferramenta externa, ser˜ao analisados estes factos (que constituem a base de conhecimento) em busca de padr˜oes de con- cep¸c˜ao. Para permitir a inferˆencia de padr˜oes de concep¸c˜ao ser´a previamente estabelecido um conjunto de regras que definem esses padr˜oes. Esta abordagem ´e similar a algumas apresentadas nesta sec¸c˜ao, uma vez que estas se mostraram boas abordagens.

In document NORGES BANK' S (sider 25-41)