Giter VIP home page Giter VIP logo

jda_students-version's Introduction

Analisi statica di Deadlock su Bytecode Java

Il software permette di effettuare un'analisi statica di un programma Java, al fine di rilevare la presenza di possibili deadlock. In particolare, per bypassare l'eterogeneità sintattica delle numerose librerie Java dedite al parallelismo, questo viene fatto analizzandone direttamente il bytecode. Partendo da quest'ultimo, viene generato un opportuno programma Lam (deadLock Analysis Model, http://www.cs.unibo.it/~laneve/papers/concur2014.pdf) che potrà essere dato in input al tool DF4ABS (http://df4abs.nws.cs.unibo.it). Questo sfrutta un algoritmo che, partendo dal suddetto programma Lam, è in grado di rilevare eventuali circolarità che indicano la possibile presenza di deadlock.

Download del repository e compilazione del codice sorgente (istruzioni Linux / OS X)

  1. Download del repository (https://bitbucket.org/t6o/bytecodedeadlockanalysis/downloads)

  2. Decomprimere l'archivio (t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx) in una posizione a piacere

  3. Da terminale portarsi nella cartella radice del progetto (t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx) ed eseguire i comandi seguenti (carattere '$' escluso):

#!bash

$ find src -name "*.java" > sources.txt
#!bash

$ mkdir -p bin
#!bash

$ export CLASSPATH=$CLASSPATH:<AbsolutePath>/t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx/bin:<AbsolutePath>/t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx/lib/antlr-4.4-complete.jar

dove è il percorso a partire dalla radice del filesystem (ad esempio /Users//Desktop/t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx, se la cartella del progetto e' stata salvata sul Desktop in un sistema OS X).

#!bash

$ javac -d bin @sources.txt

Esecuzione del software ed analisi dell'output mediante il tool DF4ABS

  1. Assicurarsi che la variabile d'ambiente CLASSPATH sia configurata correttamente per puntare alla cartella /bin, creata in precedenza, e alla libreria lib/antlr-4.4-complete.jar, entrambe contenute dentro la cartella t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx. Per verificarlo, basta eseguire da terminale il comando:
#!bash

$ echo $CLASSPATH

ed assicurarsi che i percorsi /t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx/bin e /t6o-bytecodedeadlockanalysis-xxxxxxxxxxxx/lib/antlr-4.4-complete.jar siano presenti. Se non presenti aggiungerli con il comando "export" come descritto prima.

  1. Copiare i file .java del software da analizzare all'interno di una cartella da dare in input al programma (N.B. Tra i file deve essere presente un unico metodo main)

  2. Lanciare l'esecuzione con il comando seguente:

#!bash

$ java com.laneve.deadlock.DeadlockAnalysis inputFolder [-o outputFolder] [-d maxSearchDepth]

dove:

  • inputFolder --> è l'unico parametro obbligatorio ed è il percorso della suddetta cartella di input contenente i file .java su cui verificare la presenza di deadlock.

  • outputFolder --> è la cartella in cui il software produrrà l'output necessario all'analisi finale.

  • maxSearchDepth --> è la profondità massima considerata durante l'analisi ricorsiva degli oggetti annidati. Se, ad esempio, un oggetto di tipo A ha un campo di tipo B che, a sua volta, ha un campo di tipo C la profondità minima necessaria per prendere in considerazione il campo di tipo C è 2 (N.B. Se il deadlock è causato da dipendenze tra campi situati a profondità maggiore di quella specificata allora non sarà rilevato).

  1. All'interno della cartella di output (se questa non e' stata specificata ne verra' creata una automaticamente chiamata output_DeadlockAnalysis) si avranno:
  • una cartella "classFiles", contenente i file .class generati dalla compilazione dei file .java del software dato in input

  • una cartella "bytecode", contenente i file .txt del bytecode generato dai suddetti file .class mediante il comando "javap"

  • un file chiamato "lams.txt" che contiene il programma Lam risultato dall'elaborazione; questo è costituito da una funzione lam per ogni metodo del software in esame

  1. Analisi della presenza di un possibile deadlock mediante il tool DF4ABS
  • Andare alla pagina http://df4abs.nws.cs.unibo.it

  • Copiare il contenuto del file "lams.txt", ottenuto nel punto precedente, ed incollarlo nell'apposita area di testo

  • Selezionare l'opzione "Lam program" e premere "Invia" per verificare la possibile presenza di deadlock nel software Java di partenza

jda_students-version's People

Contributors

abenetti avatar t6o avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.