Applying the Responsibility-Driven Method in the Development of a
Subframework to Syntactic and Semantic Analysis of Formulas
Rodolfo Adamshuk Silva (Universidade Tecnológica Federal do Paraná, Paraná,
Brasil) – [email protected]
Simone Nasser Matos (Universidade Tecnológica federa do Paraná, Paraná,
Brasil) – [email protected]
Clovis Torres Fernandes (Instituto Tecnológico de Aeronáutica, São Paulo, Brasil)
– [email protected]
Abstract: This work provides an analytical study about framework development
approaches pointing out its main features. As a result of this applies a
responsibility-driven approach in developing of the subframework to formula
syntactic and semantic analysis. This study’s main goal is to show a practical
application of the responsibility-based approach to the creation of a subframework.
Also relates the differences in the subframework proposed with others similar
applications in the literature.
Keywords: Syntactic analysis, Semantic analysis, Subframework, Domain
framework, Responsibility.
Aplicando a Abordagem Dirigida por Responsabilidades no
Desenvolvimento de um Subframework de Análise Sintática e Semântica de
Fórmulas
Resumo: Este trabalho fornece um estudo analítico entre as abordagens para
desenvolvimento de frameworks, para as quais se buscou ressaltar suas
principais características, em especial o desenvolvimento de subframework.
Como resultado, aplicou-se a abordagem apontada como a mais apropriada para
essa tarefa, a saber, a abordagem dirigida por responsabilidades, para o
desenvolvimento do subframework de análise sintática e semântica de fórmulas.
O objetivo principal deste trabalho é mostrar o uso da abordagem dirigida por
responsabilidades na criação de subframework, relatando sua diferença com
relação aos outros aplicativos da literatura.
Palavras-Chave: Análise sintática, Análise semântica, Subframework, Framework
de domínio, Responsabilidade.
Agradecimentos
À UTFPR Campus Ponta Grossa pelo apoio financeiro destinado ao projeto desde
2007.
1. Introdução
Fayad et al. (1999) afirmam que a utilização de framework tem provado ser
especialmente eficiente quanto ao fator custo de desenvolvimento, porque
possibilitam o reúso tanto de funcionalidade quanto de arquitetura. A descrição de
sua arquitetura facilita o entendimento de seu comportamento, bem como seu
reúso, pois representa o relacionamento entre as classes e os seus algoritmos
implementados (VILJAMAA, 2003).
A arquitetura de um framework pode ser composta por subsistemas,
subframeworks e componentes. Um subsistema representa um conjunto de
classes interagindo e colaborando para executar uma função (WIRFS-BROCK;
MCKEAN, 2003). Um subframework é uma parte de um framework que
representa por si só um sistema generalizado e reutilizável, composto por um
conjunto de requisitos funcionais e não funcionais próprios (MATTSON, 2000).
Por fim, um componente representa uma parte independente e substituível de um
sistema que possui uma função clara, trabalhando no contexto de uma arquitetura
bem definida e comunicando-se com outros componentes por meio de suas
interfaces (BROWN; WALLNAU, 1998).
Segundo Kirk et al. (2005), existem problemas fundamentais a respeito do
reúso de frameworks, podendo-se destacar dentre eles a questão arquitetural,
que está relacionada com a dificuldade em se produzir modificações dentro do
framework sem levar em conta a qualidade arquitetural de alto nível. Várias
abordagens da literatura têm o objetivo de auxiliar a criação do projeto arquitetural
de um framework. Dentre elas, podem-se citar as seguintes, entre outras:
Johnson (1993), Fayad et al. (1999), Braga (2002) e Matos e Fernandes (2008).
Essas abordagens usualmente contemplam atividades em que o projeto
arquitetural do framework deve ser desenvolvido utilizando subsistemas,
subframeworks e componentes, mas algumas não especificam o processo de
como determinar e separar nos subframeworks os frozen e hot spots (PREE,
1999) com o objetivo de facilitar o reúso. Segundo Land (2002), a determinação
dos hot spots de um framework pode ser grande o que dificulta a tarefa de criá-lo,
compreendê-lo e testá-lo.
Neste trabalho analisaram-se qualitativamente as abordagens e decidiu-se
pela aplicação da abordagem dirigida por responsabilidades (MATOS;
FERNANDES, 2008) na criação do projeto do subframework de análise sintática e
semântica de fórmulas matemáticas. Foi escolhida tal abordagem, pois por meio
desta abordagem foi possível reusar grande parte dos artefatos tirados da
documentação das aplicações-exemplo, as quais representam aplicativos de
software típicos de um dado domínio usado por um processo na definição de um
framework de domínio, o que contribui para diminuir o tempo de desenvolvimento
do subframework. Além disso, relata as diferenças do subframework proposto
com outros softwares da literatura.
Este artigo tem a seguinte organização. A Seção 2 relata conceitos
fundamentais sobre frameworks, subframeworks, subsistemas e componentes. A
Seção 3 descreve um estudo analítico sobre como as abordagens da literatura
tratam o projeto arquitetural de framework e subframework. A Seção 4 descreve a
aplicação da abordagem dirigida por responsabilidades durante a criação do
modelo dos subframeworks. A Seção 5 apresenta um breve relato sobre os
resultados obtidos. A última seção descreve as conclusões finais deste trabalho.
2. Sobre Subsistemas, Subframeworks e Componentes
Antes de mostrar o desenvolvimento dos subframeworks, os conceitos de
framework, subsistema, subframework e componente são definidos no contexto
deste trabalho. Um framework é um conjunto eventual de subsistemas,
subframework e componentes, interagindo e colaborando de forma a produzir um
projeto geral para um domínio particular (MATOS; FERNANDES, 2006). Um
subframework representa um subsistema ou conjunto de subsistemas que foram
modelados a partir dos requisitos do framework, separando-se os frozen e hot
spots, de forma a facilitar o reúso. A Figura 1 ilustra um subframework para
validação sintática de fórmulas matemáticas. As classes que estão no
SubframeworkBase representam os frozen spots e as que estão no
SubframeworkAplicação são os hot spots. Esse subframework surgiu durante a
análise do desenvolvimento de um framework de domínio na formação de preço
de venda em que se constatou, nas aplicações-exemplo estudadas, que para
estabelecer o preço de venda de um produto se utiliza como entrada uma fórmula
matemática. Por isso, o subframework permite que cada aplicação-exemplo,
ApplicationN e Application1, seja instanciada a partir de sua definição,
funcionando como um caixa-preta. Desta forma, um subframework é uma parte de
um framework que representa por si só um sistema generalizado e reutilizável
(MATTSON, 2000).
Figura 1. Subframework para análise sintática (HORNUNG et al., 2008).
Um subsistema é um conjunto de classes interagindo e colaborando para
executar uma função (WIRFS-BROCK; MCKEAN, 2003). Por exemplo, para um
subsistema de Cálculo do Preço de Venda da aplicação-exemplo ABC (COGAN,
1999), têm-se as classes TelaCalculo e CalculoRN, ilustradas na Figura 2,
interagindo com outras classes contidas nos subsistemas Gerenciar Linha de
Produção e Gerenciar Produto com o objetivo de fornecer ao usuário final o valor
do preço de venda de um produto.
Figura 2. Diagrama de classes do subsistema de Cálculo do Preço de Venda
(CRAZUSKI et al., 2008).
Um componente é a transformação de uma parte independente de um
subsistema, framework ou subframework, que irá executar uma função bem
definida, em um projeto executável, permitindo ao desenvolvedor alterar somente
o que é flexível. Por exemplo, por meio do subframework de Análise Sintática
ilustrado na Figura 1, pode-se gerar um componente para ser usado em outras
aplicações-exemplos, como ilustra a Figura 3, onde mostra o resultado da
execução do subframework dentro do um ambiente de programação.
Figura 3. Componente de análise sintática – Fórmula do Custo de Transação
de uma Atividade do método ABC (HORNUNG et al., 2008).
3. Estudo Analítico de Trabalhos Relacionados
Para a realização deste estudo, levantaram-se na literatura as abordagens que
contemplavam um processo de definição arquitetural para o desenvolvimento de
frameworks e subframeworks. Dentre elas, destacam-se as seguintes: Johnson
(1993), Taligent (1994), Landin e Niklasson (1995), Pree (1999), Fayad et al.
(1999), Mattson (2000), Butler e Xu (2001), Braga (2002), e por fim, Matos e
Fernandes (2008).
Após o estudo das abordagens, realizou-se uma análise qualitativa entre
elas, considerando-se os seguintes critérios: Criação de subsistemas (SU),
subframeworks (SF) e componentes (C) – Possibilita a definição de uma
arquitetura que facilita o entendimento do funcionamento do sistema, bem como
seu reúso; Aplicação de padrões de projeto e metapadrões – Permite aumentar a
reusabilidade na fase de projeto; Análise arquitetural – É um processo iterativo
que permite que sejam feitos refinamentos no modelo arquitetural, que
inicialmente foi escolhido de forma a contribuir para a criação de uma arquitetura
que contemple algumas características julgadas interessantes, tais como:
integridade, reusabilidade e flexibilidade. Para Butler e Xu (2001), esse processo
é denominado de refatoração arquitetural; Estilo Arquitetural – Reduz o esforço
para compreender o sistema desenvolvido por outra pessoa e, portanto, diminui a
quantidade de informações que serão assimiladas num novo projeto permitindo,
desta forma, facilitar o reúso em um novo (BASS et al., 2003); Reúso Arquitetural
– Traz benefícios que incluem redução de custo de construção e do tempo de
produção; Definição dos Hot Spots nos subframeworks – Representam os pontos
que são específicos para uma aplicação-exemplo e constituem a parte central do
projeto de framework (PREE, 1999).
Na Tabela 1, relacionam-se as abordagens citadas e os critérios. As linhas
onde aparecem o “X” significa a presença do critério, caso contrário, a sua
ausência. Observou-se que todas as abordagens contemplam a utilização de
padrões de projeto e metapadrões durante a definição da arquitetura de
framework. Com relação à Criação de Subsistemas, Subframeworks e
Componentes verificou-se que somente a abordagem de Matos e Fernandes
(2008) abrange mais detalhadamente seu processo de identificação e construção.
Além disso, essa abordagem explica como a definição dos hot spots deve ser
feita durante a construção dos subframeworks na fase inicial do seu processo de
construção. Isso, de acordo com Tang et al. (2004), pode contribuir para a
confecção de um sistema com um maior grau de flexibilidade e portabilidade,
impactando sob os seus aspectos de desempenho, custo e escalabilidade.
Tabela 1. Critérios contemplados pelas abordagens da literatura.
Constatou-se também que o critério de Análise Arquitetural é contemplado
na maioria das abordagens e é considerado um fator importante no processo de
definição da arquitetura do framework. Menos da metade das abordagens não
contemplam a definição de um estilo arquitetural e que, segundo Paris (2004), a
sua escolha implica em um aumento de flexibilidade do sistema, sendo assim um
critério importante na definição da arquitetura. Por fim, o Reúso Arquitetural é
contemplado por mais da metade das abordagens possibilitando o reúso de
requisitos, projeto, métodos e de componentes de software.
Após a análise das abordagens, verificou-se que a de Matos e Fernandes
(2008) era a ideal para ser aplicada no desenvolvimento do subframework de
análise sintática e semântica de fórmulas, pois traz o processo detalhado para
sua construção. Além disso, contempla também os benefícios trazidos pelas
outras abordagens, dentre eles, podem-se citar os seguintes, entre outros: estilo
arquitetural, aplicação de padrões de projeto e metapadrões.
4. Aplicação da Abordagem Dirigida por Responsabilidades
O processo de desenvolvimento de frameworks de domínio corresponde a uma
evolução iterativa de sua estrutura de classes, que envolve atividades como
identificação de classes, modelagem de cenários e identificação de estados de
objetos, entre outros.
Uma abordagem que pode ser utilizada para o desenvolvimento de
frameworks é a abordagem PDR-DFD (Processo Dirigido a Responsabilidade
aplicado ao Desenvolvimento de Framework de Domínio). Na PDR-DFD as
responsabilidades são declarações gerais sobre as ações que um objeto executa
e mantém, e sobre as decisões principais produzidas por um objeto que afeta os
outros (MATOS; FERNANDES 2006).
Essas responsabilidades são encontradas a partir das ações que um
sistema deverá executar e nas informações que necessitam ser mantidas ou
criadas (WIRFS-BROCK; MCKEAN, 2003). Além disso, a PDR-DFD foi construída
com o objetivo de dar um contexto adequado de aplicação do método de
identificação antecipada de pontos de estabilidade e de flexibilidade proposto por
Matos e Fernandes (2008).
Para aplicação da abordagem dirigida por responsabilidades,
selecionaram-se métodos no domínio de formação de preço de venda, tais como
os seguintes: ABC (COGAN, 1999; SILVESTRE, 2002), Custo Pleno (MARTINS,
2003) e SEBRAE (SEBRAE, 2008). Esses métodos representam as aplicaçõesexemplo para o desenvolvimento de framework e todos possuem uma fórmula de
preço de venda a ser calculada.
Depois de realizada a análise de cada método descrita em Crazuski et al.
(2008), do subsistema Cálculo do Preço de Venda, e a partir de cada Modelo de
Requisitos e de Classes gerado para cada aplicação-exemplo analisada, pode-se
levantar os subframeworks executando os passos descritos a seguir (MATOS;
FERNANDES, 2006).
4.1. PASSO 1 – Identificar os Frozen e Hot Spots a Partir dos Requisitos dos
Subsistemas
A entrada para esse passo é o Modelo de Requisitos gerado para cada
perspectiva (WIRFS-BROCK; MCKEAN, 2003; CRAZUSKI et al., 2008) de cada
aplicação-exemplo. O modelo de requisitos possui um diagrama de caso de uso
UML, bem como sua descrição textual, separados por perspectiva. Para criar
esse modelo foi necessário realizar um estudo sobre o domínio de cada
aplicação-exemplo. O cálculo do preço de venda de produtos ou serviços deve se
refletir sobre os custos decorrentes da produção do produto e também sobre a
concorrência.
Cada vez mais, os clientes estão pesquisando preços e procurando
qualidade, tanto dos produtos quanto do atendimento. Assim, os preços
calculados através de cada método de formação de preço de venda servirão
como um referencial para a comparação com os preços praticados no mercado
(SEBRAE, 2008).
Durante a análise das aplicações-exemplo, identificaram-se vários
subsistemas, dentre eles todas as aplicações-exemplo possuíam o de Cálculo do
Preço de Venda, que deve realizar o processamento da fórmula do preço de
venda baseando-se no Modelo de Requisitos para cada método. Também se
identificam na análise os frozen e hot spots. O processo de identificação destes
pontos está descrito em (MATOS; FERNANDES, 2008). Logo após a
classificação dos requisitos do framework, constrói-se o diagrama de caso de uso
no formato UML-F (FONTOURA et al., 2000) para o subsistema que estava sendo
analisado, neste caso, para o Cálculo do Preço de Venda ilustrado na Figura 4.
Figura 4. Diagrama de Caso de Uso UML-F do SCF.
Os casos de uso Verificar token e Exponenciar são hot spots e os outros
são frozen spots. O Verificar token foi classificado como hot spot, porque cada
aplicação-exemplo analisada possuía diferentes tipos de token em sua fórmula e
o Exponenciar somente aparecia na aplicação-exemplo ABC. Desta forma, a
abordagem utilizada permite a identificação dos frozen e hot spots em fase inicial
do processo de construção dos subframeworks.
4.2. PASSO 2 – Elaborar o diagrama de classes que satisfaz os requisitos do
framework
A entrada para esta fase é o Modelo de Classes, composto de um conjunto
de classes e seus relacionamentos, de cada aplicação-exemplo e o(s)
diagrama(s) de casos de uso UML-F gerados no Passo 1. Como nos diagramas
de casos de uso UML-F já foram definidos de forma antecipada quais casos de
uso são frozen spots e quais são hot spots, analisa-se neste momento para cada
caso de uso do framework as possíveis classes, a partir do Modelo de Classes de
cada aplicação-exemplo, que venham a atendê-los. Depois se cria o diagrama de
classes para cada requisito, levando-se em consideração os casos de uso
identificados como frozen e hot spots. A integração desses diagramas representa
o Modelo de Classes para o Subsistema que está sendo analisado no momento.
Antes de explicar este passo, ressalta-se que se utilizou o estilo
arquitetural em camadas (BASS et al., 2003), o qual atendeu os requisitos de
flexibilidade, manutenibilidade e reusabilidade, importantes para seu
desenvolvimento. Optou-se por este estilo porque o framework de formação de
preço de venda é um software do tipo cliente-servidor para web implementado na
plataforma J2EE.
Considerando o diagrama UML-F, ilustrado na Figura 4, verifica-se que
possui os seguintes requisitos: Verificar sintaxe, Verificar semântica, Verificar
token que engloba Somar, Subtrair e Exponenciar, entre outros. Esses requisitos
foram satisfeitos pelas seguintes classes do Modelo de Classe das aplicaçõesexemplo: ExpressaoAlgebrica, Variavel, Soma, Subtracao, Multiplicacao, Divisao,
Exponenciacao, entre outras. O processo de identificação foi baseado em Matos e
Fernandes (2008). Por isso, foram reusadas das aplicações-exemplo. Parte do
diagrama de classes para o caso de uso Verificar semântica está ilustrado na
Figura 5. A ExpressaoAlgebrica é uma classe abstrata, a classe que representa a
expressão terminal é a Variavel e as classes Soma, Subtracao, Multiplicacao,
Divisao, Exponenciacao representam as expressões não terminais.
Figura 5. Parte do diagrama de classe para o requisito Verificar Semântica.
Repete-se este processo até que todos os requisitos para o subsistema
analisado possuam seu(s) diagrama(s) de classes. No final desse passo, para
cada requisito analisado tem-se um diagrama de classes correspondente. A
integração desses diagramas representa o Modelo de Classes para o Subsistema
Cálculo do Preço de Venda que é base para o Passo 4.
4.3. PASSO 3 – Identificar os possíveis subframeworks
Como no Passo 1 foram levantados os requisitos do framework, neste
passo identificam-se quais deles podem ser usados em outras aplicações,
verificando os possíveis hot spots que a ele estão associados. Assim, um
subframework pode ser utilizado como possível framework em outro contexto.
Neste trabalho, por exemplo, os requisitos Verificarsemantica e
Verificarsintaxe podem ser utilizados separadamente em outros contextos como
na utilização de compiladores e na validação de linguagem natural,
respectivamente. Por isso, foram considerados como subframework distintos.
4.4. PASSO 4 – Criar o diagrama de classes UML-F para os subframeworks
Considerando que todos os subframework tenham sido identificados no
Passo 3, cria-se um pacote para cada um deles, que deve conter um ou mais
diagramas de classes. No caso do subframework Verificar semântica, obteve-se o
pacote validacaoSemantica ilustrado na Figura 6; no caso do Verificar sintaxe,
obteve-se o subframework ilustrado na Figura 1. Na Figura 6, o pacote
validacaoSemantica é o responsável pelo cálculo das variáveis, o estrutura
contém as estruturas de dados utilizadas para a transformação de uma fórmula
infixa para a pósfixa, além de realizar uma pesquisa no banco de dados e assim
conseguir o valor semântico de cada variável.
Figura 6. SubframeworkVerificarsemântica.
O pacote persistencia possui as classes que realizam a conexão e
manipulação do banco de dados. Por exemplo, ao se utilizar o cálculo do preço de
venda do método do SEBRAE, tem-se o seguinte:
Custo da mercadoria = Valor da Mercadoria + IPI + Frete - Valor de crédito a título
de ICMS no Frete + Substituição Tributária - Valor de crédito a título de ICMS –
Desconto
Inicialmente, executa-se a validação sintática da fórmula e logo após sua
validação semântica. Na semântica, a classe Posfixa utilizando a classe Pilha
transforma a fórmula em pósfixa. Em seguida a classe Arvore, utilizando a classe
Nodo, monta uma árvore semântica e então realiza o acesso ao banco de dados
para a procura dos valores das variáveis. Se alguma destas variáveis não possuir
valor no banco de dados, a fórmula não é semanticamente válida. Em seguida,
realizam-se os cálculos nas classes não terminais para que o resultado seja
fornecido ao usuário. Utilizando os seguintes valores como exemplo:
ValordaMercadoria = 10; IPI = 5; Frete = 1; ValordecreditoatitulodeICMSnoFrete =
0,5; SubstituicaoTributaria = 7; ValordecreditoatitulodeICMS = 8 e Desconto = 0,2.
O resultado fornecido pela execução do componente do subframework é ilustrado
na Figura 7.
Figura 7. Componente de análise semântica – Fórmula de Preço de venda do
método SEBRAE (2008).
Neste passo também se reusam as classes obtidas no Passo 2 que
venham a satisfazer o objetivo do subframework. O diagrama de classes da
Figura 6 deixa explícito quais são classes hot spots para o projetista, pois
apresentam o estereótipo <<Hot spot>>.
4.5. PASSO 5 – Voltar ao passo 1, considerando neste momento um outro
subsistema.
Ressalte-se que os passos descritos acima foram repetidos para todos os
três subsistemas sob análise. Com isso, puderam-se identificar os subframeworks
para o framework no domínio de formação de preço de venda.
5. Breve Análise dos Resultados
O objetivo principal para a criação do subframework proposto foi a necessidade
de criar um sistema que realizasse a Análise Sintática e Semântica de Fórmulas,
sendo executado em ambiente web e desenvolvido em uma linguagem de
programação que permita a portabilidade. O subframework difere tanto do
compilador Lex quanto do Yacc, pois suas rotinas foram desenvolvidas em java,
linguagem que permite a portabilidade e a criação de aplicativos web.
O analisador léxico e sintático foi desenvolvido usando JFlex (versão 1.4.1)
e CUP (versão 0.10j). O JFlex é um gerador de Analisadores Léxicos para Java e
implementado em Java. O seu objetivo é gerar uma rotina em Java, ou seja, uma
classe que contenha as especificações léxicas válidas para a linguagem. Essa
classe é gerada a partir de um arquivo, criado pelo usuário, que contém as
especificações léxicas válidas para a linguagem que se deseja criar. O CUP
(Constructor of Useful Parsers) é um gerador de Analisadores Sintáticos LALR
(LookAhead Left-Right) para Java. O seu objetivo, assim como o JFlex, é gerar
uma rotina em Java a partir de um arquivo que contenha a gramática para o qual
o analisador sintático será utilizado.
O subframework proposto também difere de alguns softwares tais como:
Axiom, Yacas, Maxima, Eigenmath, entre outros, pois além de ser um aplicativo
para web, aperfeiçoa a interpretação das mensagens retornadas ao usuário. Isso
foi um requisito considerado importante na criação do subframework, pois os
aplicativos analisados apresentam mensagens incompletas, dificultando a sua
interpretação e posterior correção por parte do usuário. Além disso, os aplicativos
não podem ser reusados em uma nova aplicação que necessita de análise
sintática, pois são ferramentas específicas. Outro ponto a ser levado em
consideração é que ao usar o subframework em outro contexto as classes com
frozen e hot spots já estão identificados, facilitando o trabalho do desenvolvedor
ao reusá-lo.
Para o analisador semântico, utilizou-se como referência o padrão de
projeto Interpreter. A aplicabilidade do padrão é definida quando a gramática a ser
interpretada é simples, como é o caso do analisador semântico. A estrutura do
padrão Interpreter está baseada em uma classe com a expressão abstrata e a
partir dela a geração de classes de expressões terminais como é o caso da classe
Variavel e de expressões não terminas como o caso da classe Soma ambas
vistas na Figura 6.
Este subframework difere aos outros geradores de parse que possuem
validação semântica como o JavaCC (Java Compiler-Compiler), pois está
interligado a um banco de dados, deixando a semântica dinâmica, uma vez que
uma variável poderá ter um significado diferente dependendo do contexto, além
de ser um aplicativo web.
Escolheu-se criar um framework, pois cada usuário possui um contexto
diferente, e com a utilização de frameworks pode-se utilizar somente a parte que
mais lhe interessa além de poder realizar modificações para melhor adaptação do
subframework ao seu contexto.
Para a realização deste experimento foi necessário realizar uma pesquisa
na literatura sobre frameworks e como identificar, analisar e desenvolver os
requisitos de um framework. Após a pesquisa, determinou-se que a melhor
abordagem é a descrita por Matos e Fernandes (2006), pois propõe um modo de
se identificar e de se criar os subframeworks a partir da análise do diagrama UMLF e da identificação dos hot spots a eles associados. Após esse refinamento,
selecionam-se as classes do subsistema que atendem sua finalidade, facilitando
desta forma em fases posteriores à identificação detalhada de colaboração entre
eles. Aborda também as vantagens do desenvolvimento em paralelo de
aplicações, escolha de um estilo arquitetural, e demais vantagens oferecidas
pelos trabalhos dos autores estudados.
O reúso é dado por meio do Modelo de Requisitos e de Classes de cada
aplicação-exemplo, que haviam sido gerados na subfase anterior, proposta pela
abordagem baseada em responsabilidades (MATOS; FERNANDES, 2006), para
criar o Modelo de Classes do Subsistema Cálculo do Preço de Venda. Para a
criação do subframework, reusam-se as classes do Modelo de Classes de cada
aplicação-exemplo.
Além do reúso de artefatos gerados durante a análise, esta abordagem
permitiu o reúso arquitetural através dos subframeworks que podem ser reusados
como frameworks em outras aplicações. Por isso, para aplicação da abordagem
tanto o Modelo de Requisitos, com diagramas de casos de uso na forma gráfica e
textual, e o Modelo de Classes, com diagramas de classes, de cada subsistema
de cada aplicação-exemplo já devem estar prontas antes. Saliente-se, nesse
sentido, que cada pessoa ou grupo poderá realizar a análise de subsistemas
diferentes.
A maneira de determinar os subframeworks, que constituíram a arquitetura
do framework, mostrada neste trabalho é realizada analisando os requisitos do
framework. A partir destes e da estrutura de classes criada para o subsistema,
Cálculo do Preço de Venda, procura-se determinar quais são as classes que irão
satisfazê-lo. Primeiramente foi desenvolvido o analisador sintático de fórmulas
descrito por Hornung et al. (2008). E então, criou-se o avaliador semântico de
fórmulas, onde se optou por estudar e utilizar um padrão de projeto e, neste caso,
utilizou-se o Interpreter para o desenvolvimento. Após isso foi feita a unificação
dos dois subframeworks, para que eles possam ser utilizados juntos.
6. Conclusões
Neste trabalho apresentou-se a utilização da abordagem dirigida por
responsabilidades durante a criação do subframework de análise sintática e
semântica de fórmulas matemáticas a partir dos casos de uso definidos como hot
spots e obtidos na etapa de análise do processo de desenvolvimento de
framework.
Como resultado do processo proposto, criou-se um subframework que
pode ser utilizado em outra aplicação, pois suas classes frozen e hot spots já
estão identificadas. Contudo, alguns testes no subframework estão sendo feitos
para identificar sua aplicação em outros domínios.
7. Referências
BASS, L.; CLEMENTS, P.; KAZMAN, R. Software Architecture in Practice,
Addison Wesley, 2003.
BRAGA, R. T. V.; Masiero, P. C. A Process for Framework Construction Based
on a Pattern Language. In: Annual International CSAC, 26., 2002. Oxford:
IEEE, 2002. p. 615-620.
BROWN, A. W.; WALLNAU, C. The Current State of CBSE, IEEE Software, vol.
155, sept-oct, p. 37-38, 1998.
BUTLER, G.; XU, L. Cascaded Refactoring for Framework Evolution, In: Proc.
SSR’01, May, Toronto, Ontario, Canada. ACM 1-58113-358-8/01/0005, p. 5157, 2001.
CRAZUSKI, A.; FEITOSA, L. B.; CORDEIRO, T, L. Identificação dos pontos de
estabilidade e de flexibilidade dos métodos para o estabelecimento de
preço de venda. 135f. 2008. Trabalho de Conclusão de Curso – Universidade
Tecnológica Federal do Paraná, Ponta Grossa.
COGAN, S. Custos e preços: formação e análise. São Paulo: Pioneira, 1999.
FAYAD, M.; SCHMIDT, D.; JOHNSON, R. Building Application Frameworks –
Object-Oriented Foundations of Framework Design, Wiley, p.688, 1999.
FONTOURA, M.; PREE, W.; RUMPE, B. UML-F:A modeling language for
object-oriented frameworks, In ECOOP. LNCS, 1850.Springer-Verlag, 63-82,
2000.
HORNUNG, R.; MATOS, S. N.; FERNANDES, C. T. Aplicando o processo
dirigido por responsabilidades para a criação de um subframework para
validação de sintática de fórmulas. In: 5nd CONTECSI, 5., 2005, São Paulo.
FEA/USP, 2008.
JOHNSON, R. E. How to design frameworks, In: Object-Oriented Programming
Systems, Languages and Applications Conference – OOPSLA, Washington
Proceedings, 1993.
KIRK, D.; ROPER, M.; WOOD, M. Identifying and Addressing Problems in
Framework Reuse, In: Proceedings of the 13th IWPC´05, 2005.
LAND, R. How can frameworks facilitate component reuse?, Extended Report
for I. Crnkovic and M. Larsson (editors), “Building Reliable Component-Based
Systems”, Artech House, 2002.
LANDIN, N.; NIKLASSON, A., Development of Object-Oriented Frameworks,
Department of Communication System.Lund Institute of Technology, Lund
University. Lund, Sweden, 1995.
MARTINS, E. Contabilidade de Custo. 6ª ed., São Paulo: Atlas, 2003. p.220.
MATOS, S. N.; FERNANDES, C. T. Using Responsibilities for Early
Identification of Hot Spot Reused in Framework Modeling. In: IEEE
International Workshop on Security, Trust, and Privacy for Software
Applications. 3. Turku: IEEE Computer Society Press, 2008.
MATOS, S. N.; FERNANDES, C. T. Defining the architectural design of
frameworks through a group of subframeworks created from frozen and
hot spots. In: International Conference on Software Engineering Advances,
2006, Tahiti: IEEE Computer Society Press, 2006.
MATTSSON, M. Evolution and composition of object-oriented frameworks.
224f. 2000. PhD Thesis– University of Karlskrona/Ronneby, Sweden.
PARIS, M. Reuse-based Layering: a Strategy for Architectural Framework for
Learning Technologies, In: IEEE Conferece on Advanced Learning
Technologies (ICALT’04), 2004.
PREE, W. Hot-spot-driven development. In: FAYAD, M.; JOHNSON, R.;
SCHMIDT, D. Building application frameworks: object-oriented
foundations of framework design. NY: John Wiley and Sons, 1999. p. 379393.
SEBRAE.
Cálculo
do
preço
de
venda.
<http://www.sebraepr.com.br>. Acesso: 11 nov de 2008.
Disponível
em
SILVESTRE, W. C. Sistema de custos ABC: uma visão avançada para
tecnologia de informação e avaliação de desempenho. São Paulo: Atlas,
2002.
TALIGENT, Building object-oriented frameworks, Taligent Inc.white paper,
1994.
TANG, A.; HAN, J.; Chen, P. A Comparative Analysis of Architecture
Frameworks, In: Proceedings of the 11th Asia-Pacific Software Engineering
Conference (APSEC´04), 2004.
VILJAMAA, J. Reverse Engineering Framework Reuse Interfaces, In
Proceeding: ESEC/FSE’03, September 1-5, Helsinki, Finland, 2003.
WIRFS-BROCK, R.; MCKEAN, A. Object Design: Roles, Responsabilities, and
Collaborations, Addison Wesley, 2003.
Download

Applying the Responsibility-Driven Method in the Development of a