Strategie di architettura per formalizzare le procedure di sviluppo

Si applica alla seguente raccomandazione della lista di controllo per l'eccellenza operativa del Framework Azure Well-Architected:

OE:03 Formalizzare i processi nel ciclo di vita completo dello sviluppo software, dall'ideazione alla distribuzione e renderli trasparenti per il team e gli stakeholder.

Lo sviluppo di software comporta più di produrre codice. Gli sviluppatori devono comprendere chiaramente cosa creare e perché. I proprietari e i manager dei prodotti mantengono visibilità sul lavoro svolto e sul suo avanzamento. Stabilendo procedure coerenti, i team possono fornire software di qualità, individuare i rischi in anticipo e gestire le aspettative e tenere traccia dello stato di avanzamento.

Questa guida fornisce consigli su come eseguire lo sviluppo di software in modo strutturato, prevedibile e collaborativo.

Definire gli standard per la gestione del cambiamento

Nello sviluppo software, ogni unità di lavoro è un cambiamento. Anche le nuove funzionalità rappresentano uno spostamento da uno stato inesistente a uno implementato.

Quando si avvia il lavoro per una modifica richiesta, tenere presenti queste considerazioni:

  • Collaborare. I team dovrebbero collaborare anziché in isolamento. La maggior parte delle modifiche influisce su più componenti o ruoli. Coinvolgere in anticipo sviluppatori, tester, operazioni e stakeholder del prodotto per assicurarsi che i dettagli importanti non vengano persi e che tutti comprendano l'impatto sulla propria area. Lavorare insieme porta anche a stime più accurate dello sforzo perché le persone con esperienza pertinente possono contribuire alla loro prospettiva.

    Mantenere gli obiettivi della collaborazione semplice. Accettare l'ambito di una modifica, identificare le dipendenze e suddividere il lavoro in attività chiare e gestibili e documentarle in un backlog.

  • Comunicare. Standardizzare il modo in cui il team comunica le versioni, sia internamente che esternamente. Definire quali informazioni devono essere condivise con gruppi di destinatari esterni (ad esempio i clienti), il livello di dettaglio appropriato, l'onboarding o la documentazione di supporto necessari e la sequenza temporale delle comunicazioni. Ad esempio, notificare agli stakeholder due settimane prima di un rilascio e inviare un promemoria 24 ore prima della distribuzione.

  • Retrospect. Esaminare regolarmente ogni ciclo di sviluppo per identificare cosa ha funzionato, cosa non è stato fatto e cosa può essere migliorato. Mantenere queste recensioni senza colpa e incentrate sull'apprendimento.

    Usare questa opportunità per verificare se le procedure standard sono efficaci. Ad esempio, controllare se le attività dello sviluppatore sono state definite in modo chiaro, le stime temporali sono accurate e i processi funzionano come previsto.

  • Report. Standardizzare i report su come il prodotto sta cambiando. Mantenere i report incentrati sulla crescita dei prodotti anziché sulla produttività dei singoli sviluppatori. Ad esempio, è una buona idea che gli stakeholder tengano traccia di:

    • Crescita dell'adozione
    • Miglioramenti delle prestazioni
    • Tempo di integrazione
    • Frequenza degli eventi imprevisti

Scegliere gli strumenti collaudati del settore

Invece di inventare processi personalizzati, usare processi collaudati come schede Agile, Scrum e Kanban.

L'uso di approcci collaudati consente di risparmiare tempo, riduce lo sforzo e rende più semplice per i membri del team perché la maggior parte di essi dovrebbe avere già familiarità con questi strumenti. Gli strumenti standard semplificano anche l'onboarding di nuovi assunti e migliorano la collaborazione tra i team.

Compromesso: La metodologia Agile può diventare troppo rigida se è eccessivamente prescrittiva. Cercare un equilibrio tra standard ben definiti e innovazione.

Standardizzare la modalità di registrazione del lavoro di sviluppo

Standardizzare un modello per l'acquisizione di unità discrete di lavoro. Deve essere scritto dal punto di vista dell'utente e rispettare questi principi:

  • Indipendente. Per evitare sovrapposizioni di lavoro, una storia non deve dipendere da un'altra.

  • Negoziabile. Il lavoro deve essere aperto alla discussione e al perfezionamento perché il lavoro deve essere realistico dal punto di vista dello sviluppo e allineato agli obiettivi aziendali.

  • Prezioso. Il lavoro deve chiaramente trarre vantaggio dall'utente.

  • Stimabile. Il team deve essere in grado di stimare con fiducia lo sforzo in modo che sia possibile fornire la funzionalità in tempo. Preferisce piccoli elementi che possono essere completati in poche settimane o meno.

  • Testabile. È necessario un modo chiaro per verificare le funzionalità e la distribuzione della funzionalità.

Annotazioni

Tutti gli asset di sviluppo nell'ambiente di produzione devono essere ricontracciabili al codice, ai test, ai criteri di accettazione e agli elementi backlog. Il rilevamento supporta il controllo della qualità, semplifica il debug e aiuta i team a soddisfare i requisiti di conformità negli ambienti regolamentati.

Inoltre, standardizzare un modello per i criteri di accettazione in modo che il team e gli stakeholder sappiano che il lavoro è completo. Ogni unità di lavoro deve essere un criterio di accettazione che non è ambiguo e può essere verificato dai test.

Assicurarsi che tutti siano d'accordo su ciò che significa "fatto" per un ciclo di sviluppo. I requisiti devono includere codice completato, test completati, documentazione aggiornata e accessibilità risolta. Definizioni chiare impediscono l'accumulo di lavoro incompiuto.

Opportunità di intelligenza artificiale: È possibile modificare la scrittura di descrizioni di lavoro e criteri di accettazione in base ai criteri dell'organizzazione. Usare Copilot per generare bozze iniziali dai modelli. L'intelligenza artificiale può anche applicare gli standard convalidando i documenti rispetto ai modelli. Per gli scenari avanzati, usare gli agenti di intelligenza artificiale basati nei modelli standard per usare gli output dalle revisioni del codice e dalle analisi della causa radice e quindi creare automaticamente elementi di lavoro conformi per i difetti e i miglioramenti identificati.

Standardizzare le procedure di codifica

Le procedure di codifica definiscono le convenzioni e le linee guida che gli sviluppatori seguono durante la scrittura e la collaborazione al codice. Queste procedure stabiliscono in che modo il codice è strutturato, documentato e esaminato all'interno e tra i team. Consentono inoltre di velocizzare l'onboarding degli sviluppatori e ridurre i difetti causati dalle variazioni di implementazione.

  • Ambiente e strumenti di sviluppo. Standardizzare le configurazioni dell'IDE, gli strumenti di sviluppo e gli strumenti di generazione del codice approvati tra i team. Applicare l'uso di librerie, framework e standard di gestione dei pacchetti comuni per promuovere il riutilizzo, garantire la coerenza e rispettare i requisiti di sicurezza dell'organizzazione.

  • Convenzioni di codifica. Definire e documentare gli standard di codifica che riguardano convenzioni di denominazione, struttura del codice e formattazione. È consigliabile applicare gli standard nei blocchi di codice che gestiscono le eccezioni e implementano la strumentazione. Le convenzioni chiare semplificano la lettura, la comprensione e la gestione del codice e consentono ai team di lavorare in modo coerente tra funzionalità e componenti. Assicurarsi che queste linee guida siano accessibili da tutti gli sviluppatori e vengano aggiornate regolarmente man mano che la codebase si evolve. Ad esempio, è possibile usare EditorConfig in Visual Studio per applicare gli stili di codifica.

  • Archivio del codice Stabilire e applicare strategie di diramazione standardizzate, ad esempio Gitflow, GitHub Flow o sviluppo basato su trunk, in tutti i repository per garantire procedure coerenti di integrazione e rilascio del codice.

  • Revisioni tra pari Definire standard per le pull request (PR) che specifichino dimensioni accettabili delle PR, formati obbligatori per titolo e descrizione e requisiti di revisione obbligatori. Richiedere revisioni peer per ogni modifica del codice per assicurarsi che vengano seguiti gli standard. Definire un modello di collaborazione per le revisioni di pull requests che stabilisca le aspettative riguardo responsabilità, feedback e approvazioni.

  • Modelli per artefatti comuni. Le descrizioni delle PR, i messaggi di commit e gli unit test sono esempi classici di artefatti che possono essere standardizzati tramite modelli. Assicurarsi che la documentazione includa i passaggi di scopo, contesto e test.

  • Copertura dei test. Richiedere unit test per tutto il nuovo codice e modifiche significative al codice esistente. I test devono seguire modelli concordati e includere asserzioni significative per verificare la funzionalità.

Opportunità di intelligenza artificiale: Gli strumenti di intelligenza artificiale possono automatizzare attività ripetitive e manuali nei processi di codifica e revisione. GitHub Copilot può generare blocchi di codice standardizzati, unit test e descrizioni delle richieste pull, riducendo così lo sforzo impiegato per il lavoro di routine.

Strumenti come SonarQube e Copilot Labs possono identificare automaticamente le deviazioni dagli standard di codifica, la copertura dei test mancanti e gli anti-pattern comuni. Scaricare queste attività di convalida ripetitive all'AI consente ai team di concentrarsi su attività di maggiore valore. Tuttavia, la revisione umana rimane essenziale perché le procedure di sviluppo sono fondamentali per l'implementazione corretta della logica di business e della qualità complessiva del carico di lavoro.

Standardizzare le procedure di integrazione

L'integrazione si riferisce ai processi e alle convenzioni automatizzati usati per convalidare, proteggere e creare un pacchetto di codice durante lo spostamento nel ciclo di vita dello sviluppo. Include il modo in cui le modifiche al codice vengono compilate, testate, analizzate e preparate per la distribuzione come parte delle pipeline di integrazione continua.

Le procedure di integrazione standardizzate sono necessarie per convalidare il codice in base ai requisiti di qualità e sicurezza definiti e abilitare cicli di feedback più rapidi per gli sviluppatori.

  • Creare automazione e test integrati: Standardizzare le compilazioni automatizzate eseguite in ogni push del codice e applicare unit test automatizzati e di integrazione con soglie di copertura definite, ove applicabile.

  • Analisi della qualità del codice: Applicare controlli di qualità e analisi statici del codice usando strumenti approvati per garantire che il codice soddisfi gli standard di qualità definiti prima della promozione.

  • Gestione delle dipendenze: Analizzare continuamente le dipendenze per i componenti obsoleti o vulnerabili e integrare l'analisi della sicurezza, tra cui test di sicurezza delle applicazioni statiche (SAST), test di sicurezza delle applicazioni dinamiche (DAST) e rilevamento dei segreti.

  • Gestione degli artefatti: Standardizzare il controllo delle versioni dei pacchetti e degli artefatti, l'archiviazione e i criteri di conservazione per garantire la tracciabilità e la riproducibilità.

  • Monitoraggio e creazione di report: Raccogliere e monitorare le metriche di build e pipeline per monitorare la qualità, le prestazioni e la conformità.

Opportunità di intelligenza artificiale: È consigliabile usare flussi di lavoro basati su intelligenza artificiale per automatizzare attività di integrazione ripetitive, ad esempio la generazione di configurazioni della pipeline CI/CD, la creazione di scaffolding di test e il rilevamento di problemi di compilazione o test, ad esempio test mancanti o problemi di dipendenza. Anche se l'intelligenza artificiale accelera la configurazione della pipeline, mantenere la revisione umana per convalidare le decisioni critiche.

Facilitazione di Azure

Azure Boards è un servizio basato sul Web che consente ai team di pianificare, tenere traccia e discutere del lavoro nell'intero processo di sviluppo. È ideale per le procedure di sviluppo basate su Agile.

GitHub Projects è uno strumento di gestione dei progetti personalizzabile che può organizzare i progetti e integrarsi usando problemi e richieste pull in GitHub.

Elenco di controllo per l'eccellenza operativa

Fare riferimento al set completo di raccomandazioni.