QUEST - A Quest for Reliability in Generic Software Components

Period: 
January 2010 to July 2013
Funded by: 
FCT (PTDC/EIA-EIA/103103/2008)
Description: 

QUEST diagram

 

The importance of data abstractions (DAs) in computing has long been recognised. The use of structurally complex data is prevalent in computer programs and modern software is no exception: for example, web-traversal programs operate on graphs that encode web pages, and IDEs manipulate abstract syntax trees corresponding to program representations.

Developers can either program their own implementations of the required DAs, or use components off-the-shelf (COTS) available in a myriad of libraries and frameworks. However, we have been assisting to an increasing tendency to rely on code reuse, most of it produced by open consortiums, without any sort of certification. In both cases, it is important that developers, possibly assisted by practical tools, can easily gain confidence about the reliability of the produced/reused code. It is our understanding that this vision requires that developers have available, integrated in their development environments:

  1. practical notations to formally specify DAs, and
  2. effective techniques, simple to use and non time consuming, that allow to gain confidence that a given set of components correctly implements the specified DAs.

This is the general problem we propose to address in the context of QUEST.

The described problem has been addressed by several researchers in different ways but, as solutions available are not fully satisfactory, it continues to attract attention. Recent publications in top conferences and journals demonstrate our point. QUEST’s innovative aspects are mainly related with the nature of the components that will be addressed — generic components, i.e., components that, through instantiation, can be used in different scenarios. Our focus will be on components programmed in Java, one of today´s most popular programming languages (actually ranking first at TIOBE Index), but we seek techniques that can be applied to other modern OO languages. We are especially interested in addressing generic components because, although Java generic implementations of DAs became common since generic types were introduced in the language, available analysis solutions are not applicable to them. Other key concern is that the developed techniques have to be applicable to components in a black-box manner so that their reliability can be assessed even if executable code and documentation is all that is available (as often happens with COTS). Finally, we also plan to contribute with techniques that in the presence of a failure help to interpret it and to locate the errors in the code that may have caused it.

 

The aim is to contribute with an approach to the problem considering that:

  1. DAs are specified in terms of property-driven specifications, independent of the programming language used for development;
  2. correctness of a component is analysed through runtime checking the specified properties;
  3. effectiveness of the process, while keeping it completely automated, requires the automatic generation and execution of effective test suites; test generation can be guided by the specification, also taking into account the specificity of the target.

The main results of the project will be the development and integration of different techniques resulting into a push-button approach to reliability analysis of Java implementations of DAs. These techniques will be made available in the form of tools integrated in a popular Java IDE.