Torna alla pagina di Progettazione di Software Sicuro
:: Tema d'Esame di Progettazione di Software Sicuro ::
:: (30/06/2017) ::
Prova Scritta
- Descrivere il processo di valutazione di un software sicuro
- Descrivere tre tipi di attacchi di progettazione
- Elencare e descrivere quattro principi di architetture sicure
- Scrivere un contratto JML per il metodo int f(a []) che restituisce la somma degli elementi dell'array. a è un array di interi strettamente maggiori di zero
- Classico esercizio UML azione/evento in cui c'era da descrivere un sistema di gestione del telepass/sbarra
- Descrizione di criteri affidabili, validi e ideali
- Data la funzione f (x, y, z) = x * (y * 10) + z con x, y, z > 1, 0 trovare un criterio ideale
- MCDC della seguente istruzione: if (x > 1 && y > x && z > y)
Laboratorio
Purtroppo non sono riuscito a farmi lasciare dalla Prof. Ciriani il foglio dell'esame, ma si trattava della gestione dei posti su un vagone di un treno.
Il vagone è diviso verticalmente in due lati, destro e sinistro, ognuno dei quali ha 30 file. Ogni fila è formata da tre posti: finestrino, centrale e corridoio.
Il vagone è modellato, quindi, con due matrici di dimensione 30x3 e lo schema grafico è il seguente:
http://imgur.com/L1pGhxg
Le trenta file corrispondono alle righe della matrice e i posti (finestrino = f, centrale = c, corridoio = o) corrispondono alle colonne. Siccome abbiamo due lati del vagone, destro e sinistro, gli indici del finestrino e del corridoio saranno rispettivamente 0 e 2 per il lato sinistro e 2 e 0 per il lato destro.
La professoressa dava a disposizione un metodo già fatto (occupaPostiLatoSinistro) che, una volta passata la fila e la lettera corrispondente al posto desiderato, restituiva true e occupava il posto. Notare che era specificato il fatto che il metodo non aveva (e non doveva avere) un controllo di posti già assegnati (cioè se prenotavo il posto 3 finestrino e poi riprenotavo lo stesso, il metodo non si accorgeva dell'errore).
I compiti erano:
- Creare un costruttore che inizializzasse correttamente le matrici
- Creare un metodo occupaPostiLatoDestro che occupasse i posti del lato destro ma che includesse anche un controllo per i posti già assegnati
- JML: invarianti, precondizioni e postcondizioni. Ad esempio contare che tutti i posti fossero effettivamente 180 oppure che ci fosse almeno un posto finestrino occupato
- Unit test: verificare che fosse possibile prenotare posti uguali sul lato sinistro; verificare che non fosse possibile prenotare posti uguali sul lato destro; verificare la prenotazione di posti specificando una lettera inesistente
- Copertura: JUnit copertura dell'if del metodo di occupaPosti. Era un if del tipo: if (posto == 'f' || posto == 'c' || posto == 'o') ...