Il Machine Learning può identificare uno sviluppatore dallo stile usato nella programmazione

Dimostrata la possibilità di identificare i programmatori, sia leggendo il codice sorgente, sia i binari di applicazioni compilate. Vantaggi e svantaggi di questa tecnologia di apprendimento automatico.

Impronta

Ogni sviluppatore ha un diverso modo di approcciare un problema e sviluppare la relativa soluzione. Non è facile capire lo stile di un programmatore leggendo sue linee di codice ma alcuni ricercatori hanno sviluppato un sistema di apprendimento automatico in grado di identificare i programmatori, sia leggendo il codice sorgente, sia i binari di applicazioni compilate.

Wired spiega che il sistema è alimentato da un meccanismo di training in grado di riconoscere la struttura di coding in base a esempi di lavori già svolti, sfruttando questi ultimi per individuare tratti comuni negli esempi di codice. Non sono necessarie grandi quantità di codice, ma bastano anche piccoli snippet (unità funzionale di un codice sorgente estratta da un programma e messa a disposizione degli utenti).

Esempo codice

In una prova usando esempi di codice creato nel contesto di Google Code Jam, iniziativa per promuovere il talento di giovani programmatori e professionisti del settore, la tecnologia di Intelligenza Artificiale si è rivelata relativamente accurata, anche se ancora non perfetta. Usando il codice di 600 programmatori per ognuno dei quali sono stati analizzati otto esempi, il sistema è stato in grado di identificare correttamente i creatori nell’83% dei casi.

Engadget spiega che questa tecnologia di machine learning potrebbe essere utile per gli investigatori consentendo, ad esempio, di identificare gli autori di un malware, in particolare quando cercano di far cadere le colpe su altri. Può essere utile anche per scovare casi di plagio, con l’apprendimento automatico in grado di individuare rassomiglianze da considerarsi casuali e copie palesi.

Non mancano ad ogni modo anche aspetti negativi: potrebbe non essere possibile, ad esempio, contribuire in modo anonimo alla creazione di codice. Qualcuno potrebbe riconoscere chi ha svolto un determinato lavoro con ripercussioni in alcuni paesi e ambiti che non consentono agli sviluppatori di collaborare a determinati progetti.