Corso di Ingegneria del Software a.a. 2009/2010 Mario Vacca mario.vacca1@istruzione.it
Concetti di base Metriche Sommario 1. Concetti di base 2. METRICHE DIMENSIONALI 3. 4. METRICHE STRUTTURALI 5. Bibliografia
Concetti di base Concetti di base Valutare il processo di produzione del software COME PROCEDE IL PROCESSO? RISPETTO ALLE RISORSE IMPIEGATE in tempo, in ritardo usa più risorse del previsto i costi sono rispettati la produttività è idonea RISPETTO ALLA QUALITÁ
Concetti di base Concetti di base Valutare il processo di produzione del software Necessità di valutare lo sviluppo del processo di produzione del software per correggerlo o modificarlo. Necessità di MISURARE il processo di produzione del software
Concetti di base Concetti di base Valutare il processo di produzione del software Necessità di valutare lo sviluppo del processo di produzione del software per correggerlo o modificarlo. Necessità di MISURARE il processo di produzione del software
Concetti di base Concetti di base Valutare il processo di produzione del software Stima a priori Misurazione in corso o a posteriori
Concetti di base Concetti di base Le METRICHE Metodi di misura nel processo di produzione del software
Concetti di base Concetti di base Le METRICHE DIMENSIONE (es. LUNGHEZZA) FUNZIONALITÀ COMPLESSITÀ
Concetti di base Concetti di base Le METRICHE METRICHE DIMENSIONALI (es. LOC) Misurano le funzioni che il software deve svolgere. (es. FPA) METRICHE STRUTTURALI (es. Numero ciclomatico)
Concetti di base Concetti di base Altre misure Misura della documentazione
METRICHE DIMENSIONALI Metriche Sommario 1. Concetti di base 2. METRICHE DIMENSIONALI 3. 4. METRICHE STRUTTURALI 5. Bibliografia
METRICHE DIMENSIONALI METRICHE DIMENSIONALI Numero di linee di codice LOC Dimensione del programma =) numero di linee di codice (LOC) Commenti Numero di istruzioni eseguibili (ES) Numero di linee di codice sorgente (SLOC)
METRICHE DIMENSIONALI METRICHE DIMENSIONALI Numero di linee di codice : USO PRODUTTIVITÀ QUALITÀ LOC tempo LOC Errori rilevati
METRICHE DIMENSIONALI METRICHE DIMENSIONALI Numero di linee di codice : USO DOCUMENTAZIONE DENSITÀ DEI COMMENTI Pagine di documentazione LOC CLOC LOC
METRICHE DIMENSIONALI METRICHE DIMENSIONALI Numero di linee di codice Vantaggi e svantaggi Vantaggi: Intuitiva Semplice da calcolare Svantaggi: Dipende dal linguaggio e dal modo di programmare Calcolabile a fine progetto
METRICHE DIMENSIONALI METRICHE DIMENSIONALI Numero di linee di codice LOC Measuring programming progress by Lines of Code is like measuring aircraft building progress by weight. Bill Gates http://www.linfo.org/q_programming.html
Metriche Sommario 1. Concetti di base 2. METRICHE DIMENSIONALI 3. 4. METRICHE STRUTTURALI 5. Bibliografia
Function Point Analysis FPA indipendente dalla tecnologia software calcolabile anche nelle prime fasi del processo di sviluppo software
Function Point Analysis FPA Allan J. Albrecht IBM 1984 PUNTI FUNZIONE Misurano le funzionalità di cui si compone un applicazione in termini di elementi oggettivi ed enumerabili dall utente finale (Cosa fa il programma, non come è fatto; le funzionalità si misurano usando specifiche e non il codice). Rappresentano uno standard (Nel 1986 nasce l IFPUG International Function Point Users Group e la FPA diventa uno standard internazionale riconosciuto a livello ISO). Counting Practices Manual (rilasciato dal IFPUG) traduzione italiana a cura del GUFPI (Gruppo Utenti Function Point Italia).
Function Point Analysis FPA I Punti Funzione devono: Obiettivi della FPA 1. valutare il software indipendentemente dalla tecnologia utilizzata per lo sviluppo (linguaggi di programmazione, tools di sviluppo, ecc). 2. misurare tutte le funzioni richieste e consegnate all utente 3. fornire un fattore di normalizzazione che permetta il raffronto tra sistemi di organizzazioni diverse
Function Point Analysis La FPA considera le occorrenze pesate di 5 tipologie di funzionalità ritenute importanti nella determinazione della misura del software.
Function Point Analysis : Unadjusted Function Point (UFP) 1) Funzioni Dati ILF (Internal Logical File) file creati ed utilizzati internamente dal programma. EIF (External Interface File) file o di altri insiemi di dati scambiati dal programma con altri programmi. 2) Funzioni Transazionali EI (External Input) Permettono all utente di fornire input al software EO (External Output) Mandano output all esterno delĺıapplicazione software dopo una elaborazione. EQ (External Query) Mandare output all esterno dell applicazione, senza una elaborazione preventiva.
Function Point Analysis
Esempio Programma per gestione dati anagrafici 1 schermata (Cognome, Nome, Luogo NAscita, Data Nascita, CF) INS/MODIFICA CANCELLA query 1 file per memorizzare i dati 1 prospetto di stampa. Sul prospetto di stampa sono presenti i dati della schermata e l età media degli individui censiti nell anagrafe. Tutti i dati possono essere inseriti, modificati e cancellati dall utente. La ricerca è limitata allo scrolling delle anagrafiche.
Esempio 1. N. 3 funzioni elementari di input (EI) Inserisci, Modifica, Cancella 2. N. 1 funzione di output (EO) Stampa prospetto 3. N. 1 funzione di query Scroll / Visualizza dati anagrafici 4. N. 1 file interno (ILF) Dati anagrafici 5. nessun file d interfaccia esterno (EIF)
Function Point Analysis Da Pressman pag. 574
Function Point Analysis Giudizio di complessità Poichè alcune delle funzionalità possono essere più complesse di altre (e quindi richiedere più impegno per essere sviluppate), il metodo di conteggio IFPUG prevede che le occorrenze di queste funzionalità presenti nel software da dimensionare siano pesate da chi effettua il conteggio, in base a un giudizio di complessità semi-oggettivo (guidato da tabelle di riferimento). Il giudizio di complessità varia tra basso, medio e alto e il punteggio assegnabile alle funzioni varia tra 3 e 15.
Determinazione del grado di complessità Tabelle di orientamento DET (Data Element Type) RET (Record Element Type) per ILF e EIF FTR (File Type Referenced) DET (Data Element Type) per EI, EO e EQ
Determinazione del grado di complessità Record Element Type sottogruppo di dati riconoscibile dall utente all interno di un internal logic file o di un external interface file File Type Referenced tipo di file a cui si fa riferimento attraverso una transazione Data Element Type campo unico riconoscibile dall utente.
Tabelle di orientamento : ILF e EIF RET/DET 1-19 20-50 51-1 BASSA MEDIA ALTA 2-5 BASSA MEDIA ALTA 6- BASSA MEDIA ALTA COMPLESSITÀ ILF EIF BASSA 7 5 MEDIA 10 7 ALTA 15 10
Tabelle di orientamento : EI FTR/DET 1-4 5-15 16-0-1 BASSA BASSA MEDIA 2 BASSA MEDIA ALTA 3- MEDIA ALTA ALTA COMPLESSITÀ EI BASSA 3 MEDIA 4 ALTA 6
Tabelle di orientamento : EO FTR/DET 1-5 6-19 20-0-1 BASSA BASSA MEDIA 2-3 BASSA MEDIA ALTA 4- MEDIA ALTA ALTA COMPLESSITÀ EO BASSA 4 MEDIA 5 ALTA 7
Tabelle di orientamento : EQ FTR/DET 1-4 5-15 16-0-1 BASSA BASSA MEDIA 2 BASSA MEDIA ALTA 3- MEDIA ALTA ALTA FTR/DET 1-5 6-19 20-0-1 BASSA BASSA MEDIA 2 BASSA MEDIA ALTA 3- MEDIA ALTA ALTA Tabella: Lato input/lato output COMPLESSITÀ EQ BASSA 3 MEDIA 4 ALTA 6
Esempio Programma per gestione dati anagrafici 1 schermata (Cognome, Nome, Luogo NAscita, Data Nascita, CF) INS/MODIFICA CANCELLA query 1 file per memorizzare i dati 1 prospetto di stampa. Sul prospetto di stampa sono presenti i dati della schermata e l età media degli individui censiti nell anagrafe. Tutti i dati possono essere inseriti, modificati e cancellati dall utente. La ricerca è limitata allo scrolling delle anagrafiche.
Esempio 1. 3 funzioni elementari di input (EI) Inserisci, Modifica, Cancella 2. una funzione di output (EO) Stampa prospetto 3. una funzione di query Scroll / Visualizza dati anagrafici 4. un file interno (ILF) Dati anagrafici 5. nessun file d interfaccia esterno (EIF)
Esempio Elemento N. di DET N. di RET/FTR Inserisci (EI) 6 1 Modifica (EI) 6 1 Cancella (EI) 6 1 Scroll/vis (EQ) 1 Inp/5 Out 1 Dati anagrafici (ILF) 5 1 Stampa (EO) 6 1
Esempio EI x 3 = 9 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 PF (1 FTR, 1/5 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 PF (1 FTR, 5 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 4 TOTALE PF (UFP) = 23
Esempio EI x 3 = 9 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 PF (1 FTR, 1/5 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 PF (1 FTR, 5 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 4 TOTALE PF (UFP) = 23
Esempio EI x 3 = 9 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 PF (1 FTR, 1/5 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 PF (1 FTR, 5 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 4 TOTALE PF (UFP) = 23
Esempio EI x 3 = 9 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 PF (1 FTR, 1/5 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 PF (1 FTR, 5 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 4 TOTALE PF (UFP) = 23
Esempio EI x 3 = 9 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 PF (1 FTR, 1/5 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 PF (1 FTR, 5 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 PF (1 FTR, 6 DET) ) complessità bassa ) peso = 4 TOTALE PF (UFP) = 23
Function Point Analysis Fattore correttivo Al conteggio base dei punti funzione si applica un fattore correttivo che tiene conto della complessità del progetto (in termini organizzativi e tecnici), fattore che può incidere fino al 35% del conteggio base.
Function Point Analysis : Fattori di aggiustamento Fattori di aggiustamento (VAF Value Adjustment Factors): 1. Il sistema richiede procedure di recovery e backup affidabili? 2. E richiesta la trasmissione di dati? 3. Vi sono funzionalità che richiedono elaborazioni distribuite? 4. Le prestazioni sono critiche? 5. Il programma funzionerà in un ambiente operativo già pesantemente utilizzato? 6. Il sistema richiede funzionalità avanzate per l emissione e la consultazione in linea di dati? 7. Le funzionalità di immissione dei dati devono essere costruite tramite interfacce a finestre? 8. Gli archivi principali sono aggiornati in tempo reale? 9. Le informazioni scambiate tra utente e programma sono complesse? 10. Il codice del programma è complesso? 11. Il codice è scritto per essere riusabile? 12. Nel progetto sono incluse anche le attività di installazione e conversione? 13. Il programma è stato progettato per essere installato presso diversi utenti? 14. Il programma è stato progettato per facilitare l uso e le modifiche da parte dell utente?
Function Point Analysis : Fattori di aggiustamento 1. F1 - Comunicazione Dati 0: Semplice elaborazione batch 5: Transazionale con più di un front end e più protocolli di comunicazione 2. F2 - Distribuzione della elaborazione 0: Nessuna funzione presente 5: Elaborazione distribuita dinamicamente 3. F3 - Prestazioni 0: Nessun requisito 5: Requisiti molto stringenti (appl. time critical) 4. F4 - Utilizzo della Configurazione 0: Nessun vincolo 5: Utilizzo di molte configurazioni con pesanti vincoli sulle risorse 5. F5 - Frequenza delle Transazioni 0: Nessun picco di utilizzo 5: Vari picchi e stringenti livelli di servizio 6. F6 - Inserimento dati interattivo 0: Tutto batch 5: Le transazioni per inserimento dati sono > 30% di quelle presenti nella applicazione 7. F7: Efficienza per l utente finale 0: Nessun supporto per l utente 5: Altissima usabilità
Function Point Analysis : Fattori di aggiustamento 1. F8: Aggiornamento interattivo 0: Non fornisce nessun aggiornamento interattivo 5: Altissima protezione contro la perdita dei dati, con procedure automatiche 2. F9: Complessità elaborativa 0: Nulla 5: Elaborazioni matematiche o logiche complesse 3. F10: Riusabilità 0: non esiste codice riusabile 5: alta necessità di riusabilità e parametrizzazione del codice 4. F11: Facilità di installazione 0: Non sono richieste particolari inizializzazioni 5: Sono necessarie guide e strumenti di installazione e conversione 5. F12: Facilità di gestione operativa 0: Nessuna esigenza 5: Applicazione per operazioni non presidiate 6. F13: Molteplicità dei siti 0: Un solo sito (appl. stand alone) 5: Molti siti caratterizzati da ambienti hw/sw eterogenei 7. F14: Facilità di modifica 0: Applicazione rigida 5: Esistono molti strumenti interni alla appl. per permetterne una facile modifica (macro, tabelle, ecc.)
Function Point Analysis : calcolo FP = FP = UFP VAF UFP = 5X i=1 VP i VAF = 0:65 + 0:01 5X X14 F i i=1 X14 VP i (0:65 + 0:01 i=1 i=1 F i )
Function Point Analysis : calcolo FP = FP = UFP VAF UFP = 5X i=1 VP i VAF = 0:65 + 0:01 5X X14 F i i=1 X14 VP i (0:65 + 0:01 i=1 i=1 F i )
Function Point Analysis : calcolo FP = FP = UFP VAF UFP = 5X i=1 VP i VAF = 0:65 + 0:01 5X X14 F i i=1 X14 VP i (0:65 + 0:01 i=1 i=1 F i )
Function Point Analysis Gli F i sono fattori di regolazione della complessità del programma, che non riguardano tanto la funzionalità (VP i ) quanto lo sforzo aggiuntivo che dovrgià essere fatto per rispondere ai 14 requisiti non funzionali.
Esempio : Programma gestione magazzino Una sola schermata per l immissione dati: Codice Cliente, CF, Nome Organizzazione, Nom. Prefisso, Telefono, Telefax, Data Inserimento referente, Indirizzo,
Esempio CALCOLO PF PASSO 1) Rilevare le occorrenze dei 5 tipi di funzioni elementari (EI, EQ, EO, ILF, EIF). PASSO 2) Assegnare a queste occorrenze il livello di complessità PASSO 3) Determinare il numero di punti funzione base (unadjusted). PASSO 4) Valutare il grado di complessità VAF del software. PASSO 5) Calcolare il numero definitivo di PF moltiplicando PFbase x VAF
Esempio : Programma gestione magazzino Una sola schermata per l immissione dati: DATI: Codice Cliente, CF, Nome Organizzazione, Nom. Indirizzo, Prefisso, Telefono, Telefax, Data Inserimento referente, FUNZIONI: INSERISCI ANNULLA RICERCA (per data di inserimento)
Esempio : Programma gestione magazzino PASSO 1 1. 2 funzioni elementari di input (EI) Inserisci, Annulla 2. una funzione di output (EO) Stampa 3. una funzione di query (EQ) Ricerca 4. un file interno (ILF) Dati anagrafici 5. nessun file d interfaccia esterno (EIF)
Esempio : Programma gestione magazzino PASSO 2 Elemento N. di DET N. di RET/FTR Inserisci (EI) 10 1 Modifica (EI) 10 1 Ricerca (EQ) 9 1 Dati anagrafici (ILF) 9 1 Stampa (EO) 9 1
Esempio : Programma gestione magazzino PASSO 3 EI x 3 = 6 UPF (1 FTR, 10 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 4 TOTALE UPF = 20
Esempio : Programma gestione magazzino PASSO 3 EI x 3 = 6 UPF (1 FTR, 10 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 4 TOTALE UPF = 20
Esempio : Programma gestione magazzino PASSO 3 EI x 3 = 6 UPF (1 FTR, 10 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 4 TOTALE UPF = 20
Esempio : Programma gestione magazzino PASSO 3 EI x 3 = 6 UPF (1 FTR, 10 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 4 TOTALE UPF = 20
Esempio : Programma gestione magazzino PASSO 3 EI x 3 = 6 UPF (1 FTR, 10 DET) ) complessità bassa ) peso = 3 EQ x 3 = 3 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 3 ILF x 7 = 7 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 7 EO x 4 = 4 UPF (1 FTR, 9 DET) ) complessità bassa ) peso = 4 TOTALE UPF = 20
Esempio : Programma gestione magazzino PASSO 4) Valutare il grado di complessità VAF del software. 1. F1 - Comunicazione Dati: 0 2. F2 - Distribuzione della elaborazione: 0 3. F3 - Prestazioni: 2 4. F4 - Utilizzo della Configurazione: 0 5. F5 - Frequenza delle Transazioni: 2 6. F6 - Inserimento dati interattivo: 2 7. F7: Efficienza per l utente finale: 2
Esempio : Programma gestione magazzino PASSO 4) Valutare il grado di complessità VAF del software. 1. F8: Aggiornamento interattivo: 0 2. F9: Complessità elaborativa: 0 3. F10: Riusabilità: 4 4. F11: Facilità di installazione: 3 5. F12: Facilità di gestione operativa: 0 6. F13: Molteplicità dei siti: 0 7. F14: Facilità di modifica: 5
Esempio : Programma gestione magazzino PASSO 5) X14 i=1 F i = 20 VAF = 0.85 PF = UPF * VAF = 20 * 0.85 = 17
Esempio : Programma gestione magazzino PASSO 5) X14 i=1 F i = 20 VAF = 0.85 PF = UPF * VAF = 20 * 0.85 = 17
Esempio : Programma gestione magazzino PASSO 5) X14 i=1 F i = 20 VAF = 0.85 PF = UPF * VAF = 20 * 0.85 = 17
Function Point Analysis I valori di FP possono essere utilizzati per quantificare la dimensione del programma e per ricavare le altre misure indirette.
Function Point Analysis Vantaggi e svantaggi Vantaggi: Utilizzabile nei contratti Indipendente dalla tecnologia Usati effettivamente nelle gare d appalto Possibilità di essere trasformati in LOC (backfiring); quindi possono essere applicati i modelli di costo basati su LOC
Function Point Analysis Vantaggi e svantaggi Svantaggi: Più difficile da calcolare rispetto al LOC. Il calcolo non è semplice e deve essere fatto da esperti e con strumenti adeguati Poco raffinata perchè non fa riferimento alla complessità dell algoritmo: ad es. data una funzione con un certo input e un certo output, ci possono essere algoritmi molto semplici o molto complessi: il loro FP resta invariato. Principalmente applicati in software di tipo gestionale ove la parte dati e funzioni Ë sufficiente per descrive i requisiti del software e il software; esiste poca esperienza con software ove il parallelismo e i vincoli temporali sono importanti
Function Point Analysis Relazione tra la grandezza del codice e i Punti Funzione: LINGUAGGIO NUMERO COMANDI PER FP Assembler 320 C 150 Algol 106 COBOL 106 (110) FORTRAN 106 Pascal 91 RPG 80 PL/1 80 (65) MODULA 2 71 LISP 64 BASIC 64 C++ 29 APL 32 SMALLTALK 21 QUERY Languages 16
Backfiring Capers Jones, Backfiring: Converting Lines of Code to Function Points. IEEE Computer 28(11):
Backfiring : correzione Aspetti usati nella correzione: 1. Complessità del problema 1: Solo algoritmi e calcoli semplici 5: Molti algoritmi e calcoli complessi 2. Complessità delle strutture dati 1: Poche variabili scarsamente correlate tra di loro 5: Struttura dei file complessa con molte interrelazioni tra file 3. Complessità del codice 1: Non Procedurale 2: Molto strutturato con moduli riusabili 5: Scarsamente strutturato
Backfiring : correzione Backfiring = UV C a C a = 0:7 + 0:05 (C t 3) dove C t = Complessità del problema + Complessità delle strutture dati + Complessità del codice
Backfiring : correzione Backfiring = UV C a C a = 0:7 + 0:05 (C t 3) dove C t = Complessità del problema + Complessità delle strutture dati + Complessità del codice
Backfiring : esempio Applicazione software di 45 Punti Funzione Linguaggio C++ Complessità Problema: Semplice Complessità Dati: Struttura complessa Complessità programma: Molto strutturato
Backfiring : esempio Coefficiente medio di backfiring di C++ = 53 LOC x PF Complessità problema = 1 Complessità codice = 2 Complessità strutture dati = 5 UV = 45 53 = 2:385 C t = 8 Ca = 0:7 + 0:05 (8 3) = 0:95 Backfiring = 2:385 0:95 = 2:266LOC
Backfiring : esempio Coefficiente medio di backfiring di C++ = 53 LOC x PF Complessità problema = 1 Complessità codice = 2 Complessità strutture dati = 5 UV = 45 53 = 2:385 C t = 8 Ca = 0:7 + 0:05 (8 3) = 0:95 Backfiring = 2:385 0:95 = 2:266LOC
Backfiring : esempio Coefficiente medio di backfiring di C++ = 53 LOC x PF Complessità problema = 1 Complessità codice = 2 Complessità strutture dati = 5 UV = 45 53 = 2:385 C t = 8 Ca = 0:7 + 0:05 (8 3) = 0:95 Backfiring = 2:385 0:95 = 2:266LOC