Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Complessità ciclomatica
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 05 Mar 2009 21:43    Oggetto: Complessità ciclomatica Rispondi citando

the_fede ha scritto:
calcolare la complessità ciclomatica per codice JavaScript.
Cos'è la complessità ciclomatica?

Qualcosa tipo la compelssità computazionale, quante operazioni vengono fatte?

:edit: by freemind
Questo 3d prende spunto da qui
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 05 Mar 2009 23:16    Oggetto: Rispondi

chemicalbit ha scritto:
Cos'è la complessità ciclomatica?

La complessità ciclomatica o numero ciclomatico o indice ciclomatico è una metrica strutturale che fornisce la dimensione delle complessità del software in funzione dei possibili cammini percorribili dallo stesso.
In pratica occorre vedere il programma come un grafo i cui nodi sono rappresentati delle if, while, switch e tutte le altre istruzioni condizionali che lo compongono.
Definizione (grafo fortemente connesso): Un grafo è fortemente connesso se da ogni nodo parte un cammino per tutti i restanti nodi.

Per questi grafi il numero di cammini linearmente indipendenti è pari a:
Codice:
C=e-n+1

con e il numero di archi, n quello dei nodi.

Definizione (cammini linearmente indipendenti): Due cammini sono tra loro linearmente indipendenti se non possono essere espressi come combinazione lineare di altri (in pratica è il concetto di colonne linearmente indipendenti delle matrici).

Definizione (base): Una base è l'insieme dei cammini linearmente indipendenti, tramite le loro combinazioni lineari si ottengono tutti gli altri.
---

I grafi associati ai programmi non sono fortemente connessi perchè il nodo finale e quello iniziale non sono uniti. Allora si aggiunge un arco tra i due per renderlo fortemente connesso.

Con questa aggiunta otteniamo che per il grafo associato il numero di cammini fortemente connessi è:
Codice:
v(G)=e-n+2

e si deduce che per n if nel programma abbiamo n+1 cammini linearmente indipendenti.

Il valore v(G) è il numero ciclomatico del software

In pratica possiamo osservare che in una sequenza:
Codice:

   A
   |
   B

abbiamo v(G)=1, e=1,n=2 => v(G)=1-2+2
in una if then else
Codice:

    A
   / \
   B   C
   \ /
    D

abbiamo v(G)=2, e=4,n=4 => v(G)=4-4+2
e in un ciclo
Codice:

   A<-+
   |  |
   B->+
   |
   C

abbiamo v(G)=2, e=3,n=3 => v(G)=3-3+2

Il discorso si applica all'intero programma ma ovviamente va focalizzato sui singoli metodi che lo compongono (o anche alle funzioni).
Diciamo che se v(G)>10 per un metodo allora questo andrebbe spezzato tramite refactoring.

Nell'ingegneria del software è uno degli indici da analizzare per arrivare a produrre un buon software, ovviamente il tutto è legato alla gestione dei processi produttivi dello stesso e ci dilungheremmo in discussioni matematiche-economico-informatiche ma sono un po' troppo arrugginito...
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi