Code smell

Nell'ingegneria del software, e in particolare nel contesto dello sviluppo agile e dell'extreme programming, 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…

Nell'ingegneria del software, e in particolare nel contesto dello sviluppo agile e dell'extreme programming, 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. 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. Il code smell spesso è correlato alla presenza di debito tecnico e la sua individuazione è 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, abbassandone la complessità senza modificarne le funzionalità.

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. 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 (viola il principio don't repeat yourself).

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é).

Nomi oscuri: nomi e identificatori (di variabili, attributi, classi, ...) che non chiariscono il significato inteso dell'entità corrispondente.

Nomi incoerenti: insiemi di nomi e identificatori incoerenti fra loro (per esempio, uso non coerente di maiuscole e minuscole).

Dead code ("codice morto"): porzioni di codice che non sono usate (e non vengono cancellate), contribuendo al costo di manutenzione del codice senza produrre alcun beneficio.

Generalità speculativa: codice scritto in una forma più generale del necessario per poter essere eventualmente applicato in futuro in contesti più ampi. L'extreme programming ha una specifica regola contro questa pratica, "You Aren't Gonna Need It" ("non ne avrai bisogno"): "implementa sempre le cose quando ne hai effettivamente bisogno, mai quando prevedi di averne bisogno".

Servizi correlati

Altre voci

L

Lifetime value

Il Customer Lifetime Value (CLV) è una misura del valore totale che un cliente genererà per un'azienda nel corso del suo rapporto con essa. Si calcola stimando il fatturato medio che un cliente genererà in un determinato periodo, ad esempio un anno o una vita intera, e sottraendo i costi medi…

Leggi la voce →
Pair programmingP

Pair programming

La programmazione in coppia, meglio nota come pair programming, è una metodologia di sviluppo del software di tipologia agile nella quale due programmatori lavorano insieme sulla stessa postazione di lavoro. I due solitamente hanno due ruoli distinti che possono scambiarsi: uno, detto…

Leggi la voce →
P

Platform as a service

Platform as a service (PaaS) è una tipologia di architettura a servizi che consiste nel servizio di messa a disposizione di piattaforme di elaborazione (Computing platform) e di solution stack. Gli elementi del PaaS permettono di sviluppare, sottoporre a test, implementare e gestire le…

Leggi la voce →
M

Manufacturing resource planning

Il manufacturing resource planning o pianificazione delle risorse di produzione è una tecnica di pianificazione delle risorse aziendali, nata negli anni ottanta in seguito all'implementazione dei sistemi di material requirements planning (MRP 1). L'acronimo per indicare questa tecnica è MRP 2,…

Leggi la voce →
S

SAP CRM

SAP CRM è un'applicazione di customer relationship management (Gestione della relazione col cliente) integrata prodotta da SAP per le richieste della media e grande impresa in tutti i settori industriali.

Leggi la voce →
SoftwareS

Software

Il software, in informatica ed elettronica, indica (per un sistema informatico) l'insieme delle componenti intangibili di elaborazione. Il significato è contrapposto a quello di hardware, che corrisponde alla parte materiale (strato fisico/tangibile) del detto sistema.

Leggi la voce →