Laurea Specialistica in Informatica
Analisi e Verifica dei Programmi
docente: prof. Cortesi Agostino
ANALISI DEI RUOLI
Visentini Diego mat.814702
De Martin Andrea mat. 810091
AA 2006/2007
Analisi dei Ruoli
1
OBIETTIVI

Nuovo “sistema di Ruoli”

Funzionalità dei ruoli

Algoritmi che implementano varie analisi dei ruoli
AA 2006/2007
Analisi dei Ruoli
2
EXCURSUS

Introduzione generale

Definizione e Proprietà dei ruoli

Modello di programmazione

Analisi intraprocedurale

Analisi interprocedurale

Estensioni del sistema di ruoli

Lavoro correlato

Conclusioni
AA 2006/2007
Analisi dei Ruoli
3
TIPO vs RUOLO



Tipo di una variabile: int, bool, float, ecc…
Ruolo: estensione del concetto di tipo inteso come relazione di
referenza tra oggetti; incrementa sia sicurezza che leggibilità del
programma
Esempio ideologico, non basato su codice, che chiarisce la
distinzione tra ruolo e tipo:
Carta Postepay


Il tipo dell’oggetto è “carta ricaricabile”
Il ruolo dipende dall’ambito in cui viene usata:


AA 2006/2007
carta di credito in operazioni di acquisto su internet con Paypal
Bancomat allo sportello delle poste
Analisi dei Ruoli
4
INTRODUZIONE (1)



Sistemi di ruoli tradizionali mantengono proprietà
“invarianti”, finchè l’oggetto esiste
Ruoli di un oggetto cambiano a seconda di come
cambiano i valori memorizzati nei propri campi oppure
mentre i programmi invocano operazioni su tale oggetto
Soluzione: integrazione tra cambiamento di stati e
sistema di ruoli
AA 2006/2007
Analisi dei Ruoli
5
INTRODUZIONE (2)

Role Concept: lo stato di un oggetto dipende dalle sue

Linguaggio per definire un ruolo: per esprimere invarianti

Modello di Programmazione: set di regole che

Linguaggio delle specifiche per l’interfaccia procedurale:

Algoritmi di analisi dei ruoli: controllano se i vincoli
relazioni di referenza con gli altri oggetti
e strutture dati
permettono o meno la violazione dei vincoli
contesto iniziale ed effetti su procedure
vengono violati e in questo caso controllano se la regola
applicata ne consentiva la violazione
AA 2006/2007
Analisi dei Ruoli
6
ESEMPIO
Diagramma delle referenze dei ruoli per un process scheduler
AA 2006/2007
Analisi dei Ruoli
7
DEFINIZIONE DEI RUOLI (1)
Esempio di definizione dei ruoli del grafo precedente scritto in pseudocodice
Ruolo dei processi in
esecuzione: notare il vincolo
acyclic
Ruolo dei processi in
esecuzione: notare il
vincolo identities
AA 2006/2007
Analisi dei Ruoli
8
DEFINIZIONE DEI RUOLI (2)

Vincoli di identità

Vincoli di aciclicità

Nell’esempio: il vincolo di identità next.prev nel ruolo
RunningProc specifica il vincolo della lista ciclica
doppiamente linkata che segue il next, poi il campo
prev riconduce sempre all’oggetto iniziale. Il vincolo
aciclico left e il right nel ruolo SleepingProc specifica
che non ci sono cicli nello heap inglobando solo gli archi
left e right. Dall’altro lato, la lista dei processi attivi
deve essere ciclica, perché i suoi nodi non possono mai
puntare a null
AA 2006/2007
Analisi dei Ruoli
9
PROPRIETA’ DEI RUOLI

Proprietà di consistenza: i ruoli sono in grado di assicurare
che il programma rispetti le proprietà di consistenza della struttura
dati a livello applicazione. I ruoli nel nostro process scheduler, per
esempio, assicurano che un processo non può essere
contemporaneamente attivo e sleeping

Modifiche dell’ interfaccia:
l’interfaccia cambia mentre
cambiano le sue relazioni di referenza

Relazioni correlate:
gruppi di oggetti cooperano per
implementare una parte di una funzionalità
AA 2006/2007
Analisi dei Ruoli
10
SINTASSI E SEMANTICA DEI RUOLI (1)

Rappresentazione di uno Heap:

grafo HC

oggetti nodes(HC)

archi (O1, ƒ,O2) є HC
AA 2006/2007
Analisi dei Ruoli
11
SINTASSI E SEMANTICA DEI RUOLI (2)

R set usati nelle definizioni di ruoli

nullR, nullc, R0=R U{nullR}

Ogni ruolo è rappresentato come la congiunzione di 4
vincoli:




Campi:per ogni campo c è associata una funzione
fieldƒ(): R 2R0
Slots: slotno(r): un oggetto di ruolo r può avere un numero di
alias pari a slot(r)
Identità: identities(r) C ƒ є F. Le identità sono coppie di campi
(ƒ,g) dove ogni referenza ƒ su un oggetto o poi ritorna su
referenze g che portano nuovamente ad o
Aciclicità:setAcyclic(r) C ƒ di campi lungo la quale i cicli sono
proibiti
AA 2006/2007
Analisi dei Ruoli
12
SINTASSI E SEMANTICA DEI RUOLI (3)

REFERENCE ROLE DIAGRAM

DEFINIZIONE FORMALE:
RRD={(r,ƒ, r’) | r’ є fieldƒ (r) e эi (r,ƒ) є sloti (r’ )} U {(r,ƒ, nullR)\ nullR є fieldƒ (r) }

Come si può notare, cattura alcuni ma non tutti i tipi di
vincoli definiti in precedenza
AA 2006/2007
Analisi dei Ruoli
13
MODELLO DI PROGRAMMAZIONE (1)



1.
2.
Scopo di questa tecnica: violare temporaneamente i vincoli
durante la modifica di strutture dati
Linguaggio imperativo (ogni programma è un insieme di
procedure proc) con allocazione di oggetti dinamica
Oggetti onstage e offstage nello heap
onstage(Hc) : referenziato da una variabile locale o da un
parametro di qualche attivazione di record
offstage(Hc) : mai referenziati da variabili locali o parametri
AA 2006/2007
Analisi dei Ruoli
14
MODELLO DI PROGRAMMAZIONE (2)

Consistenza locale

Consistenza dei nodi offstage e onstage

Consistenza rimozione referenze

Consistenza chiamate a procedura
AA 2006/2007
Analisi dei Ruoli
15
ANALISI INTRAPROCEDURALE DEI RUOLI

Rappresentazione grafica (Heap,nodi, archi)

Algoritmo: generare casualmente più nodi offstage


Scopo: Verificare che oggetti che hanno lo stesso ruolo
ma sono rappresentati da nodi offstage diversi, hanno
diversa raggiungibilità
Verifica globale tramite verifica progressiva di nodi che
passano a offstage
AA 2006/2007
Analisi dei Ruoli
16
ANALISI INTERPROCEDURALE DEI RUOLI
Approssimiamo la funzione di trasferimento nelle semantiche concrete
con interfacce procedurali consistenti in:
1.
un contesto iniziale
2.
un insieme di effetti
Assumiamo che queste interfacce procedurali siano concepite:
1.
2.
verificando che approssimino in modo sommario il comportamento
della procedura
istanziando le interfacce di procedura ai call sites
AA 2006/2007
Analisi dei Ruoli
17
INTERFACCE DI PROCEDURA (1)
CONTESTO INIZIALE
Il grafo di tipo iniziale assegna:

un insieme di heaps concreti ai campi della
procedura

i nomi per gli insiemi di oggetti in questi heaps
Denotiamo il grafo di ruolo iniziale come <HIC, ρIC, KIC>
Il grafo di tipo iniziale potrebbe contenere due tipi di
archi:

arco di parametro p  pn è interpretato come
<proc, p, pn>  HIC

arco di albero n - f  m denota un arco <n,f,m>
 HIC
ARCHI DI
PARAMETRO
ARCHI DI
NODO
NODO
DICHIARATO ANONIMO ALBERO
Chiamiamo i nodi dell’RRD (contenuto nel grafo di ruolo
iniziale) nodi anonimi
AA 2006/2007
Analisi dei Ruoli
18
INTERFACCE DI PROCEDURA(2)
EFFETTI DI PROCEDURA
Gli effetti di procedura:

approssimano conservativamente la zona dell’heap dove accede la
procedura

indicano cambiamenti alle relazioni di riferimento all’interno di questa zona
Ci sono due tipi di effetti:

quelli di lettura: specificano un set read(proc) di nodi del grafo di ruolo
iniziale a cui ha accesso la procedura; sono usati per assicurare che la
condizione di accessibilità sia soddisfatta

quelli di scrittura: nella forma e1.f=e2 raccoglie l’effetto di operazioni
store all’interno della chiamata; e1 denota gli oggetti scritti, f il campo
scritto e e2 gli oggetti i cui riferimenti sono scritti nel campo
AA 2006/2007
Analisi dei Ruoli
19
VERIFICA DELLE INTERFACCE
DI PROCEDURA(1)
Per verificare gli effetti ampliamo la rappresentazione dell’analisi <H,ρ,K>.

H è l’heap astratto che rappresenta gli oggetti

ρ è un assegnamento di ruolo astratto

K indica il tipo di ogni nodo
Un grafo di tipo non-error e’ ora una tupla <H,ρ,K,,E> dove:


 : nodes(H)nodes0(HIC) e’ una trasformazione di contesto iniziale
che assegna un grafo di tipo iniziale (n)  nodes(HIC) per ogni nodo n
rappresentante un oggetto che esiste a priori verso la chiamata di
procedura. Esso assegna anche NEW ad ogni nodo rappresentante un
oggetto creato durante l’esecuzione della procedura
E UimustWri(proc) e’ una lista di effetti must write che la procedura
ha performato finora
AA 2006/2007
Analisi dei Ruoli
20
VERIFICA DELLE INTERFACCE
DI PROCEDURA(2)
GRAFI DI RUOLO ALLE ENTRY DI PROCEDURA
La nostra analisi dei ruoli:
 crea l’insieme dei grafi di ruolo alle entry di procedura dal grafo di
ruolo iniziale context(proc).
 istanzia quindi i nodi nel grafo di ruolo iniziale per creare un set di
grafici di ruolo ( La figura qui sotto descrive questo processo )
L’analisi:
• prima seleziona un parametro arco per
ogni parametro
• poi usa il parametro di espansione di
relazione  per istanziare e dividere il
nodo referenziato
AA 2006/2007
Analisi dei Ruoli
21
VERIFICA DELLE INTERFACCE
DI PROCEDURA(3)
VERIFICA DELLE ASSERZIONI BASE
Per assicurare che una procedura sia conforme alla sua interfaccia, l’analisi usa
la mappa  per assegnare ogni asserzione di Load e Store ad un effetto
dichiarato
L’esecuzione simbolica di una clausola di Load x=y.f

rende certo che il Load e’ registrato in qualche effetto letto

se il caso non e’ questo, viene riportato un errore
L’esecuzione simbolica della clausola di Store x.f=y

prima reperisce i nodi (nx) e (ny) del grafo di ruolo iniziale che
corrispondono ai nodi nx e ny nel grafo di ruolo corrente

se l’effetto < (nx),f, (ny) > e’ dichiarato come un effetto di possibile
scrittura, l’esecuzione procede come al solito

altrimenti, l’effetto e’ usato per aggiornare la lista E degli effetti must-write
AA 2006/2007
Analisi dei Ruoli
22
VERIFICA DELLE INTERFACCE
DI PROCEDURA(4)
VERIFICA DELLE POSTCONDIZIONI DI PROCEDURA
Alla fine della procedura, l’analisi:


attua una verifica di nodo su tutti i nodi in stato usando il predicato
nodeCheck(n,<H, ρ, K>, nodes(H)) per tutti i nodi nonstage(H).
verifica anche che ogni effetto apportato in E può essere attribuito ad un
esatto must-effect dichiarato.
AA 2006/2007
Analisi dei Ruoli
23
ANALISI DEI CALL SITES(1)
L’analisi aggiorna l’insieme dei grafi di ruolo dei siti alla chiamata di procedura
basati sulle interfacce del chiamato e considera una procedura proc
come un call site nella forma proc’(x1,……,xp)
La computazione della funzione di trasferimento per un call sites ha le
seguenti fasi:

Parameter check

Context Matching ( matchContext )

Effect Instantiation (FX)

Role Reconstruction(RR)
AA 2006/2007
Analisi dei Ruoli
24
ANALISI DEI CALL SITES(2)
PARAMETER CHECK
assicura che i ruoli dei parametri siano conformi ai ruoli attesi dalla chiamata
proc’ richiedendo nodeCheck(ni, G, offstage(H{nj}j) per ogni nodo
di parametro ni
CONTEXT MATCHING
assicura che i grafi di ruolo chiamati rappresentino un sottoinsieme dell’albero
concreto rappresentato da <HIC, ρIC, KIC> derivando un mapping  dal
grafo di ruolo chiamato ai nodi (HIC).
AA 2006/2007
Analisi dei Ruoli
25
ANALISI DEI CALL SITES(3)
EFFECT INSTANTIATION
usa mayWr(proc’) e mustWri(proc’) per approssimare tutti i cambiamenti al
grafo di ruolo che proc’ può effettuare
ROLE RECONSTRUCTION
usa ruoli finali per i nodi di parametro, postRi(proc’), combinata con le
definizioni di ruolo globali, per ricostruire i ruoli di ogni nodo nella parte del
grafo di ruolo che rappresenta la regione modifica dell’heap
AA 2006/2007
Analisi dei Ruoli
26
ESTENSIONI DEL SISTEMA DI
RUOLO BASE(1)
CAMBIAMENTI DI RUOLO A CASCATA
Noi usiamo la clausola setRoleCascade(x1:r1,……..,xn:rn) per effettuare un
cambiamento di ruolo a cascata su di un insieme di oggetti
Dato un grafo di ruolo <H,ρ,K,E>, un cambio di ruolo a cascata:

trova un nuovo valido assegnamento di ruolo ρ‘ nel quale l’oggetto in stato
ha i ruoli desiderati

i ruoli degli oggetti fuori stato sono aggiustati in modo appropriato
Ogni soluzione che soddisfa le costrizioni deve rispettare la semantica originale
AA 2006/2007
Analisi dei Ruoli
27
ESTENSIONI DEL SISTEMA DI
RUOLO BASE(2)
RUOLI SIMULTANEI
Questa definizione di albero specifica
che una struttura dati è un albero
con costrizioni sui campi left e
right
AA 2006/2007
Similarmente, la definizione di una
lista linkata specifica costrizioni solo
per il campo next
Analisi dei Ruoli
28
ESTENSIONI DEL SISTEMA DI
RUOLO BASE(3)
Possiamo combinare l’albero ed i tipi di lista per ottenere un tipo ad albero
threaded:
• Definizioni di ruolo per ruoli simultanei possono usare precedenti
definizioni di ruolo tramite la parola chiave extends
• Le relazioni extends sono date dall’insieme di ruoli subroles(r) per
ogni ruolo r
AA 2006/2007
Analisi dei Ruoli
29
LAVORO CORRELATO
Approcci typestate proposti recentemente usano ruoli lineari per collegamenti
ad heap per supportare i cambi di stato degli oggetti allocati
dinamicamente.
I ricercatori hanno:



sviluppato approcci typestate per verificare le proprietà di salvaguardia di
programmi di linguaggio assembly
sviluppato sistemi che usano estensioni di ruoli lineari che evitino la
pseudonimia generale e conti sul design del linguaggio per evitare
l’inferenza di tipo non locale
adottato un approccio constraint-based che caratterizza le strutture dati in
termini delle costrizioni che devono essere soddisfatte
AA 2006/2007
Analisi dei Ruoli
30
CONFRONTO
La nostra analisi:





ha un approccio constraint-based che caratterizza le strutture dati in
termini delle costrizioni che devono essere soddisfatte
è incentrata sull’aspetto globale come ad esempio la partecipazione
di oggetti in strutture dati multipli
usa un meno preciso ma più scalabile trattamento di procedure
usa un approccio composizionale che analizza ogni procedura da
sola per verificare che sia conforme alla sua interfaccia
traccia molte più informazioni dettagliate riguardo l’heap
AA 2006/2007
Analisi dei Ruoli
31
CONCLUSIONI
Questa analisi dei ruoli propone 2 idee chiave:

le relazioni di aliasing potrebbero determinare, in parte, il ruolo di ogni
oggetto

il sistema di ruolo dovrebbe usare l’oggetto risultante come sua astrazione
fondamentale per descrivere le interfacce di procedura e le relazioni di
riferimento degli oggetti
ed un algoritmo di analisi che può verificare che il programma rispetti
correttamente i vincoli di ruolo
I programmatori possono usare i ruoli per una varietà di utilizzi:

per assicurare la correttezza dell’interfaccia di procedura estesa che prende
i ruoli dei parametri negli account

per verificare importanti proprietà della consistenza delle strutture dati

per esprimere come le procedure muovono oggetti tra strutture dati

per controllare che il programma implementi correttamente le relazioni
correlate tra gli stati di oggetti multipli
Ci aspettiamo perciò che i ruoli migliorino l'affidabilità del programma e la sua
trasparenza a sviluppatori e manutentori.
AA 2006/2007
Analisi dei Ruoli
32
RIFERIMENTI(1)
[1] A. Albano, R. Bergamini, G. Ghelli and R. Orsini. An introduction to
database programming language Fibonacci. The VLDB journal, 4(3), 1995
[2] Craig Chambers. Predicate Classes. In proceedings of the 7° European
Conference on Object-Oriented Programming, pages 268-296, 1993
[3] S. Drossopoulou, F. Damiani, M. Dezani-Ciancaglini, and P. Giannini. Fickle:
Dynamic objet re-classification. In proceedings of the 15° European
Conference on Object-Oriented Programming, LNCS 2072, pages 130-149.
Springer, 2001.
[4] Rakesh Ghiya and Laurie J. Hendren. Connection analysis: A practical
interprocedural heap analysis for C. In Proceedings of the 8° Workshop on
Languages and Compilers for Parallel Computing, 1995.
[5] Laurie J. Hendren, Josep Hummel, and Alexsandru Nicolau. A general data
dependence test for dynamic, pointer-based data structures. In Proceedings
of the SIGPLAN’94 Conference on Programming Language Design and
Implementation, 1994.
AA 2006/2007
Analisi dei Ruoli
33
RIFERIMENTI(2)
[6] Jacob J. Jensen, Michael E. Joergensen, Nils Klarlund, and Michael I.
Schwartzbach. Automatic verification of pointer programs using monadic
second order logic. In Proceedings of the SIGPLAN’94 Conference on
Programming Language Design and Implementation, Las Vegas, NV, 1997.
[7] Victor Kunkak. Designing an algorithm for role analysis. Master’s thesis,
Massachusetts Institute of Tecnology, 2001.
[8] Trygve Reenskaug. Working with Objects. Prentice Hall, 1996.
[9] Mooly Sagiv, Thomas Reps, and Reinhard Wilhelm. Parametric Shape
Analysis via 3-valued logic. In Proceeding of the 26° Annual ACM
Symposium on the Principles of Programming Languages, 1999.
[10] Wolfgang Thomas. Languages, automata, and logic. In Handbook of
Formal Languages Vol.3: Beyond Words. Springer-Verlag, 1997.
AA 2006/2007
Analisi dei Ruoli
34
Scarica

ANALISI DEI TIPI