Code smell

termine che indica una serie di caratteristiche che il codice sorgente può avere

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

  1. ^ a b c d Fowler et al. (1999)
  2. ^ Binstock (2011)
  3. ^ 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.