Tamar Richner

Learn More
insert() abstract delete() abstract lookup() abstract forall() HashSet ... ListSet ... Set impl insert() delete() lookup() forall() deleteAll() union() constructor() changeImpl() SetImpl abstract insert() abstract delete() abstract lookup() abstract forall() abstract changeImpl() constructor (type subtypeSetImpl) { impl = new type ; }insert() abstract(More)
Recovering architectural documentation from code is crucial to maintaining and reengineering 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(More)
Modeling object-oriented applications using collaborations and roles is 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(More)
The decomposition of a software application into components and connectors at the design stage has been promoted as a way to describe and reason about complex software architectures. There is, however, surprisingly little language support for this decomposition at implementation IeveI. Interaction reIationships which are identified at design time are lost(More)
Understanding how components in an application interact to ensure a certain functionality is an essential aspect of understanding a software application. To obtain this kind of information an analysis of the dynamic behavior of an application is more appropriate than a static analysis of the code. Understanding dynamic behavior through event analysis is a(More)
In reengineering an object-oriented system we want to benefit from the expertise developed in earlier efforts. It is therefore essential to have a way to communicate expertise at different levels: from knowledge about how to approach a system to be reengineered, to knowledge about improving code by eliminating ’bad’ style. In this paper we propose to use a(More)
Tracking the evolution of a software system through time gives us valuable information. It suggests which parts are likely to remain stable and which ’problem’ aspects are likely to change, and it gives us insight into some of the design choices made. In this paper we show how recovered views of succesive versions of the same software system can be used to(More)
Applying object-oriented design methods and languages does not guarantee that the resulting software systems will be flexible and adaptable. The industrial partners in the FAMOOS project have learned this lesson the hard way: they are now faced with large and rigid software systems that hamper them in meeting a diverse and evolving set of customer(More)
Modelling object-oriented applications using collaborations and roles is 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 can be an important aid in the maintenance and evolution of(More)