venerdì 29 gennaio 2010

Metriche del software

Obiettivi possibili delle metriche:
1) Provare a predirre la quantità di nuovi moduli o modifiche da sviluppare
2) Valutare lo sforzo impiegato per svilupparlo

E' da valutare prima di tutto quanto tempo si può impiegare nella misura delle metriche per non generare un overhead nella generazione di queste statistiche.



Predirre la quantità di nuovi moduli o modifiche da sviluppare


Predirre in base ai requisiti
Per il primo caso ci si può basare sui Punti Funzione.
Questo metodo è difficile da usare e può portare a valutazioni disparate a seconda delle interpretazioni dei requisiti, della variabilità dei requisiti stessi [4][5].

A parte il peso, comunque, la valutazione delle interfacce da costruire e la valutazione di tutti gli input e output da implementare può avere un valore ma deve essere considerata la volatilità dei requisiti che si vanno a implementare, per cui gli Unadjusted Function Points (UFP) possono risultare differenti a seconda della variabilità dei requisiti esposti.

Calcolo dei punti:
I punti vengono calcolati in base a interfacce interne (come tabelle di un proprio database), interfacce esterne (web services o interfacce gestite dal di fuori dei confini dell'applicazione - più comuni nelle nostre applicazioni) e tre tipi di processi che elenco di seguito:
EI - External Input: processo elementare di input di dati dall'esterno, ad esempio tramite un form o tramite un file xml esterno (come quelli di alfresco)
EO - External Output: processo elementare di output verso l'esterno (in genere verso l'utente) che necessitano di una logica più o meno complessa per la generazione dei dati
EQ - External Inquiry: come EO ma non necessita di logica nell'applicazione per il calcolo dei dati da mostrare. Questi vengono solo recuperati e dati all'esterno.

Gli UFP possono poi essere pesati in base a un indice VAF che ripende da varie considerazioni sul software che si sviluppa. Questo indice può variare considerevolmente il risultato dei punti funzione e spesso è criticato per la sua soggettività. I pesi da valutare sono fondamentali per la giusta pesatura e dipendono anche molto dalla esperienza del valutatore.
Più una metrica dipende dall'esperienza del valutatore, più non si può considerare una metrica ma una stima. [7]

Purtroppo la fonte principale [A] è una fonte chiusa, a pagamento, probabilmente anche per i corsi e certificazioni che propone.





Alcune considerazioni a prima vista

Le nostre interfacce interne sono poche. La maggior parte dei processi prendono dati da fonti esterni alle nostre applicazioni e non abbiamo nostri database.

In generale i punti funzione non valutano gli interventi non funzionali e il lavoro di alcuni può essere meno facilmente valutato tramite questo strumento (interventi sulla performance, sullo stile di visualizzazione, etc.)

Il processo è molto incentrato sugli output e gli input e la valutazione di processi Machine to Machine, processi schedulati e altri processi non funzionali devono essere valutati in modo speciale (ad esempio come output non verso l'utente).

Gli interventi di manutenzione (evolutiva o correttiva) possono essere valutati ma hanno un valore molto relativo. Per la misura di questo tipo di interventi si può valutare una funzione più ragionata come [9] ma risulta poi quantomeno difficile il confronto con i punti calcolati per nuove funzioni.





Valutare lo sforzo, le ore impiegate per sviluppare software


Per valutare il codice sviluppato si possono usare varie metriche.
Avendo la fortuna di lavorare con Eclipse ci si può avvalere di plugin come quello a [2] per calcolarle senza troppi sforzi.

Probabilmente la cosa migliore e più utile sarebbe pesare vari criteri per il calcolo dello sforzo totale (S):
1) Il numero di classi create e modificate ha un peso (CC)
2) La complessità del codice sviluppato (tramite ad esempio la complessità ciclomatica di McCabe) ha un peso (McC)
3) Le linee di codice vanno pesate in una valutazione (LOC)
4) Si deve quindi pesare in base al numero di punti funzione valutati (UFP)
es di funzione per un intervento:



S = UFP  \times \alpha CC  \times \beta LOC  \times \gamma McC



Il risultato può essere pesato in base a dei feedback dovuti a parametri quali quelli che seguono.
A) Le ore dichiarate dalla persona come lavorate su un certo task possono essere valutate eventualmente per un confronto nel tempo col risultato ottenuto dalle metriche.


B) Allo stesso modo, il numero delle ore previste per la lavorazione di una certa funzione possono essere confrontate eventualmente nel tempo con i risultati delle metriche per la correzione delle previsioni stesse e per la valutazione delle metriche ottenute.


Nota: per una valutazione più giusta, bisognerebbe prendere in considerazione nel lavoro svolto, la mantenibilità del codice prodotto, in modo da favorire la tendenza verso un codice più mantenibile che garantisce meno lavoro la volta successiva. [3] Purtroppo gli strumenti che ho trovato per eclipse che calcolano l'indice di mantenibilità sono a pagamento.


Sarebbe auspicabile avere un modulo software che calcola quanto sopra in modo da non dover impiegare tempo nella valutazione ma il calcolo dei punti funzione probabilmente implica per forza una valutazione della persona in base ai requisiti e si può arrivare solo all'uso di un form da riempire online [6].




Riferimenti:

martedì 24 novembre 2009

Un semplice robot per Google Wave

Ho ricevuto ieri un invito per Google Wave e mi sono divertito a verificare come si possa estendere il suo funzionamento. Molte estensioni sono già state sviluppate e si possono trovare ad esempio qui.

Quel che ho sviluppato io è un semplice robot di test che trasforma una shortcut del tipo
g::simple+query
in un link a google per la ricerca "simple+query".
Il robot si può usare aggiungendolo come partecipante a qualunque wave (tramite l'indirizzo automaticlinks@appspot.com) e qui sotto mostro in un breve video il suo funzionamento semplicissimo.

A chi volesse provare a creare un robot per google wave, consiglio di andare sul sito
http://code.google.com/apis/wave/extensions/robots/java-tutorial.html

domenica 25 ottobre 2009

Atac Roma - un comando per Ubiquity Firefox

Fra ieri e oggi mi sono divertito con Ubiquity e la sua estendibilità a nuovi comandi.
Per chi non conosce Firefox Ubiquity, può farsi una idea a questo link:
http://labs.mozilla.com/ubiquity/

Qui sotto metto la presentazione che ho preparato con screentoaster, per spiegare cosa fanno i comandi. Crearli è abbastanza immediato, conoscendo un po' di javascript e avendo un minimo di esperienza con le callback di ajax. Si possono raggiungere veramente dei risultati interessanti.

martedì 6 ottobre 2009

Feed reader e Social bookmaring

Google reader e StumbleUpon sono i due strumenti con i quali cerco di tenermi aggiornato sulle notizie di vario genere che mi possono interessare.
Mentre il feed reader di Google mi permette di tenere organizzate le notizie da fonti che conosco, Stumbleupon mi sorprende un 10-20% delle volte con contenuti interessanti che non conoscevo.
E' difficile arrivare a tutto quanto c'è di interessante sul web ma è possibile cercare di essere più informati.
Google reader non ha bisogno di spiegazioni. Si possono aggiungere tutti i feed rss dei siti web che si desidera monitorare: quotidiani online, blog, e-magazines di ogni genere.
Stumbleupon invece permette di configurare gli argomenti che ci interessano, variando dalla cucina alla programmazione web, e ci porta su siti votati dagli altri utenti che cadono in quelle categorie, e che vengono quindi considerati interessanti e degni di nota.
Così ad esempio io che sono interessato all'informatica ho trovato un bell'articolo sulle unità di misura em, un editor wysiwyg per la modifica dinamica del dom tramite javascript e l'attesa demo del Photosketch (ancora non online mentre scrivo).

A Google reader e Stumbleupon aggiungo a volte similarweb e google sidewiki, che al lato della pagina caricata mostrano rispettivamente siti simili e commenti alla pagina che si sta visualizzando, fornendo spunti per ulteriori balzi nella rete.
Ovviamente esistono tanti altri modi per navigare nella rete alla ricerca di contenuti, io uso questi, chissà che non cambi abitudini prossimamente.

domenica 30 agosto 2009

Applicare XSL:FO lato server per generare documenti


Molte applicazioni web hanno una fase di produzione di documenti, di reportistica.
Uno degli strumenti usati lato Java per ottenere ciò è l'applicazione dello standard XSL:FO ad esempio tramite la libreria gratuita Apache FOP.

Uno schema spiega bene come avviene la trasformazione in un caso abbastanza generico.

Il filtro XSL viene applicato a un XML (statico o generato dinamicamente, non importa) generando eventualmente un documento PDF sotto la supervisione della libreria Apache FOP.

Quando avrai capito un po' le basi, un tutorial più avanzato come questo (è necessaria una IBM id gratuita) ti servirà per i dettagli sui vari elementi. Generare liste, tabelle link, indici e complessi layout del documento sono alcuni degli argomenti di questo corso gratuito e molto interessante per chi voglia applicare XSL:FO.
Altri link utili possono sempre essere la "reference" fatta per esempi da zvon.org che fornisce uno o più modi di utilizzo quando si ha un dubbio su un tag.
Un altro tutorial interessante è quello di javaboutique, che propone 3 sezioni (13 pagine in tutto), la più interessante delle quali è probabilmente la terza riguardo all'inserimento di immagini statiche o dinamicamente generate.
Infine, trovo un po' dispersivo (ma immagino sia completo!) questo capitolo su XSL:FO...

Dopo queste segnalazioni,
aggiungo soltanto che i documenti XML sono molto puliti se li si tiene puliti.
Non dimenticarsi mai di indentazione, commenti, separazione delle sezioni renderà il tuo lavoro più semplice e più comprensibile a chi debba prenderlo in carico dopo di te.
Sono passato più di una volta per l'incubo di dover mettere mano a un documento XSL confuso per cambiare una tabella o una intestazione... non auguro a nessuno di passarci. :)

domenica 9 agosto 2009

ancora XSLT sul client?

Un punto di partenza per XSLT, oltre al documento ufficiale, può essere questa semplice pagina di esempi:
http://www.w3schools.com/xsl/xsl_w3celementref.asp
L'idea che c'è alla base è semplice e già consolidata: trasformare un documento xml in un altro documento (XML, HTML...), applicando un filtro.
Il filtro è un documento XML anche lui, che contiene un template con il quale seleziona elementi del documento sorgente e li trasforma, per poi eventualmente mostrarli nel documento risultante.
Il linguaggio per la selezione degli elementi si chiama XPath (alcuni esempi qui).
Supponendo che il documento XML d'origine contenga i dati, il "foglio di stile" XSLT dà la disposizione della struttura in una separazione contenuto/stile che è sempre tanto ricercata.
Tuttavia se la separazione HTML CSS funziona tanto bene... quella XML XSLT non sembra altrettanto adatta ai browser.

Nel lontano 2005 ero molto incuriosito dalle trasformazioni xml sul client e ho creato questo sito, che nel tempo poi ho trasformato varie volte, aggiungendo la libreria prototype e rendendolo molto più dipendente da ajax e controllo del DOM tramite javascript, che dalla vera trasformazione XSLT.
Il linguaggio infatti è ancora valido ma soprattutto per i suoi usi server-side. Il browser è più veloce a gestire le trasformazioni javascript, che sono anche supportate in maggior modo dai diversi browser sebben con tutti le piccole differenze delle varie versioni.
Si suppone che quello che arriva al browser sia già un documento da mostrare e non uno scheletro da trasformare, con pochissime eccezioni.
Quindi pur essendo divertente (e fattibile) l'idea di prendere un feed rss e trasformarlo on the fly sul proprio browser con un foglio di stile XSLT, questo rimane solo un esercizio di bravura, più che una applicazione reale. Sarà meglio affilare le unghie sul server e servire un documento già pronto per un browser. E se proprio ci si vuole sbizzarrire a cambiare qualche cosa nella visualizzazione CSS3 e Javascript possono fare miracoli.

Altre fonti:
Questo articolo di stackoverflow.com descrive bene in breve i problemi della trasformazione xslt sul client.
Una vera applicazione del XSLT sul client la potete comunque trovare qui (il foglio xslt se non lo trovate è questo)
Un bell'articolo per iniziare a mettere le mani su XSL (link)

Rimando il discorso alle trasformazioni xslt e xslfo sul server eventualmente a un'altra volta. Un buon punto di partenza per gli appassionati di Java cmq può essere questo articolo di o'Reilly

Imparare il giapponese sul web

Sono un grande appassionato di lingue e per ogni lingua il pc è un ottimo strumento di apprendimento. Seguono i siti che più aiutano nello studio del giapponese.
Fatemi sapere se conoscete qualche altro valido strumento a disposizione sulla rete.

http://www.guidetojapanese.org/
E' una grammatica e un corso con parecchio materiale. Non andate sulla versione in italiano che è molto più striminzita. La versione originale affronta tutti i temi fondamentali della lingua e ha esercizi per le varie sezioni.
C'è anche qualche capitolo sull'introduzione alla scrittura.

http://www.csse.monash.edu.au/~jwb/cgi-bin/wwwjdic.cgi?1C
Questo dizionario è fondamentale. Permette di cercare dall'inglese o dal giapponese, anche usando i romaji (ovvero la traslitterazione in caratteri occidentali delle parole giapponesi)

Per l'ascolto sicuramente c'è moltissimo materiale in giro. Io mi sono trovato molto bene con
http://www.japanesepod101.com
Ora il sito è a pagamento dopo la prima settimana per quasi tutti i contenuti. Il mio consiglio è di scaricare tutti gli mp3 presenti delle lezioni nella prima settimana di iscrizione. Ogni dialogo è seguito da una versione rallentata e da una versione con la traduzione in inglese di ogni frase. Dopo il dialogo vengono spiegati i vocaboli nuovi e un paio di regole di grammatica affrontate. Un podcast eccezionale.

http://tatoeba.fr/
Questo sito permette, quando si è imparata una parola nuova, di trovare frasi di esempio con quella parola. Può essere sempre utile sapere quando e come utilizzare un termine.

Per rivisitare le parole tramite dei quiz io uso la mia pagina web, dove mi sono costruito una sezione per imparare i vocaboli.
http://dado21780.altervista.org/imparaparole.xml
Ma la cosa più semplice è andare su un sito come
http://www.renshuu.org/
dove la gente crea quiz per vocaboli di ogni livello di difficoltà. Ci sono quanti quiz volete qui.

Per chi ha l'ipod touch o l'iphone, applicazioni gratuite come "kotoba", "wwwjdic" e le flashcards "kanji" (quest'ultima ora costa 79 centesimi) sono ottimi strumenti.

Due note:
1) i film sottotitolati sono sempre un ottimo mezzo per imparare. Se riuscite a trovare una buona fonte sul web bene, altrimenti il buon youtube funziona sempre
http://www.youtube.com/watch?v=05FSfZRSEHs

2) Non basta apprendere. Bisogna anche fare pratica. Leggere, ascoltare e vedere è importante. Ma se non si scrive e non si parla... sarete costretti ad ascoltare le conversazioni senza intervenire mai. :)