Problema com Associações no Enterprise Architect - Engenharia Reversa

367 views
Skip to first unread message

Rodrigo Avancini

unread,
Nov 7, 2012, 2:58:48 PM11/7/12
to ccppb...@googlegroups.com
Boa tarde caros membros,

Estou fazendo engenharia reversa no meu código e estou deparando com o seguinte problema:

Como de costume, no código fonte, algumas associações são criadas somente no .cpp, para quem conhece o EA (Enterprise Architect) ele faz engenharia reversa, mas reconhece somente as associações nos .h, tem alguma forma de gerar essas associações também vindas dos .cpps???

Não sei se fui claro, mas caso haja coro, posso tentar explicar melhor..

Agradeço desde já..

Att.
Rodrigo 

Fernando Tonon

unread,
Nov 7, 2012, 3:21:34 PM11/7/12
to ccppbrasil
Em File Extensions o padrão eh ".h;.hpp;", vc tentou alterar para
".h;.hpp;.c;.cpp;"?

P.

unread,
Nov 8, 2012, 7:41:59 AM11/8/12
to ccppb...@googlegroups.com
Em quarta-feira, 7 de novembro de 2012 17h58min51s UTC-2, Rodrigo Avancini escreveu:
 
Como de costume, no código fonte, algumas associações são criadas somente no .cpp, para quem conhece o EA (Enterprise Architect) ele faz engenharia reversa, mas reconhece somente as associações nos .h, tem alguma forma de gerar essas associações também vindas dos .cpps???

Que associações seriam estas criadas nos arquivos .cpp ?

Você está se referindo a variáveis globais etc.?

--
 P.

Rodrigo Avancini

unread,
Nov 8, 2012, 8:09:00 AM11/8/12
to ccppb...@googlegroups.com
Depois de fazer o teste sugerido pelo Fernando cheguei em meu equivoco.

O problema na verdade é o seguinte: 
Necessito de um serviço essencial provido de outra classe, mas essa classe é um Singleton, só crio a associação em um método especifico, mas obviamente preciso da um include nessa classe (que esta no .cpp), achei que somente dando um include o EA criava essa associação, mas parece que ele só cria quando declaro a variável no .h, tem alguma forma de resolver isso???

Uma alternativa que percebi é que devo declarar a variável no .h, mas na verdade isso é só um artificio para melhorar as associações, pois não necessito dessa variável no .h, uso somente na implementação.

Att.
Rodrigo

--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en

Fernando Tonon

unread,
Nov 8, 2012, 8:32:15 AM11/8/12
to ccppbrasil
No menu Tools | Options | Source Code Engineering tem uma opção que
pode ser interessante pra você, "Create dependencies for operation
returns and parameter types", marcando essa opção o EA cria
relacionamento entre os tipos passados como parametro e que são
retornados pelos métodos.

Isso que você está querendo acho que o EA não faz e nem sei se deveria
pois as variáveis são exclusivas da implementação do método, não fazem
parte da classe. (Faz tempo que estudei UML, não lembro se esse caso é
considerado como algum tipo de agregação ou se o diagrama deve conter
apenas os atributos da classe mesmo)

On 8 nov, 10:09, Rodrigo Avancini <avancinirodr...@gmail.com> wrote:
> Depois de fazer o teste sugerido pelo Fernando cheguei em meu equivoco.
>
> O problema na verdade é o seguinte:
> Necessito de um serviço essencial provido de outra classe, mas essa classe
> é um Singleton, só crio a associação em um método especifico, mas
> obviamente preciso da um include nessa classe (que esta no .cpp), achei que
> somente dando um include o EA criava essa associação, mas parece que ele só
> cria quando declaro a variável no .h, tem alguma forma de resolver isso???
>
> Uma alternativa que percebi é que devo declarar a variável no .h, mas na
> verdade isso é só um artificio para melhorar as associações, pois não
> necessito dessa variável no .h, uso somente na implementação.
>
> Att.
> Rodrigo
>
> Em 8 de novembro de 2012 10:41, P. <pedro.lama...@gmail.com> escreveu:
>
>
>
>
>
>
>
> > Em quarta-feira, 7 de novembro de 2012 17h58min51s UTC-2, Rodrigo Avancini
> > escreveu:
>
> >> Como de costume, no código fonte, algumas associações são criadas somente
> >> no .cpp, para quem conhece o EA (Enterprise Architect) ele faz engenharia
> >> reversa, mas reconhece somente as associações nos .h, tem alguma forma de
> >> gerar essas associações também vindas dos .cpps???
>
> > Que associações seriam estas criadas nos arquivos .cpp ?
>
> > Você está se referindo a variáveis globais etc.?
>
> > --
> >  P.
>
> > --
> > Antes de enviar um e-mail para o grupo leia:
> >http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
>
> > --~--~---------~--~----~---------------------------------~----------~--~----~
> > [&] Colabore com a Pesquisa de Preferência de Conteúdo
> > para Eventos do Grupo C & C++ Brasil:
> >http://www.surveymonkey.com/s/GBBGTXN
>
> > ------~----~-------~---~---~---~---~----------------~------------~---------~
> > [&] C & C++ Brasil -http://www.ccppbrasil.org/
> > Para sair dessa lista, envie um e-mail para
> > ccppbrasil-...@googlegroups.com
> > Para mais opções, visitehttp://groups.google.com/group/ccppbrasil
> > --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
> > Emprego & carreira: vaga...@ccppbrasil.org
> >http://groups.google.com/group/dev-guys?hl=en

Rodrigo Avancini

unread,
Nov 8, 2012, 9:11:31 AM11/8/12
to ccppb...@googlegroups.com
Legal essa dica Fernando, deu uma melhorada nos diagramas..

Eu também não se se isso criaria uma associação de acordo com a UML.. Mas acho que deveria.. 
Já tenho uma solução em mente, mas gostaria de continuar a discussão. 

Valeu!

Att.
Rodrigo

[&] C & C++ Brasil - http://www.ccppbrasil.org/

Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira:  vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en

P.

unread,
Nov 8, 2012, 10:08:06 AM11/8/12
to ccppb...@googlegroups.com
Em quinta-feira, 8 de novembro de 2012 11h09min02s UTC-2, Rodrigo Avancini escreveu:
 
O problema na verdade é o seguinte: 
Necessito de um serviço essencial provido de outra classe, mas essa classe é um Singleton, só crio a associação em um método especifico, mas obviamente preciso da um include nessa classe (que esta no .cpp), achei que somente dando um include o EA criava essa associação, mas parece que ele só cria quando declaro a variável no .h, tem alguma forma de resolver isso???


A relação que você descreve -- o método de uma classe faz uso de um objeto Singleton de outra classe -- não deve ser representada como uma associação entre as classes em um diagrama de classes.

O diagrama de classes representa um modelo estrutural e portanto descreve coisas como layout de memória, schema de banco de dados, formato de arquivos, pacote de rede etc. No seu exemplo, a classe inicial não tem qualquer associação estrutural com o objeto Singleton.

A relação que você descreve existe no decorrer de um processo, em uma etapa de uma atividade, em um ponto no tempo de uma timeline etc. e portanto deve ser representada em um diagrama de atividades ou de sequência ou qualquer dos diagramas de comportamento.

A sua ferramenta CASE está fazendo a coisa certa. (Uma excelente escolha, eu diria, o Enterprise Architect. Eu uso com frequência.)

--
 P.

Rodrigo Avancini

unread,
Nov 8, 2012, 11:07:57 AM11/8/12
to ccppb...@googlegroups.com
Realmente Pedro, concordo com você, o ideal seria o de sequência.. 

Mas dei uma breve pesquisada no google, parece que esse tipo de associação chama-se dependência..

De uma olhada nesse link do livro "Utilizando Uml E Padroes 3 Ed."

Sera que seria possível gerar automaticamente no EA?

Att.
Rodrigo


--
 P.

--

P.

unread,
Nov 8, 2012, 3:30:44 PM11/8/12
to ccppb...@googlegroups.com
Em quinta-feira, 8 de novembro de 2012 14h08min01s UTC-2, Rodrigo Avancini escreveu:
 
Realmente Pedro, concordo com você, o ideal seria o de sequência.. 

Mas dei uma breve pesquisada no google, parece que esse tipo de associação chama-se dependência..

De uma olhada nesse link do livro "Utilizando Uml E Padroes 3 Ed."

Sera que seria possível gerar automaticamente no EA?


Acredito que nenhum CASE vá gerar uma dependência pelas mesmas razões que eu citei anteriormente.

A "dependência" é uma relação tão genérica que a ferramenta CASE seria obrigada a gerar uma dependência de tudo para tudo -- como, por exemplo, uma dependência entre main e int. Bons usos de dependência em geral acontecem com a ajuda de estereótipos para constranger o significado da dependência -- como "uses" e "offers" em especificações de componentes.

O melhor caminho é desistir de representar como estrutura aquilo que é comportamento.

--
 P.

Rodrigo Avancini

unread,
Nov 9, 2012, 7:08:06 AM11/9/12
to ccppb...@googlegroups.com
Ok Pedro,
Qual seria o conselho do ponto de vista de rastreabilidade, se eu fizer uma mudança na dependência, talvez mude algo no serviço que eu uso, exemplo um novo parâmetro de entrada, obviamente vou gerar um erro em tempo de compilação, mas gostaria de fazer uma analise de impacto antes de ir para o código fonte, olho minha classe no diagrama e não vejo essa dependência, e então passo desapercebido. Como evitar esse tipo de coisa? Devo criar a rastreabilidade no diagrama de sequencia (atualmente inviável)?

Obrigado!

Att.
Rodrigo


--
 P.

--

P.

unread,
Nov 9, 2012, 8:52:31 AM11/9/12
to ccppb...@googlegroups.com
Em sexta-feira, 9 de novembro de 2012 10h08min13s UTC-2, Rodrigo Avancini escreveu:
Ok Pedro,
Qual seria o conselho do ponto de vista de rastreabilidade, se eu fizer uma mudança na dependência, talvez mude algo no serviço que eu uso, exemplo um novo parâmetro de entrada, obviamente vou gerar um erro em tempo de compilação, mas gostaria de fazer uma analise de impacto antes de ir para o código fonte, olho minha classe no diagrama e não vejo essa dependência, e então passo desapercebido. Como evitar esse tipo de coisa? Devo criar a rastreabilidade no diagrama de sequencia (atualmente inviável)?

A dependência passará despercebida se você assumir que o (único?) diagrama de classes é o universo total de informações sobre dependências. O que ele não é e jamais será.

Me parece aqui que existe um falso dilema entre o objetivo de rastrear as consequências de uma modificação e a necessidade de representar dependências comportamentais em modelos comportamentais. Qual é o problema? Acostume-se a ler os diagramas de comportamento em busca das consequências de uma modificação e ponto final.

O que você quer dizer com "atualmente inviável"? É um problema de competência na equipe? É um problema com o Enterprise Architect?

Vamos supor que você tem um objetivo singleton com diversos métodos e pretende mudar um deles. Você checa o seu diagrama de classes, onde absolutamente todas as dependências comportamentais estão representadas, e busca na infinitude de linhas aquela que une o singleton e a classe Foo. E daí? A relação entre classes não dirá se, quando e como uma instância da classe Foo sofrerá impacto na mudança do método X do singleton. Por que os diagramas de classes não tem o propósito de representar isso.

Rejeitar a necessidade de modelos comportamentais e reduzir tudo a modelos estruturais é um erro terrível. Em breve você proibirá o time de escrever singletons com mais de um método com a justificativa de que singletons com mais de um método tornam "impossível" rastreabilidade em UML2. É uma inversão de valores.

--
 P. 

Rodrigo Avancini

unread,
Nov 9, 2012, 9:15:51 AM11/9/12
to ccppb...@googlegroups.com
Blz Pedro,
Essa discussão ta boa..

"O que você quer dizer com "atualmente inviável"? É um problema de competência na equipe? É um problema com o Enterprise Architect?"
Existem 2 problemas:
* tempo = não posso parar a equipe para criar diagramas comportamentais 
* metodologia = foi usado XP 
Atualmente o sistema só tem User Story, Classes e GUIs.. O problema ta cada vez mais embaixo.. :)

Não quero mudar em nada a forma como é feito atualmente, por isso as duvidas e mais duvidas vão surgindo.. 

Valeu!

Att.
Rodrigo


--
 P. 

--

Fernando Tonon

unread,
Nov 9, 2012, 9:25:22 AM11/9/12
to ccppbrasil
Você realmente precisa especificar esse tipo de problema em diagramas?
Eu trabalho com metodologia XP também e uso o EA, aqui eu só faço
diagramas de caso de uso, diagramas de atividade em alguns casos,
diagrama de estados e para representar o banco de dados eu uso
diagramas de classe.
Pra fazer rastreabilidade de onde que vai afetar uma mudança eu uso os
diagramas de caso de uso mesmo e esse nível de rastreabilidade que
você tá procurando acho que é melhor deixar o programador usar um CTRL
+F na IDE que ele usa e olhar onde é utilizado o metodo e onde sera
afetado. Dependendo da IDE tem outras ferramentas pra fazer essa
rastreabilidade, talvez seja interessante você rever essa necessidade
de fazer os diagramas de classe com esse nivel de detalhamento, a não
ser que você seja obrigado por algum contrato a fazer isso...

On 9 nov, 11:15, Rodrigo Avancini <avancinirodr...@gmail.com> wrote:
> Blz Pedro,
> Essa discussão ta boa..
>
> *"O que você quer dizer com "atualmente inviável"? É um problema de
> competência na equipe? É um problema com o Enterprise Architect?"*
> Existem 2 problemas:
> * tempo = não posso parar a equipe para criar diagramas comportamentais
> * metodologia = foi usado XP
> Atualmente o sistema só tem User Story, Classes e GUIs.. O problema ta cada
> vez mais embaixo.. :)
>
> Não quero mudar em nada a forma como é feito atualmente, por isso as
> duvidas e mais duvidas vão surgindo..
>
> Valeu!
>
> Att.
> Rodrigo
>
> > [&] C & C++ Brasil -http://www.ccppbrasil.org/
> > Para sair dessa lista, envie um e-mail para
> > ccppbrasil-...@googlegroups.com
> > Para mais opções, visitehttp://groups.google.com/group/ccppbrasil
> > --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
> > Emprego & carreira: vaga...@ccppbrasil.org
> >http://groups.google.com/group/dev-guys?hl=en

Rodrigo Avancini

unread,
Nov 9, 2012, 10:34:54 AM11/9/12
to ccppb...@googlegroups.com
Não preciso necessariamente Fernando.. A principio era somente uma duvida sobre o EA..

Estou fazendo exatamente isso, pelos casos de uso, aliais, agora que estou identificando eles..

Não tenho problemas com os diagramas de classe, pois o EA gera automaticamente..  

Estou criando um "Diagrama Custom" rastreando tudo, como não tenho todas dependências ilustradas, estou pelo menos agrupando as essenciais..

Obrigado!

Att.
Rodrigo

[&] C & C++ Brasil - http://www.ccppbrasil.org/

Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira:  vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en

Reply all
Reply to author
Forward
0 new messages