Precedente :: Successivo |
Autore |
Messaggio |
chemicalbit Dio maturo


Registrato: 01/04/05 18:59 Messaggi: 18597 Residenza: Milano
|
Inviato: 05 Mar 2009 21:43 Oggetto: Complessità ciclomatica |
|
|
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 |
|
 |
freemind Supervisor sezione Programmazione


Registrato: 04/04/07 21:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 05 Mar 2009 23:16 Oggetto: |
|
|
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:
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 è:
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:
abbiamo v(G)=1, e=1,n=2 => v(G)=1-2+2
in una if then else
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 |
|
 |
|
|
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
|
|