Le aziende investono per eliminare gli errori di programmazione
di Wade Roush
Gran parte del software attuale è prodotto e aggiornato in modo frettoloso. I programmatori introducono nuove e disinvolte caratteristiche in codici improvvisati che inseriscono nei computer per vedere come gira il programma e nel frattempo correggono i «bachi» più evidenti, uno per uno, fino a che il programma funziona abbastanza bene da poter essere distribuito.
Ovviamente molti errori superano questo tipo di esame e quelli che rimangono possono creare maggiore o minor fastidio del recente «blocco» dell’attività su Internet, provocato dal lavoro di un «verme» autoreplicante chiamato Slammer che ha sfruttato un errore di programmazione nel software del Server SQL di Microsoft.
La filosofia dei progetti per prova ed errori è al centro di serie polemiche. Sun Microsystems, Microsoft e IBM stanno cercando tutte e tre di trovare nuove strade per rivoluzionare le pratiche di progettazione del software. Anche se le loro strategie divergono, tutti i tentativi fanno perno sul risparmio di tempo, sulla riduzione dei costi di sviluppo, sulla diminuzione del carico di lavoro per i programmatori relativo alla correzione degli errori dei programmi e, l’aspetto più importante per i consumatori e gli utenti aziendali, sulla produzione di software perfettamente funzionante già al momento della prima distribuzione.
«La nostra sfida è perfezionare a tal punto il software da trovare naturale che esso funzioni invece di aspettarsi una sua debacle», spiega Jim Larus, responsabile di un progetto per il software di qualità a Microsoft Research, a Redmond, nello Stato di Washington.
Uno dei più radicali tentativi di ottimizzazione del software è in corso ai Sun Microsystems Laboratories, a Santa Clara, in California. Nominato in codice Jackpot, il progetto vuole riorganizzare gli strumenti di scrittura del software che sono stati creati da Sun e da molte altre aziende di software negli ultimi 20 anni. Molti di questi programmi da desktop includono un editor per scrivere e manipolare il codice del computer; un debugger per la ricerca dei più comuni errori di programmazione; un compilatore per trasformare il codice computerizzato del programmatore negli uno e zero che consentono alle macchine di funzionare. Il problema è che, se anche questi strumenti sono perfetti per trovare errori, come la punteggiatura inesatta, essi non riescono a individuare problemi strutturali più grandi che rendono il codice inefficiente, afferma Michael Van De Vanter, che dirige il gruppo Jackpot ai Sun Laboratories.
L’attuale software commerciale è così complesso e poco maneggevole che i suoi stessi programmatori hanno bisogno d’aiuto per comprenderlo e correggerlo. Non sarebbe meglio cambiare strada, invece di produrre più software?
Qual è la soluzione? Un software che si prende cura di un altro software. Il gruppo di Van De Vanter sta realizzando un «motore d’analisi» che legge il codice del programmatore e costruisce un modello interno astratto del software. Il gruppo sostiene che tali modelli garantiranno ai programmatori un concreto feedback in tempo reale nel loro lavoro.
Per esempio, il gruppo Jackpot vuole fornire ai programmatori un tipo di metro che misuri continuamente la complessità del programma, un passo avanti rispetto ai sistemi primitivi di misurazione – come il numero di linee di un programma – che caratterizzano gli attuali strumenti di sviluppo. Il motore d’analisi dovrebbe valutare se la complessità è fuori controllo – creando numerosi nascondigli per i bachi – e dovrebbe dare ai programmatori «un avvertimento tempestivo», dice Van De Vanter.
Aiutare i programmatori a visualizzare il loro codice è un altro modo per fronteggiare la complessità, agli afferma. è semplice per chi scrive software inserire istruzioni del tipo «se x, allora y, infine z» insieme ad altre frasi simili, all’infinito. Ma «esiste una lunga serie di studi psicologici che mostrano che, se sono annidate troppo in profondità, le persone non riescono a seguirle», continua Van De Vanter. Gli strumenti visivi che il suo gruppo sta sviluppando dovrebbero consentire al motore d’analisi di trasformare le strutture annidate in tabelle, mappe e testi evidenziati di facile comprensione.
Inoltre i ricercatori di Jackpot stanno progettando un debugger che non si limiti a trovare gli errori nella sintassi della programmazione – un punto e virgola mancante in una linea del codice Java, per esempio – ma identifichi anche i casi generali di buona o cattiva programmazione. «Le persone tendono a scrivere il codice in modi prevedibili: l’analogia nel linguaggio naturale è con l’idioma», spiega Van De Vanter. «Noi vogliamo qualcosa che controlli i cattivi idiomi». La fase di implementazione allargata di Jackpot a Sun è «lontana diversi anni», egli dice, ma i ricercatori prevedono di sperimentarlo subito con i programmatori di Sun.
Mentre Sun ha appena iniziato a esplorare strumenti avanzati di sviluppo del software, i programmatori di Microsoft già ne fanno uso. Per trovare i bachi nel suo sistema operativo Windows 2000, Microsoft ha pagato oltre 60 milioni di dollari nel 1999 per acquistare Intrinsa, l’azienda produttrice di uno strumento per la ricerca di bachi chiamato Prefix. Il programma, che setaccia estese aree del codice alla ricerca di schemi che combaciano con una lista definita di comuni errori semantici, ha aiutato a scovare migliaia di errori in Windows e in altri prodotti Microsoft. Ma Prefix è lento e prevede un uso intensivo del processore, con un tempo di giorni interi per analizzare tutto Windows. Inoltre, dato che i bachi sulla sua lista nera sono relativi ai circuiti logici hardware, il programma deve essere riscritto prima di poter trovare nuovi tipi di errore, sostiene Larus di Microsoft.
Per risolvere questi problemi, Microsoft sta sviluppando una nuova versione flessibile del programma. Come il motore d’analisi di Sun, la tecnologia di Microsoft gira sui desktop dei programmatori e trasforma il codice in strutture astratte che possono essere utilizzate per i punti caldi. Ma il programma consente anche alle migliaia di programmatori di Microsoft di crearsi i loro programmi accessori per la ricerca di errori specifici nel tipo di software in via di scrittura. Anche se Microsoft sta ancora mettendo a punto il suo programma, l’azienda ha già preso in considerazione l’idea di condividere lo strumento con le aziende che producono programmi per Windows.
Un passo avanti rispetto a queste soluzioni è uno strumento sperimentale per la ricerca di bachi chiamato Slam, che è progettato per scovare ogni minima deviazione dalle regole generali di programmazione. Per esempio, quando i programmatori mettono «blocchi» sui dati per prevenire interferenze con determinate sezioni del loro codice che stanno usando i dati, essi devono essere sicuri di rimuovere i blocchi prima che subentrino altre sezione del codice. Slam può esplorare ogni via immaginabile nell’esecuzione del programma per essere certi che ciò avvenga. Slam è «completo», afferma Laurus. «Se non trova questo tipo d’errore, si può essere sicuri che non ce ne sono altri».
Non tutte le proposte si affidano alla tecnologia. Alcune si limitano semplicemente a mettere le persone insieme per risolvere i problemi. Due anni fa IBM ha contribuito con 40 milioni di dollari a lanciare Eclipse, una rete senza scopo di lucro di scrittori di software a codice sorgente aperto che stanno cooperando per dar vita a un ambiente di sviluppo altamente integrato con strumenti automatici per la creazione di software che giri su qualsiasi sistema operativo.
L’essenza del progetto, dice Skip McGaughey, presidente del consiglio dei direttori di Eclipse, è il suo democratico sistema di progetto di codice a sorgente aperto. «è opinione diffusa», egli afferma, «che, quando la fase progettuale è portata avanti con la collaborazione di molte persone, le probabilità di realizzare tutto al meglio sono considerevolmente più alte».
Non c’è modo di sapere se un approccio allargato alla fase di progettazione o le sofisticate soluzioni per la ricerca degli errori ora allo studio delle aziende di software avrebbero potuto aiutare i programmatori a chiudere quel varco che è stato sfruttato dal verme Slammer. Ma la crescita sempre più sostenuta della tecnologia di analisi del codice dovrebbe garantire la diffusione di software più affidabile per tutti. Conclude Laurus di Microsoft: «Credo che il solo modo di avere un software più accettabile sia quello di impiegare strumenti più avanzati per controllarlo».