Il fatto di attualità (una Tesla Model S che tampona un camion viaggiando in modalità Autopilot su un’autostrada olandese) impone a tutti un sano bagno di realismo in merito alla guida autonoma sicura e all’affidabilità delle auto sempre più governate, anche su funzioni non accessorie, da sistemi software che possono funzionare male.
No, non stiamo dicendo che i meccanici del futuro dovranno avere una formazione un po’ diversa da quella attuale, o che le officine avranno appesi ai muri più computer che chiavi inglesi. Ma la complessità progettuale per realizzare un’auto “al passo coi tempi” sta rapidamente cambiando: ai tradizionali temi fisici, meccanici e chimici emissioni inquinanti, prestazioni, tenuta di strada, crash test, si aggiungono anche quelli informatici come auto connessa, guida autonoma, sistemi di intrattenimento di bordo e così via.
La complessità della correttezza del software
E mentre in oltre un secolo di storia l’industria dell’auto sembra aver imparato a dominare i problemi dei temi progettuali classici, il problema della correttezza del software, e specialmente di quello complesso, non va assolutamente sottovalutato nè si può assumere con faciloneria che un’azienda high tech, per quanto gigantesca, ogni riferimento ad Apple e Google è puramente casuale, lo possa risolvere perfettamente e in breve tempo, specialmente quando da un software dipende l’incolumità delle persone come in un sistema di guida autonoma per autoveicoli.
Non soltanto nei progetti di sviluppo software le risorse disponibili per la fase di convalida sono necessariamente limitate, ma in informatica teorica esistono teoremi (fondamentalmente collegati con il teorema di indecidibilità di Gödel) che dimostrano che il problema di stabilire, per esempio, che un algoritmo termina sempre e non “va in loop”, o anche che è corretto rispetto alle specifiche, ossia che segue proprio il comportamento atteso, o che possiede una determinata proprietà non banale, è un problema indecidibile: non è possibile scrivere un “super-programma” che esamina il codice sorgente di un altro programma e fornisce la risposta a tali quesiti (o ad altri quesiti ad essi collegati).
Questo implica che la correttezza del software non è dimostrabile in modo perfetto e assoluto mediante procedimenti automatici. Non resta che affidarsi a un misto di automatismi e ragionamento umano, ma a causa dell’inevitabile scarsità quantitativa e qualitativa del fattore umano, nella realtà pratica di progetto non c’è la possibilità di raggiungere la perfezione: quello che si fa è eseguire dei test, possibilmente pensati e scelti il meglio possibile da persone competenti, spesso basati su delle simulazioni per poterne eseguire in quantità maggiore e con minori risorse, applicati a una molteplicità di situazioni anch’esse scelte o generate in modo più o meno astuto per costruire un campione significativo, fino a raggiungere la convinzione (attenzione: mai la certezza) che il numero di difetti ancora presenti nel sistema software, se non pari a zero, è sufficientemente basso, perchè nei test non si riesca più a osservarne, o meglio occasionalmente se ne osservino ancora, ma di gravità e quantità ritenute tollerabili o compatibili con gli obiettivi di qualità del progetto.
Chi decide l’affidabilità della correttezza di un software
Alla fine la decisione che la qualità è soddisfacente e si può rilasciare un prodotto software non compete mai ai tecnici, ma a chi gestisce tempi, costi e obiettivi di qualità del progetto. In questo senso la decisione di lanciare un prodotto su cui non ci sia ancora una convinzione di qualità come la vorrebbero idealmente i tecnici (..o gli stessi clienti), può essere “incoraggiata” da condizioni di competizione sul mercato o da inevitabili limitazioni di budget dell’azienda.
Tradotto ..su strada, per il caso dei sistemi di guida autonoma, tutto questo significa che per quanto gigantesche possano essere le risorse finanziarie investite nell’impresa da colossi come Google o Apple e per quanto ambiziosi possano essere proclami e slogan commerciali, il giorno in cui queste o altre aziende informatiche e i loro partner produttori della “parte meccanica” dell’auto decideranno che la guida autonoma sarà pronta per il lancio commerciale, in realtà il software a cui affideremo la nostra vita sarà ancora, ragionevolmente, pieno di difetti più o meno importanti non ancora scoperti.
Molti verranno scoperti dopo il lancio, e corretti con degli aggiornamenti, come si fa per un tablet o uno smartphone. Alcuni, purtroppo, li scopriranno i passeggeri a bordo dell’auto.
Non è quindi consigliabile affidarsi a sistemi di guida autonoma disinteressandosi totalmente della guida: anzi si dovrebbe restare concentrati come se si guidasse, perché difficilmente il software darebbe il preavviso di un suo proprio errore imminente (cosa che non solo contraddirebbe i teoremi di indecidibilità sopra ricordati, ma implicherebbe anche di prevedere il futuro…), ma se anche lo potesse dare, il preavviso sarebbe di sicuro breve, e a velocità autostradali non ci sarebbe molto tempo per il guidatore per capire la situazione, intervenire ed evitare conseguenze potenzialmente molto gravi.
Del tutto appropriato quindi il messaggio con cui la Tesla Model S ricorda che il guidatore, nonostante l’inserimento della modalità Autopilot, deve sempre tenersi pronto a riprendere il controllo. Il problema è che potrebbe avere pochi decimi di secondo per farlo.
Guida assistita, il presente, guida autonoma il futuro
Auto equipaggiate con veri e propri sistemi di guida autonoma non sono ancora (per fortuna?) in vendita, ma sempre più spesso sono disponibili sistemi per guida assistita, come per evitare i tamponanenti, per adeguare la velocità a quella della colonna in cui si sta marciando, per leggere i segnali stradali e tenerne conto, o anche “solo” per evitare che il guidatore si addormenti, per parcheggiare automaticamente l’auto e così via. Il problema è che anche questi sistemi di semplice ausilio alla guida qualche volta falliscono, e se ci si affida troppo al loro controllo si rischiano brutte esperienze.
La sicurezza informatica nelle auto a guida autonoma, un aspetto da non sottovalutare
Da non trascurare anche l’aspetto della sicurezza informatica: nel 2015 ci sono già stati casi in cui hackers sono riusciti ad aprire delle Bmw equipaggiate con il software ConnectedDrive, e anche casi in cui in una dimostrazione altri hackers sono riusciti ad azionare da un PC vari sistemi di bordo (ventilatore, radio, tergicristalli, lavacristallo, immagine mostrata sul display; ma anche l’acceleratore). Falle di sicurezza come queste potrebbero essere usate per prendere il controllo di un’auto e provocare intenzionalmente un grave incidente, o prendendo di mira una specifica auto o persona o per causare il caos.
Prima che le auto a guida autonoma comincino a portarci in giro per le strade, sarà meglio che il livello di qualità e sicurezza del software venga drasticamente innalzato. In teoria è quello che si sta cercando di fare in questi anni di sperimentazione su strada. Speriamo con risultati all’altezza della criticità del problema, e senza nascondere alcun insuccesso per mere ragioni di opportunità commerciale.
Immagine Nissan Leaf: Norbert Aepli, Switzerland [CC BY 3.0], via Wikimedia Commons
[…] cosa, ma che la guida autonoma è un’altra. E soprattutto ci ricorda, una volta di più, che il software può sempre contenere degli errori e su questa realtà non si può sorvolare, soprattutto quando a quel software affidiamo la nostra […]
[…] certezza che funzioni in modo impeccabile, senza mai sbagliare, incantarsi o peggio. Vana speranza. Come abbiamo già avuto modo di ricordare, nel 1936 è stato definitivamente dimostrato (Turing) che già solo il problema di stabilire se […]