delete

Contattaci

back to resources

Antipattern nello sviluppo software: altri errori da evitare

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

Nel nostro precedente articolo "Antipattern nello sviluppo software", abbiamo già dato definito cosa sia un antipattern, ovvero:

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 ancora una volta 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”.

Altri esempi di antipattern nello sviluppo software

Il numero di antipattern identificati dalla ricerca accademica sul settore è molto ampio e alcuni sono già stati affrontati nella prima parte; siccome la trattazione non è stata ovviamente esaustiva, ci sono altri antipattern molto frequenti che vale la pena esplorare.

Hard coding

L'espressione "hard coding" indica la pratica di inserire variabili ed elementi di configurazione direttamente all’interno del codice.

Apparentemente comodo, ma ogni modifica richiede di ricompilare e rilasciare nuovamente l’applicativo.

Best practice ovviamente è inserire tali variabili in un database o in un file di configurazione.

Poltergeist class

Le "classi poltergeist" sono classi che esistono unicamente per richiamare altre classi.

Possono essere il risultato di una fase di design fatta in maniera non ottimale, di una mancanza di direzionalità di un progetto, oppure di un refactoring non completo.

La best practice è di eliminare queste classi superflue.

Spaghetti code & Ravioli code

Proprio come un piatto di spaghetti impiattato male, il "codice spaghetti" è codice scritto in maniera frammentaria e confusionaria, a causa di mancanza di linee guida, modifiche senza progettazione adeguata, frequenti modifiche dovute a patch veloci, mancata comunicazione all’interno del team di sviluppo…

Il risultato è codice di difficile comprensione, che in caso di riscrittura viene spesso inserito in un wrapper.

Rimanendo nella metafora gastronomica, la versione OOP di questo antipattern si dice "Ravioli code", ovvero un codice frammentato in troppe classi senza struttura precisa.

Lava flow

Il "flusso di lava" è un codice non completo o non correttamente testato che viene immesso in produzione prima del dovuto.

Questo codice tende poi a diventare la base per altro codice o altri servizi, causando un’instabilità di base della piattaforma che è difficile andare a correggere.

Come best practice, progettazione adeguata e refactoring frequente aiutano a evitare questo antipattern.

Dependency hell

Il termine "Dependency hell" indica un progetto che ha chiari problemi di dipendenze (dipendenze circolari, catene di dipendenze troppo lunghe, …), le quali rendono difficile risalire ai problemi quando si manifestano; in ambiente Windows si parla anche di DLHell.

L’utilizzo di package manager per risolvere le dipendenze e la scomposizione in microservizi possono alleviare questo problema.

Broken windows

Simile alla teoria sociologia della finestra rotta, questo antipattern è riferito all’incuria nella scrittura del codice, comprende ad esempio gli errori di spelling delle variabili, nomi non pertinenti di funzioni, indentazioni errate, muri di commenti e così via.

Esattamente come le finestre rotte in una casa denotano abbandono e permettono di far entrare qualsiasi tipo di intemperia, questo codice denota poca cura del progetto e genera un rapido degrado dell’applicativo.

Analysis paralysis

La situazione di "Analysis paralysis" si verifica in software la cui fase di progettazione rimane in un limbo da cui non si esce mai veramente.

Le cause sono molte, da una progettazione troppo attenta ai requisiti alla mancanza di una project leadership ben definita.

Spesso porta a definire deadline arbitrarie per i rilasci che degenerano in crunch del team di sviluppo e in ultima analisi creano disservizi agli utenti.

Chiaramente, la soluzione è adottare un approccio realistico e iterativo alla progettazione.

Walking through a minefield

Camminare attraverso un campo minato è letteralmente il risultato finale di tutto quanto è stato citato: il software sembrerà un campo minato a sviluppatori e utenti, dove un passo falso può portare a esiti molto spiacevoli.

La summa di tutti gli antipattern precedenti è che i project manager non vorranno apportare cambiamenti, gli sviluppatori avranno timore nel fare modifiche, gli utenti non saranno incentivati a utilizzare il software a causa dei frequenti problemi.

Per approfondire

Quelli presentati sono solo alcuni degli antipattern più frequenti, ma la trattazione può sicuramente essere approfondita. Per concludere questa breve carrellata suggerisco altri tre libri per ulteriori spunti sull’argomento:

  • Antipatterns: Managing Software Organizations and People, Second Edition (C. Neill, P. Laplante, J. DeFranco, 2011)
  • AntiPatterns in Project Management (W. Brown, S. McCormick, S. Thomas, 2000)
  • Software Development Patterns and Antipatterns (C. Jones, 2021)

Risultati

resources

Monitoraggio proattivo dell'infrastruttura IT con il software RMM

Monitoraggio proattivo dell'infrastruttura IT con il software RMM

RMM software

Sicurezza

Virtual tour per l'immobiliare: creare esperienze immersive con le app per visori di VR

Virtual tour per l'immobiliare: creare esperienze immersive con le app per visori di VR

esperienza immersiva

virtual reality

visori VR

mixed reality

Le opportunità dell’AI generativa per chi vende online

Le opportunità dell’AI generativa per chi vende online

Massimizzare l'efficienza: come gestire la profondità delle code con Infrared360®

Massimizzare l'efficienza: come gestire la profondità delle code con Infrared360®

sistemi di messaggistica aziendale

Infrared360

profondità code ambienti IBM MQ

ambienti IBM MQ

Gestione dell'identità e degli accessi negli ambienti MQ

Gestione dell'identità e degli accessi negli ambienti MQ

middleware

accessi ambienti MQ

ambienti MQ

gestione MQ

Ottimizzazione delle configurazioni dei canali IBM MQ

Ottimizzazione delle configurazioni dei canali IBM MQ

canali IBM MQ

Infrared360

monitoraggio IBM MQ

Integrazione efficiente di sistemi bancari e finanziari transazionali nelle fusioni e acquisizioni bancarie

Integrazione efficiente di sistemi bancari e finanziari transazionali nelle fusioni e acquisizioni bancarie

integrazioni IT

sistemi transazionali

sistemi finanziari

Monitoraggio dello stato di salute del middleware: l'importanza di un approccio proattivo

Monitoraggio dello stato di salute del middleware: l'importanza di un approccio proattivo

monitoraggio middleware

Avada Software

middleware

Migliora l’efficienza operativa dell’infrastruttura middleware in tutte le unità aziendali

Migliora l’efficienza operativa dell’infrastruttura middleware in tutte le unità aziendali

Middleware

Efficienza operativa

Introduzione a Godot, game engine free & open source

Introduzione a Godot, game engine free & open source

Game Engine

Open Source

Unreal Engine

Unity

TDA in a nutshell: how can we find multidimensional voids and explore the “black boxes” of deep learning?

TDA in a nutshell: how can we find multidimensional voids and explore the “black boxes” of deep learning?

Multidimensional Voids

Black Boxes

Deep Learning

Topological Data Analysis

AI: bias, esempi nella realtà e nella cinematografia

AI: bias, esempi nella realtà e nella cinematografia

Bias

Cinema

AMRITA (Automatic, Maintenance, Reengineering, Integrated, Technology Application)

AMRITA (Automatic, Maintenance, Reengineering, Integrated, Technology Application)

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: dalla progettazione all'usability testing per siti web accessibili

User experience design: dalla progettazione all'usability testing per siti web accessibili

Usability testing

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