bachelorThesis
Sistema de instrumentación estática de código fuente para mocking de funciones y objetos
Fecha
2018Autor
Tiraboschi, Andrés Agustín
Institución
Resumen
Este trabajo consiste en el desarrollo de una herramienta de unit testing para el lenguaje de programación C.
Los principales problemas que poseen este tipo de herramientas es la intrusión en el código de producción y el impacto en el rendimiento del programa a la hora de testear. Este último punto hace que, por ejemplo en sistemas embebidos los test no sean lo suficientemente confiables ya que una pequeña diferencia en el rendimiento puede tener un gran impacto en el programa. Por ello, se busca desarrollar un sistema de test que utilice mocking, es decir que cree módulos que simulan el comportamiento de módulos complejos, y además:
-Sea plataforma independiente tanto de la arquitectura como del sistema operativo.
-Requiera cero intrusión del código fuente por parte de los usuarios.
-Mínimo impacto en desempeño de la aplicación (menor o igual al de otros sistemas de mocking como google mock, gmock).
-Provea absoluto control del comportamiento a mockear (en contraposición al conjunto de funcionalidades provisto por gmock).
-Que permita mockear tanto funciones definidas por el usuario como funciones de librerías externas (por ejemplo, las del sistema).
-Que su uso no implique grandes modificaciones en el build system del proyecto.
La herramienta desarrollada en este trabajo fue creada como un plugin de GCC y requirió introducir modificaciones en el compilador. Estás modificaciones fueron verificadas y aceptadas quienes están a cargo del desarrollo del compilador y ya vienen integradas desde la versión 6.0.0 de GCC. El parche con esas modificaciones tiene como autor a Andrés Tiraboschi, fue aceptado y puede encontrarse en el siguiente link: http://permalink.gmane.org/gmane.comp.gcc.patches/342255. This work consists of the development of a unit testing tool for the programming language C.
The main problems that this type of tool has is the intrusion into the production code and the impact on the program's performance when it comes to testing. This last point makes that, for example in embedded systems the tests are not reliable enough since a small difference in performance can have a great impact on the program. For this reason, it is sought to develop a test system that uses mocking, that is to say that creates modules that simulate the behavior of complex modules, and in addition:
-Be independent platform of both the architecture and the operating system.
-Require zero intrusion of the source code by users.
-Minimal impact on application performance (less than or equal to that of other mocking systems such as google mock, gmock).
-Provide absolute control of the behavior to mock (as opposed to the set of features provided by gmock).
-Allowing you to mock both user-defined functions and functions of external libraries (for example, those of the system).
-That its use does not imply big modifications in the project's build system.
The tool developed in this work was created as a GCC plugin and required to introduce modifications in the compiler. These modifications were verified and accepted by those in charge of the development of the compiler and are already integrated from version 6.0.0 of GCC. The patch with these modifications has Andrés Tiraboschi as author, it was accepted and can be found in the following link: http://permalink.gmane.org/gmane.comp.gcc.patches/342255