architettura software

Refactoring, reengineering, rewriting

Prendersi cura dell'architettura, nel tempo, come se fosse un giardino. "Gardening Your Architecture" è il titolo di due articoli di Frank Buschmann su IEEE Software, July/August e September/October 2011.

Analogie e differenze tra refactoring (ristrutturazioni locali, limitate, mirate), reengineering (ristrutturazioni complessive) e rewriting (rifacimento) delle applicazioni.

In particolare vengono elencate le motivazioni per il reengineering, "an activity that protects existing core investments":
"There are four main reasons to contemplate reengineering:

  • Refactoring is insufficient for achieving the required qualities.
  • Bug fixes in one place repeatedly cause bugs in other places.
  • New operational or functional requirements can't be realized appropriately within the given architecture.
  • The business case for the system changed."

Buschmann conclude con un confronto tra le tre forme di intervento:

  • "Continuously practice refactoring. It's cheap and (mostly) under the radar, and helps minimize the need for reengineering.
  • Consider reengineering when refactoring doesn't help or is inappropriate. But be aware that it's expensive and requires much ritual.
  • Consider rewriting when reengineering doesn't help. But know that it's often very risky."

Architetti software e sviluppatori

Ci sono ancora architetti software che non sviluppano? Sì, nelle organizzazioni ancora influenzate dall'approccio a cascata. Ma il fenomeno è in calo, afferma Philippe Krutchen in IEEE Software, May/June 2011, Walking across the Seam.

"In our industry, I see fewer software architects throwing their designs over the wall to the hordes of programmers. In many organizations, these entities— architects and programmers—are roles, not individuals, and we've known for a long time that the best architects are also implementers; and vice versa, the best programmers understand the function of architecture and respect it.

The architect-programmer dichotomy might still exist, mostly in large organizations, as a sort of remnant of the waterfall approach, where the organization tended to match the phases. But today, the most successful software development organizations are staffed by people with a broad range of competencies, able to embrace multiple roles. We hear calls for more T-shaped individuals and less hyperspecialists."

Documentazione architetturale: un esempio

Un esempio di documentazione UML di architetture software, conforme alle indicazioni del libro "Documenting Software Architectures. Views and Beyond" è stato pubblicato da Paulo Merson e Darpan Saini.

L'esempio è disponibile sul sito del Software Engineering Institute.

Anche interessante un'intervista a Paulo Merson su InfoQ.

I flag

I flag e il design del software: come evitarli o, quando non è possibile evitarli, come gestirli, in un articolo di Martin Fowler.

Saturn 2011

Saturn (SEI Architecture Technology User Network) è una conferenza annuale sulle architetture software organizzata dal Software Engineering Institute.

Saturn 2011 si è tenuta a Burlingame (California) dal 17 al 21 maggio. Sul sito della conferenza sono disponibili gli abstract e le slide di diverse presentazioni.

Documentare le architetture software

Uno dei testi fondamentali sulle architetture software è “Documenting Software Architectures. Views and Beyond”, lavoro collettivo di una serie di esperti del Software Engineering Institute (SEI).
La seconda edizione (2010) del testo lo ha ulteriormente migliorato, grazie a due innovazioni significative.

In primo luogo è stata recepita la lezione degli approcci agili, e non viene dato per scontato un alto livello di formalizzazione nella documentazione dei sistemi. Per gli esperti del SEI è essenziale chiarire quali sono le effettive esigenze di comunicazione, a partire dall'individuazione degli stakeholder interessati all'architettura del software e dall'esame delle loro esigenze: quanto e cosa documentare dipende dal contesto.

L'altra innovazione significativa riguarda l'uso dello Unified Modeling Language (UML). Mentre nella prima edizione del libro gli autori mettevano in luce le lacune dello standard (allora in versione 1.4), ora considerano le versioni 2.x di UML un fondamento solido per le esigenze di documentazione delle architetture software.

Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Paulo Merson, Robert Nord, Judith Stafford: Documenting Software Architectures. Views and Beyond (2nd Edition) – Addison Wesley 2010

Dagli obiettivi di business alle architetture software (passando per i requisiti)

Un recente Technical Report del Software Engineering Institute tratta il tema della frequente mancanza delle informazioni necessarie per definire le architetture software.

"C'è un disallineamento profondo e sostanziale tra le informazioni contenute nelle specifiche dei requisiti e quelle di cui gli architetti hanno bisogno. Il disallineamento si evidenzia in due aspetti:

1. La maggioranza dei contenuti di una specifica dei requisiti non determina né contribuisce a definire l'architettura. Le architetture sono soprattutto determinate dai requisiti non funzionali; eppure la parte più consistente delle normali specifiche dei requisiti si focalizza sulle funzionalità del sistema, che hanno un impatto limitato sulla scelta delle architetture. Peggio ancora, molte specifiche specificano poco e male i requisiti non funzionali; molte li ignorano completamente.

2. Parecchie informazioni che sarebbero utili ad un architetto software non si trovano neppure nelle migliori specifiche dei requisiti. Sono informazioni che derivano dagli obiettivi di business dell'organizzazione in cui origina l'esigenza di sviluppo, come ad esempio impiegare le risorse in modo produttivo, ammortizzare gli investimenti fatti in strumenti e tecnologie, rispettare le indicazioni provenienti dalla gestione delle risorse umane, migliorare il posizionamento di mercato dell'organizzazione rispetto alla concorrenza, ed altri aspetti analoghi."

L'individuazione degli obiettivi di business da cui partire deve avvenire con il coinvolgimento degli stakeholder, attraverso interviste o workshop. Il report propone un modo innovativo di definire gli obiettivi di business, basato sull'analisi di alcuni elementi di base:

  • il soggetto che ha interesse al raggiungimento dell'obiettivo (es. uno sponsor)
  • l'oggetto toccato dall'obiettivo (es. il cliente di cui si desidera migliorare la soddisfazione)
  • il contesto in cui l'obiettivo va interpretato (es. di mercato, o tecnologico, o sociale)
  • le unità di misura utili per valutare se l'obiettivo è stato raggiunto
  • il grado di volatilità dell'obiettivo
  • il valore dell'obiettivo

Il passo successivo consiste nella derivazione dagli obiettivi di business dei requisiti non funzionali (o "requisiti sugli attributi di qualità", come vengono chiamati nel report), partendo dal presupposto che ogni requisito non funzionale deve trovare la propria ragion d'essere in un obiettivo significativo a livello di business.

Ciò consente, tra l'altro, di analizzare in modo critico eventuali vincoli e requisiti non funzionali precedentemente espressi, per verificarne il fondamento in termini di obiettivi di alto livello.

Il report, "Relating Business Goals to Architecturally Significant Requirements for Software Systems", a cura di Paul Clements e Len Bass, è scaricabile dal sito del SEI.

Architettura e agile

Un numero di IEEE Software, March/April 2010, con articoli incentrati sul rapporto tra "agilità" e architettura.

Rilevante un testo di Roland Faber, "Architect as Service Providers", secondo cui gli architetti software devono assumere la responsabilità di soddisfare i requisiti non funzionali, mentre ai progettisti / sviluppatori compete quella di soddisfare i requisiti funzionali.

Testing SOA

Il Software Engineering Institute (SEI) ha pubblicato un report sul testing in architetture Service Oriented (SOA).

Il report comprende 65 raccomandazioni per affrontare i problemi specifici delle architetture SOA.

Contesto, requisiti, architettura

Tra i rischi che impattano sulle architetture software due sono particolarmente rilevanti:
  • la definizione dei confini del sistema (cioè del contesto, delle relazioni del sistema con altri sistemi esterni)
  • la vaghezza o la mancata definizione dei requisiti non funzionali
Learning from Failure, Part 1: Scoping and Requirements Woes , di Frank Buschmann, su IEEE Software nov/dec 2009.

Pages

Subscribe to RSS - architettura software