6
La visualizzazione del software viene formalizzata negli anni '90 dalla
tassonomia proposta da Price[28] e si sviluppa anche per merito del
crescente interesse per il nuovo filone di ricerca denominato
programmazione visuale[12], che mira ad utilizzare la visualizzazione del
software sia per la creazione di programmi che per il loro utilizzo.
Figura 1-1: Gerarchia della Visualizzazione del Software
Visualizzazione del
Software
Visualizzazione degli
Algoritmi
Visualizzazione dei
Programmi
Statica Statica Dinamica Dinamica
Animazione di Algoritmi
7
1.1 Obiettivi e lavoro svolto
L'obiettivo del lavoro è facilitare l'animazione di algoritmi affinché si possa
in futuro realizzare un corso interattivo o una collezione il più ampia
possibile per le esercitazioni degli studenti. A questo scopo abbiamo
analizzato il sistema di visualizzazione chiamato S.S.A.A. sviluppato dal
dott. Petruzzi[23] sulle cui basi abbiamo progettato e realizzato un sistema
informatico completo per la creazione di algoritmi animati e per la loro
visualizzazione localmente o in rete Internet.
Il sistema è denominato JLab ed è rivolto principalmente ad
istituzioni didattiche per l'insegnamento dell'informatica, in particolare per
l'insegnamento degli algoritmi nei corsi delle scuole superiori e dei primi
anni del diploma e del corso di laurea in Informatica. Costituisce uno
strumento di supporto ai libri di testo ed alle lezioni in aula ed è stato
pensato perché possa essere utilizzato:
• dall'insegnante in combinazione con la didattica tradizionale
• dagli studenti per le proprie esercitazioni
• dai programmatori per il controllo e la verifica delle proprie
procedure
Il nostro lavoro nel campo della animazione di algoritmi è uno strumento di
aiuto allo sviluppo di algoritmi animati in quanto fornisce:
• strumenti visuali per la creazione di algoritmi animati
• un sistema per il controllo della loro visualizzazione.
• un meccanismo per la loro conversione ed invio su Internet per le
esercitazioni.
8
Per oltre 10 anni ormai i sistemi per l’animazione di algoritmi sono
stati utilizzati con la speranza che potessero essere di aiuto nel processo
di apprendimento, ma solo ultimamente sono iniziate le ricerche per
valutare i risultati ottenuti, tuttavia la determinazione della quantità e
qualità dell'aiuto fornito con questi sistemi è molto difficile se non
impossibile.
Riuscire a stabilire cosa significa "avere la piena comprensione di un
algoritmo" è un compito impegnativo: significa che lo studente ha capito i
passaggi procedurali che esso segue? Oppure che è in grado di
confrontarlo con altri algoritmi simili? (Petre[22], Lawrence94[17], Stasko
[34])
Il pregio maggiore attribuito all'animazione degli algoritmi è proprio il
maggiore interesse che la fruizione dell'animazione suscita negli studenti
infatti gli insegnanti conoscono quanto sia importante risvegliare
l’attenzione degli studenti durante la lezione.
Questo risultato non è sicuramente confortante dal punto di vista
scientifico, si aspettano pertanto tuttora valutazioni che portino ad ottenere
risultati formali e auspichiamo che ciò possa essere applicato anche al
nostro sistema.
9
1.2 Panoramica dei contenuti
Nel capitolo 2 introduciamo la terminologia e le nozioni basilari sulla
visualizzazione del software e sull'animazione di algoritmi. Descriviamo
inoltre i criteri per la classificazione dei sistemi di visualizzazione
Nel capitolo 3 esponiamo le tecniche disponibili attualmente per
rappresentare la visualizzazione di algoritmi animati.
Nel capitolo 4 descriviamo invece le tecniche per la creazione di algoritmi
animati, con i loro metodi di specifica visuale.
Nel capitolo 5 classifichiamo i sistemi S.S.A.A. e JLab fornendone una
descrizione delle funzioni
Nel capitolo 6 approfondiamo le caratteristiche peculiari del progetto JLab
descrivendone l’architettura ed approfondendo le tecniche utilizzate, con
particolare attenzione agli elementi di originalità inseriti.
Nel capitolo 7 ipotizziamo tutte le possibilità di applicazione di JLab a
scopi didattici ed illustriamo i passi successivi necessari per la creazione
di un algoritmo animato.
Nel capitolo 8 evidenziamo i possibili sviluppi futuri, che è possibile
realizzare partendo dai risultati del presente lavoro.
10
2 Terminologia della Visualizzazione del Software
Definiamo i termini principali ai quali faremo riferimento:
• programma:
Insieme di istruzioni che rappresentano i dati e gli ordini da
impartirsi all'elaboratore per la soluzione di un particolare problema
• algoritmo.
Insieme finito di istruzioni deterministiche che, prendendo dei dati in
input, produce un risultato in un tempo finito.
• software:
Programmi, algoritmi e linguaggi di cui è munito un elaboratore
La visualizzazione del software è il campo di ricerca in continua
evoluzione che studia le tecniche tipografiche, grafiche e di animazione
per facilitare la comprensione del software.
Di conseguenza definiamo i campi di ricerca che da essa discendono:
• visualizzazione dei programmi:
Studia le tecniche che prevedono l'uso della visualizzazione del
codice e delle strutture dati in forma statica o dinamica per
migliorare la comprensione dei programmi
• visualizzazione degli algoritmi:
Studia i meccanismi di astrazione che permettono la
visualizzazione dei concetti fondamentali degli algoritmi.
• animazione di algoritmi:
11
Studia le tecniche per rappresentare dinamicamente la
visualizzazione ad alto livello dell'algoritmo, sia attraverso l'uso di
un medium passivo sia con un sistema interattivo.
Un campo di ricerca correlato, ma non discendente dal precedente, si è
affermato all’inizio degli anni ’90 e adesso è in pieno sviluppo:
• programmazione visuale:
Studia le tecniche per la specifica visuale di un programma o di un
algoritmo animato.
2.1 Tassonomia della Visualizzazione del Software
In questo capitolo introduciamo la suddivisione in categorie basandoci sul
modello comunemente accettato per la classificazione del software di
Price[27].
Possiamo classificare un sistema di visualizzazione del software secondo i
criteri riportati di seguito: affianchiamo ad ognuno di essi le domande che
ci aiuteranno a capire le caratteristiche di ogni sistema; per una
descrizione più dettagliata della tassonomia si vedano le tesi di Ciola[11] e
Marrassini[19].
1. Campo d'azione
Che tipo di algoritmi o programmi può riuscire a visualizzare?
Generalità: che tipo di hardware, sistema operativo o linguaggio è
richiesto?
Scalabilità: esistono limitazioni alla dimensione dei programmi o
all'insieme dei dati trattabili?
12
2. Contenuto
Che tipo di informazioni sul software vengono visualizzate?
Informazioni: vengono visualizzate informazioni sul programma o
sull'algoritmo?
Codice: a quale livello vengono visualizzate le linee di codice, le
istruzioni ed il loro flusso?
Dati: a quale livello si analizzano le strutture dati ed il loro flusso?
Tempo: gli oggetti grafici visualizzati sono generati durante la
compilazione o durante l’esecuzione?
3. Forma
Quali sono le caratteristiche della visualizzazione?
Mezzo: qual è il mezzo utilizzato per mostrare la visualizzazione?
Grana: qual è la quantità e qualità dei dettagli evidenziati?
Presentazione: che elementi grafici vengono utilizzati nella
visualizzazione?
Viste Multiple: a che livello il sistema permette viste multiple
sincronizzate delle diverse parti del programma in esecuzione?
Sincronizzazione: il sistema può generare viste di più programmi in
esecuzione contemporaneamente?
Grana: qual è la qualità dei dettagli evidenziati?
4. Metodo
Come si specificano i passi della visualizzazione?
Specifica Visualizzazione: scrivendo algoritmi appositi o costruendoli
da una libreria di animazioni?
13
Visualizzazione Automatica: le informazioni sintattiche possono essere
utilizzate per generare diagrammi di flusso oppure per riconoscere
animazioni o strutture dati di alto livello?
Tecnica di Connessione: è necessaria la conoscenza del codice per
connettere la visualizzazione con la parte di programma da animarsi?
Stile: come si specifica la visualizzazione?
5. Interazione
L’utente come può controllare il sistema e interagire con esso?
Stile: che metodi vengono utilizzati dall'utente per dare informazioni al
sistema?
Navigazione: esistono metodi per cambiare la visualizzazione di
enormi quantità di dati?
Controllo Temporale: è possibile il cambiamento della velocità e della
direzione temporale dell'esecuzione?
6. Efficacia
Qual è la qualità con cui il sistema trasmette informazioni e concetti
all'utente?
Scopo: l'obiettivo prefissato è stato raggiunto?
Chiarezza: quanto rapidamente sono comprensibili le metafore visuali?
Valutazione: le prove empiriche hanno dimostrato l'efficacia del
sistema?
Produzione: il sistema è stato utilizzato per un periodo di tempo
significativo in ambiente scolastico, accademico o aziendale?
14
I sistemi di visualizzazione del software sono stati classificati in
base a questi criteri da Pallai[21],Ciola[11] e Marrassini[19].
Noi classificheremo l’ambiente di visualizzazione creato da S.S.A.A. e
riutilizzato anche da JLab utilizzerando come parametro di giudizio gli
esempi della ricerca binaria, dell'ordinamento bubblesort e dell'inserimento
in un albero binario realizzati da Petruzzi[23] e l’ordinamento shellsort,
insertionsort, selectsort e l’algorimo della fusione di due vettori ordinati
sviluppati durante i nostri esperimenti.
15
2.2 Tassonomia dei Sistemi di Visualizzazione di Algoritmi Animati
Un algoritmo animato ha il compito di comunicare il funzionamento di un
algoritmo descrivendo graficamente le sue operazioni fondamentali.
I sistemi per l'animazione di algoritmi comprendono anche i metodi per la
rappresentazione grafica del risultato finale, è utile quindi analizzare nel
dettaglio la natura dei sistemi di visualizzazione di algoritmi animati.
La prima differenza evidente è tra i sistemi che per rappresentare le
animazioni utilizzano un mezzo passivo, come una videocassetta, e quelli
che invece utilizzano un mezzo potenzialmente interattivo, come il video di
un elaboratore.
La tassonomia che descriveremo adesso (Brown [4]) permette di
classificare i sistemi di visualizzazione analizzando tre parametri
(contenuto, persistenza e transizioni) i cui valori possono essere
rappresentati lungo tre assi cartesiani.
Riferiamoci alla figura 2-1.
Figura 2-1: Caratterizzazione dei sistemi di visualizzazione
16
2.2.1 Contenuto
Il contenuto della visualizzazione è composto da immagini che
rappresentano, direttamente o indirettamente, le informazioni di un
algoritmo.
La rappresentazione diretta si realizza quando esiste un isomorfismo tra
gli oggetti visuali e le strutture dati dell'algoritmo, infatti in ogni istante le
strutture dati possono essere dedotte da una vista degli oggetti visuali e
viceversa: in entrambi i casi per effettuare questa conversione non è
necessaria alcuna ulteriore informazione.
La figura 2-2 ci permette di spiegare meglio questo concetto.
Figura 2-2: vettore astratto e sua rappresentazione con immagini
La rappresentazione indiretta, o meglio definita “sintetica”, invece
permette solo la ricostruzione della struttura dati astratta dagli oggetti
visuali, ma non il viceversa e quindi tramite di essa viene mostrata
un’astrazione delle stesse strutture dati.
Il contenuto della visualizzazione è sintetico anche quando un’immagine
rappresenta un’informazione non correlata con i dati dell’algoritmo.
11 27 40 72 11 40
72 27
17
La figura 2-3 è relativa ad un algoritmo di “bin packing” del sistema
Balsa[5]: l’analisi della finestra “Waste” permette all'utente di controllare lo
spazio disperso ed il suo limite minimo e quindi di raccogliere
un'informazione che non è codificata nei dati dell'algoritmo. Queste
immagini permettono l’analisi di un ulteriore concetto ed aumentano la
quantità di informazione trasmessa dall'animazione.
Figura 2-3: spazio disperso e limite minimo dell’algoritmo binpacking (Balsa)
La maggioranza degli algoritmi animati utilizza una composizione di dati
visuali diretti e sintetici.
Vediamo ancora nella figura 2-5 il risultato di una visualizzazione di
JLab in cui un utente che osserva la rappresentazione grafica del vettore
può conoscere