Complessità ciclomatica

Slides:



Advertisements
Presentazioni simili
CUDA & OpenMP parallel programming.
Advertisements

Introduzione al linguaggio C++
Premessa: si assume di aver risolto (correttamente
INFORMATICA Altre Istruzioni di I/O
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Esercitazioni If nidificati
Uso avanzato di C.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Selezione A. Ferrari.
Generazione di numeri casuali in Dev C++
Introduzione al linguaggio C
Le funzioni.
Introduzione Cosa sono le reti di Petri?
1 Il punto di vista Un sistema è una parte del mondo che una persona o un gruppo di persone, durante un certo intervallo di tempo, sceglie di considerare.
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
Algoritmi in C++ (1) da completare
Breath-first search Visita in ampiezza di un grafo Algoritmo Esempio
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
INFORMATICA Strutture iterative
FUNZIONI DI BIBLIOTECA
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
1 Introduzione Ottimizzazione di un sistema (per es. di calcolo) (1) Analisi dellimpatto delle varie soluzioni possibili (2) Legge di Amdhal (3) Scelta.
SCHEDA INFORMATIVA DI UNITÀ. Introduzione SISTEMA DI CALCOLO Valutazione delle prestazioni Metriche oggettive di analisiRisultati oggettivi.
Tipo Documento: unità didattica 0 Modulo 0 Compilatore: Antonella Bolzoni Supervisore: Data emissione: Release: Indice: A.Scheda informativa B.Introduzione.
Tipo Documento: unità didattica 0 Modulo 0 Compilatore: Antonella Bolzoni Supervisore: Data emissione: Release: Indice: A.Scheda informativa B.Introduzione.
Algoritmi e Strutture Dati
Visite di grafi Algoritmi e Strutture Dati. Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Cammini minimi Algoritmo SPT.Acyclic
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
1 2. Analisi degli Algoritmi. 2 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo:
Grafi.
Modelli e Algoritmi per la Logistica
Introduzione1 Algoritmi e strutture dati - Definizioni Struttura dati: organizzazione sistematica dei dati e del loro accesso Algoritmo: procedura suddivisa.
I Thread.
Esercizi su alberi binari
Primi Elementi di Programmazione in C++
Interazione utente-programma
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Algoritmi e Programmazione (in C) Stefano Cagnoni e Monica Mordonini
Calcolo del Massimo Comun Divisore
Parte 1 Introduzione alla Teoria dei Circuiti
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Creazione progetto in C++/DEV
Massimo Comun Divisore
Proprietà delle matrici con variabili standardizzate.
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Ricerca sequenziale in un array di interi
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Programmazione lineare
Anno accademico Le istruzioni di controllo in C.
Informatica e Algoritmi
GLI ARRAY MONODIMENSIONALI. Utilizzando le nostre attuali conoscenze, proviamo a risolvere il seguente problema: Calcolare la media dei voti conseguiti.
Carisi Matteo ITIS C.Zuccante Classe 5ISA 12/12/12 N o Slide = 10.
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
La ricorsione.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
ECONOMIA AZIENDALE E GESTIONE DELLE IMPRESE LEZIONE VII INTRODUZIONE ALLA VALUTAZIONE DEGLI INVESTIMENTI LUCIO DEL BIANCO ANNO ACCADEMICO
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 3 – Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 -Test e verifica Ernesto Damiani Università degli Studi di Milano.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Flusso di Costo Minimo Trasformazioni Equivalenti e Trasformazioni Inverse Viene data la seguente rete di flusso, in cui i valori riportati vicino agli.
Transcript della presentazione:

Complessità ciclomatica ITIS C. Zuccante Classe 5a ISA 9/4/2013 Complessità ciclomatica Carisi Matteo N° slide = 11

Indice Introduzione Complessità ciclomatica Definizione algebrica Proprietà Formule alternative Esempio 1 Esempio 2 Riferimenti Carisi Matteo Complessità ciclomatica 1

Introduzione In generale le metriche sono degli standard di misura. Nell’ingegneria del software le metriche vengono usate per quantificare e qualificare e sono di tre tipi: Metriche di Prodotto Metriche di Processo Metriche di Qualità Carisi Matteo Complessità ciclomatica 2

La complessità ciclomatica Essa è stata proposta da Thomas McCabe nel 1976 ed è usata per valutare la complessità di un algoritmo in un metodo ed è interamente basata sulla struttura del grafo che rappresenta l’algoritmo. Corrisponde al numero di casi di prova necessari per verificare ogni possibile esito di ogni ramo di decisione all’interno del sottoprogramma. Carisi Matteo Complessità ciclomatica 3

Definizione algebrica Il numero ciclomatico v(G) = E – N + 2·P No componenti connesse (per una sola unità di programma P è pari ad 1) No archi No nodi v(G)=E-N+P Carisi Matteo Complessità ciclomatica 4

Proprietà v(G) ≥ 1; v(G) = numero massimo di percorsi linearmente indipendenti in G; L’inserimento o l’eliminazione di espressioni in G non influenza v(G); G ha un solo percorso solo se v(G) = 1; Inserendo un nuovo arco in G, v(G) aumenta di 1; v(G) dipende solo dalla struttura decisionale di G; Carisi Matteo Complessità ciclomatica 5

Formule alternative La complessità ciclomatica è stata definita in termini di programmi/ sottoprogrammi con un singolo punto di ingresso e di uscita. Esistono varie altre formule per il calcolo di questa tra cui: v(G) = n° decisioni + 1 Se ci sono più punti di uscita -> v(G)= n° decisioni - n° punti di uscita +2 Minore è la complessità e maggiore è la facilità di esecuzione dei test. Carisi Matteo Complessità ciclomatica 6

Esempio 1 #include <vector> int main(int argc, char *argv[]) { vector<int> vector; for( int i = 0; i < 10; i++ ) { int num = (int) rand() % 10 +1; vector.push_back( num ); } int quanti_pari = 0, quanti_dispari = 0; for(int i=0 ; i<vector.size() ; i++) { if (vector[i]%2 == 0) quanti_pari++; else quanti_dispari++; cout<< "Pari: " << quanti_pari << "Dispari: " << quanti_dispari; system("PAUSE"); return 0; Carisi Matteo Complessità ciclomatica 7

Esempio 1 1 2 3 4 5 6 7 i >= vector.size i < vector.size /*1*/ vector<int> vector; int quanti_pari = 0, quanti_dispari = 0; int i = 0; /*2*/ while (i < vector.size()) { /*3*/ if (vector[i]%2 == 0) /*4*/ quanti_pari++; /*5*/ else quanti_dispari++; /*6*/ i++;} /*7*/ cout<< "Pari: " << quanti_pari << "Dispari: " << quanti_dispari; i >= vector.size 2 i < vector.size 3 pari dispari 4 5 6 Il grafo ha: 7 nodi 8 archi, che devono essere tutti coperti complessità ciclomatica pari a E-N+2 = 8 - 7 + 2 = 3 7 Carisi Matteo Complessità ciclomatica 8

Esempio 2 int main(int argc, char *argv[]) { vector<int> vector; #include <vector> int main(int argc, char *argv[]) { vector<int> vector; for( int i = 0; i < 10; i++ ) { int num = (int) rand() % 10 +1; vector.push_back( num ); } int ricerca=1; int tot = 0; if (vector.size() > 0) for (int i = 0; i < vector.size(); i++) { if (vector[i] == ricerca) tot = tot + 1; } else tot = -1; cout<< tot; system("PAUSE"); return 0; Carisi Matteo Complessità ciclomatica 9

Esempio 2 1 2 /* 1 */ int tot = 0; /* 2 */ if (vector.size() > 0) { /* 3 */ int i = 0; /* 4 */ while (i< vector.size()) { /* 5 */ if(vector[i]==ricerca) /* 6 */ tot++; /* 7 */ i++;} /* 8 */ else tot= -1; /* 9 */ cout<<tot; vector.size() <= 0 vector.size() > 0 3 i >= vector.size() 4 i < vector.size() 5 Vector[i]==ricerca 6 Vector[i]!= ricerca Il grafo ha: 9 nodi 11 archi, che devono essere tutti coperti complessità ciclomatica pari a 11 - 9 + 2 = 4 7 8 9 Carisi Matteo Complessità ciclomatica 10

Riferimenti MetricheDelSoftware-F029.pdf (http://www.jugsardegna.org/vqwiki/jsp/Wiki?action=action_view_attachment&attachment=MetricheDelSoftware-F029.pdf) 03_B_ExBianca.pdf (http://www.dis.uniroma1.it/~santucci/IS_ord_2008/MaterialeCorso/03_B_ExBianca.pdf) Anna Rita Fasolino - Metriche Software (http://www.federica.unina.it/ingegneria/ingegneria-software-ii/metriche-software-parte-seconda/) Wikipedia (http://it.wikipedia.org/wiki/Complessit%C3%A0_ciclomatica) Misurazione del software (http://www.math.unipd.it/~conte/lezioni/B8.pdf) Carisi Matteo Complessità ciclomatica 11