Stéphane Ducasse

dblp:d/SDucasse · DBLP profile ↗
← Back
137ranked-venue papers
16as first author
26since 2021 · last 2026
0000-0001-6070-6599ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 130 · 15 first-author · 25 since 2021Human-computer interaction and ubiquitous computing · 5 · 2 since 2021Systems, architecture and hardware · 4 · 2 since 2021Artificial intelligence and machine learning · 2Databases, data management, data science and information retrieval · 1Theory of computation · 1
YearPublicationVenuePosition
2026 Practical: Are Abstract-Interpreter Baseline JITs Worth It? An Empirical Evaluation through Metacompilation
abstract
Baseline JIT compilers need to compile early and as fast as possible, while still performing optimizations. One powerful technique to write fast baseline JIT compilers is abstract interpretation. Several implementations of this technique exist in practice, implementing in a single pass optimizations such as register allocation, constant propagation, and instruction scheduling. However, although they share the same technique, all these implementations vary in the exact optimizations performed, their internal design and further implementation details (e.g., the implementation language and framework). Thus, it is challenging to understand and isolate the benefits of the technique by simply studing these existing implementations.Understanding the real impact of compile-time abstract interpreters requires isolating performance differences and experimenting with different variations of the same implementation, which demands extensive engineering work. In this paper, we propose to analyse the impact of abstract interpreters through metacompilation. We use metacompilation as a means to (a) reduce the experimentation effort and (b) to produce compiler variants that are comparable, reducing implementation noise.We implemented our solution to generate several JIT compiler variants for the Pharo VM. We describe the adaptations required in the metacompilation framework to target both abstract interpreters and direct translators, in combination with Static Type Prediction optimizations.Our benchmarks show that compile-time abstract interpreters, on average, reduce the emitted machine code size by 12% and increase execution speed by 10%, up to 30%, without increasing JIT compilation overhead, compared to direct translators.
Nahuel Palumbo, Guillermo Polito, Stéphane Ducasse, Pablo Tesone
CGO3
2026 Migrating Esope to Fortran 2008 Using Model Transformations
Younoussa Sow, Nicolas Anquetil, Léandre Brault, Stéphane Ducasse
SANER4
2024 Assessing Reflection Usage with Mutation Testing Augmented Analysis
Iona Thomas, Stéphane Ducasse, Guillermo Polito, Pablo Tesone
ICSR2
2024 Evaluating Finalization-Based Object Lifetime Profiling
abstract
Using object lifetime information enables performance improvement through memory optimizations such as pretenuring and tuning garbage collector parameters. However, profiling object lifetimes is nontrivial and often requires a specialized virtual machine to instrument object allocations and dereferences. Alternative lifetime profiling could be done with less implementation effort using available finalization mechanisms such as weak references. In this paper, we study the impact of finalization on object lifetime profiling. We built an actionable lifetime profiler using the ephemeron finalization mechanism named FiLiP. FiLiP instruments object allocations to exactly record an object’s allocation time and it attaches an ephemeron to each allocated object to capture its finalization time. We show that FiLiP can be used in practice and achieves a significant overhead reduction by pretenuring the ephemeron objects. We further experiment with the impact of sampling object allocations, showing that sampling further reduces profiling overhead while still maintaining actionable lifetime measurements.
Sebastian Jordan-Montaño, Guillermo Polito, Stéphane Ducasse, Pablo Tesone
ISMM3
2023 Parsing Fortran-77 with proprietary extensions
abstract
Far from the latest innovations in software development, many organizations still rely on old code written in "obsolete" programming languages. Because this source code is old and proven it often contributes significantly to the continuing success of these organizations. Yet to keep the applications relevant and running in an evolving environment, they sometimes need to be updated or migrated to new languages or new platforms. One difficulty of working with these "veteran languages" is being able to parse the source code to build a representation of it. Parsing can also allow modern software development tools and IDEs to offer better support to these veteran languages. We initiated a project between our group and the Framatome company to help migrate old Fortran-77 with proprietary extensions (called Esope) into more modern Fortran. In this paper, we explain how we parsed the Esope language with a combination of island grammar and regular parser to build an abstract syntax tree of the code.
Younoussa Sow, Larisa Safina, Léandre Brault, Papa Ibou Diouf, Stéphane Ducasse, Nicolas Anquetil
ICSME5
2023 Heap Fuzzing: Automatic Garbage Collection Testing with Expert-Guided Random Events
abstract
Producing robust memory manager implementations is a challenging task. Defects in garbage collection algorithms produce subtle effects that are revealed later in program execution as memory corruptions. This problem is exacerbated by the fact that garbage collection algorithms deal with low-level implementation details to be efficient. Finding, reproducing, and debugging such bugs is complex and time-consuming.In this article, we propose to fuzz heaps by generating large sequences of random heap events guided by virtual machine experts. Randomly generated events exercise the garbage collection algorithm with the objective of crashing the virtual machine and finding bugs. Once a bug is found, we use a test case reduction algorithm to find the smaller subset of events that reproduces the issue.We implemented our approach on top of the virtual machine simulator of the Pharo Virtual Machine, to test its sequential stop-the-world generational scavenger. Experts guided our fuzzing toward the ephemeron finalization mechanism, corner allocation cases, and the heap compaction algorithm. Our prototype found 6 bugs: 3 in Pharo’s ephemeron implementation which is not yet in production, 2 bugs in the default compactor which has been in production for 8 years, and 1 bug in the VM simulator used daily by VM developers. We show how such test cases were automatically reduced to trivial sequences that were easy to debug.
Guillermo Polito, Pablo Tesone, Nahuel Palumbo, Stéphane Ducasse, Jean Privat
ICST4
2023 A Visualization for Client-Server Architecture Assessement
abstract
Maintaining large legacy systems often requires understanding their architecture. This is important since legacy system architecture decay over time and architecture violations may dramatically impact planned renovation actions. Merely reading source files is time-consuming and often highly inefficient. Visualizations have been proposed as a tool to support archi-tecture understanding. Some software architecture visualizations decompose the software system architecture into layers, components, or slices from a structural viewpoint. Such visualizations, however, do not take into account the specificities of client-server applications. They do not help maintainers identify and understand software architecture violations. In this paper, we propose Cliservo, a new visualization to help software main-tainers detect architectural violations in client-server systems. Cliservo classifies client-server entities into different levels of dependencies, shared entities, or ambiguous entities (e.g., entities that belong abnormally to different layers). Cliservo identifies and presents entities in their corresponding layers from two distinct viewpoints: global overview entities and violations, i.e ambiguous entities and illegal dependencies between layers. We validated our approach on three real-world industrial projects with access to their maintainers. We report the findings of 91 ambiguous entities, 29 purportedly shared and idle entities, 24 and 82 elements defined as shared but only used by the client or server, and 12 relations violating the layered architecture.
Nour Jihene Agouf, Soufyane Labsari, Stéphane Ducasse, Anne Etien, Nicolas Anquetil
VISSOFT3
2022 How Libraries Evolve: A Survey of Two Industrial Companies and an Open-Source Community
abstract
The evolution of software libraries is a process that requires a joint effort of two groups of developers: the library developers who prepare the release and client developers who need to update their applications to the new versions. To build better tools that support both library and client developers throughout the evolution, we need to understand what problems they face and how they react to those problems. In this paper, we present the result of two surveys: one for library developers and one for client developers. Our surveys involved developers from two industrial companies and an open-source community. We assess (1) how they perceive the impact of library evolution and (2) what is the support that library developers can provide to their clients. By approaching those questions from the perspectives of library and client developers, we try to assess how challenging library update is for each of those groups and how motivated they are to overcome those challenges.
Oleksandr Zaitsev, Stéphane Ducasse, Nicolas Anquetil, Arnaud Thiefaine
APSEC2
2022 A Hybrid Architecture for the Incremental Migration of a Web Front-end
abstract
International audience
Benoît Verhaeghe, Anas Shatnawi, Abderrahmane Seriai, Anne Etien, Nicolas Anquetil, Mustapha Derras, Stéphane Ducasse
ICSOFT7
2022 Differential Testing of Simulation-Based Virtual Machine Generators - Automatic Detection of VM Generator Semantic Gaps Between Simulation and Generated VMs
Pierre Misse-Chanabier, Guillermo Polito, Noury Bouraqadi, Stéphane Ducasse, Luc Fabresse, Pablo Tesone
ICSR4
2022 DepMiner: Automatic Recommendation of Transformation Rules for Method Deprecation
Oleksandr Zaitsev, Stéphane Ducasse, Nicolas Anquetil, Arnaud Thiefaine
ICSR2
2022 Interpreter-guided differential JIT compiler unit testing
abstract
Modern language implementations using Virtual Machines feature diverse execution engines such as byte-code interpreters and machine-code dynamic translators, a.k.a. JIT compilers. Validating such engines requires not only validating each in isolation, but also that they are functionally equivalent. Tests should be duplicated for each execution engine, exercising the same execution paths on each of them.
Guillermo Polito, Stéphane Ducasse, Pablo Tesone
PLDI2
2022 Selecting Semi-permanent Object Candidates in Dynamically-Typed Reflective Languages
abstract
Garbage collector pauses can take human perceivable pauses on big heaps. In this poster, we argue the existence of semi-permanent objects: objects that have really low chances of being collected, and even lower chances in production scenarios where the application code is not subject to change at run-time. The key challenge that stems from having a semi-permanent generation is to select what objects are meant to be moved or allocated to such generation. We present preliminary work that shows that a manual selection of code-related objects following hand-crafted heuristics reduces GC pause times by half.
Nahuel Palumbo, Pablo Tesone, Guillermo Polito, Stéphane Ducasse
MPLR4
2022 Analyzing the Cost of Safety for Vectorized Bytecode in Dynamically-Typed Languages
abstract
Vector instructions are a class of processor instructions that allow data level parallelism by performing the same instruction on multiple pieces of data, instead of a single one as usual. There are two possible approaches to achieve this: add virtual machine intrinsics that use vector instructions, or extend the bytecode set with vector operations that are then mapped to processor vector instructions. We implemented both approaches in the Pharo VM and analyzed the impact of such safety checks on performance. We found that the most significant difference in performance between intrinsic methods and bytecode operations stems from the latter performing redundant type checking on bytecode parameters, bounds checking on array accesses, and overflow tests on array iterators.
Nicolás Rainhart, Guillermo Polito, Pablo Tesone, Stéphane Ducasse
MPLR4
2022 A New Generation of CLASS BLUEPRINT
abstract
In object-oriented programming, classes are the primary abstraction mechanism used by and exposed to developers. Understanding classes is key for the development and evolution of object-oriented applications. The fundamental problem faced by developers is that while classes are intrinsically structured entities, in IDEs they are represented as a blob of text. The idea behind the original CLASS BLUEPRINT visualization was to represent the internal structure of classes in terms of fields, their accesses, and the method call flow. Additional information was depicted using colors. The thus created visualization proved to be an effective means to support program comprehension. However, a number of omissions rendered it only partially useful.We propose CLASS BLUEPRINT V2 (in short BLUEPRINTV2), which in addition to the information depicted by CLASS BLUEPRINT also supports dead code identification, methods under tests, and calling relationships between class and instance level methods. In addition, BLUEPRINTV2 enhances the understanding of fields by showing how fields of super/subclasses are accessed. We present the enhanced visualization and report on a first validation with 26 developers and 18 projects.
Nour Jihene Agouf, Stéphane Ducasse, Anne Etien, Michele Lanza 0001
VISSOFT2
2022 A user-oriented model for Oracles' Gas price prediction
Giuseppe Antonio Pierro, Henrique Rocha, Stéphane Ducasse, Michele Marchesi, Roberto Tonelli
Future Gener. Comput. Syst.3
2022 What do developers consider magic literals? A smalltalk perspective
Nicolas Anquetil, Julien Delplanque, Stéphane Ducasse, Oleksandr Zaitsev, Christopher P. Fuhrman, Yann-Gaël Guéhéneuc
Inf. Softw. Technol.3
2021 Analyzing permission transfer channels for dynamically typed languages
abstract
Communicating Sequential Process (CSP) is nowadays a popular concurrency model in which threads/processes communicate by exchanging data through channels. Channels help in orchestrating concurrent processes but do not solve per-se data races. To prevent data races in the channel model, many programming languages rely on type systems to express ownership and behavioural restrictions such as immutability. However, dynamically-typed languages require run-time mechanisms because of the lack of type information at compile-time.
Théo Rogliano, Guillermo Polito, Luc Fabresse, Stéphane Ducasse
DLS4
2021 Report From The Trenches A Case Study In Modernizing Software Development Practices
abstract
One factor of success in software development companies is their ability to deliver good quality products, fast. For this, they need to improve their software development practices. We work with a medium-sized company modernizing its development practices. The company introduced several practices recommended in agile development. If the benefits of these practices are well documented, the impact of such changes on the developers is less well known. We follow this modernization before and during the COVID-19 outbreak. This paper presents an empirical study of the perceived benefit and drawback of these practices as well as the impact of COVID-19 on the company's employees. One of the conclusions, is the additional difficulties created by obsolete technologies to adapt the technology itself and the development practices it encourages to modern standards.
Mahugnon H. Houekpetodji, Nicolas Anquetil, Stéphane Ducasse, Fatiha Djareddir, Jérôme Sudich
ICSME3
2021 Migrating GUI behavior: from GWT to Angular
abstract
In a collaboration with Berger-Levrault, a major IT company, we are working on the migration of GWT applications to Angular. We focus on the GUI aspect of this migration which requires a framework switch (GWT to Angular) and a programming language switch (Java to TypeScript). Previous work identified that the GUI can be split into the UI structure and the GUI behavioral code. GUI behavioral code is the code executed when the user interacts with the UI. Although the migration of UI structure has already been studied, the migration of the GUI behavioral code has not. To help developers during the migration of their applications, we propose a generic approach in four steps that uses a meta-model to represent the GUI behavioral code. This approach includes a separation of the GUI behavioral code into events (caller code) and the code executed when an event is fired (called code). We present the approach and its implementation for a real industrial case study. The application comprises 470 Java (GWT) classes representing 56 web pages. We give examples of the migrated code. We evaluate the quality of the generated code with standard tools (SonarQube, codelizer) and compare it to another Java to TypeScript converter. The results show that our code has 53% fewer warnings and rule violations for SonarQube, and 99% fewer for codelizer.
Benoît Verhaeghe, Anas Shatnawi, Abderrahmane Seriai, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Mustapha Derras
ICSME6
2021 Cross-ISA testing of the Pharo VM: lessons learned while porting to ARMv8
abstract
Testing and debugging a Virtual Machine is a laborious task without the proper tooling. This is particularly true for VMs with JIT compilation and dynamic code patching for techniques such as inline caching. In addition, this situation is getting worse when the VM builds and runs on multiple target architectures.
Guillermo Polito, Pablo Tesone, Stéphane Ducasse, Luc Fabresse, Théo Rogliano, Pierre Misse-Chanabier, Carolina Hernandez Phillips
MPLR3
2021 Profiling code cache behaviour via events
abstract
Virtual machine performance tuning for a given application is an arduous and challenging task. For example, parametrizing the behaviour of the JIT compiler machine code caches affects the overall performance of applications while being rather obscure for final users not knowledgeable about VM internals. Moreover, VM components are often heavily coupled and changes in some parameters may affect several seemingly unrelated components and may have unclear performance impacts. Therefore, choosing the best parametrization requires to have precise information.
Pablo Tesone, Guillermo Polito, Stéphane Ducasse
MPLR3
2021 Time-Traveling Debugging Queries: Faster Program Exploration
abstract
Efficiently debugging a program requires program comprehension. To acquire it, developers explore the program execution, a task often performed using interactive debuggers. Unfortunately, exploring a program execution through standard interactive debuggers is a tedious and costly task. In this paper, we propose Time-Traveling Queries (TTQs) to ease program exploration. TTQs is a mechanism that automatically explores program executions to collect execution data. This data is used to time-travel through execution states, facilitating the exploration of program executions. We built a set of key TTQs based on typical questions developers ask when trying to understand programs. We conducted a user study with 34 participants to evaluate the impact of our queries on program comprehension activities. Results show that, compared to traditional debugging tools, TTQs significantly improve developers' precision, while reducing required time and efforts when performing program comprehension tasks.
Maximilian Willembrinck, Steven Costiou, Anne Etien, Stéphane Ducasse
QRS4
2021 GUI visual aspect migration: a framework agnostic solution
Benoît Verhaeghe, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Abderrahmane Seriai, Mustapha Derras
Autom. Softw. Eng.4
2021 Rotten green tests in Java, Pharo and Python
Vincent Aranega, Julien Delplanque, Matias Martinez, Andrew P. Black, Stéphane Ducasse, Anne Etien, Christopher P. Fuhrman, Guillermo Polito
Empir. Softw. Eng.5
2021 NewWave: Workflow engine
Sebastijan Kaplar, Miroslav Zaric, Stéphane Ducasse
Sci. Comput. Program.3
2020 Recommendations for Evolving Relational Databases
Julien Delplanque, Anne Etien, Nicolas Anquetil, Stéphane Ducasse
CAiSE4
2020 Modular Moose: A New Generation of Software Reverse Engineering Platform
Nicolas Anquetil, Anne Etien, Mahugnon H. Houekpetodji, Benoît Verhaeghe, Stéphane Ducasse, Clotilde Toullec, Fatiha Djareddir, Jérôme Sudich, Mustapha Derras
ICSR5
2020 Analysing Microsoft Access Projects: Building a Model in a Partially Observable Domain
Santiago Bragagnolo, Nicolas Anquetil, Stéphane Ducasse, Abderrahmane Seriai, Mustapha Derras
ICSR3
2020 Preserving instance state during refactorings in live environments
Pablo Tesone, Guillermo Polito, Luc Fabresse, Noury Bouraqadi, Stéphane Ducasse
Future Gener. Comput. Syst.5
2020 A new modular implementation for stateful traits
Pablo Tesone, Stéphane Ducasse, Guillermo Polito, Luc Fabresse, Noury Bouraqadi
Sci. Comput. Program.2
2019 Sindarin: a versatile scripting API for the Pharo debugger
abstract
Debugging is one of the most important and time consuming activities in software maintenance, yet mainstream debuggers are not well-adapted to several debugging scenarios. This has led to the research of new techniques covering specific families of complex bugs. Notably, recent research proposes to empower developers with scripting DSLs, plugin-based and moldable debuggers. However, these solutions are tailored to specific use-cases, or too costly for one-time-use scenarios. In this paper we argue that exposing a debugging scripting interface in mainstream debuggers helps in solving many challenging debugging scenarios. For this purpose, we present Sindarin, a scripting API that eases the expression and automation of different strategies developers pursue during their debugging sessions. Sindarin provides a GDB-like API, augmented with AST-bytecode-source code mappings and object-centric capabilities. To demonstrate the versatility of Sindarin, we reproduce several advanced breakpoints and non-trivial debugging mechanisms from the literature.
Thomas Dupriez, Guillermo Polito, Steven Costiou, Vincent Aranega, Stéphane Ducasse
DLS5
2019 Rotten green tests
abstract
Unit tests are a tenant of agile programming methodologies, and are widely used to improve code quality and prevent code regression. A green (passing) test is usually taken as a robust sign that the code under test is valid. However, some green tests contain assertions that are never executed. We call such tests Rotten Green Tests. Rotten Green Tests represent a case worse than a broken test: they report that the code under test is valid, but in fact do not test that validity. We describe an approach to identify rotten green tests by combining simple static and dynamic call-site analyses. Our approach takes into account test helper methods, inherited helpers, and trait compositions, and has been implemented in a tool called DrTest. DrTest reports no false negatives, yet it still reports some false positives due to conditional use or multiple test contexts. Using DrTest we conducted an empirical evaluation of 19,905 real test cases in mature projects of the Pharo ecosystem. The results of the evaluation show that the tool is effective; it detected 294 tests as rotten-green tests that contain assertions that are not executed. Some rotten tests have been “sleeping” in Pharo for at least 5 years.
Julien Delplanque, Stéphane Ducasse, Guillermo Polito, Andrew P. Black, Anne Etien
ICSE2
2019 Decomposing God Classes at Siemens
abstract
A group of developers at Siemens Digital Industry Division approached our team to help them restructure a large legacy system. Several problems were identified, including the presence of God classes (big classes with thousands of lines of code and hundred of methods). They had tried different approaches considering the dependencies between the classes, but none were satisfactory. Through interaction during the last three years with a lead software architect of the project, we designed a software visualization tool and an accompanying process that allows her to propose a decomposition of a God Class in a matter of one or two hours even without prior knowledge of the class (although actually implementing the decomposition in the source code could take a week of work). In this paper, we present the process that was formalized to decompose God Classes and the tool that was designed. We give details on the system itself and some of the classes that were decomposed. The presented process and visualizations have been successfully used for the last three years on a real industrial system at Siemens.
Nicolas Anquetil, Anne Etien, Gaelle Andreo, Stéphane Ducasse
ICSME4
2019 Empirical Study of Programming to an Interface
abstract
A popular recommendation to programmers in object-oriented software is to "program to an interface, not an implementation" (PTI). Expected benefits include increased simplicity from abstraction, decreased dependency on implementations, and higher flexibility. Yet, interfaces must be immutable, excessive class hierarchies can be a form of complexity, and "speculative generality" is a known code smell. To advance the empirical knowledge of PTI, we conducted an empirical investigation that involves 126 Java projects on GitHub, aiming to measuring the decreased dependency benefits (in terms of cochange).
Benoît Verhaeghe, Christopher P. Fuhrman, Latifa Guerrouj, Nicolas Anquetil, Stéphane Ducasse
ASE5
2019 GUI Migration using MDE from GWT to Angular 6: An Industrial Case
abstract
During the evolution of an application, it happens that developers must change the programming language. In the context of a collaboration with Berger-Levrault, a major IT company, we are working on the migration of a GWT application to Angular. We focus on the GUI aspect of this migration which, even if both frameworks are web Graphical User Interface (GUI) frameworks, is made difficult because they use different programming languages and different organization schema. Such migration is complicated by the fact that the new application must be able to mimic closely the visual aspect of the old one so that the users of the application are not disrupted. We propose an approach in four steps that uses a meta-model to represent the GUI at a high abstraction level. We evaluated this approach on an application comprising 470 Java (GWT) classes representing 56 pages. We are able to model all the web pages of the application and 93% of the widgets they contain, and we successfully migrated 26 out of 39 pages (66%). We give examples of the migrated pages, both successful and not.
Benoît Verhaeghe, Anne Etien, Nicolas Anquetil, Abderrahmane Seriai, Laurent Deruelle, Stéphane Ducasse, Mustapha Derras
SANER6
2019 Fully Reflective Execution Environments: Virtual Machines for More Flexible Software
abstract
VMs are complex pieces of software that implement programming language semantics in an efficient, portable, and secure way. Unfortunately, mainstream VMs provide applications with few mechanisms to alter execution semantics or memory management at run time. We argue that this limits the evolvability and maintainability of running systems for both, the application domain, e.g., to support unforeseen requirements, and the VM domain, e.g., to modify the organization of objects in memory. This work explores the idea of incorporating reflective capabilities into the VM domain and analyzes its impact in the context of software adaptation tasks. We characterize the notion of a fully reflective VM, a kind of VM that provides means for its own observability and modifiability at run time. This enables programming languages to adapt the underlying VM to changing requirements. We propose a reference architecture for such VMs and present TruffleMATE as a prototype for this architecture. We evaluate the mechanisms TruffleMATE provides to deal with unanticipated dynamic adaptation scenarios for security, optimization, and profiling aspects. In contrast to existing alternatives, we observe that TruffleMATE is able to handle all scenarios, using less than 50 lines of code for each, and without interfering with the application's logic.
Guido Chari, Diego Garbervetsky, Stefan Marr, Stéphane Ducasse
IEEE Trans. Software Eng.4
2018 A Reflexive and Automated Approach to Syntactic Pattern Matching in Code Transformations
abstract
Empowering software engineers often requires to let them write code transformations. However existing automated or tool-supported approaches force developers to have a detailed knowledge of the internal representation of the underlying tool. While this knowledge is time consuming to master, the syntax of the language, on the other hand, is already well known to developers and can serve as a strong foundation for pattern matching. Pattern languages with metavariables (that is variables holding abstract syntax subtrees once the pattern has been matched) have been used to help programmers define program transformations at the language syntax level. The question raised is then the engineering cost of metavariable support. Our contribution is to show that, with a GLR parser, such patterns with metavariables can be supported by using a form of runtime reflexivity on the parser internal structures. This approach allows one to directly implement such patterns on any parser generated by a parser generation framework, without asking the pattern writer to learn the AST structure and node types. As a use case for that approach we describe the implementation built on top of the SmaCC (Smalltalk Compiler Compiler) GLR parser generator framework. This approach has been used in production for source code transformations on a large scale. We will express perspectives to adapt this approach to other types of parsing technologies.
Jason Lecerf, John Brant, Thierry Goubier, Stéphane Ducasse
ICSME4
2018 A critical analysis of string APIs: The case of Pharo
Damien Pollet, Stéphane Ducasse
Sci. Comput. Program.2
2018 How do developers react to API evolution? A large-scale empirical study
Andre Hora 0001, Romain Robbes, Marco Túlio Valente, Nicolas Anquetil, Anne Etien, Stéphane Ducasse
Softw. Qual. J.6
2017 What are the Testing Habits of Developers? A Case Study in a Large IT Company
abstract
Tests are considered important to ensure the good behavior of applications and improve their quality. But development in companies also involves tight schedules, old habits, less-trained developers, or practical difficulties such as creating a test database. As a result, good testing practices are not always used as often as one might wish. With a major IT company, we are engaged in a project to understand developers testing behavior, and whether it can be improved. Some ideas are to promote testing by reducing test session length, or by running automatically tests behind the scene and send warnings to developers about the failing ones. Reports on developers testing habits in the literature focus on highly distributed open-source projects, or involve students programmers. As such they might not apply to our industrial, closed source, context. In this paper, we take inspiration from experiments of two papers of the literature to enhance our comprehension of the industrial environment. We report the results of a field study on how often the developers use tests in their daily practice, whether they make use of tests selection and why they do. Results are reinforced by interviews with developers involved in the study. The main findings are that test practice is in better shape than we expected; developers select tests "ruthlessly" (instead of launching an entire test suite); although they are not accurate in their selection, and; contrary to expectation, test selection is not influenced by the size of the test suite nor the duration of the tests.
Vincent Blondeau, Anne Etien, Nicolas Anquetil, Sylvain Cresson, Pascal Croisy, Stéphane Ducasse
ICSME6
2017 CodeCritics applied to database schema: Challenges and first results
abstract
Relational databases (DB) play a critical role in many information systems. For different reasons, their schemas gather not only tables and columns but also views, triggers or stored functions (i.e., fragments of code describing treatments). As for any other code-related artefact, software quality in a DB schema helps avoiding future bugs. However, few tools exist to analyse DB quality and prevent the introduction of technical debt. Moreover, these tools suffer from limitations like the difficulty to deal with some entities (e.g., functions) or dependencies between entities. This paper presents research issues related to assessing the software quality of a DB schema by adapting existing source code analysis research to database schemas. We present preliminary results that have been validated through the implementation of DBCritics, a prototype tool to perform static analysis on the SQL source code of a database schema. DBCritics addresses the limitations of existing DB quality tools based on an internal representation considering all entities of the database and their relationships.
Julien Delplanque, Anne Etien, Olivier Auverlot, Tom Mens, Nicolas Anquetil, Stéphane Ducasse
SANER6
2017 Recommending source code locations for system specific transformations
abstract
From time to time, developers perform sequences of code transformations in a systematic and repetitive way. This may happen, for example, when introducing a design pattern in a legacy system: similar classes have to be introduced, containing similar methods that are called in a similar way. Automation of these sequences of transformations has been proposed in the literature to avoid errors due to their repetitive nature. However, developers still need support to identify all the relevant code locations that are candidate for transformation. Past research showed that these kinds of transformation can lag for years with forgotten instances popping out from time to time as other evolutions bring them into light. In this paper, we evaluate three distinct code search approaches (“structural”, based on Information Retrieval, and AST based algorithm) to find code locations that would require similar transformations. We validate the resulting candidate locations from these approaches on real cases identified previously in literature. The results show that looking for code with similar roles, e.g., classes in the same hierarchy, provides interesting results with an average recall of 87% and in some cases the precision up to 70%.
Gustavo Santos, Klérisson Vinícius Ribeiro Paixão, Nicolas Anquetil, Anne Etien, Marcelo de Almeida Maia, Stéphane Ducasse
SANER6
2017 End-user abstractions for meta-control: Reifying the reflectogram
Nick Papoulias, Marcus Denker, Stéphane Ducasse, Luc Fabresse
Sci. Comput. Program.3
2017 Test case selection in industry: an analysis of issues related to static approaches
Vincent Blondeau, Anne Etien, Nicolas Anquetil, Sylvain Cresson, Pascal Croisy, Stéphane Ducasse
Softw. Qual. J.6
2016 How Can We Help Software Rearchitecting Efforts? Study of an Industrial Case
abstract
Legacy software systems are valuable assets for organisations and are sometimes their main source of incomes. From time to time, renewing legacy software system architecture becomes necessary in order to offer them a new future. Migrating the architecture of a legacy software system is a difficult task. It involves understanding and aggregating a large set of data (the entire source code, dependencies, etc.), it may have a profound impact on the system's behaviour, and because it occurs very rarely in the life of a system, it is hard to gain experience in this domain. Based on the study of an industrial architecture migration case, we discuss how this essentially manual effort could be helped with automated tools and a better defined process. We identified several issues raised during the task, characterized their impact, and proposed possible solutions.
Brice Govin, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Arnaud Monégier
ICSME4
2015 Access control to reflection with object ownership
abstract
Reflection is a powerful programming language feature that enables language extensions, generic code, dynamic analyses, development tools, etc. However, uncontrolled reflection breaks object encapsulation and considerably increases the attack surface of programs e.g., malicious libraries can use reflection to attack their client applications. To bring reflection and object encapsulation back together, we use dynamic object ownership to design an access control policy to reflective operations. This policy grants objects full reflective power over the objects they own but limited reflective power over other objects. Code is still able to use advanced reflective operations but reflection cannot be used as an attack vector anymore.
Camille Teruel, Stéphane Ducasse, Damien Cassou, Marcus Denker
DLS2
2015 How do developers react to API evolution? The Pharo ecosystem case
abstract
Software engineering research now considers that no system is an island, but it is part of an ecosystem involving other systems, developers, users, hardware, ... When one system (e.g., a framework) evolves, its clients often need to adapt. Client developers might need to adapt to functionalities, client systems might need to be adapted to a new API, client users might need to adapt to a new User Interface. The consequences of such changes are yet unclear, what proportion of the ecosystem might be expected to react, how long might it take for a change to diffuse in the ecosystem, do all clients react in the same way? This paper reports on an exploratory study aimed at observing API evolution and its impact on a large-scale software ecosystem, Pharo, which has about 3,600 distinct systems, more than 2,800 contributors, and six years of evolution. We analyze 118 API changes and answer research questions regarding the magnitude, duration, extension, and consistency of such changes in the ecosystem. The results of this study help to characterize the impact of API evolution in large software ecosystems, and provide the basis to better understand how such impact can be alleviated.
Andre Hora 0001, Romain Robbes, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Marco Túlio Valente
ICSME5
2015 System specific, source code transformations
abstract
During its lifetime, a software system might undergo a major transformation effort in its structure, for example to migrate to a new architecture or bring some drastic improvements to the system. Particularly in this context, we found evidences that some sequences of code changes are made in a systematic way. These sequences are composed of small code transformations (e.g., create a class, move a method) which are repeatedly applied to groups of related entities (e.g., a class and some of its methods). A typical example consists in the systematic introduction of a Factory design pattern on the classes of a package. We define these sequences as transformation patterns. In this paper, we identify examples of transformation patterns in real world software systems and study their properties: (i) they are specific to a system; (ii) they were applied manually; (iii) they were not always applied to all the software entities which could have been transformed; (iv) they were sometimes complex; and (v) they were not always applied in one shot but over several releases. These results suggest that transformation patterns could benefit from automated support in their application. From this study, we propose as future work to develop a macro recorder, a tool with which a developer records a sequence of code transformations and then automatically applies them in other parts of the system as a customizable, large-scale transformation operator.
Gustavo Santos, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Marco Túlio Valente
ICSME4
2015 Tracing vs. partial evaluation: comparing meta-compilation approaches for self-optimizing interpreters
abstract
Tracing and partial evaluation have been proposed as meta-compilation techniques for interpreters to make just-in-time compilation language-independent. They promise that programs executing on simple interpreters can reach performance of the same order of magnitude as if they would be executed on state-of-the-art virtual machines with highly optimizing just-in-time compilers built for a specific language. Tracing and partial evaluation approach this meta-compilation from two ends of a spectrum, resulting in different sets of tradeoffs. This study investigates both approaches in the context of self-optimizing interpreters, a technique for building fast abstract-syntax-tree interpreters. Based on RPython for tracing and Truffle for partial evaluation, we assess the two approaches by comparing the impact of various optimizations on the performance of an interpreter for SOM, an object-oriented dynamically-typed language. The goal is to determine whether either approach yields clear performance or engineering benefits. We find that tracing and partial evaluation both reach roughly the same level of performance. SOM based on meta-tracing is on average 3x slower than Java, while SOM based on partial evaluation is on average 2.3x slower than Java. With respect to the engineering, tracing has however significant benefits, because it requires language implementers to apply fewer optimizations to reach the same level of performance.
Stefan Marr, Stéphane Ducasse
OOPSLA2
2015 Zero-overhead metaprogramming: reflection and metaobject protocols fast and without compromises
abstract
Runtime metaprogramming enables many useful applications and is often a convenient solution to solve problems in a generic way, which makes it widely used in frameworks, middleware, and domain-specific languages. However, powerful metaobject protocols are rarely supported and even common concepts such as reflective method invocation or dynamic proxies are not optimized. Solutions proposed in literature either restrict the metaprogramming capabilities or require application or library developers to apply performance improving techniques. For overhead-free runtime metaprogramming, we demonstrate that dispatch chains, a generalized form of polymorphic inline caches common to self-optimizing interpreters, are a simple optimization at the language-implementation level. Our evaluation with self-optimizing interpreters shows that unrestricted metaobject protocols can be realized for the first time without runtime overhead, and that this optimization is applicable for just-in-time compilation of interpreters based on meta-tracing as well as partial evaluation. In this context, we also demonstrate that optimizing common reflective operations can lead to significant performance improvements for existing applications.
Stefan Marr, Chris Seaton, Stéphane Ducasse
PLDI3
2015 Recording and replaying system specific, source code transformations
abstract
During its lifetime, a software system is under continuous maintenance to remain useful. Maintenance can be achieved in activities such as adding new features, fixing bugs, improving the system's structure, or adapting to new APIs. In such cases, developers sometimes perform sequences of code changes in a systematic way. These sequences consist of small code changes (e.g., create a class, then extract a method to this class), which are applied to groups of related code entities (e.g., some of the methods of a class). This paper presents the design and proof-of-concept implementation of a tool called MacroRecorder. This tool records a sequence of code changes, then it allows the developer to generalize this sequence in order to apply it in other code locations. In this paper, we discuss MACRORECORDER's approach that is independent of both development and transformation tools. The evaluation is based on previous work on repetitive code changes related to rearchitecting. MacroRecorder was able to replay 92% of the examples, which consisted in up to seven code entities modified up to 66 times. The generation of a customizable, large-scale transformation operator has the potential to efficiently assist code maintenance.
Gustavo Santos, Anne Etien, Nicolas Anquetil, Stéphane Ducasse, Marco Túlio Valente
SCAM4
2015 OrionPlanning: Improving modularization and checking consistency on software architecture
abstract
Many techniques have been proposed in the literature to support architecture definition, conformance, and analysis. However, there is a lack of adoption of such techniques by the industry. Previous work have analyzed this poor support. Specifically, former approaches lack proper analysis techniques (e.g., detection of architectural inconsistencies), and they do not provide extension and addition of new features. In this paper, we present ORIONPLANNING, a prototype tool to assist refactorings at large scale. The tool provides support for model-based refactoring operations. These operations are performed in an interactive visualization. The contributions of the tool consist in: (i) providing iterative modifications in the architecture, and (ii) providing an environment for architecture inspection and definition of dependency rules. We evaluate ORIONPLANNING against practitioners' requirements on architecture definition listed in a previous survey. We also evaluate the tool in a concrete example of software remodularization.
Gustavo Santos, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Marco Túlio Valente
VISSOFT4
2015 Untangling fine-grained code changes
abstract
After working for some time, developers commit their code changes to a version control system. When doing so, they often bundle unrelated changes (e.g., bug fix and refactoring) in a single commit, thus creating a so-called tangled commit. Sharing tangled commits is problematic because it makes review, reversion, and integration of these commits harder and historical analyses of the project less reliable. Researchers have worked at untangling existing commits, i.e., finding which part of a commit relates to which task. In this paper, we contribute to this line of work in two ways: (1) A publicly available dataset of untangled code changes, created with the help of two developers who accurately split their code changes into self contained tasks over a period of four months; (2) a novel approach, EpiceaUntangler, to help developers share untangled commits (aka. atomic commits) by using fine-grained code change information. EpiceaUntangler is based and tested on the publicly available dataset, and further evaluated by deploying it to 7 developers, who used it for 2 weeks. We recorded a median success rate of 91% and average one of 75%, in automatically creating clusters of untangled fine-grained code changes.
Martin Dias, Alberto Bacchelli, Georgios Gousios, Damien Cassou, Stéphane Ducasse
SANER5
2015 Identifying the exact fixing actions of static rule violation
abstract
We study good programming practices expressed in rules and detected by static analysis checkers such as PMD or FindBugs. To understand how violations to these rules are corrected and whether this can be automated, we need to identify in the source code where they appear and how they were fixed. This presents some similarities with research on understanding software bugs, their causes, their fixes, and how they could be avoided. The traditional method to identify how a bug or a rule violation were fixed consists in finding the commit that contains this fix and identifying what was changed in this commit. If the commit is small, all the lines changed are ascribed to the fixing of the rule violation or the bug. However, commits are not always atomic, and several fixes and even enhancements can be mixed in a single one (a large commit). In this case, it is impossible to detect which modifications contribute to which fix. In this paper, we are proposing a method that identifies precisely the modifications that are related to the correction of a rule violation. The same method could be applied to bug fixes, providing there is a test illustrating this bug. We validate our solution on a real world system and actual rules.
Hayatou Oumarou, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Kolyang 0001
SANER4
2015 Automatic detection of system-specific conventions unknown to developers
Andre Hora 0001, Nicolas Anquetil, Anne Etien, Stéphane Ducasse, Marco Túlio Valente
J. Syst. Softw.4
2015 Handles: Behavior-propagating first class references for dynamically-typed languages
Jean-Baptiste Arnaud, Stéphane Ducasse, Marcus Denker, Camille Teruel
Sci. Comput. Program.2
2015 Visually characterizing source code changes
Verónica Uquillas Gómez, Stéphane Ducasse, Theo D'Hondt
Sci. Comput. Program.2
2014 A Domain-Specific Language for Visualizing Software Dependencies as a Graph
abstract
Graphs are commonly used to visually represent software dependencies. However, adequately visualizing software dependencies as a graph is a non-trivial problem due to the pluridimentional nature of software. We have designed a domain-specific language for visualizing software dependencies as graphs that is both expressive and concise. GRAPH, the implementation of our DSL, features a seamless mapping between visual dimensions to software metrics, composition of graph layouts, graph partition, and hierarchical bundle edges.
Alexandre Bergel, Sergio Maass, Stéphane Ducasse, Tudor Gîrba
VISSOFT3
2014 The Package Blueprint: Visually analyzing and quantifying packages dependencies
Hani Abdeen, Stéphane Ducasse, Damien Pollet, Ilham Alloui, Jean-Rémy Falleri
Sci. Comput. Program.2
2014 AspectMaps: Extending Moose to visualize AOP software
Johan Fabry, Andy Kellens, Simon Denier, Stéphane Ducasse
Sci. Comput. Program.4
2014 Supporting streams of changes during branch integration
Verónica Uquillas Gómez, Stéphane Ducasse, Andy Kellens
Sci. Comput. Program.2
2014 Bootstrapping reflective systems: The case of Pharo
Guillermo Polito, Stéphane Ducasse, Luc Fabresse, Noury Bouraqadi, Benjamin Van Ryseghem
Sci. Comput. Program.2
2014 Seamless composition and reuse of customizable user interfaces with Spec
Benjamin Van Ryseghem, Stéphane Ducasse, Johan Fabry
Sci. Comput. Program.2
2014 Fuel: a fast general purpose object graph serializer
abstract
SUMMARY Because objects need to be stored and reloaded on different environments, serializing object graphs is a very important activity. There is a plethora of serialization frameworks with different requirements and design trade‐offs. Most of them are based on recursive parsing of the object graphs, an approach which often is too slow. In addition, most of them prioritize a language‐agnostic format instead of speed and language‐specific object serialization. For the same reason, such serializers usually do not support features such as class‐shape changes, global references or executing pre and post load actions. Looking for speed, some frameworks are partially implemented at Virtual Machine (VM) level, hampering code portability and making them difficult to understand, maintain and extend. In this paper, we present Fuel, a general‐purpose object serializer based on these principles: (1) speed, through a compact binary format and a pickling algorithm which invests time in serialization for obtaining the best performance on materialization; (2) good object‐oriented design, without special help at VM; and (3) serialize any object, thus have a full‐featured language‐specific format. We implement and validate this approach in Pharo, where we demonstrate that Fuel is faster than other serializers, even those with special VM support. The extensibility of Fuel made possible to successfully serialize various objects: classes in Newspeak, debugger stacks, and full content management system object graphs. Copyright © 2012 John Wiley & Sons, Ltd.
Martin Dias, Mariano Martinez Peck, Stéphane Ducasse, Gabriela Arévalo
Softw. Pract. Exp.3
2014 Resolving cyclic dependencies between packages with enriched dependency structural matrix
abstract
SUMMARY Dependency structural matrix (DSM) is an approach originally developed for process optimization. It has been successfully applied to identify software dependencies among packages and subsystems. A number of algorithms have been proposed to compute the matrix so that it highlights patterns and problematic dependencies between subsystems. However, existing DSM implementations often miss important information to fully support reengineering effort. For example, they do not clearly qualify and quantify problematic relationships, information that is crucial to support remediation tasks. We propose enriched DSM (eDSM), which provides small‐multiple views and micro–macro‐readings by adding fine‐grained information in each cell of the matrix. Each cell is enriched with contextual information about (i) the type of dependencies (inheritance, class reference, etc.), (ii) the proportion of referencing entities, and (iii) the proportion of referenced entities. We distinguish independent cycles and stress potentially simple fixes for cycles by using coloring information. This work is language independent and has been implemented on top of the Moose software analysis platform. In this paper, we expand our previous work. We improved the cell content information view on the basis of user feedback and performed multiple validations: two different case studies on Moose and Seaside software; one user study for validating eDSM as a usable approach for developers. Solutions to problems identified with eDSM have been performed and retrofitted in analyzed software. Copyright © 2012 John Wiley & Sons, Ltd.
Jannik Laval, Stéphane Ducasse
Softw. Pract. Exp.2
2013 Performance evolution blueprint: Understanding the impact of software evolution on performance
abstract
Understanding the root of a performance drop or improvement requires analyzing different program executions at a fine grain level. Such an analysis involves dedicated profiling and representation techniques. JProfiler and YourKit, two recognized code profilers fail, on both providing adequate metrics and visual representations, conveying a false sense of the performance variation root. We propose performance evolution blueprint, a visual support to precisely compare multiple software executions. Our blueprint is offered by Rizel, a code profiler to efficiently explore performance of a set of benchmarks against multiple software revisions.
Juan Pablo Sandoval Alcocer, Alexandre Bergel, Stéphane Ducasse, Marcus Denker
VISSOFT3
2013 oZone: Layer identification in the presence of cyclic dependencies
Jannik Laval, Nicolas Anquetil, Muhammad Usman Bhatti, Stéphane Ducasse
Sci. Comput. Program.4
2013 Software quality metrics aggregation in industry
abstract
SUMMARY With the growing need for quality assessment of entire software systems in the industry, new issues are emerging. First, because most software quality metrics are defined at the level of individual software components, there is a need for aggregation methods to summarize the results at the system level. Second, because a software evaluation requires the use of different metrics, with possibly widely varying output ranges, there is a need to combine these results into a unified quality assessment. In this paper we derive, from our experience on real industrial cases and from the scientific literature, requirements for an aggregation method. We then present a solution through the Squale model for metric aggregation, a model specifically designed to address the needs of practitioners. We empirically validate the adequacy of Squale through experiments on Eclipse. Additionally, we compare the Squale model to both traditional aggregation techniques (e.g., the arithmetic mean), and to econometric inequality indices (e.g., the Gini or the Theil indices), recently applied to aggregation of software metrics. Copyright © 2012 John Wiley & Sons, Ltd.
Karine Mordal-Manet, Nicolas Anquetil, Jannik Laval, Alexander Serebrenik, Bogdan Vasilescu, Stéphane Ducasse
J. Softw. Evol. Process.6
2012 Domain specific warnings: Are they any better?
abstract
Tools to detect coding standard violations in source code are commonly used to improve code quality. One of their original goals is to prevent bugs, yet, a high number of false positives is generated by the rules of these tools, i.e., most warnings do not indicate real bugs. There are empirical evidences supporting the intuition that the rules enforced by such tools do not prevent the introduction of bugs in software. This may occur because the rules are too generic and do not focus on domain specific problems of the software under analysis. We underwent an investigation of rules created for a specific domain based on expert opinion to understand if such rules are worthwhile enforcing in the context of defect prevention. In this paper, we performed a systematic study to investigate the relation between generic and domain specific warnings and observed defects. From our experiment on a real case, long term evolution, software, we have found that domain specific rules provide better defect prevention than generic ones.
Andre Hora 0001, Nicolas Anquetil, Stéphane Ducasse, Simon Allier
ICSM3
2012 A Catalog of Patterns for Concept Lattice Interpretation in Software Reengineering
Muhammad Usman Bhatti, Nicolas Anquetil, Marianne Huchard, Stéphane Ducasse
SEKE4
2012 Ring: A unifying meta-model and infrastructure for Smalltalk source code analysis tools
Verónica Uquillas Gómez, Stéphane Ducasse, Theo D'Hondt
Comput. Lang. Syst. Struct.2
2012 Object swapping challenges: An evaluation of imageSegment
Mariano Martinez Peck, Noury Bouraqadi, Stéphane Ducasse, Luc Fabresse
Comput. Lang. Syst. Struct.3
2011 AspectMaps: A Scalable Visualization of Join Point Shadows
abstract
When using Aspect-Oriented Programming, it is sometimes difficult to determine at which join point an aspect executes. Similarly, when considering one join point, knowing which aspects will execute there and in what order is non-trivial. This makes it difficult to understand how the application will behave. A number of visualizations have been proposed that attempt to provide support for such program understanding. However, they neither scale up to large code bases nor scale down to understanding what happens at a single join point. In this paper, we present Aspect Maps -- a visualization that scales in both directions, thanks to a multi-level selective structural zoom. We show how the use of Aspect Maps allows for program understanding of code with aspects, revealing both a wealth of information of what can happen at one particular join point as well as allowing to see the "big picture" on a larger code base. We demonstrate the usefulness of Aspect Maps on an example and present the results of a small user study that shows that Aspect Maps outperforms other aspect visualization tools.
Johan Fabry, Andy Kellens, Stéphane Ducasse
ICPC3
2011 SmartGroups: Focusing on Task-Relevant Source Artifacts in IDEs
abstract
Navigating large software systems, even when using a modern IDE, is difficult, since conceptually related software artifacts are distributed in a huge software space. For most software maintenance tasks, only a small fraction of the entire software space is actually relevant. The IDE, however, does not reveal the task relevancy of source artifacts, thus developers cannot easily focus on the artifacts required to accomplish their tasks. SmartGroups help developers to perform software maintenance tasks by representing groups of source artifacts that are relevant for the current task. Relevancy is determined by analyzing historical navigation and modification activities, evolutionary information, and runtime information. The prediction quality of SmartGroups is validated with a benchmark evaluation using recorded development activities and evolutionary information from versioning systems.
David Röthlisberger, Oscar Nierstrasz, Stéphane Ducasse
ICPC3
2011 Supporting simultaneous versions for software evolution assessment
Jannik Laval, Simon Denier, Stéphane Ducasse, Jean-Rémy Falleri
Sci. Comput. Program.3
2010 BeeEye: A Framework for Constructing Architectural Views
Hervé Verjus, Sorana Cîmpan, Azadeh Razavizadeh, Stéphane Ducasse
ECSA4
2010 Package Fingerprints: A visual summary of package interface usage
Hani Abdeen, Stéphane Ducasse, Damien Pollet, Ilham Alloui
Inf. Softw. Technol.2
2010 Generating a catalog of unanticipated schemas in class hierarchies using Formal Concept Analysis
Gabriela Arévalo, Stéphane Ducasse, Silvia E. Gordillo, Oscar Nierstrasz
Inf. Softw. Technol.2
2009 Adding State and Visibility Control to Traits Using Lexical Nesting
Tom Van Cutsem, Alexandre Bergel, Stéphane Ducasse, Wolfgang De Meuter
ECOOP3
2009 The squale model - A practice-based industrial quality model
abstract
ISO 9126 promotes a three-level model of quality (factors, criteria, and metrics) which allows one to assess quality at the top level of factors and criteria. However, it is difficult to use this model as a tool to increase software quality. In the Squale model, we add practices as an intermediate level between metrics and criteria. Practices abstract away from raw information (metrics, tool reports, audits) and provide technical guidelines to be respected. Moreover, practice marks are adjusted using formulae to suit company development habits or exigences: for example bad marks are stressed to point to places which need more attention. The Squale model has been developed and validated over the last couple of years in an industrial setting with Air France-KLM and PSA Peugeot-Citroen.
Karine Mordal-Manet, Francoise Balmas, Simon Denier, Stéphane Ducasse, Harald Wertz, Jannik Laval, Fabrice Bellingard, Philippe Vaillergues
ICSM4
2009 Supporting task-oriented navigation in IDEs with configurable HeatMaps
abstract
Mainstream IDEs generally rely on the static structure of a software project to support browsing and navigation. We propose HeatMaps, a simple but highly configurable technique to enrich the way an IDE displays the static structure of a software system with additional kinds of information. A HeatMap highlights software artifacts according to various metric values, such as bright red or pale blue, to indicate their potential degree of interest. We present a prototype system that implements HeatMaps, and we describe an initial study that assesses the degree to which different HeatMaps effectively guide developers in navigating software.
David Röthlisberger, Oscar Nierstrasz, Stéphane Ducasse, Damien Pollet, Romain Robbes
ICPC3
2009 Traits at work: The design of a new trait-based stream library
Damien Cassou, Stéphane Ducasse, Roel Wuyts
Comput. Lang. Syst. Struct.2
2009 Taking an object-centric view on dynamic information with object flow analysis
Adrian Lienhard, Stéphane Ducasse, Tudor Gîrba
Comput. Lang. Syst. Struct.2
2009 Meta-environment and executable meta-language using smalltalk: an experience report
Stéphane Ducasse, Tudor Gîrba, Adrian Kuhn, Lukas Renggli
Softw. Syst. Model.1
2009 Software Architecture Reconstruction: A Process-Oriented Taxonomy
abstract
To maintain and understand large applications, it is important to know their architecture. The first problem is that unlike classes and packages, architecture is not explicitly represented in the code. The second problem is that successful applications evolve over time, so their architecture inevitably drifts. Reconstructing the architecture and checking whether it is still valid is therefore an important aid. While there is a plethora of approaches and techniques supporting architecture reconstruction, there is no comprehensive software architecture reconstruction state of the art and it is often difficult to compare the approaches. This paper presents a state of the art in software architecture reconstruction approaches.
Stéphane Ducasse, Damien Pollet
IEEE Trans. Software Eng.1
2008 Aspect Mining in Procedural Object Oriented Code
abstract
Although object-oriented programming promotes reusable and well factored entity decomposition, industrial software often shows traces of lack of object-oriented design and procedural thinking. This results in domain entity scattered and tangled code. This is often true in data intensive applications. Aspect mining techniques search for various patterns of scattered and tangled code pertaining to crosscutting concerns. However, in the presence of non-abstracted domain logic, the crosscutting concerns identified are inaccurately related to aspects since lack of 00 abstraction introduces false positives. This paper identifies the difficulty of identifying crosscutting concerns in systems lacking elementary object-oriented structure. It presents an approach classifying various crosscutting concerns. We report our experience on an industrial software system.
Muhammad Usman Bhatti, Stéphane Ducasse, Awais Rashid
ICPC2
2008 Stateful traits and their formalization
Alexandre Bergel, Stéphane Ducasse, Oscar Nierstrasz, Roel Wuyts
Comput. Lang. Syst. Struct.2
2008 Creating sophisticated development tools with OmniBrowser
Alexandre Bergel, Stéphane Ducasse, Colin Putney, Roel Wuyts
Comput. Lang. Syst. Struct.2
2007 Package Surface Blueprints: Visually Supporting the Understanding of Package Relationships
abstract
Large object-oriented applications are structured over large number of packages. Packages are important but complex structural entities that may be difficult to understand since they play different development roles (i.e., class containers, code ownership basic structure, architectural elements...). Maintainers of large applications face the problem of understanding how packages are structured in general and how they relate to each others. In this paper, we present a compact visualization, named Package Surface Blueprint, that qualifies the relationships that a package has with its neighbours. A Package Surface Blueprint represents packages around the notion of package surfaces: groups of relationships according to the packages they refer to. We present two specific views one stressing the references made by a package and another showing the inheritance structure of a package. We applied the visualization on two large case studies: ArgoUML and Squeak.
Stéphane Ducasse, Damien Pollet, Mathieu Suen, Hani Abdeen, Ilham Alloui
ICSM1
2007 Magritte - A Meta-driven Approach to Empower Developers and End Users
Lukas Renggli, Stéphane Ducasse, Adrian Kuhn
MoDELS2
2007 User-changeable visibility: resolving unanticipated name clashes in traits
abstract
A trait is a unit of behaviour that can be composed with other traits and used by classes. Traits offer an alternative to multiple inheritance. Conflict resolution of traits, while flexible, does not completely handle accidental method name conflicts: if a trait with method m is composed with another trait defining a different method m then resolving the conflict may prove delicate or infeasible in cases where both versions of m are still needed. In this paper we present freezeable traits, which provide an expressive composition mechanism to support unanticipated method composition conflicts. Our solution introduces private trait methods and lets the class composer change method visibility at composition time (from public to private and vice versa). Moreover two class composers may use different composition policies for the same trait, something which is not possible in mainstream languages. This approach respects the two main design principles of traits: the class composer is empowered and traits can be flattened away. We present an implementation of freezable traits in Smalltalk. As a side-effect of this implementation we introduced private (early-bound and invisible) methods to Smalltalk by distinguishing object-sends from self-sends. Our implementation uses compile-time bytecode manipulation and, as such, introduces no run-time penalties.
Stéphane Ducasse, Roel Wuyts, Alexandre Bergel, Oscar Nierstrasz
OOPSLA1
2007 Semantic clustering: Identifying topics in source code
Adrian Kuhn, Stéphane Ducasse, Tudor Gîrba
Inf. Softw. Technol.2
2006 Distribution Map
abstract
Understanding large software systems is a challenging task, and to support it many approaches have been developed. Often, the result of these approaches categorize existing entities into new groups or associates them with mutually exclusive properties. In this paper we present the distribution map as a generic technique to visualize and analyze this type of result. Our technique is based on the notion of focus, which shows whether a property is well-encapsulated or cross-cutting, and the notion of spread, which shows whether the property is present in several parts of the system. We present a basic visualization and complement it with measurements that quantify focus and spread. To validate our technique we show evidence of applying it on the result sets of different analysis approaches. As a conclusion we propose that the distribution map technique should belong to any reverse engineering toolkit
Stéphane Ducasse, Tudor Gîrba, Adrian Kuhn
ICSM1
2006 Using Smalltalk as a Reflective Executable Meta-language
Stéphane Ducasse, Tudor Gîrba
MoDELS1
2006 Runtime bytecode transformation for Smalltalk
Marcus Denker, Stéphane Ducasse, Éric Tanter
Comput. Lang. Syst. Struct.2
2006 Inter-language reflection: A conceptual model and its implementation
Kris Gybels, Roel Wuyts, Stéphane Ducasse, Maja D'Hondt
Comput. Lang. Syst. Struct.3
2006 Introduction to the Smalltalk special issue
Serge Stinckwich, Stéphane Ducasse
Comput. Lang. Syst. Struct.2
2006 On the effectiveness of clone detection by string matching
abstract
Abstract Although duplicated code is known to pose severe problems for software maintenance, it is difficult to identify in large systems. Many different techniques have been developed to detect software clones, some of which are very sophisticated, but are also expensive to implement and adapt. Lightweight techniques based on simple string matching are easy to implement, but how effective are they? We present a simple string‐based approach which we have successfully applied to a number of different languages such COBOL, JAVA, C++, PASCAL, PYTHON, SMALLTALK, C and PDP‐11 ASSEMBLER. In each case the maximum time to adapt the approach to a new language was less than 45 minutes. In this paper we investigate a number of simple variants of string‐based clone detection that normalize differences due to common editing operations, and assess the quality of clone detection for very different case studies. Our results confirm that this inexpensive clone detection technique generally achieves high recall and acceptable precision. Over‐zealous normalization of the code before comparison, however, can result in an unacceptable numbers of false positives. Copyright © 2005 John Wiley & Sons, Ltd.
Stéphane Ducasse, Oscar Nierstrasz, Matthias Rieger
J. Softw. Maintenance Res. Pract.1
2006 Modeling history to analyze software evolution
abstract
The histories of software systems hold useful information when reasoning about the systems at hand or when reasoning about general laws of software evolution. Over the past 30 years, research has been increasingly spent on understanding software evolution. However, the approaches developed so far do not rely on an explicit meta-model and, thus, they make it difficult to reuse or compare their results. We argue that there is a need for an explicit meta-model for software evolution analysis. We present a survey of the evolution analyses and deduce a set of requirements that an evolution meta-model should have. We define Hismo, a meta-model in which history is modeled as an explicit entity. Hismo adds a time layer on top of structural information, and provides a common infrastructure for expressing and combining evolution analyses and structural analyses. We validate the usefulness of our meta-model by presenting how different analyses are expressed on it. Copyright © 2006 John Wiley & Sons, Ltd.
Tudor Gîrba, Stéphane Ducasse
J. Softw. Maintenance Res. Pract.2
2006 Analyzing software evolution through feature views
abstract
Features encapsulate the domain knowledge of a software system and thus are valuable sources of information for a reverse engineer. When analyzing the evolution of a system, we need to know how and which features were modified to recover both the change intention and extent, namely which source artifacts are affected. Typically, the implementation of a feature crosscuts a number of source artifacts. To obtain a mapping between features and the source artifacts, we exercise the features and capture their execution traces. However, this results in large traces that are difficult to interpret. To tackle this issue we compact the traces into simple sets of source artifacts that participate in a feature's runtime behavior. We refer to these compacted traces as feature views. Within a feature view, we partition the source artifacts into disjoint sets of characterized software entities. The characterization defines the level of participation of a source entity in the features. We then analyze the features over several versions of a system and we plot their evolution to reveal how and which features were affected by code changes. We show the usefulness of our approach by applying it to a case study where we address the problem of merging parallel development tracks of the same system. Copyright © 2006 John Wiley & Sons, Ltd.
Orla Greevy, Stéphane Ducasse, Tudor Gîrba
J. Softw. Maintenance Res. Pract.2
2006 Traits: A mechanism for fine-grained reuse
abstract
Inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. Existing schemes based on single inheritance, multiple inheritance, or mixins, all pose numerous problems for reuse. To overcome these problems we propose traits , pure units of reuse consisting only of methods. We develop a formal model of traits that establishes how traits can be composed, either to form other traits, or to form classes. We also outline an experimental validation in which we apply traits to refactor a nontrivial application into composable units.
Stéphane Ducasse, Oscar Nierstrasz, Nathanael Schärli, Roel Wuyts, Andrew P. Black
ACM Trans. Program. Lang. Syst.1
2005 Higher order messaging
abstract
We introduce Higher Order Messaging, a higher order programming mechanism for dynamic object-oriented languages. Higher Order Messages allow user-defined message dispatch mechanism to be expressed using an optimally compact syntax that is a natural extension of plain messaging and also have a simple conceptual model. They can be implemented without extending the base language and operate through language bridges.
Marcel Weiher, Stéphane Ducasse
DLS2
2005 Object-Oriented Reengineering Patterns - An Overview
Oscar Nierstrasz, Stéphane Ducasse, Serge Demeyer
GPCE2
2005 Lessons Learned in Applying Formal Concept Analysis to Reverse Engineering
Gabriela Arévalo, Stéphane Ducasse, Oscar Nierstrasz
ICFCA2
2005 CodeCrawler: an information visualization tool for program comprehension
abstract
CodeCrawler (in the remainder of the text CC) is a language independent, interactive, information visualization tool. It is mainly targeted at visualizing object-oriented software, and has been successfully validated in several industrial case studies over the past few years. CC adheres to lightweight principles: it implements and visualizes polymetric views, visualizations of software enriched with information such as software metrics and other source code semantics. CC is built on top of Moose, an extensible language independent reengineering environment that implements the FAMIX metamodel. In its last implementation, CC has become a general-purpose information visualization tool.
Michele Lanza 0001, Stéphane Ducasse, Harald C. Gall, Martin Pinzger 0001
ICSE2
2005 Object-Oriented Reengineering: Patterns and Techniques
abstract
Surprising as it may seem, many of the early adopters of the object-oriented paradigm already face a number of problems typically encountered in large-scale legacy systems. Software engineers are now confronted with millions of lines of industrial source code, developed using object-oriented design methods and languages of the late 80s and early 90s. These systems exhibit a range of problems, effectively preventing them from satisfying the evolving requirements imposed by their customers. This paper shares our knowledge concerning the reengineering of object-oriented legacy systems. We draw upon our experiences, to show you techniques and tools we have applied on real industrial OO systems to detect and repair problems. In particular, we discuss issues like reverse engineering, design extraction, metrics, refactoring and program visualisation.
Serge Demeyer, Stéphane Ducasse, Oscar Nierstrasz
ICSM2
2005 Analyzing Feature Traces to Incorporate the Semantics of Change in Software Evolution Analysis
abstract
Many of the approaches that analyze software evolution consider a static perspective of a system. Static analysis approaches focus on the evolution of static software entities such as packages, classes and methods. Without knowledge of the roles software entities play in system features, it is difficult to interpret the motivation behind changes and extensions in the code. To tackle this problem, we propose an approach to software evolution analysis that exploits the relationships between features and software entities. Our definition of a feature is a unit of observable behavior of a software system. We define history measurements that summarize the evolution of software entities from a feature perspective. We show how we use our feature perspective of software evolution to interpret modifications and extensions to the code. We apply our approach on two case studies and discuss our findings.
Orla Greevy, Stéphane Ducasse, Tudor Gîrba
ICSM2
2005 Identifying traits with formal concept analysis
abstract
Traits are basically mixins or interfaces but with method bodies. In languages that support traits, classes are composed out of traits. There are two main advantages with traits. Firstly, decomposing existing classes into traits from which they can be recomposed improves the factoring of hierarchies. Secondly it increases the library reuse potential by providing more reusable traits. Identifying traits and decomposing class hierarchies into traits is therefore an important and challenging task to facilitate maintainability and evolution. In this paper we present how we use Formal Concept Analysis to identify traits in inheritance hierarchies. Our approach is two-staged: first we identify within a hierarchy maximal groups of methods that have a set of classes in common, second we cluster cohesive groups of methods based on method invocations as potential traits. We applied our approach on two significant hierarchies and compare our results with the manual refactorization of the same code which was done by the authors of traits.
Adrian Lienhard, Stéphane Ducasse, Gabriela Arévalo
ASE2
2005 Classbox/J: controlling the scope of change in Java
abstract
Unanticipated changes to complex software systems can introduce anomalies such as duplicated code, suboptimal inheritance relationships and a proliferation of run-time downcasts. Refactoring to eliminate these anomalies may not be an option, at least in certain stages of software evolution. Classboxes are modules that restrict the visibility of changes to selected clients only, thereby offering more freedom in the way unanticipated changes may be implemented, and thus reducing the need for convoluted design anomalies. In this paper we demonstrate how classboxes can be implemented in statically-typed languages like Java. We also present an extended case study of Swing, a Java GUI package built on top of AWT, and we document the ensuing anomalies that Swing introduces. We show how Classbox/J, a prototype implementation of classboxes for Java, is used to provide a cleaner implementation of Swing using local refinement rather than subclassing.
Alexandre Bergel, Stéphane Ducasse, Oscar Nierstrasz
OOPSLA2
2005 Moose: an agile reengineering environment
abstract
Software systems are complex and difficult to analyze. Reengineering is a complex activity that usually involves combining different techniques and tools. MOOSE is an reengineering environment designed to provide the necessary infrastructure for building new tools and for integrating them. MOOSE centers on a language independent meta-model, and offers services like grouping, querying, navigation, and meta-descriptions. Several tools have been built on top of MOOSE dealing with different aspects of reengineering like: visualization, evolution analysis, semantic analysis, concept analysis or dynamic analysis.
Stéphane Ducasse, Tudor Gîrba, Oscar Nierstrasz
ESEC/SIGSOFT FSE1
2005 The story of moose: an agile reengineering environment
abstract
MOOSE is a language-independent environment for reverse- and re-engineering complex software systems. MOOSE provides a set of services including a common meta-model, metrics evaluation and visualization, a model repository, and generic GUI support for querying, browsing and grouping. The development effort invested in MOOSE has paid off in precisely those research activities that benefit from applying a combination of complementary techniques. We describe how MOOSE has evolved over the years, we draw a number of lessons learned from our experience, and we outline the present and future of MOOSE.
Oscar Nierstrasz, Stéphane Ducasse, Tudor Gîrba
ESEC/SIGSOFT FSE2
2005 Classboxes: controlling visibility of class extensions
Alexandre Bergel, Stéphane Ducasse, Oscar Nierstrasz, Roel Wuyts
Comput. Lang. Syst. Struct.2
2005 Uniform and safe metaclass composition
Stéphane Ducasse, Nathanael Schärli, Roel Wuyts
Comput. Lang. Syst. Struct.1
2005 A data-centric approach to composing embedded, real-time software components
Roel Wuyts, Stéphane Ducasse, Oscar Nierstrasz
J. Syst. Softw.2
2005 The Class Blueprint: Visually Supporting the Understanding of Classes
abstract
Understanding source code is an important task in the maintenance of software systems. Legacy systems are not only limited to procedural languages, but are also written in object-oriented languages. In such a context, understanding classes is a key activity as they are the cornerstone of the object-oriented paradigm and the primary abstraction from which applications are built. Such an understanding is however difficult to obtain because of reasons such as the presence of late binding and inheritance. A first level of class understanding consists of the understanding of its overall structure, the control flow among its methods, and the accesses on its attributes. We propose a novel visualization of classes called class blueprint that is based on a semantically enriched visualization of the internal structure of classes. This visualization allows a software engineer to build a first mental model of a class that he validates via opportunistic code-reading. Furthermore, we have identified visual patterns that represent recurrent situations and as such convey additional, information to the viewer. The contributions of this article are the class blueprint, a novel visualization of the internal structure of classes, the identification of visual patterns, and the definition of a vocabulary based on these visual patterns. We have performed several case studies of which one is presented in depth, and validated the usefulness of the approach in a controlled experiment.
Stéphane Ducasse, Michele Lanza 0001
IEEE Trans. Software Eng.1
2004 Composable Encapsulation Policies
Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Roel Wuyts
ECOOP2
2004 Yesterday"s Weather: Guiding Early Reverse Engineering Efforts by Summarizing the Evolution of Changes
abstract
Knowing where to start reverse engineering a large software system, when no information other than the system's source code itself is available, is a daunting task. Having the history of the code (i.e., the versions) could be of help if this would not imply analyzing a huge amount of data. We present an approach for identifying candidate classes for reverse engineering and reengineering efforts. Our solution is based on summarizing the changes in the evolution of object-oriented software systems by defining history measurements. Our approach, named Yesterday's Weather, is an analysis based on the retrospective empirical observation that classes which changed the most in the recent past also suffer important changes in the near future. We apply this approach on two case studies and show how we can obtain an overview of the evolution of a system and pinpoint its classes that might change in the next versions.
Tudor Gîrba, Stéphane Ducasse, Michele Lanza 0001
ICSM2
2004 Object-oriented encapsulation for dynamically typed languages
abstract
Encapsulation in object-oriented languages has traditionally been based on static type systems. As a consequence, dynamically-typed languages have only limited support for encapsulation. This is surprising, considering that encapsulation is one of the most fundamental and important concepts behind object-oriented programming and that it is essential for writing programs that are maintainable and reliable, and that remain robust as they evolve.
Nathanael Schärli, Andrew P. Black, Stéphane Ducasse
OOPSLA3
2004 Editorial: Smalltalk Language
Stéphane Ducasse, Roel Wuyts
Comput. Lang. Syst. Struct.1
2004 Unanticipated integration of development tools using the classification model
Roel Wuyts, Stéphane Ducasse
Comput. Lang. Syst. Struct.2
2003 Traits: Composable Units of Behaviour
Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew P. Black
ECOOP2
2003 XRay Views: Understanding the Internals of Classes
abstract
Understanding the internal workings of classes is a key prerequisite to maintaining an object-oriented software system. Unfortunately, classical editing and browsing tools offer mainly linear and textual views of classes and their implementation. These views fail to expose the semantic relationships between the internal parts of a class. We propose X-Ray views - a technique based on concept analysis - which reveal the internal relationships between groups of methods and attributes of a class. X-Ray views are composed of elementary collaborations between attributes and methods, and help the engineer to build a mental model of how a class works internally. In this paper we present X-Ray views, and illustrate the approach by applying it on the Smalltalk class UIBuilder.
Gabriela Arévalo, Stéphane Ducasse, Oscar Nierstrasz
ASE2
2003 Applying traits to the smalltalk collection classes
abstract
Traits are a programming language technology that promote the reuse of methods between unrelated classes. This paper reports on a refactoring of the Smalltalk collections classes using traits. The original collection classes contained much duplication of code; traits let us remove all of it. We also found places where the protocols of the collections lacked uniformity; traits allowed us to correct these non-uniformities without code duplication.Traits also make it possible to reuse fragments of collection code outside of the existing hierarchy; for example, they make it easy to convert other collection-like things into true collections. Our refactoring reduced the number of methods in the collection classes by approximately 10 per cent. More importantly, understandability maintainability and reusability of the code were significantly improved.
Andrew P. Black, Nathanael Schärli, Stéphane Ducasse
OOPSLA3
2003 OOPAL: integrating array programming in object-oriented programming
abstract
Array programming shines in its ability to express computations at a high-level of abstraction, allowing one to manipulate and query whole sets of data at once. This paper presents the OPA model that enhances object-oriented programming with array programming features. The goal of OPA is to determine a minimum set of modifications that must be made to the traditional object model in order to take advantage of the possibilities of array programming. It is based on a minimal extension of method invocation and the definition of a kernel of methods implementing fundamental array programming operations. The OPA model presents a generalization of traditional message passing in the sense that a message can be send to an entire set of objects. The model is validated in FS, a new scripting language.
Philippe Mougin, Stéphane Ducasse
OOPSLA2
2003 Dimensions of reengineering environment infrastructures
abstract
Abstract Over the last decade many research groups and commercial companies have been developing reengineering environments. However, many design decisions such as support for multiple models, incremental loading of information, tool integration, entity grouping, and their impacts on the underlying meta‐model and resulting environment have remained implicit. Based on the experience accumulated while developing the Moose reengineering environment and on a survey of reengineering environments, we present a design space defined by a set of criteria that makes explicit the different options and especially their dependencies and trade‐offs. Using this design space, developers of future environments should have a better understanding of the problems they face and the impact of design choices. Copyright © 2003 John Wiley & Sons, Ltd.
Stéphane Ducasse, Sander Tichelaar
J. Softw. Maintenance Res. Pract.1
2003 Polymetric Views - A Lightweight Visual Approach to Reverse Engineering
abstract
Reverse engineering software systems has become a major concern in software industry because of their sheer size and complexity. This problem needs to be tackled since the systems in question are of considerable worth to their owners and maintainers. In this article, we present the concept of a polymetric view, a lightweight software visualization technique enriched with software metrics information. Polymetric views help to understand the structure and detect problems of a software system in the initial phases of a reverse engineering process. We discuss the benefits and limits of several predefined polymetric views we have implemented in our tool CodeCrawler. Moreover, based on clusters of different polymetric views, we have developed a methodology which supports and guides a software engineer in the first phases of a reverse engineering of a large software system. We have refined this methodology by repeatedly applying it on industrial systems and illustrate it by applying a selection of polymetric views to a case study.
Michele Lanza 0001, Stéphane Ducasse
IEEE Trans. Software Eng.2
2002 Components for embedded software: the PECOS approach
abstract
Software is more and more becoming the major cost factor for embedded devices. Already today, software accounts for more than 50 percent of the development costs of such a device. However, software development practices in this area lag far behind those in the traditional software industry. Reuse is hardly ever heard of in some areas, development from scratch is common practice and component-based software is usually a foreign word. PECOS is a collaborative project between industrial and research partners that seeks to enable component-based technology for a certain class of embedded systems known as "field devices" by taking into account the specific properties of this application area. In this paper we introduce a component model for field device software. Furthermore we report on the PECOS component composition language CoCo and the mapping from CoCo to Java and C++.
Thomas Genssler, Alexander Christoph, Michael Winter 0007, Oscar Nierstrasz, Stéphane Ducasse, Roel Wuyts, Gabriela Arévalo, Bastiaan Schönhage, Peter Müller 0006, Christian Stich
CASES5
2002 Using Dynamic Information for the Iterative Recovery of Collaborations and Roles
abstract
Modeling object-oriented applications using collaborations and roles is now well accepted. Collaboration-based or role-based designs decompose an application into tasks performed by a subset of the applications' classes. Collaborations provide a larger unit of understanding and reuse than classes, and are an important aid in the maintenance and evolution of the software. This kind of design information is lost, however, at the implementation level, making it hard to maintain and evolve an existing software application. The extraction of collaborations from code is therefore an important issue in design recovery. In this paper we propose an iterative approach which uses dynamic information to support the recovery and understanding of collaborations. We describe a tool we have developed to support our approach and demonstrate its use on a case study.
Tamar Richner, Stéphane Ducasse
ICSM2
2001 A Categorization of Classes based on the Visualization of their Internal Structure: The Class Blueprint
abstract
The reengineering and reverse engineering of software systems is gaining importance in software industry, because the accelerated turnover in software industry, because the accelerated turnover in software companies creates legacy systems in a shorter period of time. Especially understanding classes is a key activity in object-oriented programming, since classes represent the primary abstractions from which applications are built. The main problem of this task is to quickly grasp the purpose of a class and its inner structure. To help the reverse engineers in their first contact with a foreign system, we propose a categorization of classes based on the visualization of their internal structure. The contributions of this paper are a novel categorization of classes and a visualization of the which we call the class blueprint. We have validated the categorization on several case studies, two of which we present here.
Michele Lanza 0001, Stéphane Ducasse
OOPSLA2
2000 OpenSpaces: An Object-Oriented Framework for Reconfigurable Coordination Spaces
Stéphane Ducasse, Thomas Hofmann 0001, Oscar Nierstrasz
COORDINATION1
2000 Finding refactorings via change metrics
abstract
Reverse engineering is the process of uncovering the design and the design rationale from a functioning software system. Reverse engineering is an integral part of any successful software system, because changing requirements lead to implementations that drift from their original design. In contrast to traditional reverse engineering techniques ---which analyse a single snapshot of a system--- we focus the reverse engineering effort by determining where the implementation has changed. Since changes of object-oriented software are often phrased in terms of refactorings, we propose a set of heuristics for detecting refactorings by applying lightweight, object-oriented metrics to successive versions of a software system. We validate our approach with three separate case studies of mature object-oriented software systems for which multiple versions are available. The case studies suggest that the heuristics support the reverse engineering process by focusing attention on the relevant parts of a software system.
Serge Demeyer, Stéphane Ducasse, Oscar Nierstrasz
OOPSLA2
1999 A Group Based Approach for Coordinating Active Objects
Juan Carlos Cruz, Stéphane Ducasse
COORDINATION2
1999 A Language Independent Approach for Detecting Duplicated Code
abstract
Code duplication is one of the factors that severely complicates the maintenance and evolution of large software systems. Techniques for detecting duplicated code exist but rely mostly on parsers, technology that has proven to be brittle in the face of different languages and dialects. In this paper we show that is possible to circumvent this hindrance by applying a language independent and visual approach, i.e. a tool that requires no parsing, yet is able to detect a significant amount of code duplication. We validate our approach on a number of case studies, involving four different implementation languages and ranging from 256 K up to 13 Mb of source code size.
Stéphane Ducasse, Matthias Rieger, Serge Demeyer
ICSM1
1999 Recovering High-Level Views of Object-Oriented Applications from Static and Dynamic Information
abstract
Recovering architectural documentation from code is crucial to maintaining and re-engineering software systems. Reverse engineering and program understanding approaches are often limited by the fact that: 1) they propose a fixed set of predefined views, and 2) they consider either purely static or purely dynamic views of the application. In this paper we present an environment supporting the generation of tailorable views of object-oriented systems from both static and dynamic information. Our approach is based on the combination of user-defined queries which allow an engineer to create high-level abstractions and to produce views using these abstractions.
Tamar Richner, Stéphane Ducasse
ICSM2
1996 Object and Dependency Oriented Programming in FLO
Anne-Marie Pinna-Dery, Stéphane Ducasse, Mireille Blay-Fornarino
ISMIS2
1995 A Reflective Model for First Class Dependencies
abstract
We propose a reflective model to express and to automatically manage dependencies between objects. This model describes reflective facilities which enable the changing of language semantics. Although the importance of inter-object dependencies is well accepted, there is only limited object-oriented language support for their specification and implementation. In response to this lack of expressiveness of object models, the FLO language integrates dependency management into the object oriented paradigm. Dependencies are described as first class objects and FLO automatically maintains the consistency of the dependency graph.In this paper, we first show how a user can declare dependencies and how the system maintains the consistency of the graph of expressed dependencies. In a second part, we focus on the implementation of this management by controlling the messages sent to linked objects. In order to make dependency management orthogonal to other application concerns, we propose an abstraction of message handling, implemented with meta-objects. We illustrate the extensibility of our language with different control behavior implementations, in particular we study different implementations of the global control of message propagation flow.
Stéphane Ducasse, Mireille Blay-Fornarino, Anne-Marie Pinna-Dery
OOPSLA1