Introduzione

Negli ultimi due anni sono stato Commissario agli Esami di Stato di Ingegneria dell'informazione. Il 2019 è stato un anno "normale", con prove scritte e orali, mentre il 2020 – a causa del CoViD-19 – l'Esame si è trasformato in un orale in videoconferenza.

Voglio qui riportare, per comune utilità dei futuri ingegneri, le domande più interessanti che ho posto quest'anno e i temi che preparai lo scorso (indicando anche i link ufficiali del Politecnico di Torino) aggiungendo dei commenti per alcune parti.

Ho contrassegnato le domande o gli spunti con i seguenti simboli, quando:

  • ⭐ c'è qualcosa di culturalmente particolare;
  • 💥 c'è un ragionamento non banale;
  • ⚠️ c'è un tema ricorrente relativo a qualche ⭐ o 💥

Questo articolo potrebbe essere quindi utile per:

  • prossimi candidati
  • eventuali colloqui di lavoro, dentro e fuori Kiwifarm 😃

Estate 2020: sessione unica di orali

Domande di ragionamento

  • 💥 Le viene in mente un metodo elementare e veloce per sommare i numeri interi da 1 a 100? Nel caso non le venga in mente (dopo averci provato!) mi dica come addestrerebbe una rete per trovare un modo veloce.
    • NDR Senza riportare la soluzione, si narra che questo problema venne risolto in pochi minuti da Gauss quando era alle elementari. 😃
  • ⭐ Immagini di partire da una goccia d'acqua in uno stadio di calcio e che le gocce raddoppino ogni minuto: quanti minuti ci vorrebbero per riempire lo stadio di calcio?
    • NDR Senza riportare la soluzione, questo è un problema facilmente risolubile a mano, avendo un minimo di capacità di modellazione e conoscendo qualche proprietà degli esponenziali che molti manager, proprio chi spesso crede di saper prendere decisioni per fenomeni non lineari, sbaglierebbero clamorosamente. 😃
  • Se Le chiedessero di stimare quanti torinesi sono andati in vacanza a luglio, come procederebbe?

Domande sul Metodo e di cultura ingegneristica generale

  • Nel caso Le richiedessero di modellare qualcosa in un campo non strettamente legato all'ingegneria, partendo da una descrizione un po' vaga, quali insegnamenti generali cercherebbe di applicare?
  • Quali strategie Le vengono in mente, a vario titolo, per aumentare l'affidabilità di un sistema?
  • Immaginiamo che Le chiedano di stimare qualcosa (in termini di tempo, denaro o altro) e che Le forniscano solamente informazioni insufficienti, per giunta contraddittorie, errate e vaghe. Come si comporterebbe per fornire una risposta di un qualche valore?

Domande classiche da colloquio

  • 💥 Quante palline da golf pensa potrebbero essere necessarie per riempire un Boing 747?
    • NDR a me sono venute in mente due soluzioni, una per un estremo superiore e una per un estremo inferiore… può essere uno spunto, no? 😃
  • Nel caso abbia già lavorato, quale ritene essere il suo più grande risultato professionale? Nel caso non abbia ancora lavorato, quale ritiene essere il suo miglior risultato durante il percorso di studi e per quale ragione?

Domande di ingegneria del software e di project management

  • Come testerebbe una calcolatrice elementare?
  • Secondo Lei, in un progetto, quali sono le fasi più critiche, dalla raccolta delle specifiche all'esecuzione e quali tecniche conosce per affrontare al meglio queste difficoltà?
  • Come può assicurarsi che il suo codice sia in grado di gestire diversi casi di errore?
  • Descriva le migliori pratiche che conosce per la progettazione e realizzazione di una libreria.
  • ⭐ Mi dica una percentuale di errore secondo Lei non insolita, tra stima dell'effort per un progetto software a preventivo e rendicontazione a consuntivo e quali metodi Le vengono in mente per ridurre questo problema
  • Quali tecniche Le vengono in mente per isolare un difetto, un bug, una contraddizione in un sistema più ampio?
  • Quali tipi di errori Le vengono in mente, pensando alla progettazione e alla realizzazione? Come prevenirli o ridurne il rischio?
  • ⭐ Elenchi i principali linguaggi interpretati e compilati che conosce e le loro possibili interazioni.
    • NDR la parola interazioni dovrebbe guidare nella giusta direzione.
  • Quali tecniche Le vengono in mente, nella progettazione software, per ridurre al minimo il numero di errori, in senso generale?
  • Quali metodi, formali o non formali, Le vengono in mente per stimare l'effort nello sviluppo software? Sa indicare, in almeno un campo a Sua scelta, l'intervallo di errore tipico tra preventivo e consuntivo?
  • Nomini e possibilmente descriva per sommi capi tutti i metodi di distribuzione del software che conosce.
  • Riferendosi sia ai suoi studi che alla sua esperienza, è in grado di descrivermi almeno un paio di tecniche di debugging?
  • ⭐ Riesce a nominare e possibilmente a descrivere per sommi capi almeno 3 tipi di test software? unitari, integrazione, funzionali, carico, robustezza

Domande sul calcolo distribuito

  • ⭐ In un sistema distribuito, quali tecniche Le vengono in mente per ridurre genericamente il disagio generato dalle pause nei processi?
    • NDR Questo è un tema molto sottovalutato (si veda la seguente parte sulle False assunzioni) e diversi spunti possono svilupparsi pensando a temi come retry, timeout, token expire, eccezioni, accodamento errori, ridondanza eccetera.
  • ⭐ Nel caso un Message Broker scarti un messaggio e non sia quindi stato possibile consegnarlo, il rifiuto dovrebbe essere trattato come un normale fallimento o diversamente? Perché e, in caso di diverso trattamento, come lo si potrebbe elaborare?
    • NDR Questa dovrebbe suggerire al candidato sulle differenza tra progettazione dell'architettura (e della sua robustezza) e della logica applicativa
  • ⭐ Le viene in mente almeno un problema tipico delle architetture distribuite e, di conseguenza, almeno un metodo di comunicazione tra processi distribuiti?
    • NDR I processi distribuiti sono di diversi tipi: cosa accomuna, in profondità, tutti loro e quindi quale struttura, in senso astratto, dovrebbe venire in mente?
  • Saprebbe elencarmi almeno un pregio e un difetto in termini (se vogliamo usare questa terminologia al posto di problemi posti e soluzioni trovate) per il calcolo centralizzato, il calcolo distribuito e il calcolo decentralizzato?
  • ⭐ Descriva, a qualsiasi livello, le varie metodologie per riconoscere la “verità” in una comunicazione client-server e in una rete paritetica.
    • NDR Qui ci sono almeno due spunti diversi:
      • quelli relativi al livello della comunicazione
      • quelli relativi al tipo di architettura
  • 💥 Immaginiamo due servizi, il primo che riceve 120 request/second da 1 kB, il secondo che riceve 3 request da 2.4 MB/minute: a parità di consumo di memoria, sarebbe una buona idea gestirli con la medesima architettura? Perché? Quali differenze per esempio potrebbero esserci?
    • NDR normalizzando i valori per i due scenari, si dovrebbero scoprire cose non casuali… quale è quindi la differenza profonda? È per caso legata a un tema ricorrente nelle domande precedenti? 😃
  • Quali protocolli di comunicazione le vengono in mente pensando a un progetto IoT? Non si limiti solamente ai dispositivi legati a sensori e trasduttori.
  • Conosce le False assunzioni sui sistemi distribuiti? Se sì, ne elenchi alcune e le possibili contromisure. Se no, gliele elenco e mi dica quel che Le viene in mente.
  • Descriva come progetterebbe una pipeline di sviluppo per un sistema distribuito.

2019: pre CoViD, prove pratiche

Prova PRATICA del 23 luglio 2019

Riferimento: PoliTo2019S1
Revisione: Prof. Andrea Calimera

Un condizionatore può essere rappresentato come una macchina in grado di:

  • rilevare la temperatura ambientale Ta
  • ricevere e memorizzare una temperatura desiderata Td
  • ricevere e memorizzare uno stato di attivazione e disattivazione;
  • attivare o disattivare degli attuatori per soddisfare, nel tempo t, la disequazione |Td - Ta| < Δ

In un'abitazione possono esserci più condizionatori.
Un proprietario può possedere più abitazioni.
Un'abitazione può avere più proprietari.
Un produttore di condizionatori desidera immettere sul mercato un sistema IoT per i propri apparati, rendendo possibile installare nelle abitazioni dei clienti un nuovo dispositivo connesso a internet, in grado di ricevere comandi per i condizionatori e inviare informazioni a un sistema centrale, consentendo ai proprietari di dialogare con i propri condizionatori - anche da remoto - tramite un client grafico (cruscotto).
Cruscotto ↔ Sistema centrale ↔ Dispositivo locale ↔ Condizionatori
Il candidato sviluppi - a sua scelta - almeno sei dei seguenti punti:

  1. un diagramma entità-relazione del sistema locale;
  2. un diagramma entità-relazione del sistema centrale;
  3. il diagramma architetturale complessivo (cruscotto + centrale + locale) senza dettagliare le componenti interne;
  4. i due diagrammi architetturali — dettagliando le componenti interne — del sistema centrale e del sistema locale;
  5. un diagramma UML per una delle architetture summenzionate, per un aspetto a scelta;
  6. un sequence diagram per una delle architetture summenzionate, per un aspetto a scelta;
  7. lo pseudocodice di una componente critica a sua scelta relativo alla gestione del dispositivo locale;
  8. un elenco — corredato dalle opportune giustificazioni — di quali linguaggi, sistemi operativi, protocolli e eventuali servizi terzi utilizzerebbe rispettivamente per il cruscotto, per il sistema centrale e per il dispositivo;
  9. ⚠️ quali problemi di latenza possono essere presenti nel sistema e quali contromisure si potrebbero mettere in campo?
  10. ⚠️ quali strategie potrebbero essere attuate per:
    • ridurre il consumo di banda?
    • trasmettere i dati in modo sicuro?
    • irrobustire i singoli sottosistemi ai disservizi per cause esterne o ai bug interni?
  11. quali problemi di sicurezza si dovrebbero affrontare rispettivamente per il cruscotto, il sistema centrale e il dispositivo locale?
  12. quali casi d'uso si potrebbero concepire per il cruscotto (relativamente al solo utente)?

Prova PRATICA del 20 dicembre 2019

Riferimento: PoliTo2019S2
Revisione: Prof. Andrea Calimera

Una società è proprietaria di un gruppo di edifici di grandi dimensioni, utilizzati come uffici. Si vuole sviluppare un sistema automatico per il controllo della temperatura degli ambienti interni, bilanciando risparmio energetico e benessere.
Ciascun edificio ha quattro lati – orientati secondi i punti cardinali – e diversi piani.
Per ciascun lato dell'edificio e per ciascun piano, si ha in dotazione una coppia di dispositivi, ciascuno in grado di agire sia da sensore che da trasduttore:

  • un sistema attivo di controllo dell'energia solare trasmessa all'interno dell'edificio dalle pareti vetrate;
  • un ventilconvettore (fan coil).

Entrambi i dispositivi accettano comandi solo da alcuni pulsanti posti sui dispositivi stessi.
Il candidato elabori al meglio almeno nove dei seguenti punti.

  1. Quali tecnologie hardware e software utilizzerebbe per rendere interconnessi con un calcolatore remoto l'insieme di coppie di dispositivi summenzionati.
  2. Una volta resi i dispositivi in grado di ricevere comandi e trasmettere i dati fisici di competenza, si tracci un diagramma architetturale del sistema complessivo.
  3. Si disegni un diagramma entità-relazione per l'organizzazione dei dati raccolti.
  4. Un sequence diagram per almeno uno dei due tipi di dispositivi, relativamente alla comunicazione con il sistema centrale.
  5. Un elenco - corredato dalle opportune giustificazioni - di quali linguaggi, sistemi operativi, protocolli e eventuali servizi terzi utilizzerebbe per il sistema centrale, distinguendo tra la parte di pure memorizzazione/elaborazione dei dati e quella di presentazione/interazione con l'utente.
  6. Nella modellazione del sistema di controllo centralizzato, come utilizzerebbe - a integrazione delle informazioni raccolte dai sensori - la serie storica dei dati relativi all'irraggiamento solare di quella zona, per ciascun punto cardinale.
  7. 💥 Nella modellazione del sistema di controllo centralizzato, come utilizzerebbe - a integrazione delle informazioni raccolte dai sensori - la possibilità di sfruttare un servizio di previsioni meteorologiche. NDR qui il candidato attento potrebbe intuire un suggerimento per un sistema predittivo, volto ad unire serie storiche con previsioni meteorologiche per anticipare le variazioni e, secondo qualche metrica, ottimizzare il sistema.
  8. Nel caso si siano ormai raccolte sufficienti informazioni, indicare come si potrebbe sviluppare un sistema predittivo, specificando a quali famiglie di algoritmi di apprendimento si potrebbe fare riferimento.
  9. ⚠️ Quali problemi di latenza potrebbero essere presenti nel sistema e quali contromisure si potrebbero mettere in campo, relativamente sia alle costanti di tempo fisiche trattate che alla natura distribuita dell'architettura.
  10. ⚠️ Quali contromisure o persino architetture alternative potrebbero essere impiegate per aumentare la robustezza complessiva del sistema ai guasti o alla propagazione di informazioni false.
  11. Quali metodologie di sviluppo e, in generale, di ingegneria del software si potrebbero applicare per ridurre i ricircoli e procedere in uno sviluppo il più parallelo possibile relativamente ai diversi sottoprogetti da interconnettere.
  12. Quali aspetti essenziali di sicurezza dovrebbero essere presi in considerazione in fase di progetto.

Photo by sean Kong on Unsplash

Photo by Thought Catalog on Unsplash

Photo by Surface on Unsplash