I professionisti del software sono notoriamente bravi a inventare nomi accattivanti per concetti di buon senso. “Ingegneria delle piattaforme” è un esempio recente, che combina principi consolidati con l'innovazione dei framework nativi per il cloud.
In sostanza, l'ingegneria delle piattaforme consiste nell'unificare lo sviluppo software adottando un insieme di strumenti gestito e coerente, creando così le premesse per una maggiore produttività dei team. I settori più maturi lo sanno già da decenni.
Cos'è l'ingegneria delle piattaforme?
L'ingegneria delle piattaforme è la pratica di progettare, realizzare e gestire l'infrastruttura software e i sistemi fondamentali per applicazioni e servizi. Comprende la gestione dell'infrastruttura fisica e basata sul cloud, l'automazione dei processi, l'integrazione di diversi strumenti, la garanzia della sicurezza e della conformità, il monitoraggio delle prestazioni e il mantenimento di un'elevata disponibilità e della ripristinabilità dopo un'emergenza.
Questo campo è fondamentale per garantire ambienti tecnici solidi, scalabili e sicuri, che consentano uno sviluppo e una distribuzione efficienti delle applicazioni.
L'ingegneria delle piattaforme segna l'evoluzione da iniziative isolate a un ecosistema armonizzato, migliorando l'esperienza degli sviluppatori e l'efficienza operativa.
Dal talento individuale alla competenza collettiva
Un singolo sviluppatore, o “artigiano del software”, può inizialmente superare un intero gruppo grazie al proprio insieme personalizzato di strumenti. Tuttavia, le esigenze di un'impresa software in espansione danno presto priorità all'arte del lavoro di squadra: comunicazione, collaborazione e condivisione strategica di strumenti e processi.
L'ingegneria delle piattaforme è una risposta sofisticata a queste difficoltà di crescita. Consiste nel selezionare e gestire una serie di applicazioni e strumenti che fungono da base comune, consentendo agli sviluppatori di innovare integrando e costruendo su moduli preesistenti.
Il ruolo di un team di ingegneria delle piattaforme è creare una piattaforma interna per sviluppatori (IDP) che superi i limiti dello sviluppo tradizionale delle applicazioni incorporando strutture software come Kubernetes e promuovendo un ambiente autonomo che dia autonomia agli sviluppatori.
Il principio dell'artigiano si applica anche ai test: un tester esplorativo competente e capace di utilizzare l'automazione è probabilmente il professionista di garanzia della qualità più efficace che si possa trovare. Tuttavia, la difficoltà risiede nella scalabilità. L'automazione dei test spesso esiste in silos, con singoli individui che realizzano soluzioni usando strumenti come Selenium secondo modalità personali. La partenza o la promozione di queste persone porta spesso i loro successori, che potrebbero adottare un approccio diverso all'uso degli strumenti, a rivedere completamente i sistemi esistenti.
Piattaforme di test condivise: favorire la collaborazione
Una piattaforma di test condivisa, d'altra parte, consentirebbe una collaborazione produttiva tra tester professionisti, utenti aziendali e sviluppatori. Una piattaforma di questo tipo, come Copado's Robot Testing, non solo faciliterebbe la condivisione e il riutilizzo di test, dati e risultati, ma promuoverebbe anche la trasparenza nella valutazione della qualità. Con l'infrastruttura come codice (un altro nome accattivante per qualcosa di buon senso), gli ambienti di test possono essere distribuiti in modo efficiente nel cloud, offrendo accesso su richiesta e trasparenza a tutte le parti interessate.
Nell'era dei microservizi, la funzionalità dei singoli componenti, orchestrati da piattaforme come Docker e Kubernetes, deve essere esaminata in relazione al carico cognitivo e all'impatto sugli utenti. In questo contesto entrano in gioco i principi dell'ingegneria dell'affidabilità dei siti (SRE), che garantiscono l'affidabilità dei sistemi e fanno sì che i team operativi dispongano di solidi strumenti di avviso come Puppet e di soluzioni di monitoraggio per mantenere l'osservabilità.
Le sfide dell'ingegneria delle piattaforme
Nonostante i vantaggi apparenti, l'ingegneria delle piattaforme non è priva di difficoltà. Richiede una gestione meticolosa e un'evoluzione continua. Molte aziende di prodotto competenti hanno difficoltà a sviluppare una piattaforma comune per i propri prodotti, rendendo irrealistico aspettarsi che i reparti IT possiedano intrinsecamente queste capacità. Per questo motivo, le piattaforme applicative ampie e di alto livello, come Salesforce, e le piattaforme per sviluppatori, come Git o Azure DevOps, si stanno diffondendo. Lo stesso sta accadendo con le piattaforme di test, ma un po' più lentamente.
Poiché le applicazioni vengono costruite assemblando componenti provenienti da una piattaforma condivisa, la qualità e la solidità di quest'ultima diventano fondamentali. Qualsiasi problema della piattaforma può potenzialmente influire su tutte le applicazioni costruite su di essa. Pertanto, la piattaforma e le applicazioni devono evolversi contemporaneamente, con la piattaforma sempre in anticipo per garantire la stabilità.
Il collaudo della piattaforma deve essere separato dal collaudo delle applicazioni, indipendentemente dal fatto che si stia eseguendo il collaudo in produzione o meno. Il primo tende a essere più tecnico e si concentra su collaudi unitari, API, scalabilità e prestazioni, mentre il secondo è più orientato ai processi aziendali e, per sua natura, consiste in un collaudo dall'inizio alla fine.
Garantire la qualità durante l'intero ciclo di vita della piattaforma
Con l'adozione di approcci nativi del cloud da parte delle organizzazioni, la solidità della piattaforma è fondamentale. Qualsiasi problema all'interno della piattaforma potrebbe avere implicazioni estese, motivo per cui è cruciale delineare chiaramente la differenza tra collaudo della piattaforma e collaudo delle applicazioni. Questa separazione consente un approccio mirato alla scalabilità e alle prestazioni: il primo si concentra sugli aspetti tecnici, come le API, mentre il secondo riguarda le funzionalità per l'utente finale.
Spiegazione dei software e degli strumenti per l'ingegneria delle piattaforme
Nell'ingegneria delle piattaforme, diversi strumenti software gestiscono e semplificano i processi coinvolti nella creazione, nella distribuzione e nella manutenzione dell'infrastruttura e delle applicazioni.
Prendiamo in considerazione uno strumento come Postman. Sviluppato inizialmente come progetto secondario per semplificare il flusso di lavoro delle API durante lo sviluppo e il collaudo, Postman è uno strumento eccellente per i singoli collaudatori. Tuttavia, quando viene integrato in un flusso di lavoro di integrazione continua/distribuzione continua (CI/CD), le sue capacità vengono amplificate e lo strumento assume una funzione più ampia all'interno di una piattaforma cloud. Consente di collaudare le API in modo rapido e semplice, fornendo un riscontro immediato all'utente.
Con l'espansione del team, i limiti di Postman diventano evidenti. Sebbene sia eccellente per il collaudo manuale e l'esplorazione, non è all'altezza degli ambienti collaborativi in cui sono necessari collaudi automatizzati, ripetibili e scalabili. Quando un'operazione software si espande, elementi come comunicazione, condivisione e riutilizzo diventano fondamentali, spesso mettendo in secondo piano le prestazioni del singolo individuo.
Altri strumenti fondamentali per l'ingegneria delle piattaforme includono:
- Strumenti di containerizzazione
- Docker: per creare, distribuire ed eseguire applicazioni in container.
- Kubernetes: una piattaforma di orchestrazione dei container che automatizza la distribuzione, la scalabilità e le operazioni dei container delle applicazioni su cluster di host.
- Strumenti per l'infrastruttura come codice (IaC):
- Terraform: utilizzato per creare, modificare e gestire in modo sicuro ed efficiente le versioni dell'infrastruttura.
- Ansible: uno strumento a codice aperto per la predisposizione del software, la gestione della configurazione e la distribuzione delle applicazioni.
- Puppet: un altro strumento molto diffuso per la gestione della configurazione.
- Strumenti per l'integrazione continua/la distribuzione continua (CI/CD):
- Jenkins: un server di automazione a codice aperto utilizzato per automatizzare parti dello sviluppo software.
- GitLab CI/CD: offre un modo semplificato per automatizzare le fasi del ciclo di vita dello sviluppo delle applicazioni.
- CircleCI: offre integrazione e distribuzione continue per aiutare i team di sviluppo a rilasciare rapidamente il codice.
- Strumenti di monitoraggio e osservabilità:
- Prometheus: un sistema di monitoraggio a codice aperto con un database di serie temporali.
- Grafana: per visualizzare e monitorare le metriche.
- Elasticsearch, Logstash e Kibana (insieme ELK): molto diffusi per la registrazione e la visualizzazione dei dati.
- Fornitori di servizi cloud:
- Amazon Web Services (AWS): fornisce un'ampia gamma di servizi cloud.
- Microsoft Azure: offre servizi di cloud computing.
- Google Cloud Platform (GCP): fornisce una suite di servizi di cloud computing.
- Sistemi di controllo delle versioni:
- Git: un sistema distribuito di controllo delle versioni per monitorare le modifiche al codice sorgente.
- GitHub: una piattaforma per ospitare e gestire repository Git.
- Strumenti di sicurezza e conformità:
- HashiCorp Vault: per proteggere, archiviare e controllare l'accesso a token, password, certificati, chiavi API e altri segreti.
- SonarQube: valuta la qualità del codice e identifica le vulnerabilità.
- Strumenti per mesh di servizi:
- Istio: una piattaforma aperta per connettere, gestire e proteggere i microservizi.
- Linkerd: offre osservabilità, affidabilità e sicurezza ai microservizi.
- Framework senza server:
- AWS Lambda: consente di eseguire codice senza effettuare il provisioning o gestire server.
- Serverless Framework: semplifica la creazione di applicazioni con architetture senza server.
- Gestione dei database:
- MongoDB: un popolare database NoSQL.
- PostgreSQL: un database relazionale open source avanzato.
La promessa dell'ingegneria della piattaforma
Sebbene l'ingegneria della piattaforma prometta di migliorare la produttività degli sviluppatori, concretizzare questo potenziale è più facile a dirsi che a farsi. La piattaforma deve essere gestita meticolosamente, testata per garantirne la stabilità e non dovrebbe diventare un collo di bottiglia. Questo ambizioso obiettivo richiede uno sforzo concertato da parte dei team DevOps, dall'ingegnere DevOps al team di prodotto. Un'implementazione efficace dipende da un'orchestrazione impeccabile, dall'efficienza delle pipeline e dall'impegno a favore dell'integrazione continua e della distribuzione continua. Pratiche di test efficaci e un kit di strumenti orientato all'automazione sono prerequisiti per un'ingegneria della piattaforma di successo.
Ti interessano maggiori informazioni sull'AI e sui test del software? Iscriviti alla newsletter di QA Lead per rimanere aggiornato su tutte le ultime tendenze.
