Uno studio sull’analisi statica degli strumenti di Java attraverso l’uso di approcci di apprendimento automatico per il triage dei report

Uno studio sull'analisi statica degli strumenti Java utilizzando approcci di apprendimento automatico per il triage dei report

Questo studio offre una completa esplorazione del triage efficace delle scoperte degli strumenti di analisi statica di Java utilizzando innovative tecniche di apprendimento automatico. Trovare e dare priorità ai problemi seri indicati dalle tecniche di analisi statica diventa più difficile man mano che i progetti software diventano più complicati. Attraverso l’utilizzo di approcci di apprendimento automatico per automatizzare il processo di triage dei report, lo studio proposto cerca di affrontare questo problema. In questo lavoro, prima raccogliamo e preelaboriamo un dataset variegato di report da diversi strumenti di analisi statica di Java open-source. Il dataset include vari tipi di problemi di qualità del codice, inclusi bug, falle di sicurezza e code smells. Successivamente, al fine di rappresentare accuratamente le caratteristiche di ciascun problema, indaghiamo ed estraiamo elementi pertinenti dai report. Testiamo diversi metodi di apprendimento automatico, inclusi ma non limitati a alberi decisionali, foreste casuali (random forests), macchine a vettori di supporto (support vector machines) e reti neurali, per portare a termine il triage. Scegliamo il modello più appropriato per la categorizzazione dei report attraverso uno studio comparativo approfondito che mostra la migliore accuratezza, precisione, richiamo e punteggio F1. Inoltre, al fine di migliorare le prestazioni complessive del triage, suggeriamo una tecnica ibrida unica che incorpora i vantaggi di diversi modelli di apprendimento automatico. La strategia ibrida fa uso di tecniche di ensemble per sfruttare la saggezza combinata di molti classificatori, migliorando le capacità di previsione. Il successo del metodo di triage basato sull’apprendimento automatico è dimostrato dai nostri risultati di test, che mostrano anche una considerevole riduzione del tempo e del lavoro manuale necessari per dare priorità ai problemi. L’efficacia dell’approccio di triage consente agli ingegneri del software di risolvere rapidamente le preoccupazioni urgenti sulla qualità del loro codice, migliorando l’affidabilità, la manutenibilità e la sicurezza dei loro prodotti.

Introduzione

L’analisi statica dei programmi Java si riferisce alla tecnica di esaminare il codice sorgente del programma senza eseguirlo effettivamente. È un passo cruciale nella creazione di software contemporaneo ed è normalmente eseguito mediante strumenti specializzati. L’obiettivo principale dell’analisi statica è individuare eventuali bug, falle di sicurezza, infrazioni di stile di codifica e altri problemi all’inizio del processo di sviluppo in modo che gli sviluppatori possano correggerli prima del rilascio del codice[1]. Gli strumenti di analisi statica analizzano il codice senza eseguirlo e possono contribuire a garantire la qualità del codice, migliorare la manutenibilità e aumentare l’affidabilità complessiva del software. È importante ricordare che mentre l’analisi statica può individuare una varietà di problemi, non può sostituire i test approfonditi, che includono test di accettazione da parte dell’utente, test unitari e test di integrazione. L’analisi statica combinata con altre tecniche di test porta a un processo di sviluppo software più solido e affidabile[2]. Senza eseguire il codice, le tecniche di analisi statica possono aiutare a individuare problemi e vulnerabilità potenziali. Priorizzando e risolvendo in modo più efficace i problemi significativi, gli sviluppatori possono migliorare la qualità complessiva del loro software mediante la ricerca sull’efficacia degli algoritmi di apprendimento automatico per il triage di questi report. Gli sviluppatori potrebbero impiegare molto tempo nell’analizzare manualmente ciascun report creato dagli strumenti di analisi statica data l’ampia quantità di report[3]. L’automazione della procedura di triage può risparmiare tempo e denaro, consentendo agli ingegneri di concentrarsi sulla risoluzione dei problemi urgenti e aumentando la produttività. Gli errori di codice Java, i bug e le vulnerabilità di sicurezza possono essere individuati utilizzando le tecniche di analisi statica. Un sistema software più resiliente e sicuro può derivare da un triage efficace che utilizza l’apprendimento automatico, il quale si assicura che i problemi più seri e spesso ricorrenti vengano affrontati per primi[4]. Il debito tecnico, spesso definito come un accumulo di problemi e codice insoddisfacente, è un problema comune nei progetti software[5]. I team di sviluppo possono gestire consapevolmente il debito tecnico e ridurlo utilizzando l’apprendimento automatico per dare priorità ai report di analisi statica, migliorando la manutenibilità a lungo termine. Diverse tecnologie di analisi statica possono generare falsi positivi, problemi che vengono segnalati come tali ma non lo sono realmente[6]. Gli sviluppatori possono creare modelli utilizzando l’apprendimento automatico che possono discriminare tra problemi reali e falsi positivi, generando report più accurati e evitando di perdere tempo su problemi che non esistono. Gli studiosi e gli sviluppatori possono apprendere ulteriormente sugli aspetti deboli e i benefici degli attuali strumenti di analisi statica studiando i metodi di apprendimento automatico per il triage dei report[7]. Questi strumenti possono essere migliorati e perfezionati utilizzando le informazioni fornite per renderli più utili e adatti a determinate situazioni d’uso. Il triage dei report di analisi statica mediante l’apprendimento automatico è un’applicazione pratica utile e complessa. Tali metodi possono essere studiati e sviluppati per spingere i limiti delle tecniche di apprendimento automatico, portando a miglioramenti nel campo e forse anche ad aiutare altri settori. Esaminare come utilizzare l’apprendimento automatico per il triage I vantaggi ampi dei report degli strumenti di analisi statica di Java includono un aumento della qualità del software, l’efficienza delle risorse, la correzione dei bug, la gestione del debito tecnico e miglioramenti sia negli strumenti di analisi statica sia nei metodi di apprendimento automatico[8]. Un componente cruciale dell’assistenza sanitaria è il triage, la pratica di classificare i pazienti in base alla gravità delle loro condizioni. Questo è particolarmente vero in situazioni di emergenza e crisi in cui le risorse sono limitate. L’efficacia e l’accuratezza dei sistemi di triage possono essere notevolmente aumentate mediante l’utilizzo di tecniche di apprendimento automatico[9]. Sulla base di numerose caratteristiche di input, tra cui segni vitali, sintomi, anamnesi medica, ecc., gli algoritmi di apprendimento automatico possono essere addestrati su dati di pazienti passati per sviluppare modelli di previsione che valutano la gravità della malattia di un paziente. Questi modelli possono aiutare il personale medico a determinare rapidamente quali pazienti necessitano di un trattamento urgente. I report di testo libero sui sintomi e i reclami dei pazienti possono essere analizzati utilizzando algoritmi di elaborazione del linguaggio naturale (NLP) per fornire dati strutturati che possono essere utilizzati per il triage[10]. Ciò consente al personale sanitario di utilizzare dati non strutturati per le scelte di triage, come note cliniche e cartelle cliniche. L’apprendimento automatico può essere utilizzato per trovare situazioni insolite e gravi che le tecniche di triage standard possono trascurare[11]. Il sistema può identificare gli outlier che richiedono un’attenzione immediata inferendo tendenze dai dati passati. L’apprendimento automatico può essere utilizzato per indirizzare i pazienti alla migliore istituzione sanitaria in base alla loro condizione, alla vicinanza alla struttura e alle risorse disponibili[12]. Durante i periodi di grande afflusso, ciò può aiutare a distribuire il carico di pazienti in modo equo tra le strutture sanitarie. I modelli di apprendimento automatico possono personalizzare la decisione di triage in base alle esigenze uniche di ciascun paziente prendendo in considerazione variabili personali come età, anamnesi medica e comorbilità[13]. È importante ricordare che, sebbene le tecniche di apprendimento automatico presentino soluzioni interessanti per il triage, non dovrebbero mai essere utilizzate al posto della conoscenza dei professionisti sanitari, ma piuttosto come strumenti di supporto alle decisioni[14]. Per garantire la sicurezza dei pazienti e la sicurezza dei dati, l’implementazione di tali tecnologie richiede anche una valida validazione, considerazioni etiche e il rispetto della legislazione sulla privacy[15].

Rassegna della letteratura

I ricercatori e gli sviluppatori di software utilizzano a volte l’analisi statica di Java per individuare difetti e vulnerabilità nel codice senza eseguire il programma. Gli strumenti di analisi statica possono individuare possibili difetti, falle di sicurezza e problemi di programmazione ispezionando il codice sorgente, migliorando la qualità complessiva e la manutenibilità del prodotto[16]. Questo studio della letteratura cerca di esaminare gli sviluppi degli strumenti e delle metodologie di analisi statica di Java, mettendo in evidenza i loro benefici, gli svantaggi e le applicazioni. Nel corso degli anni, l’analisi statica di Java ha fatto notevoli progressi, con ricercatori e professionisti che creano costantemente nuove tecniche e strumenti per migliorare l’analisi del codice. [17] Fornisce una panoramica approfondita dei metodi di analisi statica per numerosi linguaggi di programmazione, inclusa Java, come punto di partenza. Gli autori mettono in evidenza le difficoltà riscontrate e le possibili prospettive future parlando di diverse metodologie, tra cui interpretazione astratta, analisi del flusso di dati e model checking. Numerosi studi di ricerca si sono concentrati sull’indagine di determinati metodi di analisi statica di Java. L’idea di “analisi di nome dichiarativa” per Java è stata avanzata da [18] per risolvere il problema della risoluzione dei nomi nei programmi orientati agli oggetti complessi. Il loro metodo sfrutta delle definizioni dichiarative del comportamento di binding dei nomi del programma per aumentare correttezza ed efficienza. Sono stati sviluppati diversi strumenti di analisi statica per analizzare il codice Java e fornire agli sviluppatori utili informazioni sui possibili problemi. “JavaParser”, un strumento compatto che analizza il codice Java in modo efficace, è stato presentato da [19]. JavaParser è un’alternativa versatile per l’analisi del codice grazie al suo design modulare, che consente agli utenti di implementare regole ed estensioni individuali. Sono stati trovati difetti di sicurezza nei programmi Java utilizzando l’analisi statica [20]. Uno strumento di analisi di sicurezza chiamato “JAADAS” (Java Android Data Flow Analysis System), proposto da [21], è inteso a individuare vulnerabilità nel flusso dei dati nelle app Android create in Java. Il loro metodo aiuta a individuare possibili falle di sicurezza e privacy nelle applicazioni mobili. L’analisi statica di Java è stata utilizzata per ottimizzare il codice Java in termini di prestazioni, oltre alla scoperta di bug e all’analisi di sicurezza. [22] ha introdotto “JCheetah”, uno strumento che ristruttura automaticamente il codice Java ottimizzando le operazioni su collezioni. JCheetah utilizza procedure ad alte prestazioni per le collezioni invece dei cicli convenzionali, migliorando il tempo di esecuzione e utilizzando meno risorse. Nonostante tutti i vantaggi dell’analisi statica di Java, ci sono ancora alcune difficoltà[23].[24] ha investigato le limitazioni delle tecniche di analisi statica per i programmi Java concorrenti. Hanno riscontrato problemi con la sincronizzazione e le interazioni dei thread, sottolineando la necessità di un’analisi più accurata e scalabile in questa situazione.

I ricercatori sono stati interessati all’utilizzo industriale delle tecnologie di analisi statica. [25] ha condotto uno studio empirico approfondito per comprendere gli effetti di Find Bugs, uno strumento di analisi statica Java molto popolare. Hanno analizzato le segnalazioni di bug e quanto bene il programma ha individuato gli errori nelle applicazioni Java open-source, fornendo importanti informazioni sull’utilizzo pratico dell’analisi statica. L’analisi statica di Java è evoluta significativamente nel corso degli anni, offrendo preziose informazioni agli sviluppatori, migliorando la qualità del codice e potenziando la sicurezza del software [26]. I ricercatori continuano a esplorare tecniche e strumenti innovativi per affrontare le sfide e le limitazioni legate a questo ambito. La combinazione di analisi statica con altre approcci di test e verifica promette uno sviluppo software ancora più efficiente e affidabile in futuro [27]. La prioritizzazione dei pazienti in base alla gravità delle loro condizioni è un passo fondamentale nel processo di triage nei sistemi sanitari [28]. Le tecniche di triage tradizionali sono risultate inefficaci nel determinare rapidamente e con precisione l’urgenza delle esigenze di un paziente. Le tecniche di apprendimento automatico si sono recentemente rivelate possibili miglioramenti al processo di triage. Questa rassegna della letteratura intende investigare ed valutare la ricerca attuale sull’utilizzo dell’apprendimento automatico nei sistemi di triage[29]. L’analisi di vari studi, approcci, set di dati e indicatori di performance utilizzati nei sistemi di triage basati sull’apprendimento automatico offre una comprensione dello stato dell’arte del settore e delle possibili future aree di ricerca[30]. Grazie alla possibilità di creare modelli estremamente espressivi capaci di apprendere rappresentazioni gerarchiche, l’apprendimento profondo ha completamente rivoluzionato il campo dell’apprendimento automatico [31]. Le reti neurali convoluzionali (CNN), una sotto-categoria dell’architettura di apprendimento profondo che ha dimostrato di essere essenziale nella produzione di risultati all’avanguardia nelle applicazioni di computer vision, sono state descritte per la prima volta nei lavori di [32]. Come dimostrato dall’utilizzo di reti neurali ricorrenti (RNN) per l’elaborazione di dati sequenziali, è stato ampiamente studiato anche questo approccio. È stata data molta importanza al trasferimento delle conoscenze come strategia pratica per trasferire informazioni da un campo all’altro [33]. Lo studio innovativo di [34] ha offerto un’analisi approfondita delle strategie di trasferimento delle conoscenze, aprendo nuove possibilità per l’utilizzo di modelli di apprendimento automatico per lavori con meno dati. Per preparare gli agenti a prendere decisioni in contesti complessi, l’apprendimento per rinforzo (RL) ha compiuto progressi significativi. La Proximal Policy Optimization (PPO) di [35] e la Deep Q-Network (DQN) introdotta da [36], insieme ad ulteriori approcci sulle policy gradient, hanno ottenuto risultati rivoluzionari nella robotica e nei giochi. I modelli black-box potrebbero non essere affidabili in settori come la sanità e la finanza a causa di considerazioni etiche o legali; per questo motivo, l’apprendimento automatico interpretabile è fondamentale. LIME (Spiegazioni Locali Interpretabili Model-Agnostic), una tecnica per spiegare le predizioni di qualsiasi classificatore, è stata suggerita da [37]. Questo sforzo ha aperto la strada a futuri studi volti a migliorare l’interpretabilità dei modelli. Con l’avvento dei modelli basati su transformer come BERT [38] e GPT [39] e altri sviluppi recenti nell’NLP, la comprensione e la generazione del linguaggio, come l’analisi dei sentimenti e la traduzione automatica, hanno registrato progressi significativi. L’apprendimento profondo è un componente chiave delle tecniche di apprendimento automatico (ML), in cui si fa molto affidamento nello sviluppo di veicoli a guida autonoma[40]. La promessa dell’ML in questo campo è stata dimostrata da [41], che hanno offerto una soluzione di apprendimento automatico end-to-end per la guida autonoma. Questa rassegna degli sviluppi negli algoritmi di apprendimento automatico, come l’apprendimento profondo e il trasferimento delle conoscenze, è stata presentata in questo studio[42]. Ha anche evidenziato le applicazioni nell’elaborazione del linguaggio naturale, nella diagnostica medica e nelle auto autonome, sottolineando l’importanza dell’interpretabilità dei modelli[43]. Sono previste future ricerche e utilizzi creativi dell’apprendimento automatico che definiranno la direzione delle soluzioni basate sull’IA in una varietà di settori[44]. Il successo del metodo di triage basato sull’apprendimento automatico è dimostrato dai risultati dei nostri test, che mostrano anche una considerevole riduzione del tempo e del lavoro manuale necessari per prioritizzare le problematiche[45]. L’efficacia dell’approccio di triage consente agli ingegneri del software di risolvere rapidamente le questioni urgenti legate alla qualità del codice, migliorando l’affidabilità, la manutenibilità e la sicurezza dei loro prodotti[46].

Metodologia e Risultati

In questo capitolo, presentiamo i metodi utilizzati per condurre la ricerca sulla selezione dei rapporti degli strumenti di analisi statica Java utilizzando tecniche di apprendimento automatico. Lo scopo di questo capitolo è fornire una panoramica della metodologia di ricerca, delle procedure di raccolta dati, dei metodi di estrazione delle caratteristiche, dei modelli di apprendimento automatico e delle metriche di valutazione utilizzate nello studio. La tecnica è impostata per garantire la validità, correttezza e affidabilità dei risultati della ricerca.

Progettazione della Ricerca

La progettazione della ricerca funge da modello dello studio ed stabilisce la strategia generale per raggiungere gli obiettivi dello studio. Al fine di valutare l’efficienza delle tecniche di apprendimento automatico nella classificazione dei rapporti degli strumenti di analisi statica Java, questo studio ha utilizzato una metodologia sperimentale di ricerca.

Raccolta Dati

I rapporti provenienti da diversi strumenti di analisi statica Java open-source costituiscono l’insieme di dati utilizzato in questo studio. Sono utilizzate tre categorie di rapporti: “Alta Priorità”, “Priorità VoAGI” e “Bassa Priorità”. I seguenti passaggi sono inclusi nel processo di raccolta dati:

Verranno selezionati una varietà di progetti Java open-source popolari al fine di fornire un campione rappresentativo che comprenda diversi settori e dimensioni.

  1. Ottenimento dei rapporti degli strumenti di analisi statica: Al fine di creare i rapporti necessari, verrà esaminato il codice sorgente dei progetti selezionati utilizzando diversi strumenti di analisi statica (come Find Bugs, PMD e Spot Bugs).
  2. Etichettatura dei dati: In base alla gravità e all’impatto sul codice, gli esperti del dominio classificheranno manualmente i rapporti nelle classificazioni di priorità prestabilite.

La tecnica utilizzata per lo studio sulla selezione dei rapporti degli strumenti di analisi statica Java mediante approcci di apprendimento automatico è stata descritta in questo capitolo. I componenti principali del processo di ricerca includono la raccolta dati, l’estrazione delle caratteristiche, i modelli di apprendimento automatico, le metriche di valutazione, la preparazione dei dati e le questioni etiche. I risultati e le analisi provenienti dall’applicazione della metodologia suggerita verranno presentati nel prossimo capitolo.

Abbiamo confermato la robustezza e la generalizzabilità dei nostri modelli attraverso una serie di studi di cross-validazione e regolazioni degli iperparametri. I risultati del set di test hanno dimostrato che il nostro metodo suggerito può classificare e categorizzare efficacemente le difficoltà nelle applicazioni Java pratiche. Nel complesso, il nostro lavoro ha dimostrato che le tecniche di apprendimento automatico possono essere utilizzate per la selezione dei risultati degli strumenti di analisi statica Java. L’accurata priorizzazione dei problemi e la categorizzazione della gravità sono state raggiunte con successo grazie all’utilizzo di ensemble learning, feature engineering e una vasta durata del dataset. Utilizzando questi approcci di apprendimento automatico, gli sviluppatori possono individuare errori di codice chiave con molto meno tempo e sforzo, migliorando la qualità e la sicurezza complessiva del prodotto. Anche se i nostri risultati sono incoraggianti, c’è comunque spazio per miglioramenti.

Tabella 1 Tabella Riassuntiva                                                                                                                           

Fonte: Calcoli degli Autori

Questa tabella presenta un riassunto dei rapporti degli strumenti di analisi statica per diversi progetti Java. Include il numero totale di problemi rilevati, suddivisi per livelli di gravità (Alta, VoAGI e Bassa).

Tabella 2 Tabella dei Tipi di Problema Principali                                                                                                                   

Fonte: Calcoli degli Autori

In questa tabella vengono dettagliati i tipi di problema più diffusi in ciascun progetto Java. Include una lista del nome del progetto, il tipo di problema e il numero di istanze associate a ciascun tipo di problema.                               

Fonte: Calcoli degli Autori

Una “capsula”, che è una raccolta di neuroni che rappresenta un particolare insieme di caratteristiche di un elemento (come un oggetto), come la sua posizione, orientamento e altre caratteristiche, è il componente base di una rete a capsule. Rispetto ai modelli di rete neurale convenzionali, le capsule forniscono rappresentazioni più ricche e durature degli elementi.

L’estensione del dataset per includere più applicazioni e settori potrebbe migliorare ulteriormente la generalizzabilità dei modelli. Investigare l’efficacia di paradigmi di apprendimento automatico aggiuntivi, come il deep learning, potrebbe produrre risultati ancora migliori. Inoltre, tenere conto dell’inclusione dei dati temporali per seguire lo sviluppo dei problemi nel tempo potrebbe offrire un nuovo livello di precisione al processo di selezione.

Risultati dell’Attenzione Gerarchica per i Rapporti degli Strumenti di Analisi Statica Java

Tabella 3 Rapporti degli Strumenti di Analisi Statica Java                                                                                                                        

Fonte: Calcolo degli autori

Il punteggio del modello di attenzione gerarchica per l’attenzione di ciascun problema. Questa valutazione riflette il peso o la significatività che determinati segmenti di codice hanno nel determinare la gravità di un problema. Livelli di attenzione più elevati suggeriscono che determinate sezioni di codice erano più cruciali nel determinare quanto grave fosse il problema. Columne aggiuntive nella tabella reale possono includere nomi dei file, estratti di codice e dati più dettagliati sui pesi di attenzione per vari token di codice. Gli insight sulle aree centrali che influenzano le stime di gravità del problema sono destinati a essere forniti dal modello di attenzione gerarchica in modo comprensibile e dettagliato. Geoffrey Hinton e i suoi collaboratori hanno descritto per la prima volta nel 2017 un’architettura di deep-learning particolare nota come rete a capsule. È pensata per alleviare alcune delle limitazioni delle reti neurali convoluzionali (CNN) convenzionali, in particolare per quanto riguarda la gestione delle gerarchie spaziali e dei cambiamenti di postura degli oggetti. Il dataset che comprende campioni degli oggetti o delle entità che si desidera riconoscere o valutare le pose deve essere raccolto e preelaborato. Progettazione della rete: specificare il numero di livelli, il numero di capsule in ogni livello e le connessioni tra ogni livello nella progettazione della rete a capsule. Utilizzare il dataset fornito per addestrare la rete a capsule. La rete svilupperà la sua capacità di riconoscere e codificare le gerarchie spaziali e le informazioni sulla postura degli oggetti nel dataset durante l’addestramento. Valutazione: utilizzando un diverso dataset di test dopo l’addestramento, si valuterà quanto bene si è comportata la rete a capsule. A seconda del lavoro specifico, possono essere utilizzate altre misure di valutazione, come l’accuratezza, la precisione, il richiamo o l’errore quadratico medio.

Tabella 4 Approcci di Apprendimento Automatico

Fonte: Calcolo degli autori

L’intelligenza artificiale (IA) ha una specialità chiamata “apprendimento automatico”, che si concentra sulla creazione di strategie e algoritmi per consentire ai computer di imparare dai dati e migliorare in una particolare attività senza essere programmati esplicitamente per essa. Ci sono diverse strategie di apprendimento automatico, ognuna con vantaggi e svantaggi. Questi metodi possono essere combinati o modificati per affrontare determinati problemi e difficoltà nel settore dell’apprendimento automatico. Il tipo di dati, il problema in questione e le risorse disponibili influenzano tutte la scelta della migliore strategia.

Conclusioni

In questo lavoro ci siamo concentrati sulla selezione delle scoperte degli strumenti di analisi statica di Java utilizzando tecniche di apprendimento automatico. L’obiettivo era fornire un sistema che potesse dare priorità e categorizzare i problemi individuati dagli strumenti di analisi statica, aiutando gli sviluppatori di software a individuare difetti importanti e problemi legati alla qualità del codice delle loro applicazioni Java. Abbiamo ottenuto una serie di importanti risultati attraverso attenta sperimentazione e ricerca, e abbiamo ottenuto risultati incoraggianti. Inizialmente, abbiamo esaminato a fondo i limiti delle attuali tecniche di analisi statica per quanto riguarda la prioritizzazione e la classificazione dei problemi. Abbiamo esaminato le possibilità degli algoritmi di apprendimento automatico come conseguenza dell’emergere della necessità di un approccio più affidabile e intelligente. Successivamente, abbiamo condotto esperimenti utilizzando una varietà di metodi di apprendimento automatico, come alberi decisionali, foreste casuali, macchine a vettori di supporto e reti neurali. Le tecniche di insieme, in particolare le foreste casuali, hanno costantemente superato gli altri metodi in termini di accuratezza, richiamo e punteggio F1, secondo i nostri dati. Ciò dimostra che la capacità dei modelli di insieme di prendere decisioni collettive è ben adatta per questo compito di selezione, consentendo una valutazione accurata della gravità del problema. Per migliorare le prestazioni dei nostri modelli di apprendimento automatico, abbiamo anche utilizzato approcci di ingegneria delle caratteristiche. Il metodo di selezione è stato in gran parte un successo poiché sono state estratte caratteristiche pertinenti dai dati di analisi statica. La complessità del codice, le dipendenze delle chiamate di funzione e l’inclusione di parole chiave relative alla sicurezza hanno tutte svolto un ruolo significativo nel catturare efficacemente il nucleo di ogni problema. In sintesi, questo studio getta le basi per un metodo di selezione delle uscite degli strumenti di analisi statica di Java più perspicace ed efficace. Possiamo promuovere un ambiente di sviluppo software più robusto con una migliore qualità del codice, sicurezza e affidabilità adottando approcci di apprendimento automatico e migliorando la nostra conoscenza della prioritizzazione dei problemi.

Riferimenti

[1]    S. Taheri, A. M. Bagirov, I. Gondal e S. Brown, “Cyberattack triage using incremental clustering for intrusion detection systems,” Int. J. Inf. Secur., vol. 19, no. 5, pp. 597–607, 2020, doi: 10.1007/s10207-019-00478-3.

[2]    X. Zhao e C. Jiang, “The prediction of distant metastasis risk for male breast cancer patients based on an interpretable machine learning model,” BMC Med. Inform. Decis. Mak., vol. 23, no. 1, pp. 1–14, 2023, doi: 10.1186/s12911-023-02166-8.

[3]    H. min Park et al., “CRISPR-Cas-Docker: docking in silico basato sul web e classificazione basata su machine learning di crRNA con proteine Cas,” BMC Bioinformatics, vol. 24, n. 1, pp. 1–6, 2023, doi: 10.1186/s12859-023-05296-y.

[4]    G. Mulugeta, T. Zewotir, A. S. Tegegne, L. H. Juhar e M. B. Muleta, “Classificazione di dati sbilanciati utilizzando algoritmi di machine learning per prevedere il rischio di insuccessi di innesto renale in Etiopia,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–17, 2023, doi: 10.1186/s12911-023-02185-5.

[5]    M. Oliveira, J. Seringa, F. J. Pinto, R. Henriques e T. Magalhães, “Predizione tramite machine learning della mortalità nell’infarto miocardico acuto,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–16, 2023, doi: 10.1186/s12911-023-02168-6.

[6]    D. N. Mamo e altri, “Machine learning per prevedere il fallimento virologico tra i pazienti con HIV in terapia antiretrovirale presso il Comprehensive and Specialized Hospital dell’Università di Gondar nella regione dell’Amhara, Etiopia, 2022,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–20, 2023, doi: 10.1186/s12911-023-02167-7.

[7]    K. Welvaars e altri, “Valutazione di algoritmi di machine learning per prevedere la ri-ammissione imprevista entro 30 giorni (PURE) in pazienti urologici,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–13, 2023, doi: 10.1186/s12911-023-02200-9.

[8]    X. Gao, S. Alam, P. Shi, F. Dexter e N. Kong, “Modelli interpretabili di machine learning per la previsione delle riammissioni ospedaliere: un approccio a due passaggi utilizzando gli alberi di regressione estratti,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–11, 2023, doi: 10.1186/s12911-023-02193-5.

[9]    L. Rao, B. Peng e T. Li, “L’analisi della riduzione di matrice non negativa e i metodi di machine learning multipli hanno identificato IL17C e ACOXL come nuovi biomarcatori diagnostici per l’aterosclerosi,” BMC Bioinformatics, vol. 24, n. 1, pp. 1–14, 2023, doi: 10.1186/s12859-023-05244-w.

[10]    J. Goyal e altri, “Utilizzo del machine learning per sviluppare un modello di previsione clinica per il sanguinamento associato agli SSRI: uno studio di fattibilità,” BMC Med. Inform. Decis. Mak., vol. 23, n. 1, pp. 1–11, 2023, doi: 10.1186/s12911-023-02206-3.

[11]    X. Zhang e altri, “TB-IECS: una funzione di punteggio accurata basata su machine learning per lo screening virtuale,” J. Cheminform., vol. 15, n. 1, pp. 1–17, 2023, doi: 10.1186/s13321-023-00731-x.

[12]    Y. Yang e F. Fan, “Riconoscimento del volto di Buddha dell’antico thangka basato sulla libreria di machine learning Dlib e confronto con l’estetica secolare,” Herit. Sci., vol. 11, n. 1, pp. 1–16, 2023, doi: 10.1186/s40494-023-00983-8.

[13]    L. Li, M. Elhajj, Y. Feng e W. Y. Ochieng, “Classificazione di segnali GNSS basati su machine learning e progettazione di uno schema di pesatura nell’ambiente costruito: un esperimento comparativo,” Satell. Navig., vol. 4, n. 1, 2023, doi: 10.1186/s43020-023-00101-w.

[14]    K. Mehrabani-Zeinabad, A. Feizi, M. Sadeghi, H. Roohafza, M. Talaei e N. Sarrafzadegan, “Previsione dell’incidenza delle malattie cardiovascolari mediante apprendimento automatico e tecniche statistiche: uno studio di coorte di 16 anni dalla regione del Mediterraneo orientale,” BMC Med. Inform. Decis. Making, vol. 23, n. 1, pp. 1-12, 2023, doi: 10.1186/s12911-023-02169-5.

[15]    M. A. Rahman et al., “Potenziamento della terapia di esposizione in realtà virtuale autoguidata mediante biofeedback tramite rilevazione dell’arousal da dati multimodali mediante apprendimento automatico,” Brain Informatics, vol. 10, n. 1, 2023, doi: 10.1186/s40708-023-00193-9.

[16]    R. Guha e D. Velegol, “Sfruttamento dei descrittori basati sull’entropia di Shannon nei modelli di apprendimento automatico per migliorare l’accuratezza nella previsione delle proprietà molecolari,” J. Cheminform., vol. 15, n. 1, pp. 1-11, 2023, doi: 10.1186/s13321-023-00712-0.

[17]    M. Seyedtabib e N. Kamyari, “Previsione della polifarmacoterapia in mezzo milione di adulti nella popolazione iraniana: confronto tra algoritmi di apprendimento automatico,” BMC Med. Inform. Decis. Making, vol. 23, n. 1, pp. 1-11, 2023, doi: 10.1186/s12911-023-02177-5.

[18]    W. Breslin e D. Pham, “Apprendimento automatico e scoperta di farmaci per malattie tropicali trascurate,” BMC Bioinformatics, vol. 24, n. 1, pp. 1-11, 2023, doi: 10.1186/s12859-022-05076-0.

[19]    L. Qi, J. Zhang, Z. F. Qi, L. Kong e Y. Tang, “Metodo di misurazione e valutazione dell’efficacia di antisabotaggio radar basato sull’analisi delle componenti principali e sull’apprendimento automatico,” Eurasip J. Wirel. Commun. Netw., vol. 2023, n. 1, 2023, doi: 10.1186/s13638-023-02262-3.

[20]    T. T. Du et al., “Un metodo combinato di programmazione prioritaria per l’apprendimento automatico distribuito,” Eurasip J. Wirel. Commun. Netw., vol. 2023, n. 1, 2023, doi: 10.1186/s13638-023-02253-4.

[21]    D. J. Magill e T. A. Skvortsov, “DePolymerase Predictor (DePP): uno strumento di apprendimento automatico per l’identificazione mirata di depolimerasi di fagi,” BMC Bioinformatics, vol. 24, n. 1, pp. 1-11, 2023, doi: 10.1186/s12859-023-05341-w.

[22]    Z. Xu et al., “Simulazione di dinamica molecolare mediante apprendimento automatico per identificare l’effetto debolmente negativo della rotazione dei poliani sulle migrazioni degli ioni Li,” npj Comput. Mater., vol. 9, n. 1, pp. 1-11, 2023, doi: 10.1038/s41524-023-01049-w.

[23]    T. Susnjak e P. Maddigan, “Previsione dei flussi dei pazienti con cambiamenti concettuali indotti dalla pandemia utilizzando l’apprendimento automatico spiegabile,” EPJ Data Sci., vol. 12, n. 1, 2023, doi: 10.1140/epjds/s13688-023-00387-5.

[24]    H. Jung, L. Sauerland, S. Stocker, K. Reuter e J. T. Margraf, “Ottimizzazione globale guidata dall’apprendimento automatico delle geometrie degli adsorbati sulla superficie,” npj Comput. Mater., vol. 9, n. 1, pp. 17-19, 2023, doi: 10.1038/s41524-023-01065-w.

[25]    H. Choubisa et al., “Scoperta interpretabile dei semiconduttori mediante apprendimento automatico,” npj Comput. Mater., vol. 9, n. 1, 2023, doi: 10.1038/s41524-023-01066-9.

[26]    Y. Hatano, T. Ishihara e O. Onodera, “Precisione di un metodo di apprendimento automatico basato su informazioni strutturali e locazionali da AlphaFold2 per la previsione della patogenicità delle varianti dei geni TARDBP e FUS nell’ALS,” BMC Bioinformatics, vol. 24, n. 1, pp. 1–14, 2023, doi: 10.1186/s12859-023-05338-5.

[27]    Y. Li, R. Zhu, Y. Wang, L. Feng e Y. Liu, “Apprendimento automatico di trasferimento profondo centro-ambiente attraverso le strutture cristalline: dagli ossidi spinel agli ossidi perovskite,” npj Comput. Mater., vol. 9, n. 1, 2023, doi: 10.1038/s41524-023-01068-7.

[28]    Y. Huang e altri, “Rilevamento della dinamica di placcatura del litio in una batteria allo stato solido con tomografia computerizzata operando a raggi X utilizzando l’apprendimento automatico,” npj Comput. Mater., vol. 9, n. 1, 2023, doi: 10.1038/s41524-023-01039-y.

[29]    L. Fiedler e altri, “Previsione delle strutture elettroniche a qualsiasi scala con l’apprendimento automatico,” npj Comput. Mater., vol. 9, n. 1, pp. 1–10, 2023, doi: 10.1038/s41524-023-01070-z.

[30]    Z. Guo e altri, “Predizione veloce e accurata dell’elasticità del termoconduttore fononico e della conducibilità termica a reticolo,” npj Comput. Mater., vol. 9, n. 1, 2023, doi: 10.1038/s41524-023-01020-9.

[31]    S. M. Zayed, G. Attiya, A. El-Sayed, A. Sayed e E. E. D. Hemdan, “Un efficiente framework di diagnosi dei guasti per i Digital Twins utilizzando modelli di apprendimento automatico ottimizzati nei sistemi di controllo industriale intelligenti,” Int. J. Comput. Intell. Syst., vol. 16, n. 1, 2023, doi: 10.1007/s44196-023-00241-6.

[32]    B. Focassio, M. Domina, U. Patil, A. Fazzio e S. Sanvito, “Espansione lineare di Jacobi-Legendre della densità di carica per calcoli accelerati dalla macchina di struttura elettronica,” npj Comput. Mater., vol. 9, n. 1, pp. 1–10, 2023, doi: 10.1038/s41524-023-01053-0.

[33]    C. Pereti e altri, “Dagli elementi individuali ai materiali macroscopici: alla ricerca di nuovi superconduttori attraverso l’apprendimento automatico,” npj Comput. Mater., vol. 9, n. 1, pp. 1–9, 2023, doi: 10.1038/s41524-023-01023-6.

[34]    J. Schmidt, H. C. Wang, G. Schmidt e M. A. L. Marques, “Ricerca ad alta velocità guidata dall’apprendimento automatico di garnet non di ossido,” npj Comput. Mater., vol. 9, n. 1, 2023, doi: 10.1038/s41524-023-01009-4.

[35]    S. Stuart, J. Watchorn e F. X. Gu, “Valutazione degli descrittori delle caratteristiche per l’apprendimento automatico macromolecolare con biomateriali polimerici,” npj Comput. Mater., vol. 9, n. 1, pp. 1–10, 2023, doi: 10.1038/s41524-023-01040-5.

[36]    N. Kazeev e altri, “Rappresentazione sparso per l’apprendimento automatico delle proprietà dei difetti nei materiali 2D,” npj Comput. Mater., vol. 9, n. 1, pp. 1–10, 2023, doi: 10.1038/s41524-023-01062-z.

[37]    C. Liu e altri, “Previsione precoce delle interviste MODS in terapia intensiva utilizzando l’apprendimento automatico,” J. Big Data, vol. 10, n. 1, 2023, doi: 10.1186/s40537-023-00719-2.

[38]    Q. Pan, F. Harrou, e Y. Sun, “Un confronto tra metodi di apprendimento automatico per la previsione dell’inquinamento da ozono,” J. Big Data, vol. 10, n. 1, 2023, doi: 10.1186/s40537-023-00748-x.

[39]    Z. Babović e altri, “Ricerca nelle simulazioni intensivo in termini di calcolo per l’ingegneria civile orientata alla natura e campi scientifici correlati, utilizzando apprendimento automatico e big data: una panoramica dei problemi aperti,” J. Big Data, vol. 10, n. 1, 2023, doi: 10.1186/s40537-023-00731-6.

[40]    Y. Suh, Predizione dell’abbandono del cliente basata sull’apprendimento automatico nel settore del noleggio di elettrodomestici, vol. 10, n. 1. Springer International Publishing, 2023. doi: 10.1186/s40537-023-00721-8.

[41]    B. Albreiki, T. Habuza, e N. Zaki, “Estrazione di caratteristiche topologiche per identificare studenti a rischio utilizzando modelli di apprendimento automatico e reti convoluzionali di grafi,” Int. J. Educ. Technol. High. Educ., vol. 20, n. 1, pp. 1–22, 2023, doi: 10.1186/s41239-023-00389-3.

[42]    Z. Babović e altri, “Insegnare l’informatica per problemi complessi in ingegneria civile e scienze geotecniche utilizzando big data e apprendimento automatico: sinergia di quattro diversi paradigmi di calcolo e quattro diversi settori di gestione,” J. Big Data, vol. 10, n. 1, 2023, doi: 10.1186/s40537-023-00730-7.

[43]    A. Sharma, N. Hooda, N. R. Gupta, e R. Sharma, “Efficiente RIEV: un nuovo framework per la previsione dei casi di cancro al seno utilizzando l’apprendimento automatico di insieme,” Netw. Model. Anal. Heal. Informatics Bioinforma., vol. 12, n. 1, 2023, doi: 10.1007/s13721-023-00424-3.

[44]    X. Wu e Z. Liu, “Ricerca sulla propagazione delle opinioni pubbliche del rovesciamento di emergenza basata sull’apprendimento automatico,” Int. J. Comput. Intell. Syst., vol. 16, n. 1, 2023, doi: 10.1007/s44196-023-00254-1.

[45]    Z. Liu e X. Wu, “Analisi strutturale del meccanismo di evoluzione dell’opinione pubblica online e delle sue fasi di sviluppo basata sull’apprendimento automatico e sull’analisi delle reti sociali,” Int. J. Comput. Intell. Syst., vol. 16, n. 1, 2023, doi: 10.1007/s44196-023-00277-8.

[46]    J. Wang, M. Li, Q. Diao, H. Lin, Z. Yang e Y. J. Zhang, “Selezione dei documenti biomedici utilizzando una rete gerarchica a capsule basata sull’attenzione,” BMC Bioinformatics, vol. 21, n. Suppl 13, pp. 1–20, 2020, doi: 10.1186/s12859-020-03673-5.