cerca
Tema d'Esame di Progettazione di Software Sicuro - 30/06/2017
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Tema d'Esame di Progettazione di Software Sicuro - 30/06/2017

Torna alla pagina di Progettazione di Software Sicuro


 :: Tema d'Esame di Progettazione di Software Sicuro  ::
 :: (30/06/2017) ::

Prova Scritta

  1. Descrivere il processo di valutazione di un software sicuro
  2. Descrivere tre tipi di attacchi di progettazione
  3. Elencare e descrivere quattro principi di architetture sicure
  4. 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
  5. Classico esercizio UML azione/evento in cui c'era da descrivere un sistema di gestione del telepass/sbarra
  6. Descrizione di criteri affidabili, validi e ideali
  7. Data la funzione f (x, y, z) = x * (y * 10) + z con x, y, z > 1, 0 trovare un criterio ideale
  8. 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:

  1. Creare un costruttore che inizializzasse correttamente le matrici
  2. Creare un metodo occupaPostiLatoDestro che occupasse i posti del lato destro ma che includesse anche un controllo per i posti già assegnati
  3. JML: invarianti, precondizioni e postcondizioni. Ad esempio contare che tutti i posti fossero effettivamente 180 oppure che ci fosse almeno un posto finestrino occupato
  4. 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
  5. Copertura: JUnit copertura dell'if del metodo di occupaPosti. Era un if del tipo: if (posto == 'f' || posto == 'c' || posto == 'o') ...