Su istigazione di questa persona, mi sono messo a giocare con i BTS distribuiti.
I BTS distribuiti non hanno un database centrale, copiando quindi la logica dei vari programmi di gestione delle versioni (VCS, da Version Control system) distribuiti come git, mercurial, darcs etc.
Come i VCS distribuiti si contrappongono ai VCS centralizzati per la mancanza di un repository cerntrale dove vengono memorizzare le revisioni e così via, allo stesso modo i BTS (Bug Tracking System) distribuiti non hanno un unico database in cui vengono memorizzate le richieste e i bug.
Potremmo dire che se un software tipo bugzilla o flyspray è il compagno ideale di CVS o subversion, un BTS distribuito è il compagno ideale di Git o Bazaar.
Finita questa breve premessa, vediamo di passare ad analizzare gli eventuali vantaggi e svantaggi di questi sistemi, tenendo presente che ovviamente non è un’analisi completa.
Dopo aver valutato diversi sistemi di BTS distribuiti, la mia scelta è caduta su Bugs Everywere, per due semplici ragioni:
- è scritto in python
- si integra meglio di altri con git (almeno per me)
A dire il vero, il primo lo si vede da sè, mentre il secondo nasce dall’uso. L’altro candidato era Ditz. Altri sistemi ci sono, ma non mi hanno impressionato.
Come per i VCS distribuiti il vantaggio maggiore è quello di poter fare tutto off-line. Si può quindi ad esempio aggiungere un bug, modifcarne un altro e chiuderne un terzo senza il bisogno di essere on-line. Questo è il completamento ideale per un VCS tipo git, in quanto rende indipendente lo sviluppatore dall’essere sempre on-line anche per il lato BTS.
Ovviamente ci sono anche degli svantaggi: ad esempio, sono mediamente più complessi da usare per l’utente finale, visto che di solito hanno un’interfaccia testuale e accompagnano i sorgenti (e non gli eseguibili).
Una cosa interessante è che i repository dei bug vengono generalmente trattati come dei qualsiasi file del progetto e quindi i vari elenchi possono essere gestiti in maniera naturale.
Tutti i problemi sono però superabili in un modo o in un altro. Ad esempio Ditz ha un generatore di pagine html statiche per consentire di pubblicare lo stato del progetto via web.
Come ho già detto la mia scelta è caduta su Bugs Everywere, con il quale traccio i bug di Chiamami (una semplice agenda telefonica).
Il vantaggio principale di BE è la migliore integrazione con git (il VCS che uso), anche se a scapito di una peggiore interfaccia rispetto a Ditz.
Guida veloce a Bugs Everywhere
Adesso una veloce e minuscola guida all’uso di BE per la gestione di un progetto. Lanciando BE senza parametri otteniamo l’elenco dei comandi supportati.
galactica:~/Devel/Test2> be
Bugs Everywhere - Distributed bug tracking
Supported commands
be assign Assign an individual or group to fix a bug
be close Close a bug
be comment Add a comment to a bug
be diff Compare bug reports with older tree
be help Print help for given subcommand
be list List bugs
be new Create a new bug
be open Re-open a bug
be remove Remove (delete) a bug and its comments
be set Change tree settings
be set-root Assign the root directory for bug tracking
be severity Show or change a bug's severity level
be show Show a particular bug
be status Show or change a bug's status
be target Show or change a bug's target for fixing
galactica:~/Devel/Test2>
Si nota abbastanza facilmente che sono abbastanza simili a quelli di un qualsiasi BTS tradizionale.
Un problema che ho riscontrato (ma forse sono io che sbaglio) è che mentre ovviamente non esistono elenchi di target predisposti al contrario di status e severity, non c’è un modo di avere l’elenco dei target già presenti, e questo su progetti un pò più grandi del piccolo progetto personale potrebbe essere un problema. Dopo un rapido scambio di mail con l’autore, questa funzionalità verrà inserita in una prossima versione.
Inizializzare il repository
Partendo dal presupposto di avere già un repository git, per inizializzare il repository be si usa il comando
be set-root
e se tutto va bene il sistema ritorna
galactica:~/Devel/Test2> be set-root
Using git for revision control.
Directory initialized.
galactica:~/Devel/Test2>
Si può notare che BE riconosce automaticamente il fatto che si usa git.
Una nota: il repository git deve avere nella sezione config i valori si user.name e user.email settati, altrimenti il comando fallisce.
Lavorare con i bug
Per aggiungere un nuovo issue, si usa il comando new
galactica:~/Devel/Test2> be new "Test"
Created bug with ID 90c
galactica:~/Devel/Test2>
L’elemento viene creato usando i valori di default del sistema. Creato l’elemento, è possibile modificarlo usando i vari comandi per impostare la gravità, a chi è assegnato, la deadline per la quale si deve chiudere (in termini di versione, ma dato che la versione è una stringa arbitraria, potrebbe anche essere una data) o aggiungere una descrizione più estesa del problema/richiesta.
Ad esempio, per alzare la gravità del bug appena inserito da minor, che è il default, a serious si usa il comando severity
be severity 90c serious
dove 90c è l’id dell’elemento.
Possiamo vedere i dettagli del bug con il comando show
galactica:~/Devel/Test2> be show 90c
ID : 90cc54c6-d3e3-4562-b340-9c50d8d9ca31
Short name : 90c
Severity : serious
Status : open
Assigned :
Target :
Creator : gian <gian@grys.it>
Created : Thu, 16 Apr 2009 23:01 (Thu, 16 Apr 2009 21:01:05 +0000)
Test
--------- Comment ---------
Name: 90c:1
From: gian <gian@grys.it>
Date: Thu, 16 Apr 2009 21:11:53 +0000
Aggiungere un commento
galactica:~/Devel/Test2>
.Per chiudere un bug, si usa abbastanza ovviamente il comando close
be close 90c
Se invece abbiamo già un elendo di bug e lo vogliamo visualizzare, allora ci viene in aiuto il comando list
galactica:~/Devel/Test2> be list
90c:os: Test
981:om: Test
galactica:~/Devel/Test2>
Il formato e’ questo:
- 90c indica l’id del bug
- os indica stato e severità del bug
- il resto è il sommario
Questo è tutto quello che serve per poter usare Bugs Everywhere nel lavoro di tutti i giorni.