Il 2016, come molti avranno notato osservando il calendario di Febbraio, è un anno bisestile (leap year in inglese).
Se per la maggior parte delle persone ciò significa semplicemente un giorno in più nel secondo mese dell’anno, per i programmatori si tratta invece di una giornata di massima allerta.
La periodica variazione del calendario puà infatti causare una serie di spiacevoli inconvenienti nelle applicazioni, da comportamenti inaspettati a bug/errori anche critici, che possono essere individuati solo con un’attenta analisi del codice.
Nell’ultimo decennio diverse compagnie hanno dovuto fronteggiare problematiche causate proprio dai leap year, ad esempio Microsoft (impossibilità di compiere qualsiasi azione in Microsoft Exchange per tutta la durate del 29 Febbraio 2008; downtime di 12 ore della piattaforma cloud computing Azure nel 2012), Sony (Playstation Network offline nel 2010), TomTom (dispositivi non in grado di individurare la posizione).
Di seguito riportiamo alcune informazioni da tenere a mente in modo da non essere impreparati alle scadenze del 2016.
- Le scadenze dell’anno bisestile sono due, 29 Febbraio e 31 Dicembre: quest’ultimo, essendo il 366imo giorno dell’anno, potrebbe non essere correttamente considerato da alcune applicazione tarate sui consueti 365 giorni.
- Per coloro che opteranno per il monitoraggio in tempo reale dei sistemi si consiglia di estendere la finestra temporale di “controllo” ad almeno 3 giorni, quindi dal 28/2 al 1/3 e dal 30/12 all’1/1/2016.
- Ricordate che le applicazioni destinate ad ambienti cloud (pubblico, privato o ibrido che sia) scandiscono lo scorrere del tempo in base al Coordinated Universal Time (UCT). La mezzanotte del 29/2 (UCT) corrisponderà ad esempio alla 1 di notte italiana.
- “Gli effetti” del leap year possono manifestarsi in applicazioni programmate con qualsiasi linguaggio ma è C/C++ ad essere colpito dalle situazioni più critiche (crash, buffer overflow con gravi rischi per la sicurezza).
Per ulteriori approfondimenti di natura tecnica sui bug di C/C++ , vi invitiamo a consultare il dettagliato post pubblicato recentemente da Microsoft.