Domanda

Ho bisogno di uno strumento molto specifico per VB (o multi-lingua). Ho pensato di chiedere se ne esiste già, prima di iniziare a fare uno io (probabilmente, in python).

Che cosa ho bisogno:

  • Il mosto strisciare strumento, recursivelly o no, un percorso, alla ricerca di un elenco di estensione, ad esempio, .bas .frm, .xxx
  • Quindi, si deve analizzare che i file, la ricerca di funzioni, routine, ecc.
  • E, infine, deve uscita quello che trovate.

ho basato questo sull'idea di "ridurre il codice di ridondanza", in uno scenario in cui, cattivi programmatori fanno un sacco di funzioni che fanno la stessa cosa, a volte con lo stesso nome, a volte no. Ci sono 4 casi:

  • Caso 1:. Stesso nome, stesso contenuto
  • Caso 2:. Stesso nome, contenuti Diff
  • Caso 3:. Nome Diff, Stesso contenuto
  • Caso 4:. Nome Diff, Diff Content

Quindi, l'uscita, dovrebbe essere qualcosa di simile

===========================================================================
RESULT
===========================================================================
Errors:
---------------------------------------------------------------------------
==Name, ==Content --> 3: (Func(), Foo(), Bar()) In files (f,f2,f3)
!=Name, ==Content --> 2: (Func() + Func1(), Bar() + Bar1()) In Files (f4)

---------------------------------------------------------------------------
Warnings:
==Name, !=Content --> 1 (Foobar()) In Files (f19)

---------------------------------------------------------------------------

Questo per dare un'idea di cosa ho bisogno.

Quindi, la domanda è: c'è qualche strumento che compire qualcosa di simile a questo ???

P.S:. Sì, dovremmo scrivere buon codice, in primo grado, ma, si sa, roba succede

È stato utile?

Soluzione

Quello che vogliamo è un "rivelatore clone". Questi strumenti trovano codice di copia e incollato in una vasta serie di file designati. I cloni non sono solo delle funzioni; possono essere blocchi di codice, dichiarazioni di dati, ecc.

Ci sono una varietà di rivelatori là fuori, e si dovrebbe sapere come funzionano prima di tentare di costruire uno proprio.

Alcuni semplicemente corrisponde linee per l'equivalenza esatta. Mentre questi dimostrano l'idea di base, la loro individuazione non è buona, perché non tengono conto del fatto che il codice clonato ha spesso variazioni; quello che la gente realmente è clone e modifica quando si eseguono copie.

Alcune sequenze partita di gettoni langauge, per esempio, gli identificatori, parole chiave, letterali, la punteggiatura. Questi almeno sono relativamente tolleranti di modifiche degli spazi bianchi. E possono trovare cloni in cui singoli gettoni sono stati sostituiti per i singoli gettoni. Tuttavia, poiché non capiscono la lingua struttura (blocchi, dichiarazioni, corpi di funzione) che spesso corrisponde sequenze che attraversano i confini tale struttura (ad esempio, "} {" è spesso considerato un clone da questi strumenti) , producono piuttosto elevati indicazioni false-positive di cloni (non). Alcuni di questi tentativo di limitare le partite a strutture di programma chiave, come funzioni complete, come avete tipo di proposta.

rivelatori più sofisticati corrispondono strutture di programma. Il nostro CloneDR (Io sono l'autore originale) è un rivelatore che analisi usi compilatore qualità di alberi di sintassi, che estrae la struttura precisa del codice. Lo fa per molti linguaggi (compreso VB6 e VBScript), individuante cloni come funzioni arbitrarie, blocchi, dichiarazioni o dichiarazioni, con parametri mostra come i cloni variano. CloneDR riesce a trovare cloni nonostante i cambiamenti di formattazione, cambiamenti nelle posizioni di commento o contenuti, e anche le variazioni in cui costrutti complessi (più istruzioni o espressioni) sono stati usati come alternative a quelli semplici (ad esempio, un singolo statment o un letterale). Mentre tende ad avere un alto tasso di rilevamento (solitamente trova ridondanza rimovibile 10-20%!), Il suo tasso di falsi positivi tende ad essere notevolmente inferiori ai rivelatori basata su token. Si può vedere report di esempio per una varietà di diversi linguaggi al link qui sopra.

confronto e la valutazione del codice Clone rilevazione Tecniche e Strumenti:. qualitativo approccio che discute esplicitamente approcci e benefici diversi, e mette a confronto un gran numero di rivelatori tra cui CloneDR

EDIT ottobre 2010: ... Quando ho scritto questa risposta, ho assunto il PO era interessato a VB.net, che CloneDR non ha fatto. Abbiamo dato aggiunto VB.net, VB6 e la capacità di VBScript per CloneDR. (Analisi VB.net nella sua forma moderna è un Messier molto di quanto si possa immaginare per "semplice" (!) Langauge come Visual Basic).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top