Publication:
Balancing performance and reliability in software components

Loading...
Thumbnail Image
Identifiers
Publication date
2020-10
Defense date
2020-10-08
Journal Title
Journal ISSN
Volume Title
Publisher
Impact
Google Scholar
Export
Research Projects
Organizational Units
Journal Issue
Abstract
Over the last few years, software complexity has grown exponentially followed by a rise in the number of reported defects. In general, the cost of detecting and mitigating a defect in a software system increases non-linearly as it progresses through the lifecycle of a project and may cause a substantial loss. Consequently, it is desirable to detect software defects as soon as possible with the aim of minimizing the associated costs. In this regard, design-by-contract aids in specifying assumptions made by a software component, both from the provider and consumer perspectives. Such specification enables the verification of the correct use of an interface. However, this methodology is under-used and may have other applications in software verification and optimization. While this may be true, software reliability can also be attained by properly hiding the complexity related to the use of low-level interfaces. Indeed, the development of distributed scientific applications that execute among multiple multi-core nodes poses several challenges compared to sequential programming. While the use of parallel pattern libraries is becoming popular, many distributed applications still rely directly on the MPI model. Additionally, while many organizations use C/C++ for the implementation of high-performance applications, it is not uncommon to see prototypes written in an interpreted language during the early stages. In some cases, bridging the gap between the prototype and the production software is attained by the use of a C/C++ interpreter. However, state-of-the-art interpreters still have some limitations. To tackle these issues, this thesis aims at reducing the number of software defects, either by detecting them or by avoiding the introduction of new problems. This way, resulting programs have fewer defects, thus reducing the development efforts incurred by the debugging of large applications. In short, in this thesis, we contribute with the following. First, we introduce a prototype for contract based programming for the C++ programming language which is aligned with the latest proposals from the C++ standards committee. Second, we provide a framework that leverages C++ contracts to aid in the verification of concurrent shared-memory data structures. Third, we extend a generic parallel pattern interface to enable porting a shared-memory parallel application to distributed-memory with minimum efforts. Finally, we provide a methodology to relax the one definition rule in C++ interpreters, thus allowing users to give a new definition for a declaration. Evaluations show that these contributions help to reduce both, the presence of software defects and the required development efforts.
Durante los últimos años, la complejidad del software ha crecido exponencialmente seguido de un ascenso en el número de defectos informados. En general, el coste de detectar y mitigar un defecto en un sistema software aumenta de forma no-lineal al progresar a través del ciclo de vida de un proyecto, y puede causar una pérdida substancial. En consecuencia, es deseable detectar los defectos de software tan pronto como sea posible con el objetivo de minimizar el coste asociado. En este sentido, el diseño por contrato ayuda a especificar las asunciones hechas por un componente software desde ambas perspectivas, la del suministrador y la del consumidor. Tales especificaciones permiten la verificación del uso correcto de una interfaz. Sin embargo, esta metodología está infrautilizada y puede tener otras aplicaciones en verificación y optimización de software. Por otro lado, la fiabilidad del software también puede conseguirse ocultando adecuadamente la complejidad derivada del uso de interfaces de bajo nivel. A este respecto, el desarrollo de aplicaciones científicas distribuidas que ejecuten en múltiples máquinas multi-núcleo plantea varios desafíos comparado con la programación secuencial. Aunque el uso de bibliotecas de patrones paralelos se está volviendo popular, algunas aplicaciones distribuidas aún confían directamente en el modelo MPI. Además, mientras que muchas organizaciones usan C/C++ para la implementación de aplicaciones de alto rendimiento, no es raro ver prototipos escritos en un lenguaje interpretado durante las primeras etapas de desarrollo. En algunos casos, el cierre de la brecha entre el prototipo y el software de producción se consigue con el uso de un intérprete de C/C++. Sin embargo, los últimos intérpretes aún tienen algunas limitaciones. Para abordar estas cuestiones, esta tesis busca reducir el número de defectos software, ya sea detectándolos o evitando la introducción de nuevos problemas. De esta manera, los programas resultantes tienen menos defectos, reduciendo así los esfuerzos de desarrollo y el tiempo de depuración de grandes aplicaciones. En resumen, esta tesis contribuye con lo siguiente. En primer lugar, se presenta un prototipo de soporte a la programación basada en contratos para el lenguaje C++, de acuerdo con las últimas propuestas del comité de normalización de dicho lenguaje. En segundo lugar, se propone un marco de trabajo que aprovecha dicha característica para ayudar en la verificación de estructuras de datos concurrentes en memoria compartida. En tercer lugar, se extiende una interfaz genérica de patrones paralelos que permite portar una aplicación paralela de memoria compartida al modelo de memoria distribuida con un esfuerzo mínimo. Finalmente, se define una metodología para relajar la regla de definición única (ODR) en intérpretes de C++, permitiendo así que los usuarios puedan suministrar una nueva definición para una declaración. La evaluación demuestra que estas contribuciones ayudan a reducir tanto la presencia de defectos en el software como el esfuerzo de desarrollo requerido.
Description
Mención Internacional en el título de doctor
Keywords
Software reliability, MPI model, C++ programming language
Bibliographic citation
Collections