Code smell
Nell'ingegneria del software, e in particolare nel contesto dello sviluppo agile e dell'extreme programming,[1][2] l'espressione code smell (letteralmente "puzza del codice") viene usata per indicare una serie di caratteristiche che il codice sorgente può avere e che sono generalmente riconosciute come probabili indicazioni di un difetto di programmazione.[1] I code smell non sono (e non rivelano) "bug", cioè veri e propri errori, bensì debolezze di progettazione che riducono la qualità del software, a prescindere dall'effettiva correttezza del suo funzionamento. L'individuazione di code smell è un comune metodo euristico usato dai programmatori come guida per l'attività di refactoring (ovvero l'esecuzione di azioni di ristrutturazione del codice volte a migliorarne la struttura senza modificarne le funzionalità).[1]
Nella letteratura sul refactoring esistono numerosi elenchi di code smell; il più noto e influente è quello proposto da Martin Fowler nel suo celebre libro sul refactoring.[1] Sia nell'elenco di Fowler che in altri, i code smell non sono mai definiti in termini assoluti, e la loro identificazione comprende sempre un elemento di giudizio soggettivo da parte del programmatore.
Esempi di code smell
- Codice duplicato, uguale o pressoché uguale, in diverse sezioni di codice.
- Metodo troppo lungo.
- Classe troppo grande.
- Lista di parametri troppo lunga (per metodi o funzioni).
- Feature envy o data envy ("invidia dei dati"): una classe che usa massicciamente i servizi o i dati di un'altra.
- Costanti magiche: valori letterali (numeri, stringhe) che appaiono direttamente ("cablati") nel codice.
- Espressioni complesse di basso livello (per esempio aritmetiche, di manipolazione di stringhe, ...).
- What comments ("commenti cosa"): commenti che spiegano cosa fa una certa porzione di codice (sintomo che il codice non è sufficientemente chiaro di per sé).[3]
Note
- ^ a b c d Fowler et al. (1999)
- ^ Binstock (2011)
- ^ Code comments: Good or Bad?, presso [tobeaile.com
Voci correlate
Bibliografia
- Andrew Binstock (2011), In Praise of Small Code, «Information Week», 27 Giugno 2011.
- Martin Fowler et al. (1999), Refactoring: Improving the Design of Existing Code, Addison-Wesley. ISBN 0-201-48567-2.