Che cos'è il controllo della versione?
Il controllo delle versioni, noto anche come controllo del codice sorgente, è la pratica di monitorare e gestire le modifiche al codice del software. I sistemi di controllo delle versioni sono strumenti software che aiutano i team software a gestire le modifiche apportate al codice sorgente nel tempo. Con l'accelerazione degli ambienti di sviluppo, i sistemi di controllo delle versioni consentono ai team software di lavorare più velocemente e in modo più intelligente. Tali sistemi sono particolarmente utili per i team DevOps, poiché li aiutano a ridurre i tempi di sviluppo e ad aumentare le distribuzioni di successo.
Il software di controllo delle versioni tiene traccia di ogni modifica apportata al codice in un tipo speciale di database. Se viene commesso un errore, gli sviluppatori possono tornare indietro nel tempo e mettere a confronto le versioni precedenti del codice per correggere l'errore riducendo al minimo le interruzioni per tutti i membri del team.
Per quasi tutti i progetti software, il codice sorgente è una risorsa preziosa il cui valore deve essere protetto. Per la maggior parte dei team software, il codice sorgente è un repository che contiene preziose conoscenze e informazioni sul dominio del problema che gli sviluppatori hanno raccolto e perfezionato con estrema attenzione. Il controllo delle versioni protegge il codice sorgente sia dalla catastrofe che dai cali casuali delle prestazioni causati dagli errori umani e dalle conseguenze accidentali.
Gli sviluppatori di software che lavorano in team scrivono continuamente nuovo codice sorgente e cambiano quello esistente. Il codice di un progetto, di un'app o di un componente software è generalmente organizzato in una struttura di cartelle o ad "albero di file". Uno sviluppatore del team può lavorare a una nuova funzione mentre un altro sviluppatore corregge un bug non correlato modificando il codice e ogni sviluppatore può apportare modifiche in diverse parti dell'albero di file.
Il controllo delle versioni aiuta i team a risolvere questo tipo di problemi, tenendo traccia di ogni singola modifica apportata da ciascun collaboratore e contribuendo ad evitare che il lavoro simultaneo di più sviluppatori generi dei conflitti. Le modifiche apportate a una parte del software possono essere incompatibili con quelle apportate in contemporanea da un altro sviluppatore. Questo problema deve essere rilevato e risolto in modo ordinato senza bloccare il lavoro del resto del team. Inoltre, in tutto il processo di sviluppo software, qualsiasi modifica può introdurre nuovi bug e non ci si può fidare del nuovo software finché non viene testato. Quindi, test e sviluppo procedono di pari passo fino a quando non sarà pronta una nuova versione.
materiale correlato
Scheda di riferimento rapido di Git
Scopri la soluzione
Impara a utilizzare Git con Bitbucket Cloud
Un valido software di controllo delle versioni supporta il flusso di lavoro preferito dagli sviluppatori senza imporre uno specifico metodo di lavoro. Idealmente funziona anche su qualsiasi piattaforma, anziché stabilire quale sistema operativo o toolchain debbano utilizzare gli sviluppatori. I migliori sistemi di controllo delle versioni facilitano il flusso regolare e continuo delle modifiche al codice piuttosto che il meccanismo frustrante e maldestro del blocco dei file, che dà il via libera a uno sviluppatore a scapito dell'avanzamento del lavoro degli altri.
I team software che non utilizzano alcuna forma di controllo delle versioni spesso incontrano problemi, alcuni dei quali riguardano il non sapere quali delle modifiche apportate sono disponibili per gli utenti o la creazione di modifiche incompatibili tra due porzioni di lavoro non correlate che devono poi essere minuziosamente chiarite e rielaborate. Se sei uno sviluppatore che non ha mai usato il controllo delle versioni, è probabile che tu abbia aggiunto versioni ai file, magari con suffissi come "definitiva" o "più recente", e che abbia poi dovuto nuovamente occuparti di un'altra versione finale. Forse hai aggiunto commenti ai blocchi di codice per disabilitare determinate funzionalità senza eliminare il codice, temendo che potesse essere utilizzato in seguito. Il controllo delle versioni rappresenta una via d'uscita da questi problemi.
Il software di controllo delle versioni è una parte fondamentale delle pratiche professionali quotidiane dei team software moderni. I singoli sviluppatori di software che sono abituati a lavorare con un sistema di controllo delle versioni efficace all'interno del team in genere riconoscono l'incredibile valore che il controllo delle versioni offre anche per i progetti di piccole dimensioni gestiti in autonomia. Una volta abituatisi ai grandi vantaggi offerti dai sistemi di controllo delle versioni, molti sviluppatori non prenderebbero in considerazione la possibilità di farne a meno anche per i progetti non software.
Vantaggi dei sistemi di controllo delle versioni
L'uso del software di controllo delle versioni è una best practice per i team software e DevOps ad alte prestazioni. Il controllo delle versioni aiuta inoltre gli sviluppatori a muoversi più velocemente e consente ai team software di preservare l'efficienza e l'agilità man mano che il team si espande per includere più sviluppatori.
I sistemi di controllo delle versioni (VCS, Version Control System) hanno registrato grandi miglioramenti negli ultimi decenni e alcuni sono migliori di altri. I VCS sono talvolta noti come strumenti di gestione del codice sorgente (SCM, Source Code Management) o sistemi di controllo delle revisioni (RCS, Revision Control System). Uno degli strumenti VCS più diffuso oggi si chiama Git. Git è un VCS distribuito, una categoria nota come DVCS, su cui torneremo più avanti. Come molti dei sistemi VCS più diffusi oggi disponibili, Git è gratuito e open source. Indipendentemente dal nome o dal sistema utilizzato, i vantaggi principali offerti dal controllo delle versioni sono i seguenti.
1. Una cronologia delle modifiche completa e a lungo termine per ogni file. Stiamo parlando di tutte le modifiche apportate da più persone nel corso degli anni. Le modifiche includono la creazione e l'eliminazione di file, nonché le modifiche del loro contenuto. Ogni strumento VCS ha una propria metodologia di gestione della ridenominazione e dello spostamento dei file. Questa cronologia dovrebbe includere anche l'autore, la data e le note scritte sullo scopo di ogni modifica. Disporre della cronologia completa permette di tornare alle versioni precedenti per agevolare l'analisi delle cause principali dei bug ed è fondamentale quando occorre correggere i problemi delle versioni precedenti del software. Se il software viene gestito attivamente, quasi tutto può essere considerato come una versione "precedente" del software.
2. Creazione di branch e merge. Permettere ai membri del team di lavorare in contemporanea è un gioco da ragazzi, ma anche chi lavora in autonomia può trarre vantaggio dalla possibilità di lavorare su flussi di modifiche indipendenti. La creazione di un "branch" negli strumenti VCS consente di mantenere più flussi di lavoro indipendenti l'uno dall'altro, offrendo allo stesso tempo la possibilità di eseguire il merge del lavoro per consentire agli sviluppatori di verificare che le modifiche apportate a ciascun branch non entrino in conflitto. Molti team software adottano la pratica della creazione di branch per ogni funzione o per ogni rilascio, o per entrambi. Quando devono decidere come utilizzare le funzionalità di creazione di branch e merge in VCS, i team possono scegliere tra molti flussi di lavoro diversi.
3. Tracciabilità. Essere in grado di tracciare ogni modifica apportata al software e di collegarla ai software di gestione dei progetti e di monitoraggio dei bug come Jira, nonché poter annotare ogni modifica con un messaggio che ne descrive lo scopo e l'intento può agevolare non solo l'analisi delle cause principali e altre analisi forensi, ma anche altri processi. Avere a portata di mano la cronologia annotata del codice durante la lettura di quest'ultimo, cercare di capirne il comportamento e perché è progettato in un modo specifico, può consentire agli sviluppatori di apportare modifiche corrette e in linea con la progettazione a lungo termine prevista del sistema. Ciò può essere particolarmente importante per lavorare in modo efficace con il codice esistente ed è fondamentale per consentire agli sviluppatori di stimare il lavoro futuro con un buon livello di precisione.
Sebbene sia possibile sviluppare software senza utilizzare alcun sistema di controllo delle versioni, procedere in questo modo vuol dire esporre il progetto a un rischio enorme che nessun team di professionisti dovrebbe accettare. Quindi la domanda non è se usare un sistema di controllo delle versioni, ma quale usare.
La scelta è molto vasta, ma qui ci concentreremo su un solo software di controllo delle versioni: Git. Leggi ulteriori informazioni su altri tipi di software di controllo delle versioni.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.