\n \n \n
\n
\n\n \n \n \n \n \n Rotten Green Tests: a First Analysis.\n \n \n \n\n\n \n Delplanque, J.; Ducasse, S.; Black, A. P.; and Polito, G.\n\n\n \n\n\n\n Technical Report Inria, 2018.\n
\n\n
\n\n
\n\n
\n\n \n\n \n\n \n link\n \n \n\n bibtex\n \n\n \n \n \n abstract \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@techreport{Delp18b,\n author = {Delplanque, Julien and Ducasse, St\\'ephane and Black, Andrew P. and Polito, Guillermo},\n title = {Rotten Green Tests: a First Analysis},\n year = {2018},\n pdf = {http://rmod-files.lille.inria.fr/Team/Texts/Papers//Delp18b-RottenTests.pdf},\n annote = {techreport},\n abstract = {Unit tests are a tenant of agile programming methodologies, and are widely used to improve code quality and prevent code regression. A passing (green) test is usually taken as a robust sign that the code under test is valid. However, we have noticed that some green tests contain assertions that are never executed; these tests pass not because they assert properties that are true, but because they assert nothing at all. We call such tests Rotten Green Tests. Rotten Green Tests represent a worst case: they report that the code under test is valid, but in fact do nothing to test that validity, beyond checking that the code does not crash. We describe an approach to identify rotten green tests by combining simple static and dynamic analyses. Our approach takes into account test helper methods, inherited helpers, and trait compositions, and has been implemented in a tool called DrTest. We have applied DrTest to several test suites in Pharo 7.0, and identified many rotten tests, including some that have been " sleeping " in Pharo for at least 5 years.},\n institution = {Inria},\n keywords = {moose StefPub kzChecking kzTools lse-pub},\n hal-id = {hal-01819302}}\n\n\n
\n
\n\n\n
\n Unit tests are a tenant of agile programming methodologies, and are widely used to improve code quality and prevent code regression. A passing (green) test is usually taken as a robust sign that the code under test is valid. However, we have noticed that some green tests contain assertions that are never executed; these tests pass not because they assert properties that are true, but because they assert nothing at all. We call such tests Rotten Green Tests. Rotten Green Tests represent a worst case: they report that the code under test is valid, but in fact do nothing to test that validity, beyond checking that the code does not crash. We describe an approach to identify rotten green tests by combining simple static and dynamic analyses. Our approach takes into account test helper methods, inherited helpers, and trait compositions, and has been implemented in a tool called DrTest. We have applied DrTest to several test suites in Pharo 7.0, and identified many rotten tests, including some that have been \" sleeping \" in Pharo for at least 5 years.\n
\n\n\n
\n\n\n
\n
\n\n \n \n \n \n \n \n Physche: A Little Scheme in Pharo.\n \n \n \n \n\n\n \n Ducasse, S.; and Polito, G.\n\n\n \n\n\n\n 2018.\n
\n\n
\n\n
\n\n
\n\n \n \n
Paper\n \n \n\n \n\n \n link\n \n \n\n bibtex\n \n\n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@booklet{Duca18d,\n author = {St\\'ephane Ducasse and Guillermo Polito},\n title = {Physche: A Little Scheme in Pharo},\n pages = {50},\n publisher = {Square Bracket Associates},\n year = {2018},\n url = {http://books.pharo.org},\n pdf = {http://rmod-files.lille.inria.fr/Team/Books/2018-08-28-Physche.pdf},\n annote = {booklet editor},\n editor = {St\\'ephane Ducasse},\n collection = {The Pharo TextBook Collection},\n keywords = {kzSmalltalk lse-pub kzVulgarisation},\n hal-id = {hal-01900327}}\n \n
\n
\n\n\n\n
\n\n\n
\n
\n\n \n \n \n \n \n \n Out-Of-Place debugging: a debugging architecture to reduce debugging interference.\n \n \n \n \n\n\n \n Marra, M.; Polito, G.; and Gonzalez Boix, E.\n\n\n \n\n\n\n
The Art, Science, and Engineering of Programming, 3(2). November 2018.\n
\n\n
\n\n
\n\n
\n\n \n \n
Paper\n \n \n\n \n \n doi\n \n \n\n \n link\n \n \n\n bibtex\n \n\n \n \n \n abstract \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@article{Marr18a,\n\t author = {Marra, Matteo and Polito, Guillermo and Gonzalez Boix, Elisa},\n\t title = {{Out-Of-Place debugging: a debugging architecture to reduce debugging interference}},\n\t journal = {{The Art, Science, and Engineering of Programming}},\n\t volume = {3},\n\t publisher = {{aosa, Inc.}},\n\t year = {2018},\n\t url = {https://hal.inria.fr/hal-01952790},\n\t doi = {10.22152/programming-journal.org/2019/3/3},\n\t pdf = {http://rmod-files.lille.inria.fr/Team/Texts/Papers/Marr18a-Programming18-OutOfPlaceDebugging.pdf},\n\t annote = {internationaljournal},\n\t abstract = {Context Recent studies show that developers spend most of their programming time testing, verifying and debugging software. As applications become more and more complex, developers demand more advanced debugging support to ease the software development process. Inquiry Since the 70's many debugging solutions have been introduced. Amongst them, online debuggers provide good insight on the conditions that led to a bug, allowing inspection and interaction with the variables of the program. However, most of the online debugging solutions introduce debugging interference to the execution of the program, i.e. pauses, latency, and evaluation of code containing side-effects. Approach This paper investigates a novel debugging technique called out-of-place debugging. The goal is to minimize the debugging interference characteristic of online debugging while allowing online remote capabilities. An out-of-place debugger transfers the program execution and application state from the debugged application to the debugger application, each running in a different process. Knowledge On the one hand, out-of-place debugging allows developers to debug applications remotely, overcoming the need of physical access to the machine where the debugged application is running. On the other hand, debugging happens locally on the remote machine avoiding latency. That makes it suitable to be deployed on a distributed system and handle the debugging of several processes running in parallel. Grounding We implemented a concrete out-of-place debugger for the Pharo Smalltalk programming language. We show that our approach is practical by running several benchmarks, comparing our approach with a classic remote online debugger. We show that our prototype debugger outperforms a traditional remote debugger by 1000 times in several scenarios. Moreover, we show that the presence of our debugger does not impact the overall performance of an application. Importance This work combines remote debugging with the debugging experience of a local online debugger. Out-of-place debugging is the first online debugging technique that can minimize debugging interference while debugging a remote application. Yet, it still keeps the benefits of online debugging (e.g., step-by-step execution). This makes the technique suitable for modern applications which are increasingly parallel, distributed and reactive to streams of data from various sources like sensors, UI, network, etc.},\n\t number = {2},\n\t month = nov,\n\t keywords = {debugging tools ; online debugging ; remote debugging ; distributed systems; lse-pub; pharo},\n\t hal-id = {hal-01952790}}\n\n\t
\n
\n\n\n
\n Context Recent studies show that developers spend most of their programming time testing, verifying and debugging software. As applications become more and more complex, developers demand more advanced debugging support to ease the software development process. Inquiry Since the 70's many debugging solutions have been introduced. Amongst them, online debuggers provide good insight on the conditions that led to a bug, allowing inspection and interaction with the variables of the program. However, most of the online debugging solutions introduce debugging interference to the execution of the program, i.e. pauses, latency, and evaluation of code containing side-effects. Approach This paper investigates a novel debugging technique called out-of-place debugging. The goal is to minimize the debugging interference characteristic of online debugging while allowing online remote capabilities. An out-of-place debugger transfers the program execution and application state from the debugged application to the debugger application, each running in a different process. Knowledge On the one hand, out-of-place debugging allows developers to debug applications remotely, overcoming the need of physical access to the machine where the debugged application is running. On the other hand, debugging happens locally on the remote machine avoiding latency. That makes it suitable to be deployed on a distributed system and handle the debugging of several processes running in parallel. Grounding We implemented a concrete out-of-place debugger for the Pharo Smalltalk programming language. We show that our approach is practical by running several benchmarks, comparing our approach with a classic remote online debugger. We show that our prototype debugger outperforms a traditional remote debugger by 1000 times in several scenarios. Moreover, we show that the presence of our debugger does not impact the overall performance of an application. Importance This work combines remote debugging with the debugging experience of a local online debugger. Out-of-place debugging is the first online debugging technique that can minimize debugging interference while debugging a remote application. Yet, it still keeps the benefits of online debugging (e.g., step-by-step execution). This makes the technique suitable for modern applications which are increasingly parallel, distributed and reactive to streams of data from various sources like sensors, UI, network, etc.\n
\n\n\n
\n\n\n
\n
\n\n \n \n \n \n \n Scoped Extension Methods in Dynamically-Typed Languages.\n \n \n \n\n\n \n Polito, G.; Ducasse, S.; Fabresse, L.; and Teruel, C.\n\n\n \n\n\n\n
The Art, Science, and Engineering of Programming, 2(1): 1-26. August 2018.\n
\n\n
\n\n
\n\n
\n\n \n\n \n \n doi\n \n \n\n \n link\n \n \n\n bibtex\n \n\n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@article{Poli17d,\n\t\t author = {Guillermo Polito and St\\'ephane Ducasse and Luc Fabresse and Camille Teruel},\n\t\t title = {Scoped Extension Methods in Dynamically-Typed Languages},\n\t\t journal = {The Art, Science, and Engineering of Programming},\n\t\t volume = {2},\n\t\t pages = {1-26},\n\t\t year = {2018},\n\t\t doi = {10.22152/programming-journal.org/2018/2/1},\n\t\t pdf = {http://rmod-files.lille.inria.fr/Team/Texts/Papers/Poli17d-Programming-ScopedExtensions.pdf},\n\t\t annote = {internationaljournal},\n\t\t number = {1},\n\t\t month = aug,\n\t\t keywords = {lse-pub kzLanguageDesign},\n\t\t hal-id = {hal-01609310}}\n\n\t\t
\n
\n\n\n\n
\n\n\n
\n
\n\n \n \n \n \n \n Dynamic Software Update from Development to Production.\n \n \n \n\n\n \n Tesone, P.; Polito, G.; Fabresse, L.; Bouraqadi, N.; and Ducasse, S.\n\n\n \n\n\n\n
Journal of Object Technology, 17: 1–36. 2018.\n
\n\n
\n\n
\n\n
\n\n \n\n \n \n doi\n \n \n\n \n link\n \n \n\n bibtex\n \n\n \n \n \n abstract \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@article{Teso17b,\n\t\t author = {Pablo Tesone and Guillermo Polito and Luc Fabresse and Noury Bouraqadi and St\\'ephane Ducasse},\n\t\t title = {Dynamic Software Update from Development to Production},\n\t\t journal = {Journal of Object Technology},\n\t\t volume = {17},\n\t\t pages = {1--36},\n\t\t publisher = {AITO - Association Internationale pour les Technologies Objets},\n\t\t year = {2018},\n\t\t doi = {10.5381/jot.2018.17.1.a2},\n\t\t pdf = {http://rmod-files.lille.inria.fr/Team/Texts/Papers/Teso17b-JOT-DynamicUpdate.pdf},\n\t\t annote = {internationaljournal},\n\t\t abstract = {Dynamic Software Update (DSU) solutions update applications while they are executing. These solutions are typically used in production to minimize application downtime, or in integrated development environments to provide live programming support. Each of these scenarios presents different challenges, forcing existing solutions to be designed with only one of these use cases in mind. For example, DSUs for live programming typically do not implement safe point detection or instance migration, while production DSUs require manual generation of patches and lack IDE integration. Also, these solutions have limited ability to update themselves or the language core libraries, and some of them present execution penalties outside the update window. We propose a DSU (gDSU) that works for both live programming and production environments. Our solution implements safe update point detection using call stack manipulation and a reusable instance migration mechanism to minimize manual intervention in patch generation. Moreover, it also offers updates of core language libraries and the update mechanism itself. This is achieved by the incremental copy of the modified objects and an atomic commit operation. We show that our solution does not affect the global performance of the application and it presents only a run-time penalty during the update window. Our solution is able to apply an update impacting 100,000 instances in 1 second. In this 1 second, only during 250 milliseconds the application is not responsive. The rest of the time the application runs normally while gDSU is looking for the safe update point. The update only requires to copy the elements that are modified.},\n\t\t keywords = {pharo lse-pub},\n\t\t hal-id = {hal-01920362}}\n\n\t\t
\n
\n\n\n
\n Dynamic Software Update (DSU) solutions update applications while they are executing. These solutions are typically used in production to minimize application downtime, or in integrated development environments to provide live programming support. Each of these scenarios presents different challenges, forcing existing solutions to be designed with only one of these use cases in mind. For example, DSUs for live programming typically do not implement safe point detection or instance migration, while production DSUs require manual generation of patches and lack IDE integration. Also, these solutions have limited ability to update themselves or the language core libraries, and some of them present execution penalties outside the update window. We propose a DSU (gDSU) that works for both live programming and production environments. Our solution implements safe update point detection using call stack manipulation and a reusable instance migration mechanism to minimize manual intervention in patch generation. Moreover, it also offers updates of core language libraries and the update mechanism itself. This is achieved by the incremental copy of the modified objects and an atomic commit operation. We show that our solution does not affect the global performance of the application and it presents only a run-time penalty during the update window. Our solution is able to apply an update impacting 100,000 instances in 1 second. In this 1 second, only during 250 milliseconds the application is not responsive. The rest of the time the application runs normally while gDSU is looking for the safe update point. The update only requires to copy the elements that are modified.\n
\n\n\n
\n\n\n
\n
\n\n \n \n \n \n \n \n Implementing Modular Class-based Reuse Mechanisms on Top of a Single Inheritance VM.\n \n \n \n \n\n\n \n Tesone, P.; Polito, G.; Fabresse, L.; Bouraqadi, N.; and Ducasse, S.\n\n\n \n\n\n\n In
Symposium on Applied Computing (SAC'18), Pau, France, April 2018. \n
\n\n
\n\n
\n\n
\n\n \n \n
Paper\n \n \n\n \n \n doi\n \n \n\n \n link\n \n \n\n bibtex\n \n\n \n \n \n abstract \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n \n\n\n\n
\n
@inproceedings{Teso18a,\n\t\t author = {Tesone, Pablo and Polito, Guillermo and Fabresse, Luc and Bouraqadi, Noury and Ducasse, St\\'ephane},\n\t\t title = {Implementing Modular Class-based Reuse Mechanisms on Top of a Single Inheritance VM},\n\t\t booktitle = {Symposium on Applied Computing (SAC'18)},\n\t\t year = {2018},\n\t\t url = {https://hal.archives-ouvertes.fr/hal-01812612},\n\t\t doi = {10.1145/3167132.3167244},\n\t\t pdf = {http://rmod-files.lille.inria.fr/Team/Texts/Papers/Teso18a-SAC-ExtensibleMetaclasses.pdf},\n\t\t annote = {internationalconference},\n\t\t abstract = {Code reuse is a good strategy to avoid code duplication and speed up software development. Existing object-oriented programming languages propose different ways of combining existing and new code such as e.g., single inheritance, multiple inheritance, Traits or Mixins. All these mechanisms present advantages and disadvantages and there are situations that require the use of one over the other. To avoid the complexity of implementing a virtual machine (VM), many of these mechanisms are often implemented on top of an existing high-performance VM, originally meant to run a single inheritance object-oriented language. These implementations require thus a mapping between the programming model they propose and the execution model provided by the VM. Moreover, reuse mechanisms are not usually composable, nor it is easy to implement new ones for a given language. In this paper, we propose a modular meta-level runtime architecture to implement and combine different code reuse mechanisms. This architecture supports dynamic combination of several mechanisms without affecting runtime performance in a single inheritance object-oriented VM. It includes moreover a reflective Meta-Object Protocol to query and modify classes using the programming logical model instead of the underlying low-level runtime model. Thanks to this architecture, we implemented Stateful Traits, Mixins, CLOS multiple inheritance, CLOS Standard Method Combinations and Beta prefixing in a modular and composable way.},\n\t\t address = {Pau, France},\n\t\t month = apr,\n\t\t keywords = {lse-pub pharo kzInfrastructure kzLanguage},\n\t\t hal-id = {hal-01812612}}\n\t\t\t\n\n\t\t\t
\n
\n\n\n
\n Code reuse is a good strategy to avoid code duplication and speed up software development. Existing object-oriented programming languages propose different ways of combining existing and new code such as e.g., single inheritance, multiple inheritance, Traits or Mixins. All these mechanisms present advantages and disadvantages and there are situations that require the use of one over the other. To avoid the complexity of implementing a virtual machine (VM), many of these mechanisms are often implemented on top of an existing high-performance VM, originally meant to run a single inheritance object-oriented language. These implementations require thus a mapping between the programming model they propose and the execution model provided by the VM. Moreover, reuse mechanisms are not usually composable, nor it is easy to implement new ones for a given language. In this paper, we propose a modular meta-level runtime architecture to implement and combine different code reuse mechanisms. This architecture supports dynamic combination of several mechanisms without affecting runtime performance in a single inheritance object-oriented VM. It includes moreover a reflective Meta-Object Protocol to query and modify classes using the programming logical model instead of the underlying low-level runtime model. Thanks to this architecture, we implemented Stateful Traits, Mixins, CLOS multiple inheritance, CLOS Standard Method Combinations and Beta prefixing in a modular and composable way.\n
\n\n\n
\n\n\n\n\n\n