Dissertação de Mestrado. Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente - PDF
Dissertação de Mestrado. Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente
Download "Dissertação de Mestrado. Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente"
Sandra Azambuja Teves
1 UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE CIÊNCIAS MESTRADO E DOUTORADO EM CIÊNCIA DA COMPUTAÇÃO Dissertação de Mestrado Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente Rute Nogueira Silveira de Castro Fortaleza CE, 2006
2 2 RUTE NOGUEIRA SILVEIRA DE CASTRO Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente Dissertação apresentada ao Mestrado em Ciência da Computação da UFC, como requisito para a obtenção parcial do grau de MESTRE em Ciência da Computação Orientadora: Rossana Maria de Castro Andrade, Phd. Co-orientador: Jerffeson Teixeira Souza, Phd. Fortaleza - CE, 2006
3 3 RUTE NOGUEIRA SILVEIRA DE CASTRO Descoberta de Relacionamentos entre Padrões de Software utilizando Semântica Latente Dissertação apresentada ao Mestrado em Ciência da Computação da UFC, como requisito para a obtenção parcial do grau de MESTRE em Ciência da Computação BANCA EXAMINADORA Rossana Maria de Castro Andrade, Phd. Jerffeson Teixeira de Souza, Phd. Maria del Rosario Girardi, Phd. Javam de Castro Machado, Dsc.
4 4 Do or do not. There is no try. Master Yoda
5 Rute Nogueira Silveira de Castro,
6 6 Agradecimentos A Deus, autor da minha vida. À Profª Rossana Andrade, pela valorosa orientação e pelo constante incentivo ao longo da minha vida acadêmica e profissional. Aos meus pais e marido, pela dedicação e compreensão em todos os momentos. Ao Prof Jerffeson Souza, pelo apoio na construção das idéias. Aos amigos e colegas da UFC, em especial aos integrantes do GREat, pelo companheirismo. Aos amigos Rafael Carmo, Aelinton, Joel Uchoa e Leonardo da UECE, que constituíram valiosas ajudas durante a fase de implementação. Ao Prof Javam Machado e à Profª Rosario Girardi por gentilmente comporem a banca. Aos professores do Mestrado em Ciência da Computação da UFC, pelos ensinamentos. A todos aqueles que, direta ou indiretamente, contribuíram para a elaboração desta dissertação.
7 7 Resumo O reuso de padrões de software vem se tornando cada vez mais comum no desenvolvimento de sistemas, pois se trata de uma boa prática de engenharia de software que visa promover a reutilização de soluções comprovadas para problemas recorrentes. No entanto, existe uma carência de mecanismos que promovam a busca de padrões adequados a cada situação. Também há uma dificuldade na detecção de relacionamentos existentes entre os padrões de software disponíveis na literatura. Para solucionar este problema, este trabalho propõe o uso de técnicas de mineração de texto, que busca extrair conceitos inteligentes a partir de informação textual, em um conjunto de padrões de software com o objetivo de identificar se esses padrões se relacionam. Para isso, o padrão de software é tratado dentro de mineração de texto como um volume de texto com uma estrutura definida por seu template. A partir daí, os graus de relacionamentos entre os padrões são determinados nos possíveis tipos de relacionamentos entre eles, bem como através de regras fundamentadas no conceito de Padrões de Software. Essas regras, aliadas à técnica de mineração de texto, geram as informações de relacionamento, dentro de uma amostragem de padrões de software, apresentadas em um estudo de caso. Palavras-chave: Padrões de Software, Mineração de Texto, Repositório de Padrões, Análise de Semântica Latente.
8 8 Abstract The reuse of software patterns has become increasingly common in systems development, because it is a good practice of software engineering that seeks to promote the reuse of solutions recurring for problems. However, there is a lack of mechanisms to search the most appropriate patterns for each software to be developed. There is also a difficulty in detecting relationships among the software patterns available in the literature. To solve the latter problem, this work proposes the use of text-mining techniques, which aims to extract smart terms from a textual information, on a set of software patterns to identify if these patterns are related. To do that, the software pattern is treated within the text mining as a volume of text with a structure defined by its template. Thereafter, the degrees of relationships among patterns are determined through the possible types of relationships among them, and through rules based on the concept of Software Patterns. These rules, together with the technique of text mining, generate the relationship information, within a sample of software patterns as demonstrated in the case study. Keywords: software patterns, text mining, pattern repository, latent semantic analysis.
9 9 Sumário 1. Introdução Caracterização do Problema e Motivação Objetivos, Metodologia e Resultados esperados Organização da Dissertação Padrões de Software Introdução Histórico Classificação de Padrões Elementos de um padrão Relacionamentos entre padrões de software Agrupamentos de Padrões Coleção de padrões Catálogo de padrões Linguagem de padrões Repositório de Padrões de Software Conclusão Análise da Semântica Latente Introdução Mineração de Dados Regras de Associação Classificação Agrupamento CRISP-DM Mineração de Texto Análise das Ferramentas de Mineração de Texto Análise da Semântica Latente Conclusão Aplicando Semântica Latente na Descoberta de Relacionamentos entre Padrões de Software Introdução Metodologia Construção do espaço semântico Decomposição de Valor Singular (SVD) Detecção de Relacionamentos entre Padrões Correlação texto a texto Regras de associação de relacionamento Cálculo do grau de relacionamento Conclusão Estudo de Caso Introdução Aplicação da Metodologia Conclusão Conclusão Resultados Alcançados Trabalhos Futuros Referências Bibliográficas APENDICE A - Implementação LSA... 88
10 10 Lista de Figuras Figura 01 - Classificação dos Relacionamentos entre Padrões do GoF [ZIM95] Figura 02 - Catálogo de Padrões do GoF [GAM95] Figura 03 - MoRaR - Uma Linguagem de Padrões para o Gerenciamento de Mobilidade e de Recursos de Rádio [AND01] Figura 04 Padrão Composite View e padrões relacionados Figura 05 Padrão Interceptor e padrões relacionados... 71
11 11 Lista de Tabelas Tabela 01 - Correlação texto a texto...64 Tabela 02 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte1)...73 Tabela 03 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte 2)...74 Tabela 04 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte3)...75 Tabela 05 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte4)...76 Tabela 06 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte5)...77 Tabela 07 Relacionamentos detectados entre os padrões do GoF, catálogo J2EE, POSA1 e POSA2 (parte6)...78
12 12 Lista de Abreviaturas e Siglas GOF GUI HTML J2EE JSP LSA LSI MD MORAR MT MVC PLOP POSA SVD XML Gang of Four Graphic User Interface Hypertext Markup Language Java 2 Enterprise Edition Java Server Pages Latent Semantic Analisys Latent Semantic Indexing Mineração de Dados Mobility Radio Resources Mineração de Texto Model View Controller Patterns Languages of Programming Pattern-Oriented Software Architecture Singular Value Decomposition Extensible Markup Language
13 13 Capítulo 1 Introdução Este capítulo apresenta na Seção 1.1 uma visão geral sobre reuso de padrões de software e a caracterização do problema que conduz à motivação do trabalho. Na Seção 1.2, são apresentados os objetivos principais da dissertação e, na seção 1.3, é definida a organização da dissertação. 1.1 Caracterização do Problema e Motivação A literatura propõe métodos a serem utilizados nas mais diversas etapas de desenvolvimento de software com o objetivo de garantir os requisitos de qualidade do software, por exemplo em [NBR19001][ISO9000-3][ISO9126-1] [ISO9126-2] e [ISO9126-3]. Para aperfeiçoar a qualidade de um software pode-se, a princípio, definir quais atributos devem ser medidos para que se possa identificar um grau de qualidade. Alguns dos critérios mencionados por diversos autores são correção, facilidade de uso, reusabilidade, legibilidade, eficiência e portabilidade [ISO9126-2][PRE95]. Por um lado, critérios como correção, facilidade de uso, eficiência e portabilidade podem ser medidos pelos usuários. Por outro lado, critérios como reusabilidade e legibilidade são medidos pela equipe responsável pelo desenvolvimento e manutenção do software. De acordo com [TSU97], a qualidade de software também é determinada pela qualidade dos processos utilizados para o desenvolvimento. Deste modo, a melhoria da qualidade de software é obtida pela melhoria da qualidade desses processos. No desenvolvimento de software, os padrões de software aparecem como uma estratégia para representar boas soluções para problemas freqüentes. Com isso, tentam atingir uma melhor qualidade no desenvolvimento de software. Vale ressaltar que reuso de padrões de software vêm sendo cada vez mais difundido entre analistas e desenvolvedores de sistemas, reforçando a relevância desta área de pesquisa dentro da engenharia de software.
14 14 De acordo com [SAN04], os padrões podem ser utilizados individualmente (para resolver problemas isolados ou específicos) ou em conjunto (através do uso de coleções de padrões, por exemplo, para resolver problemas complexos ou para documentar e gerar arquiteturas de software). A utilização de padrões pode ser feita das seguintes maneiras: manualmente onde o desenvolvedor é responsável por modelar ou codificar o padrão por conta própria, a partir de sua documentação ou através do uso de frameworks [AND01] [JON88] e automaticamente através do uso de ferramentas de modelagem, refactoring ou geração de código com suporte a padrões [MAI04]. Um desenvolvedor que utiliza a aplicação de padrões de forma manual pode encontrar dificuldades em localizar os padrões desejados e, por conseguinte, padrões relacionados aos que estão sendo procurados. Além do mais, a tarefa de compreender a solução do padrão para aplicá-lo pode se tornar complexa, à medida que outros problemas decorrentes da utilização do padrão vão surgindo. No caso da utilização automática de padrões, como mencionado anteriormente, existem ferramentas de apoio ao desenvolvimento de software que automatizam o processo de aplicação de padrões de software, auxiliando na modelagem de sistemas, geração e reestruturação de código [KRU99][BER02][TOM04]. No entanto, os padrões aplicados automaticamente através da utilização dessas ferramentas são geralmente restritos a um conjunto de padrões fornecido pelos fabricantes das ferramentas, que na maioria das vezes não é extensível, não suportando a inclusão de novos padrões de acordo com as necessidades dos desenvolvedores. Uma solução para esses problemas é o armazenamento de padrões de software em um Repositório de Padrões, como proposto em [AND03] facilitando, assim, o processo de busca por padrões para que o desenvolvedor de software possa concentrar esforços em aprender a utilizar as soluções dos padrões e adequá-las aos seus problemas.
15 15 Um outro problema comumente encontrado na utilização de padrões é o fato dos modelos de padrões serem disponibilizados em formatos proprietários ou formatos específicos para uma determinada ferramenta, o que também limita as opções de escolha e reuso dos padrões pelos desenvolvedores. Em [SAN04], foi desenvolvida uma ferramenta que busca integrar diversos modelos de Padrões, em um formato não proprietário, a uma ferramenta de modelagem de Software, no caso, o Rational Rose. É importante ressaltar ainda que os mecanismos manual e automático para armazenamento e busca de padrões de software [POR06][DIE06] não suportam os diversos formatos de padrões que existem atualmente, o que pode dificultar o processo de busca e tornar inapropriado o armazenamento do padrão, quando o seu formato original não é preservado. É importante considerar na busca por padrões de software que os que estão disponíveis na literatura não estão isolados. Por exemplo, alguns padrões relacionados aparecem no campo do template dos padrões Related Patterns (Padrões Relacionados). Além disso, algumas linguagens e catálogos de padrões já possuem representações gráficas dos relacionamentos em estruturas conhecidas como mapas. Entretanto, outros relacionamentos não são tão aparentes e necessitam ser explorados. Um Repositório de Padrões de Software, como os propostos em [AND03][MIC05] e [PAT05], mostra-se como uma solução para alguns dos problemas citados anteriormente, tais como a. Portanto, existe a necessidade de armazenar esses padrões em um formato apropriado e disponibilizá-los de forma amigável e rápida para sua recuperação e reuso. É importante facilitar o processo de busca por padrões para que o desenvolvedor de software possa concentrar os seus esforços em aprender a utilizar as soluções dos padrões, adequá-las aos seus problemas e não no processo de busca. Por exemplo, uma funcionalidade interessante para um Repositório de padrões seria a possibilidade de detectar os graus de relacionamento entre os padrões automaticamente resolvendo, dessa maneira, o problema de encontrar padrões
16 16 relacionados. Através dessa funcionalidade, um desenvolvedor de software detectaria as possíveis alternativas à solução proposta pelo sistema (padrão retornado da busca) ou, ainda, complementos à solução previamente proposta através de graus de relacionamentos dos padrões apresentados com quaisquer outros dentro de um Repositório. No entanto, ainda é complicado determinar um grau de relacionamento entre padrões provenientes de agrupamentos diferentes. Isso decorre da dificuldade que os autores encontram em associar o conteúdo de um padrão a outro, já que os mesmos se encontram espalhados na literatura e em sites especializados de maneira dissociada entre si. Dessa forma, a não ser que os padrões estejam dentro de um mesmo agrupamento (linguagem ou catálogo), os graus de relacionamentos entre os padrões não são facilmente detectáveis. Neste trabalho focamos em propor uma solução para o problema de busca de relacionamentos entre padrões armazenados em um mesmo repositório. 1.2 Objetivos, Metodologia e Resultados Esperados Este trabalho propõe o uso de técnicas de Mineração de Dados (MD) para a busca de relacionamentos de padrões dentro de um repositório de padrões. Através dessas técnicas, a extração de informações inteligentes de textos se torna possível, como acontece na Mineração de Textos (MT). De uma forma geral, a MT busca extrair conceitos a partir de grandes volumes de informação textual. No caso dos padrões de software, o conteúdo dos mesmos é tratado como um grande volume textual com uma estrutura definida. A estrutura definida do padrão é formada pelos campos do seu template, os quais possuem propriedades específicas em relação ao seu conteúdo, determinando, assim, a formação de um padrão. A técnica de mineração de textos, portanto, é utilizada nesta dissertação para investigar os graus de relacionamentos entre os padrões através de toda a fundamentação da área de Mineração de Dados detalhada no Capítulo 3 e aliada
17 17 às regras baseadas nos possíveis tipos de relacionamentos bem como no conceito de Padrões de Software, que são detalhados no Capítulo 2. Como resultados esperados, têm-se os níveis relacionamentos entre os padrões de software detectados de maneira automática dentro e demonstrado mediante um estudo de caso. 1.3 Organização da Dissertação Além do capítulo 1 aqui apresentado, esta dissertação está dividida em quatro capítulos e um anexo cujo conteúdo é resumido a seguir: Capítulo 2: Padrões de Software Este capítulo apresenta conceitos que envolvem padrões de software, aspectos importantes sobre critérios de classificação de padrões e sobre relacionamentos entre padrões, bem como a dificuldade encontrada na detecção automática desses relacionamentos, que é a principal motivação deste trabalho. Capítulo 3: Semântica Latente Este capítulo apresenta técnicas e teorias a respeito das áreas de Mineração de Dados e de Textos, motivando a sua importância para este trabalho e demonstrando a utilidade das mesmas para os padrões de software através da Análise da Semântica Latente, que é uma técnica de análise textual (MT). Também é apresentada a teoria a respeito dessa Análise Semântica, seu histórico e seu funcionamento. Capítulo 4: Aplicando Semântica Latente na Descoberta de Relacionamentos entre Padrões de Software Este capítulo apresenta o processo e a metodologia desenvolvida para a utilização das técnicas de Análise da Semântica Latente no processo de detecção de relacionamento entre os padrões. Capítulo 5: Estudo de Caso Este capítulo apresenta a aplicação da metodologia em um estudo de caso com uma amostragem de 72 padrões.
18 18 Capítulo 6: Conclusão Este capítulo apresenta a conclusão a respeito dos resultados alcançados ao longo do desenvolvimento desta dissertação e as possibilidades para trabalhos futuros. Apêndice A: Implementação LSA Este apêndice exemplifica a Implementação LSA para definir graus de relacionamento aos padrões de software. É importante ressaltar algumas particularidades da notação utilizada na escrita desta dissertação que visam facilitar a leitura. Os termos em itálico são utilizados para: o representar palavras ou expressões em língua estrangeira, com exceção de nomes de ferramentas ou produtos e o citar definições de outros autores (também delimitadas por aspas ). Os termos em negrito são utilizados para representar palavras ou expressões que estão sendo definidas ou que merecem algum destaque especial no texto. Podem vir acompanhados também de itálico para um maior destaque; Além disso, alguns termos que aparecem na forma de itens ou com marcadores podem receber alguma forma de destaque com negrito e/ou itálico.
19 19 Capítulo 2 Padrões de Software Este capítulo destina-se a dar uma visão atual sobre padrões de software, apresentando os conceitos de padrões de software mais relevantes para o desenvolvimento desta dissertação. Na Seção 2.1 são demonstradas algumas definições e considerações importantes sobre padrões de software e na seção 2.2 um breve histórico sobre os mesmos. Na Seção 2.3 são identificados os componentes que definem os formatos de padrões. Em 2.4 são definidos conceitos sobre relacionamentos entre padrões de software. A Seção 2.5 traz uma visão geral sobre agrupamentos de padrões. A seção 2.6 traz uma visão geral de como os mecanismos para armazenamento e busca de padrões vêm sendo apresentados na literatura e introduz o Repositório de Padrões. A seção 2.7 apresenta uma conclusão sobre o capítulo. 2.1 Introdução Quando um desenvolvedor de software está projetando uma aplicação, muitas vezes, ele se depara com um problema que já havia surgido em um software anterior, e, então, ele passa a reusar a essência da solução que utilizou nesta ocasião intuitivamente. Essa prática é também difundida em diversas áreas, como na arquitetura, e se tornou um comportamento inteligente de reaproveitamento de conhecimento. Padrões de software têm sido pesquisados na última década como uma forma promissora de reuso, não somente de código mas também de projeto, análise, arquitetura e processo de desenvolvimento. Por intermédio dos padrões podem ser documentadas soluções para diferentes tipos de problemas que ocorrem ao longo do processo de desenvolvimento de software. Essas soluções, quaisquer
20 20 que sejam seus níveis de abstração, podem ser reusadas por outros desenvolvedores ao confrontarem-se com problemas similares. É através dessa experiência prática que os especialistas chegam a criação de um padrão e, então, passam a utilizá-lo para solucionar o problema com eficiência e elegância. 2.2 Histórico A origem documentada do conceito de padrões (i.e., patterns) deu-se com o trabalho feito pelo arquiteto Christopher Alexander no final dos anos 70 através da escrita dos livros A Pattern Language [ALE77] e A Timeless Way of Building [ALE79] que, além de exemplificarem, descrevem seu método para documentação de padrões específicos para a arquitetura. O trabalho de Alexander é voltado para a arquitetura, no entanto, é possuidor de uma fundamentação básica que pode ser abstraída para a área de software. Foi em uma conferência sobre programação orientada a objetos, (OOPSLA) de 1987, que o assunto Padrões de Software ganhou maior repercussão na Engenharia de Software. Beck, também autor de [BEC97], dissertou a respeito de uma linguagem de padrões para projetar janelas em Smalltalk. A partir de então, muitos artigos, revistas e livros têm aparecido abordando o conceito de padrões de software, que descrevem soluções para problemas que ocorrem freqüentemente no desenvolvimento de software e que podem ser reusadas por outros desenvolvedores. Alguns trabalhos pioneiros sobre o uso de padrões aconteceram na década de 90 com o livro de Gamma [GAM95], publicando vinte e três padrões de projeto, e o trabalho de Coplien [COP96][COP00], definindo idiomas, que são padrões de programação específicos para a linguagem C++.
21 21 Definição Um padrão descreve uma solução para um problema que ocorre com freqüência durante o desenvolvimento de software, podendo ser considerado como um par problema/solução [BUS96]. Um padrão é um conjunto de informações instrutivas que possui um nome e que capta a estrutura essencial e o raciocínio de uma família de soluções comprovadamente bem sucedidas para um problema repetido que ocorre sob um determinado contexto [APP00]. Padrões de software podem se referir a diferentes níveis de abstração no desenvolvimento de sistemas orientados a objetos. O seu uso proporciona um vocabulário comum para a comunicação entre projetistas de um mesmo trabalho, criando abstrações num nível superior ao de classes e garantindo uniformidade na estrutura do software. Além do mais, eles podem atuar como blocos construtivos a partir dos quais projetos mais complexos podem ser construídos [GAM95]. Diversos padrões têm sido propostos, seja para solucionar problemas de programação [COP96], de projeto [GAM95][PRE95] e de análise [COA95][FOW97]. Dessa forma, pode-se dizer que existem padrões arquitetônicos, em que o nível de abstração é bastante alto, padrões de análise, padrões de projeto, padrões de implementação, entre outros. As diversas classificações de padrões serão melhor detalhadas na próxima seção. Conferências internacionais para apresentação e discussão de novos padrões e linguagens de padrões têm ocorrido desde Uma série de livros reúne os melhores artigos apresentados nessas conferências [COP96][VLI97][MAR98], nos quais podem ser encontrados padrões das mais variadas classes. 2.3 Classificação de Padrões Conforme mencionado no início deste capítulo, padrões de software abrangem diferentes níveis de abstração e podem ser classificados em categorias de modo a facilitar sua recuperação e uso. Segundo Andrade [AND01], uma classificação
22 22 bastante usada para padrões de software é a que classifica os padrões de acordo com o estágio de desenvolvimento de software em que o padrão é aplicado. Desta forma, os padrões podem pertencer às seguintes categorias: padrões de requisitos, padrões de análise, padrões de projeto, padrões de implementação (também chamados de Idiomas) e padrões de testes [RIS00]. Padrões arquitetônicos e meta-padrões também são considerados padrões de projeto, apesar de constituírem duas categorias de padrões. Padrões arquitetônicos são os padrões que ajudam a especificar elementos de arquiteturas de sistemas e seus relacionamentos. Já os meta-padrões [PRE95] trabalham em um nível mais alto de abstração que os padrões de projeto, e podem especificar como as soluções adotadas por padrões de projeto se adequam a situações mais gerais através da observação dos seus aspectos comuns. Além destes, foram aparecendo publicações de padrões voltados para as fases inicias de desenvolvimento, padrões de níveis mais altos de abstração, como os padrões de análise, apresentados nos trabalhos de Fowler [FOW97], padrões de requisitos [KON02] e padrões para implementação. Uma modalidade diferente é a dos anti-padrões que, de acordo com [APP00], representam uma lição aprendida, ao contrário dos padrões, que representam a melhor prática. Os anti-padrões podem descrever uma solução inapropriada para um problema que resultou em uma situação ruim ou descrever como escapar de uma má situação e como proceder para, a partir dela, atingir uma boa solução. Os anti-padrões tornam-se interessantes para que se perceba e entenda tanto soluções boas quanto não muito boas. Uma outra definição para anti-padrões [CMG98] diz que um anti-padrão não é nada além de um padrão que diz como ir de um problema para uma solução ruim ou um padrão que diz como ir de uma solução ruim para um solução boa. Outro critério muito utilizado é a classificação dos padrões pelo seu domínio de aplicação específico. Estes são muito procurados por desenvolvedores com pouca experiência em padrões ou que não estão familiarizados com os tipos de padrões existentes, buscando, dessa forma, padrões pela natureza da aplicação. Por isso,
23 23 é normal encontramos padrões na literatura descritos em categorias como: padrões para Web, GUI, XML, Segurança de Sistemas, Redes, Banco de Dados, Sistemas Distribuídos, entre outras. O Almanaque de Padrões 2000 [RIS00] possui um complexo índice de padrões por categorias, que consistem tanto de categorias que classificam os padrões segundo as categorias utilizadas pela Gang of Four [GAM95], quanto sobre o estágio de desenvolvimento da aplicação do padrão e até mesmo conforme o domínio da aplicação. Um critério mais específico de classificação utiliza como base a camada de aplicação onde o padrão deve ser aplicado. O catálogo de padrões, Core J2EE [COR05] da Sun Microsystems traz um conjunto de padrões dividido em três categorias referentes às camadas de aplicação: Apresentação, Negócios e Integração. O catálogo de padrões IBM patterns for e-business [IBM05] também utiliza esse critério para a classificação de padrões. Em [BUS96] foi publicado um catálogo de padrões para arquitetura de software (POSA Pattern-Oriented Software Architecture). O livro apresenta os padrões agrupados em três categorias e os problemas em dez categorias, utilizando estes dois critérios para o esquema de classificação. A seguir são apresentadas as definições das categorias utilizadas pelos autores: - Padrões Arquitetônicos: padrões que expressam um esquema de organização estrutural fundamental para sistemas de software. Fornecem um conjunto de subsistemas pré-definidos, especifica suas responsabilidades e incluem regras e diretrizes para organizar os relacionamentos entre eles. - Padrões de Projeto: padrões que fornecem um esquema para refinar subsistemas, componentes de um sistema de software ou os relacionamentos entre eles. Descrevem uma estrutura comumente recorrente de componentes comunicantes que resolvem um problema geral de projeto em um contexto particular. - Idiomas: padrões de baixo nível, específicos para uma linguagem de programação. Um idioma descreve como implementar aspectos particulares de
24 24 componentes ou os relacionamentos entre eles usando as características da linguagem. Os autores da Gang of Four [GAM95] propõem um sistema de classificação baseado em dois critérios: quanto ao escopo e quanto ao propósito do padrão. O critério escopo especifica se o padrão trabalha com: - Escopo classe: padrão com foco em classes, subclasses e seus relacionamentos, - Escopo objeto: padrão que trabalha com relacionamentos entre objetos. Já o critério propósito reflete a função do padrão. Segundo este critério, os padrões são classificados em: - De Criação (Creational): padrões que abrangem a configuração e o processo de criação de objetos ou classes; - Estruturais (Structural): padrões que trabalham com a composição de classes ou objetos; - Comportamentais (Behavioral): padrões que definem o modo com que grupos de classes ou objetos interagem entre si e distribuem responsabilidades. Estas categorias tornaram-se populares, juntamente com os seus respectivos padrões e são, freqüentemente, utilizadas na classificação de padrões de projeto por diversos outros autores, como o já citado Almanaque de Padrões [RIS00]. Além destas categorias de padrões, existem ainda outras, como padrões de suporte [FOW97], padrões organizacionais, padrões para planejamento de projeto [APP00].
25 Elementos de um padrão O formato de documentação dos padrões é muito importante, uma vez que os mesmos devem ser entendidos de forma clara e objetiva pela comunidade de desenvolvedores de software. Uma boa descrição de seus campos faz com que a essência do problema seja imediatamente percebida e permite que se considere as conseqüências de sua aplicação além de fornecer os detalhes necessários para implementá-lo. Assim, um desenvolvedor de software pode verificar se um determinado padrão se aplica ou não ao problema que está tentando solucionar. Entretanto, o que se pode observar é que os padrões têm sido descritos em diferentes formatos. Ao conjunto formado pelos campos componentes dos padrões, dá-se o nome de template. Assim sendo, o template é a forma do Padrão de Software se apresentar organizado em seções ou itens. Como mencionado anteriormente, há uma heterogeneidade grande em relação aos templates dos padrões. Cada autor tem liberdade para descrever uma solução, em formato de padrão, escolhendo os campos mais adequados para isso. No entanto, de acordo com [AND01] e [MES97], alguns destes campos são considerados imprescindíveis para um padrão de software. Dentre esses campos, pode-se destacar: o nome do padrão, os campos que descrevem as circunstâncias e situação em que o problema a ser resolvido se encontra, o problema propriamente dito, as forças ou pontos a serem levados em consideração na solução do problema e a solução. Segundo Meszaros, essas idéias descritas podem estar contidas em campos distintos e em ordens diferentes de apresentação no padrão, dependendo do estilo de cada um. Mas são as idéias necessárias e básicas para a documentação de um padrão. De acordo com o estudo detalhado em [SAN04] um template genérico pode ser definido para agrupar diversos campos existentes na literatura. A seguir, a descrição do mesmo: Name (nome): Descreve um nome que geralmente referencia o problema ou a solução. O nome torna-se rapidamente parte do vocabulário do desenvolvedor.