Medvidovic e Taylor (2000) realizaram um estudo sobre os conjuntos de características e requisitos de uma ADL, e usaram os resultados desse estudo como um guia
na formulação do seu framework para classificação e comparação de ADLs. Os autores estudaram as características de ADLs individuais, dando origem a uma proposta de taxonomia que reflete as características da maioria das ADLs até então existentes. Conforme o framework representado na Quadro 4.1, os blocos de construção de uma descrição arquitetural são os seguintes: (1) componentes, (2) conectores, e (3) configurações arquiteturais.9 Uma ADL deve prover os meios para sua especificação, explicitamente; isto possibilita decidir se uma determinada notação pode ser de fato considerada uma ADL.
Quadro 4.1 – Framework10 de classificação e comparação de ADLs – Fonte: (Medvidovic; Taylor, 2000) ADL
Características de Modelagem de Arquitetura Componentes
Interface Tipos Semântica Restrições Evolução
Propriedades Não-funcionais Conectores
Interface Tipos Semântica Restrições Evolução
Propriedades Não-funcionais Configurações Arquiteturais Capacidade de Compreensão Capacidade de Composição Refinamento e Rastreamento Heterogeneidade
Escalabilidade Evolução
Dinamismo Restrições
Propriedades Não-funcionais Ferramentas de Suporte
Especificação Ativa Múltiplas Visões Análise
Refinamento
Geração de Implementação Dinamismo
Medvidovic e Taylor (2000) afirmam que, a fim de inferir informações sobre uma arquitetura, no mínimo, as interfaces dos componentes constituintes devem ser modeladas.
Sem esta informação, uma descrição arquitetural torna-se, similar a um diagrama de “caixas e linhas” sem semântica subjacente explícita. Vários outros aspectos de componentes, conectores e configurações são desejáveis, mas não essenciais: seus benefícios têm sido reconhecidos e demonstrados no contexto do domínio de um problema ou de um estilo, mas sua ausência não significa que uma dada linguagem não seja uma ADL.
9 “Configurações arquiteturais” poderão ser referidas simplesmente como “configurações” ou “topologias”.
10 As características de modelagem essenciais estão em negrito.
Um conjunto de ferramentas torna uma ADL mais usável e útil, ainda que a adequação de uma dada linguagem para a modelagem de arquiteturas de software seja independente de quais tipos de ferramenta de suporte ela provê.
4.5.1 Modelagem dos Componentes
Um componente em uma arquitetura é, por excelência, uma unidade de computação ou um armazém de dados e, conseqüentemente, os componentes são “o local da computação e do estado” (SHAW et al., 1995). Os componentes podem ser tão pequenos quanto um único procedimento ou tão grandes quanto uma aplicação inteira. Cada componente pode requerer seus próprios dados ou espaço de execução, ou pode compartilhá-los com outros componentes. As interfaces explícitas de componentes são características necessárias das ADLs. Para fins de comparação, as características adicionais são (MEDVIDOVIC; TAYLOR, 2000): tipos, semântica, restrições, evolução, e propriedades não-funcionais.
• Interface: É um conjunto de pontos de interação entre um componente e o mundo externo. A interface especifica os serviços (mensagens, operações, e variáveis) que um componente provê. Para apoiar o raciocínio sobre um componente e a arquitetura, podem ser fornecidos recursos para a especificação das necessidades dos componentes (serviços requeridos de outros componentes na arquitetura). Portanto, uma interface define os compromissos computacionais que um componente pode fazer e restrições sobre seu uso.
• Tipos: São abstrações que encapsulam as funcionalidades em blocos reusáveis. Um tipo de componente pode ser instanciado múltiplas vezes em uma única arquitetura ou pode ser parametrizado e reusado em várias arquiteturas.
• Semântica: É definida como um modelo de alto nível do comportamento do componente.
Tal modelo é necessário para executar análise, impor restrições arquiteturais, e garantir mapeamentos consistentes de arquiteturas de um nível de abstração para outro.
• Restrições: Devem ser especificadas restrições sobre os componentes a fim de: garantir a fidelidade aos usos pretendidos; forçar os limites de uso; e estabelecer dependências entre as partes internas de um componente.
• Evolução: Pode ser informalmente definida como a modificação de suas propriedades, ex.: interface, comportamento, ou implementação. As ADLs podem garantir que a evolução ocorra de um modo sistemático, empregando a sub-tipificação (hierarquização) de tipos e refinamento de características de componentes.
• Propriedades Não Funcionais: É necessária a especificação preliminar de propriedades no nível arquitetural, tais como confiabilidade, segurança, desempenho, e portabilidade, a
fim de: habilitar a simulação do comportamento em tempo de execução, executar a análise, impor as restrições, mapear as implementações de componentes aos processadores, e auxiliar o gerenciamento de projeto.
4.5.2 Modelagem dos Conectores
Os conectores são blocos de construção arquiteturais, que ensejam a modelagem das interações entre componentes e a modelagem das regras que governam essas interações. Os conectores podem não corresponder às unidades de compilação em um sistema implementado: podem ser implementados como dispositivos de roteamento de mensagens compiláveis separadamente, mas podem também manifestarem-se como: variáveis compartilhadas, entradas em tabelas, estruturas de dados dinâmicas, seqüências de chamadas de procedimentos embutidos no código, parâmetros de inicialização, protocolos cliente-servidor, pipes, links SQL entre uma base de dados e uma aplicação, e assim por diante (GARLAN; MONROE; WILE, 1997) (SHAW et al., 1995). Conforme (MEDVIDOVIC;
TAYLOR, 2000), os conectores são caracterizados por: interfaces, tipos, semântica, restrições, evolução, e propriedades não funcionais11:
• Interface: É um conjunto de pontos de interação entre o conector e os componentes e outros conectores vinculados a ele. As interfaces possibilitam a conectividade adequada de componentes e suas interações em uma arquitetura e, por meio disso, o raciocínio sobre as configurações arquiteturais.
• Tipos: São abstrações que encapsulam a comunicação, coordenação, e decisões de mediação de componentes (interações em nível arquitetural podem ser caracterizadas por protocolos complexos). Tornar esses protocolos reusáveis requer que as ADLs modelem conectores como tipos: na forma de um sistema de tipos extensível, definido em termos de protocolos de interação, ou como tipos enumerados built-in, baseados em mecanismos de implementação particulares.
• Semântica: É definida como um modelo de alto nível do comportamento de um conector, e acarreta especificações de protocolos de interação (independentes da computação). As ADLs podem dar suporte à modelagem da semântica de conectores a fim de possibilitar: a análise da interação de componentes; o refinamento consistente de arquiteturas através dos níveis de abstração; e a imposição de restrições de interconexão e de comunicação.
11 Apesar de as categorias de comparação para componentes e conectores serem idênticas, segundo Medvidovic e Taylor (2000), elas foram derivadas e refinadas independentemente umas das outras.
• Restrições: Garantem a fidelidade aos protocolos de interação planejados, estabelecem dependências intra-conectores, e impõem limites de uso. Ex.: a restrição do número de componentes que interagem por meio do conector.
• Evolução: É definida como a modificação de suas propriedades, ex.: interface, semântica, ou restrições sobre ambos. As ADLs podem acomodar essa evolução por meio da modificação ou refinamento de conectores usando técnicas tais como filtragem de informações incrementais, subtipificação, e refinamento.
• Propriedades Não Funcionais: Representam requisitos (adicionais) para a correta implementação do conector. Ex.: simulação de comportamento dinâmico; análise de conectores; imposição de restrições; e seleção de conectores off-the-shelf12 (OTS) adequados (ex.: barramento de mensagens) e seus mapeamentos a processadores.
4.5.3 Modelagem das Configurações Arquiteturais
As configurações arquiteturais, ou topologias, são grafos conectados de componentes e conectores que descrevem a estrutura arquitetural. Esta informação é necessária para determinar se os componentes adequados estão conectados, se suas interfaces são equivalentes, se os conectores possibilitam comunicação adequada, e se suas semânticas combinadas resultam em comportamento desejado (MEDVIDOVIC; TAYLOR, 2000).
Os aspectos característicos no nível de configurações arquiteturais caem em três categorias genéricas (MEDVIDOVIC; TAYLOR, 2000): (1) qualidades da descrição da configuração: capacidade de compreensão, composição, refinamento e rastreabilidade, e heterogeneidade; (2) qualidades do sistema descrito: heterogeneidade, escalabilidade, capacidade de evolução, e dinamismo; (3) propriedades do sistema descrito: dinamismo, restrições, e propriedades não funcionais.13
Vê-se que as três categorias não são completamente ortogonais: heterogeneidade e dinamismo aparecem em duas categorias. Heterogeneidade pode ser manifestada nos vários formalismos empregados nas descrições de configuração, e em múltiplas LPs. As características das configurações são (MEDVIDOVIC; TAYLOR, 2000):
• Especificações Compreensíveis: As ADLs devem modelar a informação estrutural (topológica) com sintaxe simples e compreensível, pois um dos papéis da arquitetura é servir como um canal de comunicação preliminar para diferentes stakeholders em um projeto e facilitar o entendimento de sistemas (ou famílias) em um alto nível de abstração.
12 Previamente desenvolvido, sem ter sido necessariamente encomendado.
13 O termo “qualidade” é usado de maneira convencional, independente da aplicação. O termo “propriedade”
refere-se às características de uma aplicação introduzidas para tratar requisitos específicos.
• Composição Hierárquica: Mecanismo que permite às ADLs descreverem softwares em diferentes níveis de detalhes. Há situações nas quais uma arquitetura torna-se um único componente de uma arquitetura em um nível de abstração superior.
• Refinamento e Rastreabilidade: As ADLs também podem possibilitar o refinamento consistente e correto de arquiteturas em sistemas executáveis e permitir a rastreabilidade de alterações ao longo de diferentes níveis de refinamento arquitetural.
• Heterogeneidade: É salutar que as ADLs sejam extensíveis, isto é, que forneçam recursos para a especificação e desenvolvimento arquitetural, preferencialmente, com componentes e conectores pré-existentes de granularidade variada, possivelmente especificados em diferentes linguagens de modelagem formal e implementados em diferentes LPs.
• Escalabilidade: As ADLs podem apoiar diretamente a especificação e o desenvolvimento de sistemas de grande porte que são plausíveis de crescimento no futuro, por meio de recursos que possibilitem expressar as abstrações necessárias para lidar com as questões de complexidade e de tamanho de software.
• Capacidade de Evolução: As ADLs necessitam aumentar o suporte à evolução no nível de componentes e conectores com recursos para sua adição incremental, remoção, substituição, e re-conexão em uma configuração. A evolução refere-se às alterações estáticas (em tempo de desenvolvimento) em uma arquitetura (e ao sistema resultante).
• Dinamismo: O dinamismo refere-se à modificação da arquitetura e realização destas modificações enquanto o sistema está sendo executado. O suporte ao dinamismo é importante em sistemas de missão crítica que requerem alto grau de confiabilidade, tais como controle de tráfego aéreo, comutação de telefone, sistemas de informação pública de alta disponibilidade (OREISY; MEDVIDOVIC; TAYLOR, 1998). Para tanto, as ADLs necessitam prover características específicas para modelagem de alterações dinâmicas e técnicas para sua efetivação no sistema em tempo de execução.
• Restrições: As restrições que representam dependências em uma configuração complementam as restrições específicas a componentes e conectores individuais. Muitas restrições globais são derivadas, ou dependem diretamente, de restrições locais. Ex.: as restrições sobre as configurações válidas podem ser expressas como restrições de interações entre componentes e conectores constituintes.
• Propriedades Não Funcionais: São necessárias em nível de configuração para selecionar os componentes e conectores adequados, executar análise, impor restrições, mapear blocos de construção arquiteturais para processadores, e auxiliar no gerenciamento de projetos.
4.5.4 Ferramentas de Suporte para Descrição Arquitetural
A motivação para o desenvolvimento de linguagens formais para descrição arquitetural é que o seu formalismo lhes confere adequação para o raciocínio e manipulação por meio de ferramentas de software. Um conjunto de ferramentas de suporte que acompanha uma ADL não é, estritamente falando, parte da linguagem. Entretanto, a utilidade de uma ADL está diretamente relacionada aos tipos de ferramentas que ela provê para dar suporte ao design arquitetural, à análise, à evolução, e à geração de sistemas executáveis.
Os pesquisadores na área de ADLs vêm tentando identificar os elementos que compreendem um toolkit canônico (conjunto de ferramentas). Diversas categorias genéricas que têm emergido refletem os tipos de ferramentas de suporte, comumente, fornecidas pelas abordagens arquiteturais existentes: especificação ativa, múltiplas visões, análise, refinamento, geração da implementação, e dinamismo (MEDVIDOVIC; TAYLOR, 2000).
• Especificação Ativa: Fornecer suporte à especificação por meio da redução das possíveis opções de design baseadas no estado atual da arquitetura. Podem ser pró-ativas, sugerindo cursos de ação ou proibindo opções de design que podem resultar em estados de design indesejados, ou reativas, informando o arquiteto quando tais estados são atingidos durante o design. Elas podem dar seus feedbacks de modo intrusivo, forçando o arquiteto a tomar conhecimento antes de continuar, ou não intrusivo, permitindo ao arquiteto visualizar o feedback conforme sua conveniência.
• Múltiplas Visões: Fornecer a visão mais apropriada para um determinado stakeholder e garantir a consistência inter-visões são as questões chave. Os clientes podem ficar satisfeitos com uma apresentação gráfica, enquanto os desenvolvedores podem desejar especificações mais formais de componentes e conectores, ao passo que os gerentes podem requerer uma visão do processo de desenvolvimento do sistema correspondente.
• Análise: A capacidade de avaliar as propriedades de sistemas grandes, distribuídos, e concorrentes, em um nível arquitetural, pode diminuir substancialmente o custo dos erros.
• Refinamento: A redefinição de descrições arquiteturais é uma tarefa complexa cuja corretude e consistência não podem ser sempre garantidas por meio de provas formais, mas as ferramentas de suporte adequadas podem aumentar a confiabilidade a este respeito (MORICONI; QIAN; RIEMENSCHNEIDER, 1995).
• Geração da Implementação: A meta suprema de qualquer empreendimento de design e modelagem de software é produzir o sistema executável. A realização manual dessa atividade pode resultar em muitos problemas de consistência e rastreabilidade entre uma
arquitetura e sua implementação. Portanto é desejável, senão imperativo, a um conjunto de ferramentas de ADL prover ferramentas para assistir a produção do código fonte.
• Dinamismo: Medvidovic e Taylor (2000) têm argumentado sobre a necessidade de modelar alterações dinâmicas no nível arquitetural. As ferramentas de software são necessárias para: analisar a arquitetura modificada e garantir suas propriedades desejáveis;
mapear corretamente as alterações expressas em termos de construtores arquiteturais para os módulos de implementação; garantir a execução contínua dos subsistemas vitais da aplicação e a preservação de estado durante a modificação; a análise e teste da aplicação modificada enquanto ela está sendo executada.