Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Jan Fiedor is active.

Publication


Featured researches published by Jan Fiedor.


runtime verification | 2012

ANaConDA: A Framework for Analysing Multi-threaded C/C++ Programs on the Binary Level

Jan Fiedor; Tomáš Vojnar

This paper presents the ANaConDA framework that allows one to easily create dynamic analysers for analysing multi-threaded C/C++ programs on the binary level. ANaConDA also supports noise injection techniques to increase chances to find concurrency-related errors in testing runs. ANaConDA is built on top of the Intel’s framework PIN for instrumenting binary code. ANaConDA can be instantiated for dealing with programs using various thread models. Currently, it has been instantiated for programs using the pthread library as well as the Win32 API for dealing with threads.


Software Testing, Verification & Reliability | 2015

Advances in noise-based testing of concurrent software

Jan Fiedor; Vendula Hrubá; Bohuslav Křena; Zdeněk Letko; S. Ur; Tomáš Vojnar

Testing of concurrent software written in programming languages like Java and C/C++ is a highly challenging task owing to the many possible interactions among threads. A simple, cheap, and effective approach that addresses this challenge is testing with noise injection, which influences the scheduling so that different interleavings of concurrent actions are witnessed. In this paper, multiple results achieved recently in the area of noise‐injection‐based testing by the authors are presented in a unified and extended way. In particular, various concurrency coverage metrics are presented first. Then, multiple heuristics for solving the noise placement problem (i.e. where and when to generate noise) as well as the noise seeding problem (i.e. how to generate the noise) are introduced and experimentally evaluated. In addition, several new heuristics are proposed and included into the evaluation too. Recommendations on how to set up noise‐based testing for particular scenarios are then given. Finally, a novel use of the genetic algorithm for finding suitable combinations of the many parameters of tests and noise techniques is presented. Copyright


parallel and distributed systems testing analysis and debugging | 2012

Noise-based testing and analysis of multi-threaded C/C++ programs on the binary level

Jan Fiedor; Tomáš Vojnar

This paper aims at allowing noise-based testing and dynamic analysis of multi-threaded C/C++ programs on the binary level. First, several problems of monitoring multi-threaded C/C++ programs on the binary level are discussed together with their possible solutions. Next, a brief overview of noise injection techniques is provided along with a proposal of improving them using a fine-grained combination of several noise injection techniques within a single program. The proposed ideas have been implemented in a prototype way using the PIN framework for Intel binaries and tested on a~set of multi-threaded C/C++ programs. The obtained experimental evidence justifying the proposed solutions and illustrating the effect of various noise settings in the context of multi-threaded C/C++ programs is discussed.


computer aided systems theory | 2011

A uniform classification of common concurrency errors

Jan Fiedor; Bohuslav K; ena; Zdeněk Letko; Tom; Vojnar

Nowadays, multi-threaded programs are quite common and so are concurrency-related errors. Many works devoted to detection of concurrency errors have been published in recent years, and many of them presented definitions of concurrency errors that the proposed algorithms are able to handle. These definitions are usually expressed in different terms suitable for a description of the particular considered algorithms, and they surprisingly often differ from each other in the meaning they assign to particular errors. To help understanding the errors and developing techniques for detecting them, this paper strives to provide a uniform taxonomy of concurrency errors common in current programs, with a stress on those written in Java, together with a brief overview of techniques so far proposed for detecting such errors.


international conference on software testing verification and validation | 2017

Verifying Concurrent Programs Using Contracts

Ricardo J. Dias; Carla Ferreira; Jan Fiedor; João Lourenço; Aleš Smrčka; Diogo Sousa; Tomáš Vojnar

The central notion of this paper is that of contracts for concurrency, allowing one to capture the expected atomicity of sequences of method or service calls in a concurrent program. The contracts may be either extracted automatically from the source code, or provided by developers of libraries or software modules to reflect their expected usage in a concurrent setting. We start by extending the so-far considered notion of contracts for concurrency in several ways, improving their expressiveness and enhancing their applicability in practice. Then, we propose two complementary analyses—a static and a dynamic one—to verify programs against the extended contracts. We have implemented both approaches and present promising experimental results from their application on various programs, including real-world ones where our approach unveiled previously unknown errors.


computer aided systems theory | 2015

Dynamic Validation of Contracts in Concurrent Code

Jan Fiedor; Zdeněk Letko; João Lourenço; Tomáš Vojnar

Multi-threaded programs allow one to achieve better performance by doing a lot of work in parallel using multiple threads. Such parallel programs often contain code blocks that a thread must execute atomically, i.e., with no interference from the other threads of the program. Failing to execute these code blocks atomically leads to errors known as atomicity violations. However, frequently it not obvious to tell when a piece of code should be executed atomically, especially when that piece of code contains calls to some third-party library functions, about which the programmer has little or no knowledge at all. One solution to this problem is to associate a contract with such a library, telling the programmer how the library functions should be used, and then check whether the contract is indeed respected. For contract validation, static approaches have been proposed, with known limitations on precision and scalability. In this paper, we propose a dynamic method for contract validation, which is more precise and scalable than static approaches.


runtime verification | 2018

Discovering Concurrency Errors

João M. Lourenço; Jan Fiedor; Bohuslav Křena; Tomáš Vojnar

Lots of concurrent software is being developed for the now ubiquitous multicore processors. And concurrent programming is difficult because it is quite easy to introduce errors that are really hard to diagnose and fix. One of the main obstacles to concurrent programming is that threads are scheduled nondeterministically and their interactions may become hard to predict and to devise. This chapter addresses the nature of concurrent programming and some classes of concurrency errors. It discusses the application of dynamic program analysis techniques to detect, locate and diagnose some common concurrency errors like data races, atomicity violations and deadlocks. This chapter also mentions some techniques that can help with quality assurance of concurrent programs, regardless of any particular class of concurrency errors, like noise injection and systematic testing, and it is closed by some prospects of concurrent software development.


mathematical and engineering methods in computer science | 2014

On Monitoring C/C++ Transactional Memory Programs

Jan Fiedor; Zdeněk Letko; João Lourenço; Tomáš Vojnar

Transactional memory (TM) is an increasingly popular technique for synchronising threads in multi-threaded programs. To address both correctness and performance-related issues of TM programs, one needs to monitor and analyse their execution. However, monitoring concurrent programs (including TM programs) may have a non-negligible impact on their behaviour, which may hamper the objectives of the intended analysis. In this paper, we propose several approaches for monitoring TM programs and study their impact on the behaviour of the monitored programs. The considered approaches range from specialised lightweight monitoring to generic heavyweight monitoring. The implemented monitoring tools are publicly available to the scientific community, and the implementation techniques used for lightweight monitoring of TM programs may be used as an inspiration for developing other specialised lightweight monitors.


runtime verification | 2011

DA-BMC: a tool chain combining dynamic analysis and bounded model checking

Jan Fiedor; Vendula Hrubá; Bohuslav Křena; Tomáš Vojnar

This paper presents the DA-BMC tool chain that allows one to combine dynamic analysis and bounded model checking for finding synchronisation errors in concurrent Java programs. The idea is to use suitable dynamic analyses to identify executions of a program being analysed that are suspected to contain synchronisation errors. Some points in such executions are recorded, and then the executions are reproduced in a model checker, using its capabilities to navigate among the recorded points. Subsequently, bounded model checking in a vicinity of the replayed execution is used to confirm whether there are some real errors in the program and/or to debug the problematic execution of the program.


international symposium on software testing and analysis | 2018

Advances in the ANaConDA framework for dynamic analysis and testing of concurrent C/C++ programs

Jan Fiedor; Monika Mužikovská; Aleš Smrčka; Ondřej Vašíček; Tomáš Vojnar

The paper presents advances in the ANaConDA framework for dynamic analysis and testing of concurrent C/C++ programs. ANaConDA comes with several built-in analysers, covering detection of data races, deadlocks, or contract violations, and allows for an easy creation of new analysers. To increase the variety of tested interleavings, ANaConDA offers various noise injection techniques. The framework performs the analysis on a binary level, thus not requiring the source code of the program to be available. Apart from many academic experiments, ANaConDA has also been successfully used to discover various errors in industrial code.

Collaboration


Dive into the Jan Fiedor's collaboration.

Top Co-Authors

Avatar

Tomáš Vojnar

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Zdeněk Letko

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Bohuslav Křena

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

João Lourenço

Universidade Nova de Lisboa

View shared research outputs
Top Co-Authors

Avatar

Aleš Smrčka

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Vendula Hrubá

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Bohuslav K

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Marek Gach

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Milan Če

Brno University of Technology

View shared research outputs
Top Co-Authors

Avatar

Monika Mužikovská

Brno University of Technology

View shared research outputs
Researchain Logo
Decentralizing Knowledge