delete

Contattaci

back to resources

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Antipattern
Software Development
data
25/7/2023
data progetto
autore
Luca Zuccolo
cliente
partnership
url
No items found.

Nel campo del dibattito accademico sullo sviluppo e la progettazione del software, quello degli antipattern è sicuramente uno dei campi che attualmente vanta le più vivaci discussioni e anche le applicazioni più concrete. In questo articolo, vedremo quali sono gli antipattern più comuni e come riconoscerli (ed evitarli) nell'ambito dello sviluppo e progettazione di software

Cos'è un anti-pattern

Ma cosa intendiamo come "antipattern"?

Utilizzando il metodo socratico, potremmo innanzitutto chiederci che cosa è un pattern.

Utilizzando la definizione data dalla Treccani potremmo rispondere:

“un sistema consolidato di convinzioni, comportamenti, valori”

in definitiva una serie di regole che ci siamo dati e che riteniamo vantaggiose per svolgere un determinato compito.

Per opposizione, quindi, un anti-pattern è una “regola” di progettazione o scrittura del codice che riteniamo vantaggiosa, ma che all’atto pratico genera frequenti problemi applicativi, peggiora l’usabilità del software e ne rende il ciclo di vita di difficile gestione.

Citando il ricercatore inglese Martin Fowler:

“Chiunque può scrivere codice che un computer può comprendere, un buon programmatore scrive codice che un essere umano può comprendere"

La ricerca sugli antipattern

La ricerca sugli antipattern si è sviluppata a partire dagli anni ’90, quando il software ha iniziato a diventare uno strumento indispensabile nella vita di tutti i giorni, le codebase hanno iniziato a ingrandirsi e il numero di persone che collaborano su di esse ha iniziato a diventare importante e il personale suddiviso in sedi diverse anche geograficamente.

A partire da questo momento storico, si è reso necessario identificare le “worst practices” che avvengono normalmente nella fase di sviluppo di un applicativo e codificare una serie di best practices per rendere il codice prodotto elegante, fruibile da tutti gli sviluppatori e robusto.

Esempi di antipattern

Gli antipattern individuati sono un gran numero e spaziano su tutto lo spettro del management e dell’ingegnerizzazione del software: si va dagli antipattern sullo stile di management del progetto, sulla produzione del software, sulla gestione del personale, e ovviamente sullo sviluppo del codice, parte sulla quale forniremo alcuni esempi

Antipattern nello sviluppo software

Magic Number/Strings

L'antipattern "Magic Number" (o "Magic Strings") identifica la pratica di inserire numeri o stringhe nel codice senza una rappresentazione mnemonica o senza essere identificato correttamente.

Ad esempio, la riga x = y / 0.9144 ci risulterebbe piuttosto incomprensibile se non commentata, mentre invece dichiarare una costante CNST_YARDS = 0.9144 e scrivere x = y / CNST_YARDS ci aiuterebbe a capire che sta avvenendo una conversione dal sistema metrico a quello imperiale.

Copypaste programming

Il "Copypaste programming" fa riferimento alla pratica di copiare più volte codice con poche o addirittura nessuna modifica all’interno del programma.

All'opposto, la best practice è quella di ispirarsi al principio OOO (Once and Only Once) e creare una funzione per ogni metodo che è necessario riutilizzare.

Cargo cult programming

Cugino del precedente, l'antipattern noto come "Cargo cult programming" è la pratica di copiare codice da fonti varie (es. StackOverflow, ChatGPT…) senza comprendere realmente cosa faccia. Inevitabilmente, ogni modifica o verifica su questo codice è impossibile.

Una curiosità: il termine "Cargo cult" deriva dalle religioni aborigene cresciute nel Pacifico meridionale dopo la seconda guerra mondiale, dove alcune popolazioni locali avevano sviluppato pratiche rituali legate alla costruzione di simulacri di aerei e piste di atterraggio nella speranza di evocare come esseri divini gli aerei militari e i loro carichi arrivati durante la guerra.

Più precisamente, la metafora della "Cargo Cult Science" in riferimento alle pseudoscienze è stata popolarizzata dal fisico e divulgatore scientifico Richard Feynman nel suo commencement address al California Institute of Technology nel 1974:

“In the South Seas there is a Cargo Cult of people. During the war they saw airplanes land with lots of good materials, and they want the same thing to happen now. So they’ve arranged to make things like runways, to put fires along the sides of the runways, to make a wooden hut for a man to sit in, with two wooden pieces on his head like headphones and bars of bamboo sticking out like antennas - he’s the controller - and they wait for the airplanes to land. They’re doing everything right. The form is perfect. It looks exactly the way it looked before. But it doesn’t work. No airplanes land.”
(fonte: Caltech’s 1974 commencement address)

Input kludge

Letteralmente “accrocchio in ingresso”, l'antipattern "Input Kludge" è la pratica di non validare correttamente gli input in base a quanto presente nelle specifiche.

Specialmente nei sistemi con molti utenti, la validazione degli input è una pratica vitale, perché gli utenti troveranno sempre il modo di “rompere” gli applicativi in modi non previsti; per evitarlo, è bene sempre controllare e "sanificare" gli input del programma.

Coding by exception

La pratica di "codificare per eccezioni" è particolarmente insidiosa perché se tutto diventa un‘eccezione, nulla è un’eccezione.

Il risultato dà l’idea di un software robusto, che è sempre up and running, ma è in realtà prono a errori e malfunzionamenti spesso indecifrabili, in quanto in un mare di eccezioni risulta estremamente difficile capire quale sia quella che ha causato il problema.

Error hiding

Il termine "Error hiding" indica la pratica di non mostrare un messaggio adeguato all’utente quando avviene un errore o di non mostrarne alcuno.

Questo è tipicamente fonte di frustrazione per l’utente, che genererà contatti in assistenza in quanto non ha idea di quale sia l’operazione errata che ha compiuto, ma anche per lo sviluppatore, che non ha idea di dove iniziare a cercare il problema.

Not invented here & Reinventing the wheel

L'antipattern "Not invented here" identifica la pratica di riscrivere una soluzione esistente solo perché non fatta in-house.

Un parente stretto è "Reinventing the wheel", ovvero la pratica di riscrivere da zero una soluzione esistente e testata pensando di poter fare di meglio. Oltretutto, ottenendo invece molto spesso risultati peggiori, caso in cui si parla di "reinventing the square wheel"

God object

Il cosiddetto "God object" è un costrutto globale con troppe responsabilità e troppa visibilità all’interno del programma.

Apparentemente comodo, alla lunga diventa pervasivo, e ogni modifica si ripercuote anche in punti che dovrebbero essere non correlati, senza contare che il codice diventa interamente dipendente da un oggetto solo.

Gli effetti negativi degli antipattern

È essenziale riconoscere ed evitare gli antipattern nello sviluppo di un applicativo perché possono portare a diverse conseguenze negative sul prodotto finale e non solo, come per esempio:

  • Adozione di soluzioni inefficienti o inefficaci ai problemi
  • Aumento della complessità e dei costi di manutenzione
  • Diminuzione della leggibilità e della comprensibilità del codice
  • Diminuzione della produttività e del morale del team

Per approfondire

Per concludere la prima parte di questa trattazione, possiamo suggerire tre letture per approfondire il tema:

  • AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis (W. Brown, R. Malveau, S. McCormick, T. Mowbray, 1998)
  • Refactoring: Improving the Design of Existing Code, Second Edition (M. Fowler, K. Beck, 2018)
  • Antipatterns: Identification, Refactoring and Management (P. Laplante, C. Neill, 2005)

Risultati

resources

L'ascesa del Prompt Designer: trasformare il design nell'era dell'AI generativa

L'ascesa del Prompt Designer: trasformare il design nell'era dell'AI generativa

Prompt

Design

AI Generativa

AI Designer

Le nuove linee guida per la sicurezza delle password aziendali

Le nuove linee guida per la sicurezza delle password aziendali

Password aziendali

Linee guida Garante Privacy

Garante Privacy

GDPR

6 motivi per scegliere Flutter nel 2024

6 motivi per scegliere Flutter nel 2024

App Development

Google

React Native

AI, sistemi esperti e rappresentazione della conoscenza

AI, sistemi esperti e rappresentazione della conoscenza

Sistemi esperti

Rappresentazione della conoscenza

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

Tradurre la Lingua Italiana dei Segni - il Progetto LIS2Speech

LIS2SPEECH

Traduzione LIS

User Experience Design tra accessibilità e inclusività

User Experience Design tra accessibilità e inclusività

User Experience

Accessibilità

Inclusività

Assitech.Net entra nella galassia Orbyta Technologies

Assitech.Net entra nella galassia Orbyta Technologies

Orbyta Technologies

Orbyta Group

Acquisizione

News

Programmazione Funzionale Java

Programmazione Funzionale Java

Functional Programming

Java

Software Development

Reactive Programming: parallelizzare con Project Reactor

Reactive Programming: parallelizzare con Project Reactor

Programmazione Reattiva

Reactive Programming

Project Reactor

Piattaforme E-commerce Wholesale per il settore B2B

Piattaforme E-commerce Wholesale per il settore B2B

Wholesale

B2B

Antipattern nello sviluppo software: altri errori da evitare

Antipattern nello sviluppo software: altri errori da evitare

Software Development

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Antipattern nello sviluppo software: definizione, ambiti di applicazione ed esempi

Software Development

App tattiche di supporto alla gestione dei progetti reiterativi

App tattiche di supporto alla gestione dei progetti reiterativi

App Development

Power Platform

Low Code

DevOps

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Introduzione a Power Pages, il servizio Microsoft per siti web low-code

Microsoft

Low-code

Power Platform

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Introduzione a Jupyter e Seaborn per Data Analysis e Visualization

Jupiter

Python

Data Analysis

Data Visualization

Come utilizzare Matplotlib per la Data Visualization in Python

Come utilizzare Matplotlib per la Data Visualization in Python

Python

Data Visualization

Data Science

Data Analysis

Introduzione alla libreria Dash per Python

Introduzione alla libreria Dash per Python

Python

Data Science

Data Visualization

Data Analysis

Prime Video passa al monolite: ma allora serverless è inutile? 

Prime Video passa al monolite: ma allora serverless è inutile? 

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Tableau per la Business Intelligence: introduzione, tutorial e confronto

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Introduzione a Qlik Sense, piattaforma di Business Intelligence avanzata

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Applicazioni Cloud Native: definizione, vantaggi e tecnologie

Power Apps Tutorial – Case Study: come costruire una business app da zero

Power Apps Tutorial – Case Study: come costruire una business app da zero

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Il futuro del gaming tra F2P, GaaS, Crypto e Play to Earn

Power Apps Basics: interfacce, implementazione & vantaggi

Power Apps Basics: interfacce, implementazione & vantaggi

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Strumenti di Business Intelligence: QlikSense & Power BI a confronto

Introduzione a Serverless: non solo Lambda Function

Introduzione a Serverless: non solo Lambda Function

Metaverso: siamo pronti a cogliere l’opportunità?

Metaverso: siamo pronti a cogliere l’opportunità?

Recap Flutter Forward 2023: le 7 novità più interessanti

Recap Flutter Forward 2023: le 7 novità più interessanti

Let's Redux React to a Game

Let's Redux React to a Game

Introduzione a PowerShell

Introduzione a PowerShell

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

Pago con carta: i trend dei pagamenti digitali e il futuro delle carte di credito

NFT World: il fenomeno NFT tra metaverso, business e GameFi

NFT World: il fenomeno NFT tra metaverso, business e GameFi

Quick Escape Room

Quick Escape Room

Orbyta Invaders Ignition

Orbyta Invaders Ignition

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

Il lancio della nuova Identity di Orbyta parte dal Metaverso!

development

design

metaverse

brand identity

Database a grafo in SQL Server

Database a grafo in SQL Server

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Data Science Job Roles: i 4 ruoli più richiesti nel settore

Teoria dei giochi: Propagazione delle strategie

Teoria dei giochi: Propagazione delle strategie

The chosen one: .NET 5

The chosen one: .NET 5

Network Science e Social Network Analysis

Network Science e Social Network Analysis

Isolation levels on SSMS

Isolation levels on SSMS

Teoria dei Grafi

Teoria dei Grafi

Creare un podcast in automatico a partire da audio vocali e musica

Creare un podcast in automatico a partire da audio vocali e musica

Teoria dei Giochi

Teoria dei Giochi

Recommender systems: principali metodologie degli algoritmi di suggerimento

Recommender systems: principali metodologie degli algoritmi di suggerimento

Introduction to Quantum Computing and Qiskit

Introduction to Quantum Computing and Qiskit

System Versioned Tables

System Versioned Tables

Vim o non Vim

Vim o non Vim

I vantaggi di un Message Broker

I vantaggi di un Message Broker

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

PlayStation 5 e l'accesso ai dati: un cambio architetturale?

Protezione dei Web Services

Protezione dei Web Services

need more info?

contattaci