kth.sePublications KTH
System disruptions
There are recurring service disruptions on some of the search portals due to high traffic. We are working to resolve the issue, you may temporarily encounter an error message.
Change search
Link to record
Permanent link

Direct link
de Carvalho Gomes, PedroORCID iD iconorcid.org/0000-0002-6468-1605
Alternative names
Publications (10 of 15) Show all publications
de C. Gomes, P., Gurov, D., Huisman, M. & Artho, C. (2018). Specification and verification of synchronization with condition variables. Science of Computer Programming, 163, 174-189
Open this publication in new window or tab >>Specification and verification of synchronization with condition variables
2018 (English)In: Science of Computer Programming, ISSN 0167-6423, E-ISSN 1872-7964, Vol. 163, p. 174-189Article in journal (Refereed) Published
Abstract [en]

This paper proposes a technique to specify and verify the correct synchronization of concurrent programs with condition variables. We define correctness of synchronization as the liveness property: “every thread synchronizing under a set of condition variables eventually exits the synchronization block”, under the assumption that every such thread eventually reaches its synchronization block. Our technique does not avoid the combinatorial explosion of interleavings of thread behaviours. Instead, we alleviate it by abstracting away all details that are irrelevant to the synchronization behaviour of the program, which is typically significantly smaller than its overall behaviour. First, we introduce SyncTask, a simple imperative language to specify parallel computations that synchronize via condition variables. We consider a SyncTask program to have a correct synchronization iff it terminates. Further, to relieve the programmer from the burden of providing specifications in SyncTask, we introduce an economic annotation scheme for Java programs to assist the automated extraction of SyncTask programs capturing the synchronization behaviour of the underlying program. We show that every Java program annotated according to the scheme (and satisfying the assumption mentioned above) has a correct synchronization iff its corresponding SyncTask program terminates. We then show how to transform the verification of termination of the SyncTask program into a standard reachability problem over Coloured Petri Nets that is efficiently solvable by existing Petri Net analysis tools. Both the SyncTask program extraction and the generation of Petri Nets are implemented in our STAVE tool. We evaluate the proposed framework on a number of test cases.

Place, publisher, year, edition, pages
Elsevier, 2018
Keywords
Concurrency, Condition variables, Formal verification, Java
National Category
Computer Systems
Identifiers
urn:nbn:se:kth:diva-228693 (URN)10.1016/j.scico.2018.05.001 (DOI)000438662800011 ()2-s2.0-85047065786 (Scopus ID)
Funder
EU, European Research Council, 258405
Note

QC 20180530

Available from: 2018-05-30 Created: 2018-05-30 Last updated: 2024-03-15Bibliographically approved
De Carvalho Gomes, P., Gurov, D. & Huisman, M. (2017). Specification and verification of synchronization with condition variables. In: 5th International Workshop on Formal Techniques for Safety-Critical Systems, FTSCS 2016: . Paper presented at 5th International Workshop on Formal Techniques for Safety-Critical Systems, FTSCS 2016, Tokyo, Japan, 14 November 2016 through 15 November 2016 (pp. 3-19). Springer, 694
Open this publication in new window or tab >>Specification and verification of synchronization with condition variables
2017 (English)In: 5th International Workshop on Formal Techniques for Safety-Critical Systems, FTSCS 2016, Springer, 2017, Vol. 694, p. 3-19Conference paper, Published paper (Refereed)
Abstract [en]

In this paper we propose a technique to specify and verify the correct synchronization of concurrent programs with condition variables. We define correctness as the liveness property: “every thread synchronizing under a set of condition variables eventually exits the synchronization”, under the assumption that every such thread eventually reaches its synchronization block. Our technique does not avoid the combinatorial explosion of interleavings of thread behaviors. Instead, we alleviate it by abstracting away all details that are irrelevant to the synchronization behavior of the program, which is typically significantly smaller than its overall behavior. First, we introduce SyncTask, a simple imperative language to specify parallel computations that synchronize via condition variables. We consider a SyncTask program to have a correct synchronization iff it terminates. Further, to relieve the programmer from the burden of providing specifications in SyncTask, we introduce an economic annotation scheme for Java programs to assist the automated extraction of SyncTask programs capturing the synchronization behavior of the underlying program. We prove that every Java program annotated according to the scheme (and satisfying the assumption) has a correct synchronization iff its corresponding SyncTask program terminates. We show how to transform the verification of termination into a standard reachability problem over Colored Petri Nets that is efficiently solvable by existing Petri Net analysis tools. Both the SyncTask program extraction and the generation of Petri Nets are implemented in our STaVe tool. We evaluate the proposed framework on a number of test cases as a proof-of-concept.

Place, publisher, year, edition, pages
Springer, 2017
Series
Communications in Computer and Information Science, ISSN 1865-0929 ; 694
Keywords
Computer software, Explosions, Extraction, Petri nets, Safety engineering, Security systems, Specifications, Synchronization, Automated extraction, Combinatorial explosion, Concurrent program, Imperative languages, Liveness properties, Parallel Computation, Reachability problem, Specification and verification, Java programming language
National Category
Computer Sciences
Identifiers
urn:nbn:se:kth:diva-207406 (URN)10.1007/978-3-319-53946-1_1 (DOI)000406995100001 ()2-s2.0-85013324816 (Scopus ID)9783319539454 (ISBN)
Conference
5th International Workshop on Formal Techniques for Safety-Critical Systems, FTSCS 2016, Tokyo, Japan, 14 November 2016 through 15 November 2016
Note

QC 20170530

Available from: 2017-05-30 Created: 2017-05-30 Last updated: 2024-03-15Bibliographically approved
Amighi, A., de Carvalho Gomes, P., Gurov, D. & Huisman, M. (2016). Provably Correct Control Flow Graphs from Java Bytecode Programs with Exceptions. International Journal on Software Tools for Technology Transfer, 18(6), 653-684
Open this publication in new window or tab >>Provably Correct Control Flow Graphs from Java Bytecode Programs with Exceptions
2016 (English)In: International Journal on Software Tools for Technology Transfer, ISSN 1433-2779, E-ISSN 1433-2787, ISSN 1433-2779, Vol. 18, no 6, p. 653-684Article in journal (Refereed) Published
Abstract [en]

We present an algorithm for extracting control flow graphs from Java bytecode that captures normal as well as exceptional control flow. We prove its correctness, in the sense that the behaviour of the extracted control flow graph is a sound over-approximation of the behaviour of the original program. This makes control flow graphs suitable for performing various static analyses, such as model checking of temporal safety properties.Analyzing exceptional control flow for Java bytecode is difficult because of the stack-based nature of the language. We therefore develop the extraction in two stages. In the first, we abstract away from the complications arising from exceptional flows, and relativize the extraction on an oracle that is able to look into the stack and predict the exceptions that can be raised at each instruction. This idealized algorithm provides a specification for concrete extraction algorithms, which have to provide a suitable implementation for the oracle. We prove correctness of the idealized algorithm by means of behavioural simulation.In the second stage, we develop a concrete extraction algorithm that consists of two phases. In the first phase, the program is transformed into a BIR program, a stack-less intermediate representation of Java bytecode, from which the control flow graph is extracted in the second phase. We use this intermediate format because it provides the information needed to implement the oracle, and since it gives rise to more compact graphs. We show that the behaviour of the control flow graph extracted via the intermediate representation is a sound over-approximation of the behaviour of the graph extracted by the direct, idealized algorithm, and thus of the original program. The concrete extraction algorithm is implemented as the ConFlEx tool. A number of test cases are performed to evaluate the efficiency of the algorithm.

Place, publisher, year, edition, pages
Springer Nature, 2016
Keywords
Software Verification, Static Analysis, Program Models
National Category
Computer Sciences
Research subject
Information and Communication Technology
Identifiers
urn:nbn:se:kth:diva-164580 (URN)10.1007/s10009-015-0375-0 (DOI)000385180700006 ()2-s2.0-84926377646 (Scopus ID)
Note

QC 20230927

Available from: 2015-04-17 Created: 2015-04-17 Last updated: 2024-01-17Bibliographically approved
de Carvalho Gomes, P., Gurov, D. & Huisman, M. (2015). Algorithmic Verification of Synchronization with Condition Variables.
Open this publication in new window or tab >>Algorithmic Verification of Synchronization with Condition Variables
2015 (English)Report (Other academic)
Abstract [en]

Condition variables are a common synchronization mechanism present in many programming languages. Still, due to the combinatorial complexity of the behaviours the mechanism induces, it has not been addressed sufficiently with formal techniques. In this paper we propose a fully automated technique to prove the correct synchronization of concurrent programs synchronizing via condition variables, where under correctness we mean the liveness property: "If for every set of condition variables, every thread synchronizing under the variables of the set eventually enters its synchronization block, then every thread will eventually exit the synchronization".First, we introduce SyncTask, a simple imperative language to specify parallel computations that synchronize via condition variables. Next, we model the constructs of the language as Petri Net components, and define rules to extract and compose nets from a SyncTask program. We show that a SyncTask program terminates if and only if the corresponding Petri Net always reaches a particular final marking. We thus transform the verification of termination into a reachability problem on the net, which can be solved efficiently by existing Petri Net analysis tools. Further, to relieve the programmer from the burden of having to provide specifications in SyncTask, we introduce an economic annotation scheme for Java programs to assist the automated extraction of SyncTask programs capturing the synchronization behaviour of the underlying program. We show that, for the Java programs that can be annotated according to the scheme, the above-mentioned liveness property holds if and only if the corresponding SyncTask program terminates. Both the SyncTask program extraction and the generation of Petri Nets are implemented in the STaVe tool. We evaluate the proposed verification framework on a number of test cases

Publisher
p. 26
Keywords
Concurrency, Formal Verification, Coloured Petri Nets, Java
National Category
Computer Systems
Research subject
Computer Science
Identifiers
urn:nbn:se:kth:diva-176006 (URN)
Note

QC 20160517

Available from: 2015-10-27 Created: 2015-10-27 Last updated: 2022-06-23Bibliographically approved
de Carvalho Gomes, P. (2015). Automatic Extraction of Program Models for Formal Software Verification. (Doctoral dissertation). Stockholm: KTH Royal Institute of Technology
Open this publication in new window or tab >>Automatic Extraction of Program Models for Formal Software Verification
2015 (English)Doctoral thesis, monograph (Other academic)
Abstract [en]

In this thesis we present a study of the generation of abstract program models from programs in real-world programming languages that are employed in the formal verification of software. The thesis is divided into three parts, which cover distinct types of software systems, programming languages, verification scenarios, program models and properties.The first part presents an algorithm for the extraction of control flow graphs from sequential Java bytecode programs. The graphs are tailored for a compositional technique for the verification of temporal control flow safety properties. We prove that the extracted models soundly over-approximate the program behaviour w.r.t. sequences of method invocations and exceptions. Therefore, the properties that are established with the compositional technique over the control flow graphs also hold for the programs. We implement the algorithm as ConFlEx, and evaluate the tool on a number of test cases.The second part presents a technique to generate program models from incomplete software systems, i.e., programs where the implementation of at least one of the components is not available. We first define a framework to represent incomplete Java bytecode programs, and extend the algorithm presented in the first part to handle missing code. Then, we introduce refinement rules, i.e., conditions for instantiating the missing code, and prove that the rules preserve properties established over control flow graphs extracted from incomplete programs. We have extended ConFlEx to support the new definitions, and re-evaluate the tool, now over test cases of incomplete programs.The third part addresses the verification of multithreaded programs. We present a technique to prove the following property of synchronization with condition variables: "If every thread synchronizing under the same condition variables eventually enters its synchronization block, then every thread will eventually exit the synchronization". To support the verification, we first propose SyncTask, a simple intermediate language for specifying synchronized parallel computations. Then, we propose an annotation language for Java programs to assist the automatic extraction of SyncTask programs, and show that, for correctly annotated programs, the above-mentioned property holds if and only if the corresponding SyncTask program terminates. We reduce the termination problem into a reachability problem on Coloured Petri Nets. We define an algorithm to extract nets from SyncTask programs, and show that a program terminates if and only if its corresponding net always reaches a particular set of dead configurations. The extraction of SyncTask programs and their translation into Petri nets is implemented as the STaVe tool. We evaluate the technique by feeding annotated Java programs to STaVe, then verifying the extracted nets with a standard Coloured Petri Net analysis tool

Abstract [sv]

Den här avhandlingen studerar automatisk konstruktion av abstrakta modeller för formell verifikation av program skrivna i verkliga programmeringsspråk. Avhandlingen består av tre delar som involverar olika typer av program, programmeringsspråk, verifikationsscenarier, programmodeller och egenskaper.Del ett presenterar en algoritm för generation av flödesgrafer från sekventiella program i Java bytekod. Graferna är skräddarsydda för en kompositionell teknik för verifikationen av temporala kontrollflödens säkerhetsegenskaper. Vi visar att de extraherade modellerna sunt överapproximerar programbeteenden med avseende på sekvenser av metodanrop och -undantag. Således gäller egenskaperna som kan fastställas genom kompositionstekniken över kontrollflöden även för programmen. Vi implementerar dessutom algoritmen i form av verktyget ConFlEx och utvärderar verktyget på ett antal testfall.Del två presenterar en teknik för att generera modeller av ofullständiga program. Det vill säga, program där implementationen av åtminstone en komponent inte är tillgänglig. Vi definierar ett ramverk för att representera ofullständiga Java bytekodsprogram och utökar algoritmen från del ett till att hantera ofullständig kod.  Därefter presenterar vi raffineringsregler - villkor för att instansiera den saknade koden - och bevisar att reglerna bevarar relevanta egenskaper av kontrollflödesgrafer. Vi har dessutom utökat ConFlEx till att stödja de nya definitionerna och har omvärderat verktyget på testfall av ofullständiga program.Del tre angriper verifikation av multitrådade program. Vi presenterar en teknik för att bevisa följande egenskap för synkronisering med vilkorsvariabler: "Om varje trådsynkronisering under samma villkor så småningom stiger in i sitt synkroniseringsblock så kommer varje tråd också till slut lämna synkroniseringen". För att stödja verifikationen så introducerar vi först SyncTask - ett enkelt mellanliggande språk för att specificera synkronisering av parallella beräkningar. Därefter presenterar vi ett annoteringsspråk för Java som tillåter automatisk extrahering av SyncTask-program och visar att egenskapen gäller om och endast om motsvarande SyncTask-program terminerar. Vi reducerar termineringsproblemet till ett nåbarhetsproblem på färgade Petrinät samt definierar en algoritm som skapar Petrinät från SyncTask-program där programmet terminerar om och endast om nätet alltid når en särskild mängd av döda konfigurationer. Extraktionen av SyncTask-program och deras motsvarande Petrinät är implementerade i form av verktyget STaVe.  Slutligen utvärderar vi verktyget genom att mata annoterade.

Place, publisher, year, edition, pages
Stockholm: KTH Royal Institute of Technology, 2015. p. viii, 118
Series
TRITA-CSC-A, ISSN 1653-5723 ; 2015:16
Keywords
Software Verification, Static Analysis, Program Models, Petri Nets, Compositional Verification, Concurrency
National Category
Computer Systems
Research subject
Computer Science
Identifiers
urn:nbn:se:kth:diva-176286 (URN)978-91-7595-761-6 (ISBN)
Public defence
2015-12-04, F3, Lindstedtsvägen 26, KTH, Stockholm, 14:00 (English)
Opponent
Supervisors
Note

QC 20151101

Available from: 2015-11-03 Created: 2015-11-02 Last updated: 2022-06-23Bibliographically approved
de Carvalho Gomes, P., Picoco, A. & Gurov, D. (2014). Sound Control Flow Graph Extraction from Incomplete Java Bytecode Programs. In: Stefania Gnesi and Arend Rensink (Ed.), Fundamental Approaches to Software Engineering: 17th International Conference, FASE 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5-13, 2014, Proceedings. Paper presented at 17th International Conference, FASE 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5-13, 2014 (pp. 215-229). Springer Berlin/Heidelberg
Open this publication in new window or tab >>Sound Control Flow Graph Extraction from Incomplete Java Bytecode Programs
2014 (English)In: Fundamental Approaches to Software Engineering: 17th International Conference, FASE 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5-13, 2014, Proceedings / [ed] Stefania Gnesi and Arend Rensink, Springer Berlin/Heidelberg, 2014, p. 215-229Conference paper, Published paper (Refereed)
Abstract [en]

The modular analysis of control flow of incompleteJava bytecode programs is challenging, mainly because of the complex semantics of the language,and the unknown inter-dependencies between the available and unavailable components.In this paper we describe a technique for incremental, modular extraction ofcontrol flow graphs that are provably sound w.r.t.~sequences of method invocations and exceptions.The extracted models are suitable for various program analyses,in particular model-checking of temporal control flow safety properties.Soundness comes at the price of over-approximation,potentially giving rise to false positives reports during verification.Still, our technique supports incremental refinement of the already extracted models,as more components code becomes available.The extraction has been implemented as the ConFlex tool, and test-cases show its utility and efficiency.

Place, publisher, year, edition, pages
Springer Berlin/Heidelberg, 2014
Series
Lecture Notes in Computer Science ; 8411
Keywords
Incomplete Programs, Java Bytecode, Program Models, Formal Verification
National Category
Computer Sciences
Research subject
Computer Science; Computer Science
Identifiers
urn:nbn:se:kth:diva-154786 (URN)10.1007/978-3-642-54804-8_15 (DOI)000719817300015 ()2-s2.0-84900555960 (Scopus ID)
Conference
17th International Conference, FASE 2014, Held as Part of the European Joint Conferences on Theory and Practice of Software, ETAPS 2014, Grenoble, France, April 5-13, 2014
Note

Part of proceedings ISBN 978-3-642-54803-1

QC 20141117

Available from: 2014-10-27 Created: 2014-10-27 Last updated: 2022-09-23Bibliographically approved
Borges Vieira, A., Couto da Silva, A. P., Henrique, F., Goncalves, G. & de Carvalho Gomes, P. (2013). SopCast P2P live streaming: live session traces and analysis. In: Proceedings of the 4th ACM Multimedia Systems Conference: MMSys 2013. Paper presented at 4th ACM Multimedia Systems Conference, MMSys 2013; Oslo, Norway, 28 February - 1 March 2013 (pp. 125-130). Association for Computing Machinery (ACM)
Open this publication in new window or tab >>SopCast P2P live streaming: live session traces and analysis
Show others...
2013 (English)In: Proceedings of the 4th ACM Multimedia Systems Conference: MMSys 2013, Association for Computing Machinery (ACM), 2013, p. 125-130Conference paper, Published paper (Refereed)
Abstract [en]

P2P-TV applications have attracted a lot of attention fromthe research community in the last years. Such systemsgenerate a large amount of data which impacts the networkperformance. As a natural consequence, characterizingthese systems has become a very important task to developbetter multimedia systems. However, crawling data fromP2P live streaming systems is particularly challenging bythe fact that most of these applications have privateprotocols. In this work, we present a set of logs from a verypopular P2P live streaming application, the SopCast. Wedescribe our crawling methodology, and present a briefSopCast characterization. We believe that our logs and thecharacterization can be used as a starting point to thedevelopment of new live streaming systems.

Place, publisher, year, edition, pages
Association for Computing Machinery (ACM), 2013
Keywords
P2P Live Streaming, SopCast
National Category
Communication Systems
Identifiers
urn:nbn:se:kth:diva-132192 (URN)10.1145/2483977.2483993 (DOI)2-s2.0-84877931731 (Scopus ID)978-1-4503-1894-5 (ISBN)
Conference
4th ACM Multimedia Systems Conference, MMSys 2013; Oslo, Norway, 28 February - 1 March 2013
Note

QC 20140410

Available from: 2013-10-23 Created: 2013-10-23 Last updated: 2022-06-23Bibliographically approved
Borges Vieira, A., De Carvalho Gomes, P., Nacif, J., Rodrigo, M., Almeida, J. M. & Campos, S. (2012). Characterizing SopCast Client Behavior. Computer Communications, 35(8), 1004-1016
Open this publication in new window or tab >>Characterizing SopCast Client Behavior
Show others...
2012 (English)In: Computer Communications, ISSN 0140-3664, E-ISSN 1873-703X, Vol. 35, no 8, p. 1004-1016Article in journal (Refereed) Published
Abstract [en]

Live streaming media applications are becoming more popular each day. Indeed, some important TV channels already broadcast their live content on the Internet. In such scenario, Peer-to-Peer (P2P) applications are very attractive as platforms to distribute live content to large client populations at low costs. A thorough understanding of how clients of such applications typically behave, particularly in terms of dynamic patterns, can provide useful insights into the design of more cost-effective and robust solutions. With the goal of extending the current knowledge of how clients of live streaming applications typically behave, this paper provides a detailed characterization of clients of SopCast, a currently very popular P2P live streaming application. We have analyzed a series of SopCast transmissions collected using PlanetLab. These transmissions are categorized into two different types, namely, major event live transmissions and regular (or non-event) live transmissions. Our main contributions are: (a) a detailed model of client behavior in P2P live streaming applications, (b) the characterization of all model components for two different types of transmissions in the SopCast application, (c) the identification of qualitative and quantitative similarities and differences in the typical client behavior across different transmissions, and (d) the determination of parameter values for the proposed client behavior model to support the design of realistic synthetic workload generators.

Keywords
Client behavior, Internet measurement, Live streaming, Peer-to-peer
National Category
Computer and Information Sciences
Research subject
SRA - ICT
Identifiers
urn:nbn:se:kth:diva-63161 (URN)10.1016/j.comcom.2012.02.012 (DOI)000303639800010 ()2-s2.0-84859540957 (Scopus ID)
Note
QC 20120416Available from: 2012-01-22 Created: 2012-01-22 Last updated: 2022-06-24Bibliographically approved
Amighi, A., de Carvalho Gomes, P., Gurov, D. & Huisman, M. (2012). Provably Correct Control-Flow Graphs from Java Programs with Exceptions. KTH Royal Institute of Technology and University of Twente
Open this publication in new window or tab >>Provably Correct Control-Flow Graphs from Java Programs with Exceptions
2012 (English)Report (Other academic)
Abstract [en]

We present an algorithm to extract flow graphs from Java bytecode, including exceptional control flows. We prove its correctness, meaning that the behavior of the extracted control-flow graph is a sound over-approximation of the behavior of the original program. Thus any safety property that holds for the extracted control-flow graph also holds for the original program. This makes control-flow graphs suitable for performing various static analyses, such as model checking.The extraction is performed in two phases. In the first phase the program is transformed into a BIR program, a stack-less intermediate representation of Java bytecode, from which the control-flow graph is extracted in the second phase. We use this intermediate format because it results in compact flow graphs, with provably correct exceptional control flow. To prove the correctness of the two-phase extraction, we also define an idealized extraction algorithm, whose correctness can be proven directly. Then we show that the behavior of the control-flow graph extracted via the intermediate representation is an over-approximation of the behavior of the directly extracted graphs, and thus of the original program. We implemented the indirect extraction as the CFGEx tool and performed several test-cases to show the efficiency of the algorithm.

Place, publisher, year, edition, pages
KTH Royal Institute of Technology and University of Twente, 2012. p. 30
Keywords
Software Verification, Static Analysis, Program Models
National Category
Computer Systems
Research subject
SRA - ICT
Identifiers
urn:nbn:se:kth:diva-61188 (URN)
Projects
CVPP
Funder
ICT - The Next Generation
Note

QC 20120116

Available from: 2012-01-16 Created: 2012-01-16 Last updated: 2022-06-24Bibliographically approved
Amighi, A., de Carvalho Gomes, P., Gurov, D. & Huisman, M. (2012). Sound Control-Flow Graph Extraction for Java Programs with Exceptions. In: Software Engineering and Formal Methods: 10th International Conference, SEFM 2012, Thessaloniki, Greece, October 1-5, 2012. Proceedings. Paper presented at 10th International Conference on Software Engineering and Formal Methods, SEFM 2012; Thessaloniki; 1 October 2012 through 5 October 2012 (pp. 33-47). Springer Berlin/Heidelberg
Open this publication in new window or tab >>Sound Control-Flow Graph Extraction for Java Programs with Exceptions
2012 (English)In: Software Engineering and Formal Methods: 10th International Conference, SEFM 2012, Thessaloniki, Greece, October 1-5, 2012. Proceedings, Springer Berlin/Heidelberg, 2012, p. 33-47Conference paper, Published paper (Refereed)
Abstract [en]

We present an algorithm to extract control-flow graphs from Java bytecode, considering exceptional flows. We then establish its correctness: the behavior of the extracted graphs is shown to be a sound over-approximation of the behavior of the original programs. Thus, any temporal safety property that holds for the extracted control-flow graph also holds for the original program. This makes the extracted graphs suitable for performing various static analyses, in particular model checking. The extraction proceeds in two phases. First, we translate Java bytecode into BIR, a stack-less intermediate representation. The BIR transformation is developed as a module of Sawja, a novel static analysis framework for Java bytecode. Besides Sawja’s efficiency, the resulting intermediate representation is more compact than the original bytecode and provides an explicit representation of exceptions. These features make BIR a natural starting point for sound control-flow graph extraction. Next, we formally define the transformation from BIR to control-flow graphs, which (among other features) considers the propagation of uncaught exceptions within method calls. We prove the correctness of the two-phase extraction by suitably combining the properties of the two transformations with those of an idealized control-flow graph extraction algorithm, whose correctness has been proved directly. The control-flow graph extraction algorithm is implemented in the ConFlEx tool. A number of test-cases show the efficiency and the utility of the implementation.

Place, publisher, year, edition, pages
Springer Berlin/Heidelberg, 2012
Series
Lecture Notes in Computer Science, ISSN 0302-9743 ; 7504
Keywords
Software Verification, Static Analysis, Program Models, Control-Flow Graphs, Java bytecode
National Category
Computer Systems
Research subject
SRA - E-Science (SeRC)
Identifiers
urn:nbn:se:kth:diva-104238 (URN)10.1007/978-3-642-33826-7_3 (DOI)2-s2.0-84868256995 (Scopus ID)978-3-642-33825-0 (ISBN)
Conference
10th International Conference on Software Engineering and Formal Methods, SEFM 2012; Thessaloniki; 1 October 2012 through 5 October 2012
Funder
ICT - The Next GenerationSwedish e‐Science Research Center
Note

QC 20121213

Available from: 2012-10-30 Created: 2012-10-30 Last updated: 2022-06-24Bibliographically approved
Organisations
Identifiers
ORCID iD: ORCID iD iconorcid.org/0000-0002-6468-1605

Search in DiVA

Show all publications