Checking the reliability of socket based communication software

  • Authors:
  • Pedro de la Cámara;María del Mar Gallardo;Pedro Merino;David Sanán

  • Affiliations:
  • University of Malaga, Dpto. de Lenguajes y Ciencias de la Computacion, 29071, Malaga, Spain;University of Malaga, Dpto. de Lenguajes y Ciencias de la Computacion, 29071, Malaga, Spain;University of Malaga, Dpto. de Lenguajes y Ciencias de la Computacion, 29071, Malaga, Spain;University of Malaga, Dpto. de Lenguajes y Ciencias de la Computacion, 29071, Malaga, Spain

  • Venue:
  • International Journal on Software Tools for Technology Transfer (STTT) - Special Section on FMICS 05
  • Year:
  • 2009

Quantified Score

Hi-index 0.00

Visualization

Abstract

Locating potential execution errors in software is gaining more attention due to the economical and social impact of software crashes. For this reason, many software engineers are now in need of automatic debugging tools in their development environments. Fortunately, the work on formal method technologies during the past 25 years has produced a number of techniques and tools that can make the debugging task almost automatic, using standard computer equipment and with a reasonable response time. In particular, verification techniques like model-checking that were traditionally employed for formal specifications of the software can now be directly employed for real source code. Due to the maturity of model-checking technology, its application to real software is now a promising and realistic approach to increase software quality. There are already some successful examples of tools for this purpose that mainly work with self-contained programs (programs with no system-calls). However, verifying software that uses external functionality provided by the operating system via API s is currently a challenging trend. In this paper, we propose a method for using the tool spin to verify C software systems that use services provided by the operating system thorough a given API. Our approach consists in building a model of the underlying operating system to be joined with the original C code in order to obtain the input for the model checker spin. The whole modeling process is transparent for the C programmer, because it is performed automatically and without special syntactic constraints in the input C code. Regarding verification, we consider optimization techniques suitable for this application domain, and we guarantee that the system only reports potential (non-spurious) errors. We present the applicability of our approach focusing on the verification of distributed software systems that use the API Socket and the network protocol stack TCP/IP for communications. In order to ensure correctness, we define and use a formal semantics of the API to conduct the construction of correct models.