Diciamo che nel tentativo di migliorare la qualità, il tuo team è d'accordo sulla seguente politica:
-
tutti i commit al ramo master (diretto o tramite richiesta pull) devono essere classificati come bugfix o modifiche alle funzionalità; mai entrambi allo stesso tempo.
-
per distinguere facilmente i due, i messaggi di commit devono iniziare con ad es.
[bug 123]
o[feature 456]
, rispettivamente -
nelle funzioni commette, tutte le modifiche al codice devono essere contrassegnate da funzionalità (utilizzando un qualche tipo di strumento per le impostazioni dell'applicazione come NFig ). L'idea è che mentre il flag funzione è disattivato, il commit non dovrebbe cambiare il comportamento dell'app in alcun modo.
EDIT: si presume che le flag con funzionalità abbiano vita breve e solo a scopo di rilascio. Martin Fowler chiama quei commutatori di rilascio .
Quindi, ad esempio, una funzione commuta in questo modo ...
function existingCode() {
// existing stuff
+ doSomethingNew(); // <--- NEW
// more exiting stuffstuff
}
... sarebbe in violazione della politica perché doSomethingNew()
introduce un cambiamento immediato nel comportamento. Feature-flagging la modifica come questa ...
function existingCode() {
// existing stuff
+ if (Config.FeatureFlags.NewFeature456)
+ {
+ doSomethingNew(); // <--- NEW
+ }
// more exiting stuffstuff
}
... sarebbe conforme alla politica: non vi è alcun cambiamento nel comportamento finché non viene abilitato il flag di funzionalità NewFeature456
(e quindi nessun rischio di rotture accidentali, perdite di funzionalità ecc.)
La mia domanda è: sarebbe ipotizzabile applicare il criterio flag di funzionalità con un test automatico ?
Il modo in cui immagino che un test come questo funzioni è, approssimativamente:
- input: git repo, commit hash, nome del flag di funzionalità
- build repo con e senza commit (flag funzione disabilitato in entrambi)
- controlla se entrambe le build si comportano allo stesso modo
L'ultima parte "comportarsi allo stesso modo" è ovviamente la parte difficile. Qui viene in mente una serie di cose, dall'esecuzione di una serie di altri test automatizzati all'analisi del codice - qualcosa come confrontare gli AST di entrambe le build (che potrebbero risultare difficili).
Potrebbe funzionare? È già stato fatto prima?