SENSOR - SENsible SOftware Refactoring
People
External participants
Ubayashi Naoyasu
(Third-party beneficiary)
Abstract
I sistemi software moderni sono tra i costrutti più complessi sviluppati dall'uomo. Essi possono richiedere la progettazione e lo sviluppo di milioni di componenti che interagiscono tra di loro al fine di fornire le funzionalità attese (es. gestire le transazioni monetarie di una banca). Tali componenti sono sviluppati tramite linguaggi di programmazione che rappresentano un'interfaccia tra il programmatore, ovvero colui che crea il software, e la macchina (computer), che esegue le istruzioni contenute nel software. L'insieme di tali istruzioni prende il nome di codice sorgente. Una volta sviluppato ed entrato in esercizio, un sistema software è soggetto a continue modifiche volte ad adattarlo ai cambiamenti del contesto applicativo in cui è utilizzato (es. l'entrata in vigore di nuove leggi sulle transazioni monetarie estere). Tale fase del ciclo di vita del software è nota come manutenzione, e rappresenta oltre il 90% dei costi sostenuti per i sistemi software. Studi empirici hanno dimostrato che un'alta qualità del codice sorgente può contribuire a ridurre i costi di manutenzione. Il miglioramento della qualità del codice può essere ottenuto tramite operazioni di refactoring, ovvero trasformazioni del codice che non modificano il comportamento del sistema (le funzionalità che esso offre), ma ne migliora la manutenibilità. Tuttavia, gli approcci di refactoring esistenti in letteratura possono suggerire allo sviluppatore come migliorare la manutenibilità del codice, ma ignorano altre caratteristiche del software che potrebbero essere impattate, anche in modo negativo, dalle operazioni di refactoring. Per esempio, nel contesto di un'applicazione per dispositivi mobili, un aspetto importante da considerare è il consumo energetico dell'applicazione, a causa della limitata autonomia fornita dalla batteria. Il progetto SENSOR mira a sviluppare una nuova generazione di tool automatici di refactoring che siano in grado non solo di migliorare la manutenibilità del codice, ma di considerare allo stesso tempo l'impatto dei refactoring su altri aspetti di qualità, come il consumo energetico, le performance, o la sicurezza garantita dal codice.