Ho giocato con la seguente idea: comunemente quando diverse serie di versioni (1.0.x, 1.1.x, codice di sviluppo) di un prodotto sono mantenute in parallelo, si utilizzano diversi rami all'interno di un sistema di controllo della versione per svilupparli. In teoria, però, si potrebbero usare macro di funzionalità (scritte da un punto di vista C / C ++, ma l'idea dovrebbe essere portabile) per abilitare o disabilitare particolari funzionalità basate sulla versione che si sta costruendo. In C / C ++ questo probabilmente significherebbe racchiudere il codice per le nuove funzionalità in #ifdef FEATURE_X
e abilitarle o disabilitarle sulla riga di comando di build o avere un file di intestazione principale contenente un codice come
#if version > 101
# define FEATURE_X
# define FEATURE_Y
#endif
Le funzionalità di back-porting, se necessario, potrebbero essere eseguite riorganizzando questo file.
L'idea alla base di questo è che normalmente si vorranno ripristinare e correggere correzioni che non fanno parte di nuove funzionalità significative per le versioni precedenti a meno che non si abbia una ragione specifica per non farlo. Tuttavia, questi back-ports sono spesso eseguiti in modo piuttosto casuale, con conseguenti sottili differenze non intenzionali tra versioni o correzioni dimenticate in alcune versioni. L'approccio macro delle funzioni inverte le cose, effettuando il back-porting delle sezioni di codice di default e di marcatura esplicita che non sono per il back-porting. Anche se non sarebbe un proiettile d'argento in alcun modo, potrebbe migliorare il livello di stabilità che si otterrebbe con una determinata quantità di test. Mi aspetto anche che migliori la struttura del codice forzando la separazione più pulita di diverse funzionalità.
Quindi la domanda: qualcuno conosce i dati del mondo reale su questo o simili approcci?