Network


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

Hotspot


Dive into the research topics where Nikolai Kosmatov is active.

Publication


Featured researches published by Nikolai Kosmatov.


Formal Aspects of Computing | 2015

Frama-C: A software analysis perspective

Florent Kirchner; Nikolai Kosmatov; Virgile Prevosto; Julien Signoles; Boris Yakobowski

Frama-C is a source code analysis platform that aims at conducting verification of industrial-size C programs. It provides its users with a collection of plug-ins that perform static analysis, deductive verification, and testing, for safety- and security-critical software. Collaborative verification across cooperating plug-ins is enabled by their integration on top of a shared kernel and datastructures, and their compliance to a common specification language. This foundational article presents a consolidated view of the platform, its main and composite analyses, and some of its industrial achievements.


acm symposium on applied computing | 2013

Common specification language for static and dynamic analysis of C programs

Mickaël Delahaye; Nikolai Kosmatov; Julien Signoles

Various combinations of static and dynamic analysis techniques were recently shown to be beneficial for software verification. A frequent obstacle to combining different tools in a completely automatic way is the lack of a common specification language. Our work proposes to translate a Pre-Post based specification into executable C code. This paper presents e-acsl, subset of the acsl specification language for C programs, and its automatic translator into C implemented as a Frama-C plug-in. The resulting C code is executable and can be used by a dynamic analysis tool. We illustrate how the PathCrawler test generation tool automatically treats such pre- and postconditions specified as C functions.


acm symposium on applied computing | 2012

Program slicing enhances a verification technique combining static and dynamic analysis

Omar Chebaro; Nikolai Kosmatov; Alain Giorgetti; Jacques Julliand

Recent research proposed efficient methods for software verification combining static and dynamic analysis, where static analysis reports possible runtime errors (some of which may be false alarms) and test generation confirms or rejects them. However, test generation may time out on real-sized programs before confirming some alarms as real bugs or rejecting some others as unreachable. To overcome this problem, we propose to reduce the source code by program slicing before test generation. This paper presents new optimized and adaptive usages of program slicing, provides underlying theoretical results and the algorithm these usages rely on. The method is implemented in a tool prototype called sante (Static ANalysis and TEsting). Our experiments show that our method with program slicing outperforms previous combinations of static and dynamic analysis. Moreover, simplifying the program makes it easier to analyze detected errors and remaining alarms.


runtime verification | 2013

An Optimized Memory Monitoring for Runtime Assertion Checking of C Programs

Nikolai Kosmatov; Guillaume Petiot; Julien Signoles

Runtime assertion checking provides a powerful, highly automatizable technique to detect violations of specified program properties. However, monitoring of annotations for pointers and memory locations (such as being valid, initialized, in a particular block, with a particular offset, etc.) is not straightforward and requires systematic instrumentation and monitoring of memory-related operations.


international conference on software testing verification and validation | 2014

Efficient Leveraging of Symbolic Execution to Advanced Coverage Criteria

Sébastien Bardin; Nikolai Kosmatov; François Cheynier

Automatic test data generation (ATG) is a major topic in software engineering. In this paper, we bridge the gap between the coverage criteria supported by state-of-the-art white-box ATG technologies, especially Dynamic Symbolic Execution, and advanced coverage criteria found in the literature. We define a new testing criterion, label coverage, and prove it to be both expressive and amenable to efficient automation. We propose several innovative techniques resulting in an effective blackbox support for label coverage, while a direct approach induces an exponential blow-up of the search space. Experiments show that our optimisations yield very significant savings allowing to leverage ATG to label coverage with only a slight overhead.


automated software engineering | 2014

Behind the scenes in SANTE: a combination of static and dynamic analyses

Omar Chebaro; Pascal Cuoq; Nikolai Kosmatov; Bruno Marre; Anne Pacalet; Nicky Williams; Boris Yakobowski

While the development of one software verification tool is often seen as a difficult task, the realization of a tool combining various verification techniques is even more complex. This paper presents an innovative tool for verification of C programs called Sante (Static ANalysis and TEsting). We show how several tools based on heterogeneous techniques such as abstract interpretation, dependency analysis, program slicing, constraint solving and test generation can be combined within one tool. We describe the integration of these tools and discuss particular aspects of each underlying tool that are beneficial for the whole combination.


runtime verification | 2013

A Lesson on Runtime Assertion Checking with Frama-C

Nikolai Kosmatov; Julien Signoles

Runtime assertion checking provides a powerful, highly automatizable technique to detect violations of specified program properties. This paper provides a lesson on runtime assertion checking with Frama-C, a publicly available toolset for analysis of C programs. We illustrate how a C program can be specified in executable specification language e-acsl and how this specification can be automatically translated into instrumented C code suitable for monitoring and runtime verification of specified properties. We show how various errors can be automatically detected on the instrumented code, including C runtime errors, failures in postconditions, assertions, preconditions of called functions, and memory leaks. Benefits of combining runtime assertion checking with other Frama-C analyzers are illustrated as well.


tests and proofs | 2011

The sante tool: value analysis, program slicing and test generation for C program debugging

Omar Chebaro; Nikolai Kosmatov; Alain Giorgetti; Jacques Julliand

This short paper presents a prototype tool called SANTE (Static ANalysis and TEsting) implementing an original method combining value analysis, program slicing and structural test generation for verification of C programs. First, value analysis is called to generate alarms when it can not guarantee the absence of errors. Then the program is reduced by program slicing. Alarm-guided test generation is then used to analyze the simplified program(s) in order to confirm or reject alarms.


tests and proofs | 2010

Combining static analysis and test generation for C program debugging

Omar Chebaro; Nikolai Kosmatov; Alain Giorgetti; Jacques Julliand

This paper presents our ongoing work on a tool prototype called SANTE (Static ANalysis and TEsting), implementing a combination of static analysis and structural program testing for detection of run-time errors in C programs. First, a static analysis tool (Frama-C) is called to generate alarms when it cannot ensure the absence of run-time errors. Second, these alarms guide a structural test generation tool (PathCrawler) trying to confirm alarms by activating bugs on some test cases. Our experiments on real-life software show that this combination can outperform the use of each technique independently.


tests and proofs | 2016

Your Proof Fails? Testing Helps to Find the Reason

Guillaume Petiot; Nikolai Kosmatov; Bernard Botella; Alain Giorgetti; Jacques Julliand

Applying deductive verification to formally prove that a program respects its formal specification is a very complex and time-consuming task due in particular to the lack of feedback in case of proof failures. Along with a non-compliance between the code and its specification (due to an error in at least one of them), possible reasons of a proof failure include a missing or too weak specification for a called function or a loop, and lack of time or simply incapacity of the prover to finish a particular proof. This work proposes a complete methodology where test generation helps to identify the reason of a proof failure and to exhibit a counterexample clearly illustrating the issue. We define the categories of proof failures, introduce two subcategories of contract weaknesses (single and global ones), and examine their properties. We describe how to transform a formally specified C program into C code suitable for testing, and illustrate the benefits of the method on comprehensive examples. The method has been implemented in StaDy, a plugin of the software analysis platform Frama-C. Initial experiments show that detecting non-compliances and contract weaknesses allows to precisely diagnose most proof failures.

Collaboration


Dive into the Nikolai Kosmatov's collaboration.

Top Co-Authors

Avatar

Alain Giorgetti

University of Franche-Comté

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Jacques Julliand

University of Franche-Comté

View shared research outputs
Top Co-Authors

Avatar

Omar Chebaro

University of Franche-Comté

View shared research outputs
Top Co-Authors

Avatar

Guillaume Petiot

Centre national de la recherche scientifique

View shared research outputs
Top Co-Authors

Avatar

Lionel Blatter

Université Paris-Saclay

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Sébastien Bardin

Centre national de la recherche scientifique

View shared research outputs
Researchain Logo
Decentralizing Knowledge