IDEARIUM.ORG è un progetto di Leandro Agrò & Andrea Benassi. Collaborano: Matteo Penzo, Daniele Cerra, Aaron Brancotti, Teresa Colombi, GianAndrea Giacoma e di tutti gli autori.


Bugfencing: quando il bug diventa feature

November 19th, 2007 di Dario Violi
in , , , , | Letture: 1423

Pur non essendo programmatore, mi trovo sempre piu spesso (per passione o per lavoro) a scribacchiare codice, soprattutto in fase di prototipazione. Il bugfencing è una tecnica di programmazione utilizzata proprio in questo specifico momento del ciclo di vita di un software e consiste sostanzialmente nel mantenere i bug e sfruttarne la presenza al fine di ottenere nuove features.

bugfencing_pskr.jpg

L’ambiente di sviluppo ideale per il bugfencing è preferibilmente di alto livello (applicativi flash o ajax, grammatiche polygen o aiml, scripting MEL o LSL) . Pensiamo per esempio a Flash: flash è un ottimo ambiente per realizzare prototipi; inoltre la possibilità di affiancare scrittura di codice e editing WYSIWYG e l’immediata visibilità del risultato creano le condizioni ideali per la proliferazione e il mantenimento dei bug.

Iniziamo con una case study abbastanza nota: Matrix.

The first Matrix I designed was quite naturally perfect, it was a work of art, flawless, sublime. A triumph equaled only by its monumental failure. The inevitability of its doom is as apparent to me now as a consequence of the imperfection inherent in every human being, thus I redesigned it based on your history to more accurately reflect the varying grotesqueries of your nature. However, I was again frustrated by failure. I have since come to understand that the answer eluded me because it required a lesser mind, or perhaps a mind less bound by the parameters of perfection. Thus, the answer was stumbled upon by another, an intuitive program, initially created to investigate certain aspects of the human psyche.
[The Matrix Reloaded]

Con queste parole l’Architetto di Matrix spiega a Neo l’esigenza di un approccio progettuale non-logico al fine di migliorare il proprio software. Ecco cosa si evince dalle enigmatiche frasi:
1) Il fallimento delle prime Matrix dipende dal cattivo design della user experience e non da problemi di programmazione
2) La soluzione giunge da una mente meno vincolata a parametri di perfezione
3) La soluzione giunge per caso
4) L’architetto è probabilmente un designer e l’oracolo uno psicologo (cognitivo?)

Perchè una mente troppo vincolata a parametri di perfezione non è in grado di giungere alla soluzione? La risposta è semplice: un approccio eccessivamente logico difficilmente farà scoperte per caso.
lo stesso de Bono ci ricorda, tra l’altro, come il concetto stesso di ’scoperta fatta per caso’ sia errato in partenza, frutto di una cultura troppo legata all’approccio logico-deduttivo: il ‘caso’ mette in continuazione davanti ai nostri occhi la soluzione a centinaia di problemi, ma è poi compito nostro scovare le risposte e riconoscerle come tali. Al posto di Fleming, un altro ricercatore avrebbe gettato tra i rifiuti il campione di coltura batterica ‘rovinato’ senza così compiere il primo passo verso l’isolamento della penicillina. Da questo presupposto nasce il bugfencing.

Ma torniamo alla case study:
Il problema non era nel codice, ma nelle features di Matrix, che risultavano incompatibili con le aspettative del target d’utenza. L’introduzione nel Sorgente di Matrix di un’anomalia (un bug) risolve questa issue progettuale, con una coraggiosa decisione da parte del team di sviluppo che opta per una migliore user experience a discapito della stabilità del sistema.

restart the matrix


Che cos’è un bug?

A software bug is an error, flaw, mistake, failure, or fault in a computer program that prevents it from behaving as intended (e.g., producing an incorrect result). [da wikipedia]

Il concetto di bug fixing, cioè l’idea che un comportamento differente da ciò che ci si aspetta sia per definizione errato e che la sua causa vada cercata ed eradicata, ricorda il modus operandi degli inquisitori: profondamente violento e culturalmente antievoluzionista.
Il bugfencing è una sorta di eresia informatica, è la negazione di questo modus operandi, è la non eliminazione del bug unita alla sua trasformazione in feature.

Il termine letteralmente significa ’schermare con i bug’.
La scherma, nella sua più antica (non sportiva) accezione, era una forma di difesa armata, uno ’schermo’ contro il nemico; e come ogni arte marziale che si rispetti, anche la scherma tradizionale è costellata di tecniche per sfruttare la forza del nemico contro di lui. Ed ecco l’idea del bugfencing: usare la ‘forza’ del bug a proprio vantaggio.

In realtà il concetto è un pò più “raffinato” e parte dall’idea che dietro ad ogni problema si celi un’opportunità; o, ancora meglio, che non esistano problemi, ma solo opportunità. Quando si sviluppa un software il bug arriva per caso: è il risultato di un errore, come la muffa su una coltura batterica, e il bugfencer deve saperne cogliere il potenziale, deve trovarci la penicillina. Un comportamento inaspettato va accuratamente osservato, se necessario isolandolo dal contesto: forse non avrà nulla a che fare con il software che si sta sviluppando, ma si tratta comunque di una novità che, magari, potrebbe anche tornare utile in futuro o servire da spunto per altre idee.

Basti pensare al dna: il dna è un codice.
La riproduzione sessuata è difficile, pericolosa e sporca; perchè allora la natura si è impegnata così tanto a renderla estremamente piacevole? Perchè sottrarre tempo alla ricerca di cibo e mettersi maggiormente in luce agli occhi dei predatori attraverso una pratica scomoda come la riproduzione sessuata? Perché è evolutivamente vincente: aumenta il caos, aumenta le probabilità di mutazioni e quindi aumenta il potenziale evolutivo. Ciò che evolutivamente si chiama mutazione, può essere informaticamente inteso come bug. Il bugfencing sta quindi alla programmazione standard come la riproduzione sessuata sta alla mitosi. E come lo scopo della riproduzione sessuata non è quello di generare nuovo dna, ma di produrre il cambiamento, così l’obiettivo del bugfencing non è la produzione di codice, ma la realizzazione di nuove features. L’uso del bugfencing in fase di produzione sarebbe infatti estrememente rischioso, vista l’imprevedibilità legata a questa tecnica. L’aumento di instabilità di un software non va esattamente a braccetto con le logiche di mercato (almeno in teoria).

Il bugfencing è una tecnica da utilizzare quando la stabilità di un software non è richiesta, quando è essenziale che il software muti ed evolva: il bugfencing raggiunge la sua massima espressione nella prototipazione.
Tanto più il progetto è ‘giovane’, quanto più le nuove features potranno esservi integrate. Man mano che il progetto si definisce, infatti, i comportamenti anomali del software tendono ad essere ignorati o scartati, mentre all’inizio della sua esistenza, quando anche i suoi stessi obiettivi non sono ancora del tutto chiari, l’errore generato dal caso diviene fonte di ispirazione, il prototipo diventa esso stesso interlocutore di chi sviluppa il prototipo, i suoi comportamenti inaspettati che derivano dal mantenimento dei bug sono ottimi spunti per l’implementazione di nuove features.
Fare bugfencing durante la definizione di un concept è come fare brainstorming con il destino.

12 Responses to “Bugfencing: quando il bug diventa feature”

  1. Intense Minimalism • Bugfencing: l’altro lato del bug Says:

    […] E’ uscito su Idearium un articolo che aspettavo da  tempo: “Bugfencing: quando il bug diventa feature”, di Dario Violi. […]

  2. Babele Dunnit Says:

    Beh, che dire? Potrei andare avanti per ore… nel Grande Libro dei Bug non parlo ESPLICITAMENTE del Bugfencing, nel senso che non uso mai il termine, ma i concetti sono presenti in piu’ e piu’ punti… anzi, a dire il vero TUTTO IL LIBRO gira intorno a concetti simili. Ad esempio, DEVO ricordare “Change” di Watzlawick, che spiega perche’ l’approccio Zen sia cosi’ importante, e il BASE - Birra Aided Software Engineering, che ho inventato io durante un Media Party in Conchetta nel 1992 (e non aggiungo altro). Ma anche le varie tecniche marziali che usano la forza dell’avversario e gliela rivoltano contro - Ju Jitsu, certo, ma anche Jeet Kune Do dove “la miglior difesa e’ l’attacco”… tra essere beta tester Microsoft ed essere ninja c’e’ una differenza lieve, gente, non c’e’ nulla da fare…. Bellissimo articolo, col tuo permesso ne citero’ alcuni punti nella prossima iterazione del Grande Libro (http://www.babeledunnit.org/WriteBBOB.htm).

  3. Gian Says:

    Mitico Nobil Dario! :)

  4. Leandro Agro Says:

    Dario da bugfencing con le lightsaber master replica.
    300

    Dario è quello a destra.

  5. dario Says:

    @Babele Dunnit
    Sono venuto a conoscenza del Grande Libro dei Bug ad articolo praticamente finito ed ho preferito aspettare a leggerlo per non esserne influenzato.
    Ovviamente sarei onoratissimo se il mio articolo fosse citato!

  6. Zeno Says:

    1) [La riproduzione sessuata] aumenta le probabilità di mutazioni
    2) Ciò che evolutivamente si chiama mutazione, può essere informaticamente inteso come bug
    3) La produzione dei bug è inversamente proporzionale alla qualità del codice

    da che si deduce:

    3) peggio si scrive codice, melgio si sostituisce una buona scopata.

    Ecco spiegata la natura evolutiva dei nerds.

  7. Babele Dunnit Says:

    bella Zeno :) In verita’ (questa notte ci ho pensato su, a questo articolo) la potenza della riproduzione sessuata (e degli Algoritmi Genetici) e’ sfruttare pezzi di “DNA” (o sequenze di parametri… insomma, ci siamo capiti) gia’ “buoni”, reincrociandoli alla ricerca di corredi genetici ancora migliori. Cioe’, quello che in generale viene chiamato “mutazione” in qs articolo deve essere scisso e guardato con attenzione quando si usa la terminologia genetica corretta, ovvero Mutazione contro Crossover… se la Mutazione (genetica) e’ puntuale e generalmente distruttiva e in natura serve solo per togliersi da vicoli ciechi, peraltro con probabilita’ di riuscita assai basse, il Crossover - ovvero scambiare un intero codone del padre con quello della madre e viceversa - e’ come fare una sorta di “ricerca binaria” delle soluzioni migliori nell’ N-spazio delle variabili del problema.. questo e’ il motivo per cui gli Algoritmi Genetici sembrano magici: e’ una esplorazione dello spazio delle soluzioni che ha una efficienza inimmaginabile, come un super-simplesso ad N variabili contemporanee. Questo e’, per inciso, anche quello che i “creazionisti a tutti i costi” non capiscono, quando dicono “noi non possiamo essere venuti fuori per caso, ergo Dio e’ necessario”. Sarebbe cosi’ se esistessero solo le Mutazioni del DNA, e non il Crossover. Allora si che la riproduzione seguirebbe il Caso, quello vero, quello della Seconda Legge della Termodinamica, e la nostra probabilita’ di esistenza sarebbe praticamente nulla. Ma Il Crossover Genetico rende Dio - agli effetti della esistenza della Vita per come la conosciamo - non indispensabile.

    Che poi Dio ci serva - magari senza barba bianca e comunque per altre cose - e’ un altro discorso.

  8. Gian Says:

    Babele …. posso farmi una maglietta con su scritto “Io, sono amico di Aaron!”? :D

  9. dariovioli.it » Bugfencing inaugura la pagina Articoli Says:

    […] Ho scritto un articolo (il mio primo su idearium.org) per spiegare questa la tecnica un po’ bizzarra (battezzata, appunto, bugfencing), la quale consste nel creare le condizioni ideali per la proliferazione dei bug affinchè il comportamento inaspettato del software, che dalla loro presenza deriva, generi nuove funzionalità inizialmente non previste. Vi assicuro che, a livello di prototipazione software, l’approccio bugfencing si rivela molto produttivo. […]

  10. ipsilon Says:

    @Babele:
    Aaahh. Quante bestemmie sugli algoritmi genetici! Può essere affascinante parlarne (e pensarli) così ma, ahimé, non funzionano come dici. E l’efficienza di esplorazione dello spazio delle soluzioni non è proprio delle migliori…

  11. Lezione 12/12/07 « Topos Poietikos Says:

    […] “Personas e Scenari” di Dario Violi su HTML.it + un suo interessantissimo articolo su Idearium […]

  12. Digital Meadows » Blog Archive » Come modificare i permessi in Google Docs Says:

    […] Con un’idea vagamente ispirata al bugfencing, mi sono chiesto come si sarebbe comportato GDocs se avessi inserito nuovamente l’elenco delle persone autorizzate all’accesso, ma come visitatori. Ha funzionato. […]

Leave a Reply

Dario Violi

Dario Violi
Sperimentatore per indole, designer per formazione, professionalmente cerca di porsi al centro del triangolo design-sviluppo-marketing. Al momento è User Interface Prototyper in Kallideas. Quando ha del tempo libero suona la batteria, gioca di ruolo e/o cucina.
accessibilità apple architettura architettura terapeutica blogosfera california classic coding colore computer comunciazione comunicazione CSS DA design design evolutivo desktop domotica drinklink ecommerce edutaiment eGov elearning eMarketing emotional design ergonomia eventi eye tracking flash frontiers07 gaming gomma gui human vision idearium identity information architecture innovazione instructional design intelligenza collettiva intelligenza connettiva interaction design interattività emotiva interfacce iphone ipod Italia iTV ivrea IxD Jakob Nielsen Jef Raskin job KM knowledge management Limerick LO maeda mappe mentali mediateca memoria micro display Milano MIT mobile multitouch musei paperless percezione podcast privacy programmazione realtà virtuale rivoluzione informatica robot Rodney Brooks Roma scrittura SecondLife siena Singolarità singularity SL social web spaces standard survey test usability usabilità user experience UX Videogames visual design VR web web2.0 wii wireless Zurigo