Creo applicazioni web moderne e strumenti digitali personalizzati per aiutare le attività a crescere attraverso l'innovazione tecnologica. La mia passione è unire informatica ed economia per generare valore reale.
La mia passione per l'informatica è nata tra i banchi dell'Istituto Tecnico Commerciale di Maglie, dove ho scoperto il potere della programmazione e il fascino di creare soluzioni digitali. Fin da subito, ho capito che l'informatica non era solo codice, ma uno strumento straordinario per trasformare idee in realtà.
Durante gli studi superiori in Sistemi Informativi Aziendali, ho iniziato a intrecciare informatica ed economia, comprendendo come la tecnologia possa essere il motore della crescita per qualsiasi attività. Questa visione mi ha accompagnato all'Università degli Studi di Bari, dove ho conseguito la Laurea in Informatica, approfondendo le mie competenze tecniche e la mia passione per lo sviluppo software.
Oggi metto questa esperienza al servizio di imprese, professionisti e startup, creando soluzioni digitali su misura che automatizzano processi, ottimizzano risorse e aprono nuove opportunità di business. Perché la vera innovazione inizia quando la tecnologia incontra le esigenze reali delle persone.
Le Mie Competenze
Analisi Dati & Modelli Previsionali
Trasformo i dati in insights strategici con analisi approfondite e modelli predittivi per decisioni informate
Automazione Processi
Creo strumenti personalizzati che automatizzano operazioni ripetitive e liberano tempo per attività a valore aggiunto
Sistemi Custom
Sviluppo sistemi software su misura, dalle integrazioni tra piattaforme alle dashboard personalizzate
Credo fermamente che l'informatica sia lo strumento più potente per trasformare le idee in realtà e migliorare la vita delle persone.
Democratizzare la Tecnologia
La mia missione è rendere l'informatica accessibile a tutti: dalle piccole imprese locali alle startup innovative, fino ai professionisti che vogliono digitalizzare la propria attività. Ogni realtà merita di sfruttare le potenzialità del digitale.
Unire Informatica ed Economia
Non è solo questione di scrivere codice: è capire come la tecnologia possa generare valore reale. Intrecciando competenze informatiche e visione economica, aiuto le attività a crescere, ottimizzare processi e raggiungere nuovi traguardi di efficienza e redditività.
Creare Soluzioni su Misura
Ogni attività è unica, e così devono esserlo le soluzioni. Sviluppo strumenti personalizzati che rispondono alle esigenze specifiche di ciascun cliente, automatizzando processi ripetitivi e liberando tempo per ciò che conta davvero: far crescere il business.
Trasforma la Tua Attività con la Tecnologia
Che tu gestisca un negozio, uno studio professionale o un'azienda, posso aiutarti a sfruttare le potenzialità dell'informatica per lavorare meglio, più velocemente e in modo più intelligente.
Il mio percorso accademico e le tecnologie che padroneggio
Certificazioni Professionali
8 certificazioni conseguite
Nuovo
Visualizza
Reinvention With Agentic AI Learning Program
Anthropic
Dicembre 2024
Nuovo
Visualizza
Agentic AI Fluency
Anthropic
Dicembre 2024
Nuovo
Visualizza
AI Fluency for Students
Anthropic
Dicembre 2024
Nuovo
Visualizza
AI Fluency: Framework and Foundations
Anthropic
Dicembre 2024
Nuovo
Visualizza
Claude with the Anthropic API
Anthropic
Dicembre 2024
Visualizza
Master SQL
RoadMap.sh
Novembre 2024
Visualizza
Oracle Certified Foundations Associate
Oracle
Ottobre 2024
Visualizza
People Leadership Credential
Connect
Settembre 2024
Linguaggi & Tecnologie
Java
Python
JavaScript
Angular
React
TypeScript
SQL
PHP
CSS/SCSS
Node.js
Docker
Git
💼
12/2024 - Presente
Custom Software Engineering Analyst
Accenture
Bari, Puglia, Italia · Ibrida
Analisi e sviluppo di sistemi informatici attraverso l'utilizzo di Java e Quarkus in Health and Public Sector. Formazione continua su tecnologie moderne per la creazione di soluzioni software personalizzate ed efficienti e sugli agenti.
💼
06/2022 - 12/2024
Analista software e Back End Developer Associate Consultant
Links Management and Technology SpA
Esperienza nell'analisi di sistemi software as-is e flussi ETL utilizzando PowerCenter. Formazione completata su Spring Boot per lo sviluppo di applicazioni backend moderne e scalabili. Sviluppatore Backend specializzato in Spring Boot, con esperienza in progettazione di database, analisi, sviluppo e testing dei task assegnati.
💼
02/2021 - 10/2021
Programmatore software
Adesso.it (prima era WebScience srl)
Esperienza nell'analisi AS-IS e TO-BE, evoluzioni SEO ed evoluzioni website per migliorare le performance e l'engagement degli utenti.
🎓
2018 - 2025
Laurea in Informatica
Università degli Studi di Bari Aldo Moro
Bachelor's degree in Computer Science, focusing on software engineering, algorithms, and modern development practices.
📚
2013 - 2018
Diploma - Sistemi Informativi Aziendali
Istituto Tecnico Commerciale di Maglie
Technical diploma specializing in Business Information Systems, combining IT knowledge with business management.
Contattami
Hai un progetto in mente? Parliamone! Compila il form qui sotto e ti risponderò al più presto.
* Campi obbligatori. I tuoi dati saranno utilizzati solo per rispondere alla tua richiesta.
CI/CD Guardrails per Codice AI-Generated
I guardrail CI/CD rappresentano l'ultima linea di difesa automatica contro
il codice AI di bassa qualità. Quality gates, policy enforcement e rejection automatico
trasformano la pipeline da un semplice strumento di build e deploy in un sistema di
garanzia della qualità che blocca proattivamente il codice che non soddisfa gli standard
definiti dal team.
In questo articolo vedremo come implementare quality gates specifiche per codice AI nella
pipeline CI/CD, configurare SonarQube per il rifiuto automatico, integrare policy as code
con OPA e Kyverno e costruire un sistema di monitoraggio con dashboard in tempo reale.
Cosa Imparerai
Come progettare quality gates multi-livello per codice AI
Configurazione avanzata di SonarQube con soglie AI-specific
Policy as Code con Open Policy Agent (OPA) per enforcement automatico
Integrazione di security scanning nella pipeline CI/CD
Rejection automatico: quando e come bloccare il merge
Dashboard di monitoraggio e alerting per la qualità del codice AI
Architettura dei Quality Gates
Un sistema di quality gates efficace per codice AI e organizzato su più livelli, ciascuno
con responsabilità specifiche. Ogni livello agisce come un filtro progressivo: i controlli
più veloci e meno costosi vengono eseguiti per primi, i più approfonditi solo se i precedenti
sono superati.
Livelli dei Quality Gates
Livello
Fase
Controlli
Tempo
L1
Pre-commit
Linting, formatting, secret detection
<10s
L2
Pull Request
SAST, test unitari, coverage check
<5min
L3
CI Pipeline
SonarQube analysis, dependency scan, mutation test
SonarQube è il cuore del sistema di quality gates. La configurazione standard non è adeguata
per il codice AI-generated: serve un Quality Profile personalizzato con soglie
più restrittive e regole aggiuntive che catturino i pattern di errore tipici dell'AI.
Oltre alle soglie standard, è possibile creare regole personalizzate in SonarQube per
rilevare pattern specifici del codice AI. Queste regole catturano anti-pattern che le
regole built-in non coprono, come l'uso eccessivo di eccezioni generiche, la mancanza
di input validation e la duplicazione near-miss.
Policy as Code con Open Policy Agent
Open Policy Agent (OPA) permette di definire policy di qualità come codice,
versionate e testate come qualsiasi altro artefatto software. Le policy OPA possono essere
integrate nella pipeline CI/CD per enforcement automatico delle regole di qualità del codice AI.
# Policy OPA per qualità del codice AI (Rego language)
# policies/ai_code_quality.rego
package ai_code_quality
# Regola: blocca merge se la coverage e sotto la soglia
deny[msg] {
input.coverage.new_code < 75
msg := sprintf("Coverage insufficiente: %v%% (minimo 75%%)",
[input.coverage.new_code])
}
# Regola: blocca merge se ci sono vulnerabilità critiche
deny[msg] {
vuln := input.security.vulnerabilities[_]
vuln.severity == "CRITICAL"
msg := sprintf("Vulnerabilità critica: %s (CWE-%s)",
[vuln.description, vuln.cwe])
}
# Regola: blocca merge se la complessità cognitiva è troppo alta
deny[msg] {
func := input.complexity.functions[_]
func.cognitive_complexity > 15
msg := sprintf("Complessità cognitiva troppo alta in %s: %v (max 15)",
[func.name, func.cognitive_complexity])
}
# Regola: blocca merge se ci sono secrets hardcoded
deny[msg] {
secret := input.secrets[_]
msg := sprintf("Secret hardcoded trovato: %s alla riga %v",
[secret.type, secret.line])
}
# Regola: warning se la duplicazione è sopra soglia
warn[msg] {
input.duplication.new_code > 3
msg := sprintf("Duplicazione al %v%% (soglia warning: 3%%)",
[input.duplication.new_code])
}
# Decisione finale
allow {
count(deny) == 0
}
Rejection Automatico: Quando e Come Bloccare
Il rejection automatico è il meccanismo che impedisce al codice non conforme di raggiungere
il branch principale. È fondamentale definire chiaramente i criteri di blocco, comunicare
in modo chiaro il motivo del rifiuto e fornire indicazioni actionable per la risoluzione.
Criteri di Rejection Automatico per Codice AI
Criterio
Soglia
Azione
Vulnerabilità critiche (CRITICAL/HIGH)
0 tollerate
Blocco immediato del merge
Secret hardcoded
0 tollerati
Blocco immediato + alert security team
Coverage codice nuovo
<75%
Blocco fino ad aggiunta test
Complessità cognitiva
>15 per funzione
Blocco fino a refactoring
Duplicazione codice nuovo
>5%
Blocco fino a deduplicazione
Quality Gate SonarQube
FAILED
Blocco fino a risoluzione
Feedback Loop Efficace
Quando il merge viene bloccato, il developer deve ricevere un feedback chiaro, specifico e
actionable. Un messaggio generico come "Quality gate failed" non è sufficiente. Il sistema
deve indicare esattamente quali file, quali righe e quali metriche hanno causato il blocco,
con suggerimenti su come risolvere il problema.
# Sistema di feedback per quality gate failure
class QualityGateFeedback:
"""Genera feedback actionable per quality gate failures"""
def generate_pr_comment(self, gate_results):
"""Genera un commento PR con dettagli del fallimento"""
sections = []
if gate_results["coverage"]["failed"]:
sections.append(self._coverage_feedback(gate_results["coverage"]))
if gate_results["security"]["failed"]:
sections.append(self._security_feedback(gate_results["security"]))
if gate_results["complexity"]["failed"]:
sections.append(self._complexity_feedback(gate_results["complexity"]))
return {
"title": "Quality Gate: FAILED",
"summary": f"{len(sections)} problemi da risolvere prima del merge",
"sections": sections,
"auto_suggestions": self._generate_fix_suggestions(gate_results)
}
def _coverage_feedback(self, coverage_data):
return {
"title": "Coverage Insufficiente",
"current": f"{coverage_data['actual']}%",
"required": f"{coverage_data['threshold']}%",
"uncovered_files": coverage_data["uncovered_files"],
"action": "Aggiungi test per i file elencati sopra, "
"concentrandoti sui percorsi di errore e casi limite"
}
def _generate_fix_suggestions(self, results):
"""Genera suggerimenti automatici di fix"""
suggestions = []
for issue in results.get("issues", []):
if issue["type"] == "hardcoded_secret":
suggestions.append(
f"Riga {issue['line']}: sostituisci con "
f"os.getenv('{issue['suggested_env_var']}')"
)
elif issue["type"] == "high_complexity":
suggestions.append(
f"Funzione {issue['function']}: "
f"decomponila in funzioni più piccole"
)
return suggestions
Dashboard di Monitoraggio
Un dashboard in tempo reale è essenziale per monitorare la salute della quality pipeline e
identificare trend problematici prima che diventino critici. Il dashboard deve mostrare
sia lo stato corrente che i trend nel tempo, permettendo ai team leader di prendere
decisioni informate sulla gestione del codice AI.
Metriche da Visualizzare nel Dashboard
Gate Pass Rate: percentuale di PR che superano il quality gate al primo tentativo
Average Fix Time: tempo medio per risolvere un quality gate failure
Top Failing Rules: le regole che causano più fallimenti (identifica training needs)
AI vs Human Code Ratio: percentuale di codice AI sul totale per sprint
Defect Escape Rate: bug in produzione che hanno superato i quality gates
Pipeline Execution Time: durata della pipeline per ottimizzare i feedback loops
Threshold Tuning e Calibrazione
Le soglie dei quality gates non sono statiche. Devono essere calibrate nel tempo in base ai
dati reali del team e del progetto. Soglie troppo restrittive rallentano lo sviluppo e
frustrano i developer. Soglie troppo permissive lasciano passare codice di bassa qualità.
L'approccio consigliato è iniziare con soglie moderate e stringerle progressivamente.
Conclusioni
I guardrail CI/CD sono il pilastro dell'automazione della qualità per codice AI-generated.
Quality gates multi-livello, SonarQube configurato con soglie specifiche, policy as code
con OPA e rejection automatico con feedback actionable formano un sistema robusto che
protegge il codebase senza rallentare eccessivamente lo sviluppo.
Nel prossimo articolo approfondiremo la complexity assessment: metriche
di carico cognitivo, Halstead metrics, architecture fitness functions e come valutare se
il codice AI sta aumentando o riducendo la complessità complessiva del sistema.
L'automazione non sostituisce il giudizio umano, ma lo amplifica. Un sistema di guardrail
ben progettato libera i developer dal lavoro di verifica ripetitivo, permettendo loro di
concentrarsi sulla qualità semantica e architetturale.