| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 13:46:30
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Galera, alguma recomendação de ferramenta ou plug-in pro Eclipse que gere um relatório de métricas?
Preciso de métricas do tipo SPM (statements por método), SPC (statements por classe), CPS (comentários por statement) e, e o bicho souber fazer algo do tipo detectar copy'n'paste, joia
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 14:07:07
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
JDepend, Metrics e mais alguns em: Plugins for category Source Code Analyzer
Depois nos diga se algum serviu.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 14:17:05
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
NHAM!
Beleza, digo sim...
Aproveitando, algum toque, truque, dica ou paper com menos de 2 páginas sobre análise de código? Nao tou querendo fazer FPA, pq eu sou soh um ser humano, e eu já estou entrando em overdose de cafeína antes mesmo de começar (e, pra piorar, ainda tou com sono...). Algo bem rule-of-thumb, mesmo. Quando vcs consideram um método bom, e quando ele se torna lixo? Qual a linha divisória?
PS: se estiver dificil de responder, e vcs preferirem discutir sobre a origem do universo ou religião, tudo bem tb
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 14:29:59
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Antigamente, bem antigamente ainda no tempo da programação estruturada, a gente precisava imprimir as rotinas e quando elas ficavam com muitas páginas, eram difíceis de ler. Então algumas empresas adotavam uma regra radical: fora o trecho de definição de variáveis, o tamanho limite de uma rotina devia ser de 60 linhas. Assim as rotinas muito longas eram divididas em partes para facilitar a leitura.
Hoje com OO o objetivo passou a ser a questão da especialização. Os métodos devem fazer uma coisa só. Mesmo assim alguns métodos podem ficar meio grandinhos. Mas o que é grande e complexo para um pode não ser para outro.
Para mim o método fica um lixo quando está grande e confuso. Se este é seu caso e tem tempo para refatorar, refine o grau de especialização passando algumas partes centrais para outros métodos privados.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 15:20:55
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Bons conselhos, Luca! Valeu
Vou aproveitar e acabar respondendo minha propria pergunta aqui. Uma regrinha bem facil que eu acabei arrumando é a de "nao comente, extraia um método". Vou tentar dar um exemplo:
Refatorando uma classe dessas eu provavelmente acabaria implementando um outro metodo, assim:
E, claro, removeria o comentario, ja que agora o codigo se tornaria auto-explicativo.
Claro, esse eh um exemplo meio extremo, mas acho que deu pra passar a ideia, que eh a de quebrar o codigo ao maximo possivel, em rotininhas com nomes mais compreensiveis. Pq, nesse caso, vc nao quer saber o tamanho da lista, vc quer saber o indice do ultimo Node inserido (last inserted node index).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 16:23:54
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline
|
Toda cuidado para não extrair common-subexpressions demais.
Eu acredito que documentação dentro da função é mais para notas de desenvolvimento que para documentação, coisas como TODO, FIXME, etc são legais dentro de código que ainda está sofrendo muita modificação.
Mas tem muitos casos onde a documentação é indispensavel, nomalmente quando envolve gerenciamento de recursos e métodos/atributos não públicos:
As vezes não da para traduzir isso na assinatura ou ficar verificando. Sem falar que nomes com mais de 30 caractéres é sacanagem...
|
http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2004 22:59:31
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
Sobre o JDepend, ferramenta free para examinar seu código e verificar impacto de eventuais mudanças: Managing Your Dependencies with JDepend
. . .
JDepend is an open source software program available for download at http://www.clarkware.com. The download includes the source code, JUnit test cases, documentation, pre-build .jar files, an ANT build script, and a sample application for testing purposes. The online documentation covers all of the features available for setting up, configuring, and running JDepend
. . .
Once you understand the JDepend metrics, you may want to automate their collection within your normal build and release cycle. Fortunately, there are optional Ant tasks for doing just that. If you are using Ant 1.5, you can use an XSL stylesheet to transform your JDepend XML output into an HTML report. These reports can be used as a regular part of your quality or metrics program. Turbine and Maven are two projects utilizing this feature.
Lá estão algumas métricas que se podem obter com o JDepend:
CC Concrete Classes
The number of concrete classes in this package.
AC Abstract Classes
The number of abstract classes or interfaces in this package.
Ca Afferent Couplings
The number of packages that depend on classes in this package. Answers the question "How will changes to me impact the rest of the project?"
Ce Efferent Couplings
The number of other packages that classes in this package depend upon. Answers the question "How sensitive am I to changes in other packages in the project?"
A Abstractness
Ratio (0.0-1.0) of Abstract Classes (and interfaces) in this package. AC/(CC+AC)
I Instability
Ratio (0.0-1.0) of Efferent Coupling to Total Coupling (Ce/(Ce+Ca)).
D Distance from Main Sequence
The perpendicular distance of a package from the idealized line A+I=1. Answers the question "How balanced am I in terms of Abstractness and Instability?" The range of this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence (balanced) and D=1 indicating a package that is as far from the main sequence as possible (unbalanced).
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/02/2004 08:48:51
|
dukejeffrie
Virtual Machine Man
![[Avatar]](/images/avatar/c74d97b01eae257e44aa9d5bade97baf.png)
Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline
|
Tem mais uma coisa boa sobre o JDepend: tem task pro Ant.
eu costumo achar um método um lixo quando ele começa a ficar assim:
Esse é o exemplo mais clássico que existe de extract method. Mas eu não removo os comentários:
Lógico que limpar os buffers foi pra outro lugar no meio do refactoring, pq não tem nada a ver com saveWorkspace.
Eu gosto de pensar assim:
efeitos colaterais (como limpar os buffers quando vc salva o workspace) são ruins
alguém um dia vai querer extender ou delegar pra essa classe. Vc tá permitindo polimorfismo? Vc tá permitindo que o cara extenda sua classe e altere um minúsculo pedacinho do funcionamento, mantendo o resto?
Com essas duas regrinhas vc não consegue mais escrever métodos imensos.
[]s
|
Brevity is the soul of wit |
|
|
 |
|
|