|
|
Publications2011
John Anvik and Gail C. MurphyReducing the effort of bug report triage: Recommenders for development-oriented decisions
ACM Trans. Softw. Eng. Methodol., 20(3),
August 2011.
A key collaborative hub for many software development projects is the bug report repository. Although its use can improve the software development process in a number of ways, reports added to the repository need to be triaged. A triager determines if a report is meaningful. Meaningful reports are then organized for integration into the project's development process.
To assist triagers with their work, this article presents a machine learning approach to create recommenders that assist with a variety of decisions aimed at streamlining the development process. The recommenders created with this approach are accurate; for instance, recommenders for which developer to assign a report that we have created using this approach have a precision between 70% and 98% over five open source projects. As the configuration of a recommender for a particular project can require substantial effort and be time consuming, we also present an approach to assist the configuration of such recommenders that significantly lowers the cost of putting a recommender in place for a project. We show that recommenders for which developer should fix a bug can be quickly configured with this approach and that the configured recommenders are within 15% precision of hand-tuned developer recommenders.
Alexander W. J. Bradley and Gail C. MurphySupporting software history exploration
In
Proceedings of the 8th Working Conference on Mining Software Repositories (MSR 2011),
pp. 193–202,
Waikiki, Honolulu, HI, USA,
May 2011.
Software developers often confront questions such as "Why was the code implemented this way"? To answer such questions, developers make use of information in a software system's bug and source repositories. In this paper, we consider two user interfaces for helping a developer explore information from such repositories. One user interface, from Holmes and Begel's Deep Intellisense tool, exposes historical information across several integrated views, favouring exploration from a single code element to all of that element's historical information. The second user interface, in a tool called Rationalizer that we introduce in this paper, integrates historical information into the source code editor, favouring exploration from a particular code line to its immediate history. We introduce a model to express how software repository information is connected and use this model to compare the two interfaces. Through a lab experiment, we found that our model can help predict which interface is helpful for a particular kind of historical question. We also found deficiencies in the interfaces that hindered users in the exploration of historical information. These results can help inform tool developers who are presenting historical information either directly from or mined from software repositories.
Thomas Fritz and Gail C. MurphyDetermining relevancy: how software developers determine relevant information in feeds
In
Proceedings of the 2011 Annual Conference on Human Factors in Computing Systems (CHI 2011),
pp. 1827–1830,
Vancouver, BC, Canada,
May 2011.
Finding relevant information within the vast amount of information exchanged via feeds is difficult. Previous research into this problem has largely focused on recommending relevant information based on topicality. By not considering individual and situational factors these approaches fall short. Through a formative, interview-based study, we explored how five software developers determined relevancy of items in two kinds of project news feeds. We identified four factors that the developers used to help determine relevancy and found that placement of items in source code and team contexts can ease the determination of relevancy.
Emerson Murphy-Hill and Gail C. MurphyPeer interaction effectively, yet infrequently, enables programmers to discover new tools
In
Proceedings of the ACM 2011 Conference on Computer Supported Cooperative Work,
pp. 405–414,
Hangzhou, China,
2011.
Computer users rely on software tools to work effectively and efficiently, but it is difficult for users to be aware of all the tools that might be useful to them. While there are several potential technical solutions to this difficulty, we know little about social solutions, such as one user telling a peer about a tool. To explore these social solutions in one particular domain, we describe a series of interviews with 18 programmers in industry that explore how tool discovery takes place. These interviews provide a rich set of qualitative data that give us detailed insights into how programmers discover tools. One finding was that, while programmers believe that discovery from peers is effective, they actually discover tools from peers relatively infrequently. Another finding was that programmers can effectively discover tools from their peers both in a co-located and remote settings. We describe several implications of our findings, such as that discovery from peers can be enhanced by improving programmers' ability to communicate openly and concisely about tools.
To appear
Sarah Rastkar, Gail C. Murphy, and Alexander W. J. BradleyGenerating Natural Language Summaries for Crosscutting Source Code Concerns
In
ICSM 2011,
Williamsburg, Virginia, USA,
September 2011.
Robin Salkeld, Brendan Cully, Geoffrey Lefebvre, Wenhao Xu, Andrew Warfield, and Gregor KiczalesRetroactive Aspects: Programming in the Past
In
Proceedings of the Ninth International Workshop on Dynamic Analysis (WODA 2011),
pp. 29–34,
Toronto, Ontario, Canada,
July 2011.
We present a novel approach to the problem of dynamic program analysis: writing analysis code directly into the program source, but evaluating it against a recording of the original program's execution. This approach allows developers to reason about their program in the familiar context of its actual source, and take full advantage of program semantics, data structures, and library functionality for understanding execution. It also gives them the advantage of hindsight, letting them easily analyze unexpected behavior after it has occurred. Our position is that writing offline analysis as retroactive aspects provides a unifying approach that developers will find natural and powerful.
Nicholas Sawadsky and Gail C. MurphyFishtail: from task context to source code examples
In
Proceedings of the 1st Workshop on Developing Tools as Plug-ins (TOPI 2011),
pp. 48–51,
Waikiki, Honolulu, HI, USA,
May 2011.
Implementing software development tools as integrated development environment (IDE) plugins gives tools direct access to a range of useful representations of the program being created and can improve programmer efficiency. These benefits must be weighed against the effort to integrate the tool into the IDE, effort which may need to be repeated for each IDE targeted. In this paper, we introduce Fishtail, a prototype plugin for the Eclipse IDE, which assists programmers in discovering code examples and documentation on the web relevant to their current task. Fishtail uses a detailed history of programmer interactions with the source code to automatically determine relevant web resources. We describe the key factors that make it attractive to implement Fishtail as a plugin, and the requirements Fishtail imposes on the plugin/IDE interface. To reach a broader user base and understand how well our tool supports different programming styles and IDE architectures, we have recently begun investigating how to make a version of Fishtail available in the Visual Studio IDE. We outline some of the challenges we face in trying to reuse code from the original Eclipse plugin.
2010
Roberto A. Bittencourt, Gustavo J. S. Santos, Dalton D. S. Guerrero, and Gail C. MurphyImproving Automated Mapping in Reflexion Models Using Information Retrieval Techniques
In
17th Working Conference on Reverse Engineering (WCRE),
pp. 163–172,
Beverly, Massachusetts, USA,
October 2010.
The reflexion model technique supports structural conformance checking of software systems. The scalability of the technique is limited by the requirement for developers to provide a mapping between implementation entities and high-level modules. Such mapping is usually based on regular expressions, and it must also be updated as the system evolves. Automated mapping techniques exist but are solely based on structural dependencies. In this paper, we introduce an automated mapping technique for reflexion models based on information retrieval techniques. It makes use of source code vocabulary and their similarity to the vocabulary of high-level modules. Two case studies conducted across four systems show that the nature of the module view influences which technique performs best. Results also show that combining both mapping techniques into a two step-mapping algorithm generally increases recall, while keeping precision similar to the best approach used in isolation.
Brett Cannon and Eric WohlstadterAutomated object persistence for JavaScript
In
Proceedings of the 19th international conference on World wide web,
pp. 191–200,
Raleigh, North Carolina, USA,
2010.
Traditionally web applications have required an internet connection in order to work with data. Browsers have lacked any mechanisms to allow web applications to operate offline with a set of data to provide constant access to applications. Recently, through browser plug-ins such as Google Gears, browsers have gained the ability to persist data for offline use. However, until now it's been difficult for a web developer using these plug-ins to manage persisting data both locally for offline use and in the internet cloud due to: synchronization requirements, managing throughput and latency to the cloud, and making it work within the confines of a standards-compliant web browser. Historically in non-browser environments, programming language environments have offered automated object persistence to shield the developer from these complexities. In our research we have created a framework which introduces automated persistence of data objects for JavaScript utilizing the internet. Unlike traditional object persistence solutions, ours relies only on existing or forthcoming internet standards and does not rely upon specific runtime mechanisms such as OS or interpreter/compiler support. A new design was required in order to be suitable to the internet's unique characteristics of varying connection quality and a browser's specific restrictions. We validate our approach using benchmarks which show that our framework can handle thousands of data objects automatically, reducing the amount of work needed by developers to support offline Web applications.
Samuel Davis and Gregor KiczalesRegistration-based language abstractions
In
Proceedings of the ACM international conference on Object oriented programming systems languages and applications (Onward! 2010),
pp. 754–773,
Reno/Tahoe, Nevada, USA,
October 2010.
Programming language innovation has been hindered by the difficulty of making changes to existing languages. A key source of difficulty is the tyrannical nature of existing approaches to realizing languages -- adding a new language construct means that any tool, document or programmer that works with the language must be prepared to deal with that construct. A registration-based approach makes it possible to define language constructs that are not tyrannical. They are instead transient -- the program appears to be written using the constructs only so long as a given programmer wants to see it that way. This approach may have the potential to greatly facilitate programming language innovation.
ACM SIGSOFT Distinguished Paper
Thomas Fritz, Jingwen Ou, Gail C. Murphy, and Emerson Murphy-HillA degree-of-knowledge model to capture source code familiarity
In
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1,
pp. 385–394,
Cape Town, South Africa,
2010.
The size and high rate of change of source code comprising a software system make it difficult for software developers to keep up with who on the team knows about particular parts of the code. Existing approaches to this problem are based solely on authorship of code. In this paper, we present data from two professional software development teams to show that both authorship and interaction information about how a developer interacts with the code are important in characterizing a developer's knowledge of code. We introduce the degree-of-knowledge model that computes automatically a real value for each source code element based on both authorship and interaction information. We show that the degree-of-knowledge model can provide better results than an existing expertise finding approach and also report on case studies of the use of the model to support knowledge transfer and to identify changes of interest.
Thomas Fritz and Gail C. MurphyUsing information fragments to answer the questions developers ask
In
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1,
pp. 175–184,
Cape Town, South Africa,
2010.
Each day, a software developer needs to answer a variety of questions that require the integration of different kinds of project information. Currently, answering these questions, such as "What have my co-workers been doing?",
3rd Place at the ACM Student Research Competition
Thomas FritzStaying aware of relevant feeds in context
In
ICSE '10: Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering,
pp. 523–524,
New York, NY, USA,
2010.
To stay aware of relevant information and avoid productivity loss, a developer has to continuously read through new incoming information. Our approach supports the integration of dynamic and static information in a development environment that allows the developer to continuously monitor the relevant information in context of his work.
Ryan Golbeck, Peter Selby, and Gregor KiczalesLate Binding of AspectJ Advice
In
Jan Vitek, editor,
Objects, Models, Components, Patterns,
vol. 6141 of Lecture Notes in Computer Science,
pp. 173–191.
Springer Berlin / Heidelberg,
2010.
The non-local nature of advice applicability in AspectJ means that in many implementations small changes to aspects can require much of the program code to be scanned and possibly rewritten. This can slow down application startup, including the edit-compile-debug development cycle. Late binding of advice has been suggested to improve the situation, at the potential cost of runtime performance. We propose and evaluate two virtual machine (VM) internal late binding approaches, that operate at whole-class and whole-method granularity. Our evaluation shows that in VMs that allow bytecode mutation the preferred approach is to scan and rewrite methods the first time they are executed. In other VMs, whole-class scanning and rewriting at load time performs better. A separate interpreter based approach has startup performance similar to that of the whole-class approach; but micro-benchmarks suggest the latter out-performs the former over time.
Gail C. MurphyHuman-centric software engineering
In
Proceedings of the FSE/SDP workshop on Future of software engineering research - FoSER '10,
p. 251,
Santa Fe, New Mexico, USA,
November 2010.
Research into how humans interact with computers has a long and rich history. Only a small fraction of this research has considered how humans interact with computers when engineering software. A similarly small amount of research has considered how humans interact with humans when engineering software. For the last forty years, we have largely taken an artifact-centric approach to software engineering research. To meet the challenges of building future software systems, I argue that we need to balance the artifact-centric approach with a human-centric approach, in which the focus is on amplifying the human intelligence required to build great software systems. A human-centric approach involves performing empirical studies to understand how software engineers work with software and with each other, developing new methods for both decomposing and composing models of software to to ease the cognitive load placed on engineers and on creating computationally intelligent tools aimed at focusing the humans on the tasks only the humans can solve.
Gail C. Murphy and Emerson Murphy-HillWhat is trust in a recommender for software development?
In
Proceedings of the 2nd International Workshop on Recommendation Systems for Software Engineering,
pp. 57–58,
Cape Town, South Africa,
2010.
Many recommendation systems have been built to aid software developers. Few have been evaluated using human-based evaluation strategies. In studying situations where recommendation systems have been used or might be used, we have observed that issues related to trust are important to a developer's acceptance of recommendations. In this position paper, we outline the trust issues that we have identified and suggest some mechanisms for promoting trust in recommendation systems aimed at software developers.
Emerson Murphy-Hill, Gail C. Murphy, and William G. GriswoldUnderstanding context: creating a lasting impact in experimental software engineering research
In
Proceedings of the FSE/SDP workshop on Future of software engineering research - FoSER '10,
p. 255,
Santa Fe, New Mexico, USA,
November 2010.
Software is developed for and in a vast number of contexts. Some software systems are small in size; some large. Some systems are developed by small teams; some large. Some projects are sensitive to schedule, others to safety of the users. In this position paper, we argue that to make a lasting impact with the software engineering research we conduct, we must understand, make explicit, and vary the context in which our conclusions are drawn. Moreover, we need a better understanding of how research results can be translated or generalized to other contexts, as it is not economically feasible to replicate results across all contexts. We argue that a successful solution to this problem will allow researchers to conduct research within particular contexts, richly characterize those contexts in their writings, and allow other researchers to predictably build on those in differing contexts.
ACM SIGSOFT Distinguished Paper
Emerson Murphy-Hill and Andrew P. BlackAn interactive ambient visualization for code smells
In
Proceedings of the 5th international symposium on Software visualization - SOFTVIS '10,
p. 5,
Salt Lake City, Utah, USA,
October 2010.
Code smells are characteristics of software that indicate that code may have a design problem. Code smells have been proposed as a way for programmers to recognize the need for restructuring their software. Because code smells can go unnoticed while programmers are working, tools called smell detectors have been developed to alert programmers to the presence of smells in their code, and to help them understand the cause of those smells. In this paper, we propose a novel smell detector called Stench Blossom that provides an interactive ambient visualization designed to first give programmers a quick, high-level overview of the smells in their code, and then, if they wish, to help in understanding the sources of those code smells. We also describe a laboratory experiment with 12 programmers that tests several hypotheses about our tool. Our findings suggest that programmers can use our tool effectively to identify smells and to make refactoring judgements. This is partly because the tool serves as a memory aid, and partly because it is more reliable and easier to use than heuristics for analyzing smells.
Immad Naseer, Ryan M. Golbeck, Peter Selby, and Gregor KiczalesInterpreter Implementation of Advice Weaving
Technical Report
TR-2010-01,
Department of Computer Science, University of British Columbia,
January 2010.
When late-binding of advice is used for incremental development or configuration, implementing advice weaving using code rewriting external to the VM can cause performance problems during application startup. We present an interpreter-based (non-rewriting) weaver that uses a simple table and cache structure for matching pointcuts against dynamic join points together with a simple mechanism for calling the matched advice. An implementation of our approach in the Jikes RVM shows its feasibility. Internal micro-benchmarks show dynamic join point execution overhead of approximately 28\% in the common case where no advice is applicable and that start-up performance is improved over VM-external weavers. The cache and table structures could be used during later (i.e. JIT time) per-method rewrite based weaving to reduce pointcut matching overhead. We conclude that it is worthwhile to develop and evaluate a complete in-VM hybrid implementation, comprising both non-rewriting and rewriting based advice weaving.
Sarah Rastkar, Gail C. Murphy, and Gabriel MurraySummarizing software artifacts: a case study of bug reports
In
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1,
pp. 505–514,
Cape Town, South Africa,
2010.
Many software artifacts are created, maintained and evolved as part of a software development project. As software developers work on a project, they interact with existing project artifacts, performing such activities as reading previously filed bug reports in search of duplicate reports. These activities often require a developer to peruse a substantial amount of text. In this paper, we investigate whether it is possible to summarize software artifacts automatically and effectively so that developers could consult smaller summaries instead of entire artifacts. To provide focus to our investigation, we consider the generation of summaries for bug reports. We found that existing conversation-based generators can produce better results than random generators and that a generator trained specifically on bug reports can perform statistically better than existing conversation-based generators. We demonstrate that humans also find these generated summaries reasonable indicating that summaries might be used effectively for many tasks.
Sarah RastkarSummarizing software concerns
In
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 2,
pp. 527–528,
Cape Town, South Africa,
2010.
While working on software concerns to perform evolution tasks, developers often encounter a lack of abstraction. They have to work with all the details of large subsets of code that constitute a concern at a low level of abstraction. In this paper we propose a framework to summarize software concerns in order to raise the level of abstraction and to subsequently improve the productivity of software developers. We use a combination of static analysis, information retrieval, and natural language processing techniques to extract and deduct knowledge about different parts of the concern and its interactions with other concerns. Then we produce a description of the concern using natural language generation and summarization techniques.
Neil Thomas and Gail Murphy How Effective Is Modularization?
In
Andy Oram and Greg Wilson, editors,
Making Software: What Really Works, and Why We Believe It,
pp. 373–392.
O'Reilly Media, Inc.,
October 2010.
Petcharat Viriyakattiyaporn and Gail C. MurphyImproving program navigation with an active help system
In
Proceedings of the 2010 Conference of the Center for Advanced Studies on Collaborative Research,
pp. 27–41,
Toronto, Ontario, Canada,
November 2010.
When performing software change tasks, software developers spend a substantial amount of their time navigating dependencies in the code. Despite the availability of numerous tools to aid such navigation, there is evidence to suggest that developers are not using these tools. In this paper, we introduce an active help system, called Spyglass, that suggests tools to aid program navigation as a developer works. We report on the results of a laboratory study that investigated two questions: will developers act upon suggestions from an active help system and will those suggestions improve developer behaviour? We found that with Spyglass we could make developers as aware of navigational tools as they are when requested to read a tutorial about such tools, with less up-front effort. We also found that we could improve developer behaviour as developers in the Spyglass group, after being given recommendations in the context of their work, navigated programming artifacts more efficiently than those in the tutorial group.
2009
Brett Cannon and Eric WohlstadterEnforcing security for desktop clients using authority aspects
In
Proceedings of the 8th ACM international conference on Aspect-oriented software development,
pp. 255–266,
Charlottesville, Virginia, USA,
2009.
Desktop client applications interact with both local and remote resources. This is both a benefit in terms of the rich features desktop clients can provide, but also a security risk. Due to their high connectivity, desktop clients can leave a user's machine vulnerable to viruses, malicious plug-ins, and scripts. Aspect-Oriented Software Development can be used to address security concerns in software in a modular fashion. However, most existing research focuses on the protection of server-side resources. In this paper we introduce an aspect-oriented mechanism, Authority Aspects, to enforce the Principle of Least Privilege on desktop clients. This helps to ensure that legitimate resource access is allowed and illegitimate access is blocked. We present a case study applying our approach on two desktop applications: an RSS feed aggregator and a Web browser.
Thomas Fritz and Gail C. MurphySearch, stitch, view: Easing information integration in an IDE
In
ICSE Workshop on Search-Driven Development-Users, Infrastructure, Tools and Evaluation, 2009. SUITE '09,
pp. 9–12,
May 2009.
Michael W. Godfrey, Ahmed E. Hassan, James Herbsleb, Gail C. Murphy, Martin Robillard, Prem Devanbu, Audris Mockus, Dewayne E. Perry, and David NotkinFuture of Mining Software Archives: A Roundtable
IEEE Software, 26(1):67–70,
2009.
Gail C. MurphyEveryday aspects
In
Proceedings of the 8th ACM international conference on Aspect-oriented software development - AOSD '09,
p. 229,
Charlottesville, Virginia, USA,
2009.
Emerson Murphy-HillA Model of Refactoring Tool Use
In
Third ACM Workshop on Refactoring Tools (WRT'09),
Orlando, Florida, USA,
October 2009.
For the most part, refactoring tools have changed little since the Smalltalk Refactoring Browser. By continuing to mimic the Refactoring Browser’s user interface, the community of tool builders may be not find new user interfaces that help programmers do their job more effectively. In this position paper, I put forward a general model of how programmers use Refactoring Browser-like tools. I argue that the model is useful for breaking away from the design of traditional refactoring tools and thinking about the design of new ones.
Petcharat Viriyakattiyaporn and Gail C. MurphyChallenges in the user interface design of an IDE tool recommender
In
Proceedings of the 2009 ICSE Workshop on Cooperative and Human Aspects on Software Engineering,
pp. 104–107,
2009.
To help software developers work efficiently, integrated development environments (IDE) include many tools. All too often, these developers are unaware of potentially useful tools within these IDEs that might help them complete their work more effectively. To improve both awareness and use of tools within an IDE, we have been developing a recommendation system called Spyglass that recommends tool(s) that might help a developer navigate information available in an IDE more efficiently. When designing such a recommendation system, important considerations are both the content of the recommendations and the form and manner in which those recommendations are made. In this paper, we focus on what we learned about the form and manner of making tool recommendations from a longitudinal user study of Spyglass. These results may be useful to others designing various kinds of recommendation systems for IDEs.
Eric Wohlstadter, Peng Li, and Brett CannonWeb Service Mashup Middleware with Partitioning of XML Pipelines
In
Proceedings of the 2009 IEEE International Conference on Web Services,
pp. 91–98,
2009.
Traditionally, the composition of Web services to create mashups has been achieved by using an application server as a mediator between a client browser and services. To avoid this bottleneck, mashups are sometimes implemented so that Web service composition takes place directly from the end user’s browser. Creating such implementations is difficult because developers must manage the separation of software into various distributable pieces, in different languages, and coordinate their communication. In this paper we describe a middleware for managing Web service mashups in a disciplined, and flexible way. We build upon the established abstraction of XML pipelines, but describe a new approach for selectively partitioning pipeline components between a browser client and application server. We provide a performance evaluation for a common mashup application scenario.
Eric Wohlstadter and Stefan Tai Web Services
In
Encyclopedia of Database Systems,
pp. 3510–3513.
2009.
Eric Wohlstadter SOAP
In
Encyclopedia of Database Systems,
pp. 2666–2667.
2009.
2008
Brian de Alwis and Gail C. MurphyAnswering conceptual queries with Ferret
In
Proceedings of the 30th international conference on Software engineering,
pp. 21–30,
Leipzig, Germany,
2008.
Programmers seek to answer questions as they investigate the functioning of a software system, such as "which execution path is being taken in this case?" Programmers attempt to answer these questions, which we call conceptual queries, using a variety of tools. Each type of tool typically highlights one kind of information about the system, such as static structural information or control-flow information. Unfortunately for the programmer, the tools seldom directly answer the programmer's conceptual queries. Instead, the programmer must piece together results from different tools to determine an answer to the initial query. At best, this process is time consuming and at worst, this process can lead to data overload and disorientation.
Rick Chern and Kris De VolderThe impact of static-dynamic coupling on remodularization
In
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications,
pp. 261–276,
Nashville, TN, USA,
2008.
We explore the concept of static-dynamic coupling--the degree to which changes in a program's static modular structure imply changes to its dynamic structure. This paper investigates the impact of static-dynamic coupling in a programming language on the effort required to evolve the coarse modular structure of programs written in that language. We performed a series of remodularization case studies in both Java and SubjectJ. SubjectJ is designed to be similar to Java, but have strictly less static-dynamic coupling. Our results include quantitative measures-time taken and number of bugs introduced--as well as a more subjective qualitative analysis of the remodularization process. All results point in the same direction and suggest that static-dynamic coupling causes substantial accidental complexity for the remodularization of Java programs.
Marc Eaddy, Thomas Zimmermann, Kaitlin D. Sherwood, Vibhav Garg, Gail C. Murphy, Nachiappan Nagappan, and Alfred V. AhoDo Crosscutting Concerns Cause Defects?
IEEE Transactions on Software Engineering, 34(4):497–515,
2008.
Sara Forghanizadeh and Eric WohlstadterInterface composition for web service intermediaries
In
Proceedings of the 7th international conference on Software composition,
pp. 92–108,
Budapest, Hungary,
2008.
The use of XML as a format for message exchange makes Web services well suited for composition of heterogeneous components. However, since clients must manage differences in message schemas between services, interoperability is still a significant problem. Interoperability currently can be supported through the use of transformations provided by a Web service intermediary. However, intermediary technologies do not provide a way for clients to reason about the composition of services and intermediaries. We propose an approach to provide clients with an interface composed of schema information from a Web service and an intermediary. Composition is performed by applying rewriting rules, defined by the intermediary, to the server interface schema. This new interface takes into account what transformations are available at an intermediary. The advantage of the approach is that clients can continue to benefit from code-generation and static type-checking offered by interface definition languages such as WSDL; while still making use of the flexibility offered by intermediary transformations. We provide the algorithmic details of composition, including a proof of correctness and an upper bound on complexity. We demonstrate the approach in the context of a Web service composition of three publicly available Web services.
Doctoral Symposium
Thomas FritzComposing knowledge fragments: a next generation IDE
In
ICSE Companion '08: Companion of the 30th international conference on Software engineering,
pp. 999–1002,
New York, NY, USA,
2008.
Ryan M. Golbeck, Samuel Davis, Immad Naseer, Igor Ostrovsky, and Gregor KiczalesLightweight virtual machine support for AspectJ
In
Proceedings of the 7th international conference on Aspect-oriented software development,
pp. 180–190,
Brussels, Belgium,
2008.
Advice weaving can be efficiently supported with only lightweight enhancements to existing Virtual Machines. Performing weaving at the Java bytecode (JBC) level while preserving appropriate metadata enables the VM to understand the AspectJ-specific semantics of the code and optimize it. This allows the overhead of advice weaving and performing non-local advice dispatch optimization to occur prior to runtime. It also allows the VM to perform optimizations that are unavailable to a bytecode level weaver.
Peng Li and Eric WohlstadterDynamic round-trip GUI maintenance
In
Proceedings of the 30th international conference on Software engineering,
pp. 851–854,
Leipzig, Germany,
2008.
One difficulty in software maintenance is that the relationship between observed program behavior and source code is not always clear. This is true for the maintenance of graphical user interfaces (GUIs), because user interface code can be scattered across the decomposition of applications. A popular approach to develop and maintain GUIs is to use "What you see is what you get" editors. They allow developers to work directly with a graphical design view instead of scattered source elements. Unfortunately GUI editors are limited by their ability to statically reconstruct dynamic collaborations between objects. In our research we investigate the combination of a hybrid dynamic and static approach to allow for round-trip maintenance of GUIs. Dynamic analysis reconstructs object relationships, providing a concrete context in which maintenance can be performed. Static checking guides the reconciliation between the GUI editors' design view and source. We implemented a prototype IDE plugin and evaluate our approach by applying it to five open source projects.
Peng Li and Eric WohlstadterView-based maintenance of graphical user interfaces
In
Proceedings of the 7th international conference on Aspect-oriented software development,
pp. 156–167,
Brussels, Belgium,
2008.
One difficulty in software maintenance is that the relationship between observed program behavior and source code is not always clear. In this paper we are concerned specifically with the maintenance of graphical user interfaces (GUIs). User interface code can crosscut the decomposition of applications making GUIs hard to maintain. A popular approach to develop and maintain GUIs is to use "What you see is what you get" editors. They allow developers to work directly with a graphical design view instead of scattered source elements. Unfortunately GUI editors are limited by their ability to statically reconstruct dynamic collaborations between objects. In this paper we investigate the combination of a hybrid dynamic and static approach to allow for view-based maintenance of GUIs. Dynamic analysis reconstructs object relationships, providing a concrete context in which maintenance can be performed. Static checking restricts that only changes in the design view which can meaningfully be translated back to source are allowed. We implemented a prototype IDE plug-in and evaluate our approach by applying it to five open source projects.
David C. Shepherd and Gail C. MurphyA sketch of the programmer's coach
In
Proceedings of the 2008 international workshop on Cooperative and human aspects of software engineering - CHASE '08,
pp. 97–100,
Leipzig, Germany,
2008.
Kaitlin D. Sherwood and Gail C. MurphyReducing Code Navigation Effort with Differential Code Coverage
Technical Report
TR-2008-14,
Department of Computer Science, University of British Columbia,
September 2008.
Programmers spend a significant amount of time navigating code. However, few details are known about how this time is spent. To investigate this time, we performed a study of professional programmers performing programming tasks. We found that these professionals frequently needed to follow execution paths in the code, but that they often made faulty assumptions about which code had executed, impeding their progress. Earlier work on software reconnaissance has addressed this problem, but has focused on whether the technique could provide the correct information to a programmer, not on whether the technique reduces or improves navigation. We built a tool, called Tripoli, that provides an approximation to software reconnaissance via differential code coverage and reran a subset of the initial study. We found that Tripoli had a positive effect on code navigation: less experienced programmers with Tripoli were often more successful in less time than experienced programmers without.
Lingdong Ye and Kris De VolderTool support for understanding and diagnosing pointcut expressions
In
Proceedings of the 7th international conference on Aspect-oriented software development,
pp. 144–155,
Brussels, Belgium,
2008.
In this paper, we present algorithms that compute two kinds of information that can help AspectJ developers diagnose and fix potential problems with their pointcuts. First, we present an algorithm to compute almost matched joinpoints. Second, we present algorithms to compute explanations of why a pointcut does not match (or does match) a specific joinpoint. We implemented two tools using these algorithms. The first is an offline tool that analyzes a code base and produces a comprehensive report about the pointcuts in the code. Using this tool, we were able to find several real problems in existing, medium-sized AspectJ code bases. The second tool is an Eclipse plug-in called PointcutDoctor. PointcutDoctor is a natural extension of AJDT that provides developers easy access to the same information from within their already familiar development environment.
2007
Rick Chern and Kris De VolderDebugging with control-flow breakpoints
In
Proceedings of the 6th international conference on Aspect-oriented software development,
pp. 96–106,
Vancouver, British Columbia, Canada,
2007.
Modern source-level debuggers support dynamic breakpoints that are guarded by conditions based on program state. Such breakpoints address situations where a static breakpoint is not sufficiently precise to characterise a point of interest in program execution. However, we believe that current IDE support for dynamic breakpoints are cumbersome to use. Firstly, guard conditions formulated in (non-aspect-oriented) source-languages cannot directly express control-flow conditions, forcing developers to seek alternative formulations. Secondly, guard-conditions can be complex expressions and manually typing them is cumbersome.We present the Control-flow Breakpoint Debugger (CBD). CBD uses a dynamic pointcut language to characterise control-flow breakpoints---dynamic breakpoints which are conditional on the control-flow through which they were reached. CBD provides a "point-and-click" GUI to specify and incrementally refine control-flow breakpoints, thereby avoiding the burden of manually editing the potentially complex expressions that define them.We performed 20 case studies debugging and fixing documented bugs in 3 existing applications. Our results show that dynamic breakpoints in general are useful in practice, and that CBD's GUI allows specifying them adequately in the majority of cases.
Ömer Erdem Demir, Prémkumar Dévanbu, Eric Wohlstadter, and Stefan TaiAn aspect-oriented approach to bypassing middleware layers
In
Proceedings of the 6th international conference on Aspect-oriented software development,
pp. 25–35,
Vancouver, British Columbia, Canada,
2007.
The layered architecture of middleware platforms (such as CORBA, SOAP, J2EE) is a mixed blessing. On the one hand, layers provide services such as demarshaling, session management, request despatching, quality-of-service (QoS) etc. In a typical middleware platform, every request passes through each layer, whether or not the services provided by that layer are needed for that specific request. This rigid layer processing can lower overall system throughput, and reduce availability and/or increase vulnerability to denial-of-service attacks. For use cases where the response is a simple function of the request input parameters, bypassing middleware layers may be permissible and highly advantageous. Unfortunately, if an application developer desires to selectively bypass the middleware, and process some requests in the lower layer, she has to write platform-specific, intricate low-level code. To evade this trap, we propose to extend the middleware platform with new aspect-oriented modeling syntax, code generation tools, and a development process for building bypassing implementations. Bypassing implementations provide better use of server's resources, leading to better overall client experience. Our core contribution is this idea: aspect-oriented extensions to IDL, additional code generation, along with an enhanced run-time, can enable application developers to conveniently bypass middleware layers when they are not needed, thus improving the server's performance and providing more "operational headroom".
Marc Eaddy, Alfred Aho, and Gail C. MurphyIdentifying, Assigning, and Quantifying Crosscutting Concerns
In
Proceedings of the First International Workshop on Assessment of Contemporary Modularization Techniques,
p. 2,
2007.
Crosscutting concerns degrade software quality. Before we can modularize the crosscutting concerns in our programs to increase software quality, we must first be able to find them. Unfortunately, accurately locating the code related to a concern is difficult, and without proper metrics, determining how much the concern is crosscutting is impossible. We propose a systematic methodology for identifying which code is related to which concern, and a suite of metrics for quantifying the amount of crosscutting code. Our concern identification and assignment guidelines resolve some of the ambiguity issues encountered by other researchers. We applied this approach to systematically identify all the requirement concerns in a 13,531 line program. We found that 95\% of the concerns were crosscutting - indicating a significant potential for improving modularity - and that our metrics were better able to determine which concerns would benefit the most from reengineering.
Andrew D. Eisenberg and Gregor KiczalesExpressive programs through presentation extension
In
Proceedings of the 6th international conference on Aspect-oriented software development,
pp. 73–84,
Vancouver, British Columbia, Canada,
2007.
Most approaches to programming language extensibility have worked by pairing syntactic extension with semantic extension. We present an approach that works through a combination of presentation extension and semantic extension. We also present an architecture for this approach, an Eclipse-based implementation targeting the Java programming language, and examples that show how presentation extension, both with and without semantic extension, can make programs more expressive.
Thomas Fritz, Gail C. Murphy, and Emily HillDoes a programmer's activity indicate knowledge of code?
In
Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering,
pp. 341–350,
Dubrovnik, Croatia,
2007.
The practice of software development can likely be improved if an externalized model of each programmer's knowledge of a particular code base is available. Some tools already assume a useful form of such a model can be created from data collected during development, such as expertise recommenders that use information about who has changed each file to suggest who might answer questions about particular parts of a system. In this paper, we report on an empirical study that investigates whether a programmer's activity can be used to build a model of what a programmer knows about a code base. In this study, nineteen professional Java programmers completed a series of questionnaires about the code on which they were working. These questionnaires were generated automatically and asked about program elements a programmer had worked with frequently and recently and ones that he had not. We found that a degree of interest model based on this frequency and recency of interaction can often indicate the parts of the code base for which the programmer has knowledge. We also determined a number of factors that may be used to improve the model, such as authorship of program elements, the role of elements, and the task being performed.
Ryan M. Golbeck and Gregor KiczalesA machine code model for efficient advice dispatch
In
Proceedings of the 1st workshop on Virtual machines and intermediate languages for emerging modularization mechanisms,
p. 2,
Vancouver, British Columbia, Canada,
2007.
The primary implementations of AspectJ to date are based on a compile- or load-time weaving process that produces Java byte code. Although this implementation strategy has been crucial to the adoption of AspectJ, it faces inherent performance constraints that stem from a mismatch between Java byte code and AspectJ semantics. We discuss these mismatches and show their performance impact on advice dispatch, and we present a machine code model that can be targeted by virtual machine JIT compilers to alleviate this inefficiency. We also present an implementation based on the Jikes RVM which targets this machine code model. Performance evaluation with a set of micro benchmarks shows that our machine code model provides improved performance over translation of advice dispatch to Java byte code.
Gregor KiczalesContext, perspective, and programs
In
Companion to the 22nd ACM SIGPLAN conference on Object-oriented programming systems and applications companion,
p. 726,
Montreal, Quebec, Canada,
2007.
Context plays a large role in our perspective on the world around us--people see things differently depending on background, role, task at hand, and many other variables.
Gregor KiczalesMaking the Code Look Like the Design - Aspects and Other Recent Work
In
International Conference on Program Comprehension,
p. 14,
Los Alamitos, CA, USA,
2007.
The idea that programs should clearly reflect the design decisions they embody has a long history. Higher-level languages, syntactic macros, domain-specific languages, and intentional programming are different approaches to this common goal.
Shawn Minto and Gail C. MurphyRecommending Emergent Teams
In
Fourth International Workshop on Mining Software Repositories (MSR'07:ICSE Workshops 2007),
p. 5,
Minneapolis, MN, USA,
2007.
Clint Morgan, Kris De Volder, and Eric WohlstadterA static aspect language for checking design rules
In
Proceedings of the 6th international conference on Aspect-oriented software development,
pp. 63–72,
Vancouver, British Columbia, Canada,
2007.
Design rules express constraints on the behavior and structure of a program. These rules can help ensure that a program follows a set of established practices, and avoids certain classes of errors.Design rules often crosscut program structure and enforcing them is emerging as an important application domain for Aspect Oriented Programming. For many interesting design rules, current general purpose AOP languages lack the expressiveness to characterize them statically and enforce them at compile time.We have developed a domain specific language called Program Description Logic (PDL). PDL allows succinct declarative definitions of programmatic structures which correspond to design rule violations. PDL is based on a fully static and expressive pointcut language. PDL pointcuts allow characterizing a wide range of design rules without sacrificing static verification.We evaluate PDL by comparing it to FxCop, an industrial strength tool for checking design rules.
Martin P. Robillard and Gail C. MurphyRepresenting concerns in source code
ACM Trans. Softw. Eng. Methodol., 16(1):3,
2007.
A software modification task often addresses several concerns. A concern is anything a stakeholder may want to consider as a conceptual unit, including features, nonfunctional requirements, and design idioms. In many cases, the source code implementing a concern is not encapsulated in a single programming language module, and is instead scattered and tangled throughout a system. Inadequate separation of concerns increases the difficulty of evolving software in a correct and cost-effective manner. To make it easier to modify concerns that are not well modularized, we propose an approach in which the implementation of concerns is documented in artifacts, called concern graphs. Concern graphs are abstract models that describe which parts of the source code are relevant to different concerns. We present a formal model for concern graphs and the tool support we developed to enable software developers to create and use concern graphs during software evolution tasks. We report on five empirical studies, providing evidence that concern graphs support views and operations that facilitate the task of modifying the code implementing scattered concerns, are cost-effective to create and use, and robust enough to be used with different versions of a software system.
Arjun Singh and Gregor KiczalesThe scalability of AspectJ
In
Proceedings of the 2007 conference of the center for advanced studies on Collaborative research,
pp. 203–214,
Richmond Hill, Ontario, Canada,
2007.
To assess the scalability of AspectJ, we refactored concerns that crosscut over half of the plug-ins that comprise the Eclipse IDE. Eclipse is a suitable candidate for furthering other scalability studies of AspectJ because it is not only large, but also has an additional modularization mechanism typical of large systems that introduces new complexities for defining advice and aspects. We evaluated our AO refactored system quantitatively by examining changes in execution time and memory usage, as well as qualitatively by examining changes in scattering, coupling, and abstractions. We conclude that AspectJ scales well in that it can be used in large systems, but that the system may require modifications to the build and class loading procedures in order to cope with defining advice that cross system boundaries.
2006
John Anvik, Lyndon Hiew, and Gail C. MurphyWho should fix this bug?
In
Proceedings of the 28th international conference on Software engineering,
pp. 361–370,
Shanghai, China,
2006.
Open source development projects typically support an open bug repository to which both developers and users can report bugs. The reports that appear in this repository must be triaged to determine if the report is one which requires attention and if it is, which developer will be assigned the responsibility of resolving the report. Large open source developments are burdened by the rate at which new bug reports appear in the bug repository. In this paper, we present a semi-automated approach intended to ease one part of this process, the assignment of reports to a developer. Our approach applies a machine learning algorithm to the open bug repository to learn the kinds of reports each developer resolves. When a new report arrives, the classifier produced by the machine learning technique suggests a small number of developers suitable to resolve the report. With this approach, we have reached precision levels of 57\% and 64\% on the Eclipse and Firefox development projects respectively. We have also applied our approach to the gcc open source development with less positive results. We describe the conditions under which the approach is applicable and also report on the lessons we learned about applying machine learning to repositories used in open source development.
Kris De VolderJQuery: A Generic Code Browser with a Declarative Configuration Language
In
Pascal Van Hentenryck, editor,
Practical Aspects of Declarative Languages,
vol. 3819 of Lecture Notes in Computer Science,
pp. 88–102.
Springer Berlin / Heidelberg,
2006.
Modern IDEs have an open-ended plugin architecture to allow customizability. However, developing a plugin is costly in terms of effort and expertise required by the customizer. We present a two-pronged approach that allows for open-ended customizations while keeping the customization cost low. First, we explicitly limit the portion of the design space targeted by the configuration mechanism. This reduces customization cost by simplifying the configuration interface. Second, we use a declarative programming language as our configuration language. This facilitates open-ended specification of behavior without burdening the user with operational details. Keywords: integrated development environment, program database, domain-specific language, logic programming.
Andrew D. Eisenberg and Gregor KiczalesA simple edit-time metaobject protocol: controlling the display of metadata in programs
In
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications,
pp. 696–697,
Portland, Oregon, USA,
2006.
I will present a prototype tool that enables Java annotations to serve as an extension point for making programs more visually expressive. Thus, programmers can view and edit code in a way that more closely resembles the intention of the code, rather than the raw text. Examples that we have applied the tool to are JDBC 4.0, getters, setters and constraints, JSR 181Webservices, AspectJ, and state charts.
Steven Fraser, Gregor Kiczales, Ricardo Lopez, Peter G. Neumann, Linda Northrop, Martin Rinard, Douglas Schmidt, and Kevin SullivanThe ultra challenge: software systems beyond big
In
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications,
pp. 929–933,
Portland, Oregon, USA,
2006.
How can the ultra large systems (ULS) of the future be built if they will have the complexity of trillions of lines of code, maintain continuous 24x7 operations with no downtime, and live in a hostile environment with unpredictably changing requirements? This panel will discuss and debate the challenges posed by ultra large systems in terms of their design, growth, deployment and dynamics.
Richard P. Gabriel, Guy L. Steele, Jr., Friedrich Steimann, Jim Waldo, Gregor Kiczales, and Kevin SullivanAspects and/versus modularity the grand debate
In
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications,
pp. 935–936,
Portland, Oregon, USA,
2006.
Aspect-Oriented Programming (AOP) and Aspect-Oriented Software Development (AOSD) endeavor to aid programmers in the separation of concerns, specifically crosscutting concerns, as an advance in modularization. AOP does so using primarily language changes, while AOSD uses a combination of language, environment, and methodology. But the concepts of obliviousness-not universally accepted as part of AOP-and parameterization appear to contradict the well-established principles of modularity and encapsulation that David Parnas and other greats of the past laid out and on which software engineering has depended for the last 40 years. Are we moving forward with better understandings of software engineering, modularity, and design/development principles, or are we losing our way? This debate is the postscript to Friedrich Steinmann's OOPSLA Essay, "The Paradoxical Success of Aspect-Oriented Programming".
Terry Hon and Gregor KiczalesFluid AOP join point models
In
Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications,
pp. 712–713,
Portland, Oregon, USA,
2006.
Aspect-oriented programming (AOP) allows programmers to modularize the implementation of crosscutting concerns. AspectJ and related languages achieve this with a linguistic approach, which enables different modules of the program to have a crosscutting structural relationship.In fluid AOP the development environment temporarily shifts a program to an alternative crosscutting module structure to enable specific editing or reasoning tasks. The program text can appear to have different crosscutting modularities simultaneously, as opposed to just having modules that crosscut each other.In this demonstration we show three possible fluid AOP designs, and compare their look and feel using common examples.
Izzet Safer, Gail C. Murphy, Julie Waterhouse, and Jin LiA focused learning environment for Eclipse
In
Proceedings of the 2006 OOPSLA workshop on eclipse technology eXchange - eclipse '06,
pp. 75–79,
Portland, Oregon,
2006.
Eric Wohlstadter, Stefan Tai, Thomas Mikalsen, Judah Diament, and Isabelle RouvellouA Service-oriented Middleware for Runtime Web Services Interoperability
In
IEEE International Conference on Web Services,
pp. 393–400,
Los Alamitos, CA, USA,
2006.
A major goal of service-oriented architectures is to enable software interoperability in heterogeneous and dynamic environments. Web services standards and protocols aim to support this goal and middleware systems implementing these standards and protocols consequently are needed. Maintenance and administration of middleware is made difficult due to variations in standards and their constant evolution. In this paper, we introduce a new service-oriented middleware architecture for runtime Web services interoperability. Different from other middleware systems our approach applies service-oriented computing principles on the middleware layer, thereby establishing an on-demand model for middleware features. Clients can use middleware as services, dynamically discovering and using the services as interoperability requirements are determined. Further, middleware as services allows middleware to be provided and managed separately from its clients. We present the policy-based programming model, architecture, and details of our middleware, and discuss new challenges that arise in this context, such as distribution of middleware services. The approach is validated through a scenario integrating web service transaction middleware.
Eric Wohlstadter and Kris De VolderDoxpects: aspects supporting XML transformation interfaces
In
Proceedings of the 5th international conference on Aspect-oriented software development,
pp. 99–108,
Bonn, Germany,
2006.
In the web services environment software development can involve writing both object-oriented programs and XML transformations. This can be seen in the popular Web Services architecture. In this architecture, crosscutting concerns are often manifest as transformations on XML messages; encrypting messages, adapting between schemas types or adding extra-functional elements such as transaction contexts can be seen as prime examples. Some existing middleware platforms provide support for Handlers where crosscutting message transformation concerns can be addressed. Although handlers localize some concerns, they do not support the sound software-engineering principle of "programming to an interface". This prevents a clean mapping from design to implementation and inhibits useful static checking which could take advantage of a well specified interface. To address this and similar design challenges, we have developed Doxpects, which solve many problems with the existing handler approach to implementing these new crosscutting concerns. We describe an AOP abstraction called the content-based pointcut which integrates support for XML transformation to enable implementation of crosscutting concerns with good modularity properties. We present examples based on XML encryption and service interoperability implemented on top of the Apache Axis Web Services middleware.
2005
John Anvik, Lyndon Hiew, and Gail C. MurphyCoping with an open bug repository
In
Proceedings of the 2005 OOPSLA workshop on Eclipse technology eXchange,
pp. 35–39,
San Diego, California,
2005.
Most open source software development projects include an open bug repository---one to which users of the software can gain full access---that is used to report and track problems with, and potential enhancements to, the software system. There are several potential advantages to the use of an open bug repository: more problems with the system might be identified because of the relative ease of reporting bugs, more problems might be fixed because more developers might engage in problem solving, and developers and users can engage in focused conversations about the bugs, allowing users input into the direction of the system. However, there are also some potential disadvantages such as the possibility that developers must process irrelevant bugs that reduce their productivity. Despite the rise in use of open bug repositories, there is little data about what is stored inside these repositories and how they are used. In this paper, we provide an initial characterization of two open bug repositories from the Eclipse and Firefox projects, describe the duplicate bug and bug triage problems that arise with these open bug repositories, and discuss how we are applying machine learning technology to help automate these processes.
Wesley Coelho and Gail C. MurphyActiveAspect: presenting crosscutting structure
SIGSOFT Softw. Eng. Notes, 30(4):1–4,
2005.
Developers must often deal with concerns that crosscut a program's structure. Understanding the crosscutting structure may help a developer understand and work with the concern. Current tools for presenting crosscutting structure suffer either from graphical complexity or a mismatch between the presentation and the underlying program structure. We introduce a concern presentation approach that overcomes these problems through a combination of automatic abstraction and interactive features that enable a developer to investigate relevant details. We sketch how the ActiveAspect tool we are developing implements this approach for presenting the crosscutting structure described by aspects in AspectJ.
Adrian Colyer, Jack Greenfield, Ivar Jacobson, Gregor Kiczales, and Dave ThomasAspects: passing fad or new foundation?
In
Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications,
pp. 376–377,
San Diego, CA, USA,
2005.
Aspect-oriented software development (AOSD) has a lot of interest in the research community. It has also found early adopters in application development and middleware. This panel discusses the potential expansion and use of AOP into mainstream software development.This question is not just directed to the aspect research community, but also to practicing software development teams and organizations. The panel will explore the appropriate position and awareness of aspect-orientation amidst other advances in software engineering; how to prepare organizations for adoption; and what additional research and development is necessary. The panel discussion will help the OO community to understand the appropriate use of aspect-orientation. It will also highlight areas where additional efforts by AOSD researchers and professionals are required.
Omer Erdem Demir, Prem Devanbu, Nenad Medvidovic, and Eric WohlstadterDISCOA: architectural adaptations for security and QoS
SIGSOFT Softw. Eng. Notes, 30(4):1–7,
2005.
Modern distributed systems have greatly benefited from developments such as model-driven development, and architectural description languages. Abstract models of components (e.g., IDL) and models of interconnection (e.g., architectural description languages, or ADLs) provide important software engineering advantages, such as explicit design models, type-checked integration across machine and language boundaries (with generated marshaling and dispatch code), the possibility of third-party components, and automated verification of design artifacts. But, when distributed systems are enhanced to provide security features, many of these advantages do not apply. Security features are hand-written into almost every part of the system; there is no explicit component or architectural model, or separable "security component" security code fragments are scattered and tangled through the different distributed elements of the system, and are often reduced to communicating through lowest-common denominator fragments (like raw bytes) since they are not represented in the model.In this paper, we describe DISCOA, a proposed extension of our earlier work on DADO [23] to handle security features in distributed systems, using explicit architectural models with aspect-oriented extensions.
Ömer Erdem Demir, Premkumar Devanbu, Eric Wohlstadter, and Stefan TaiOptimizing layered middleware
In
Proceedings of the 5th international workshop on Software engineering and middleware,
pp. 33–38,
Lisbon, Portugal,
2005.
Middleware is often built using a layered architectural style. Layered design provides good separation of the different concerns of middleware, such as communication, marshaling, request dispatching, thread management, etc. Layered architecture helps in the development and evolution of the middleware. It also provides tactical side-benefits: layers provide convenient protection boundaries for enforcing security policies. However, the benefits of this layered structure come at a cost. Layered designs can hinder performance-related optimizations, and actually make it more difficult to adapt systems to conveniently address late-bound requirements such as dependability, access control, virus protection, and so on. We present some examples of this issue, and outline a new approach, under investigation at UC Davis, which includes ideas in middleware, architectures, and programming models.
Andrew David Eisenberg and Kris De VolderDynamic Feature Traces: Finding Features in Unfamiliar Code
In
Software Maintenance, IEEE International Conference on,
pp. 337–346,
Los Alamitos, CA, USA,
2005.
This paper introduces an automated technique for feature location: helping developers map features to relevant source code. Like several other automated feature location techniques, ours is based on execution-trace analysis. We hypothesize that these techniques, which rely on making binary judgments about a code element?s relevance to a feature, are overly sensitive to the quality of the input. The main contribution of this paper is to provide a more robust alternative, whose most distinguishing characteristic is that it employs ranking heuristics to determine a code element?s relevance to a feature. We believe that our technique is less sensitive with respect to the quality of the input and we claim that it is more effective when used by developers unfamiliar with the target system. We validate our claim by applying our technique to three systems with comprehensive test suites. A developer unfamiliar with the target system spent a limited amount of effort preparing the test suite for analysis. Our results show that under these circumstances our ranking-based technique compares favorably to a technique based on binary judgements.
Elnar Hajiyev, Mathieu Verbaere, Oege de Moor, and Kris De VolderCodeQuest: querying source code with datalog
In
Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications,
pp. 102–103,
San Diego, CA, USA,
2005.
We describe CodeQuest, a system for querying source code. It combines two previous proposals, namely the use of logic programming and database system. Experiments (on projects ranging from 3KSLOC to 1300KSLOC) confirm that for this application, a query language based on DataLog strikes the right balance between expressiveness and scalability.
Jan Hannemann, Gail C. Murphy, and Gregor KiczalesRole-based refactoring of crosscutting concerns
In
Proceedings of the 4th international conference on Aspect-oriented software development,
pp. 135–146,
Chicago, Illinois,
2005.
Improving the structure of code can help developers work with a software system more efficiently and more consistently. To aid developers in re-structuring the implementation of crosscutting concerns using aspect-oriented programming, we introduce a role-based refactoring approach and tool. Crosscutting concerns (CCCs) are described in terms of abstract roles, and instructions for refactoring crosscutting concerns are written in terms of those roles. To apply a refactoring, a developer maps a subset of the roles to concrete program elements; a tool can then help complete the mapping of roles to the existing program. Refactoring instructors are then applied to manipulate and modularize the concrete elements corresponding to the crosscutting concern. Evaluation of the prototype tool on a graphical editing framework suggests that the approach helps planning and executing complex CCC refactorings.
Reid Holmes, Robert J. Walker, and Gail C. MurphyStrathcona example recommendation tool
In
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering,
pp. 237–240,
Lisbon, Portugal,
2005.
Using the application programming interfaces (API) of large software systems requires developers to understand details about the interfaces that are often not explicitly defined. However, documentation about the API is often incomplete or out of date. Existing systems that make use of the API provide a form of implicit information on how to use that code. Manually searching through existing projects to find relevant source code is tedious and time consuming. We have created the Strathcona Example.Recommendation Tool to assist developers in finding relevant fragments of code, or examples, of an API's use. These examples can be used by developers to provide insight on how they are supposed to interact with the API.
Distinguished Paper
Reid Holmes and Gail C. MurphyUsing structural context to recommend source code examples
In
Proceedings of the 27th international conference on Software engineering,
pp. 117–125,
St. Louis, MO, USA,
2005.
When coding to a framework, developers often become stuck, unsure of which class to subclass, which objects to instantiate and which methods to call. Example code that demonstrates the use of the framework can help developers make progress on their task. In this paper, we describe an approach for locating relevant code in an example repository that is based on heuristically matching the structure of the code under development to the example code. Our tool improves on existing approaches in two ways. First, the structural context needed to query the repository is extracted automatically from the code, freeing the developer from learning a query language or from writing their code in a particular style. Second, the repository can be generated easily from existing applications. We demonstrate the utility of this approach by reporting on a case study involving two subjects completing four programming tasks within the Eclipse integrated development environment framework.
Distinguished Paper
Mik Kersten and Gail C. MurphyMylar: a degree-of-interest model for IDEs
In
Proceedings of the 4th international conference on Aspect-oriented software development,
pp. 159–168,
Chicago, Illinois,
2005.
Even when working on a well-modularized software system, programmers tend to spend more time navigating the code than working with it. This phenomenon arises because it is impossible to modularize the code for all tasks that occur over the lifetime of a system. We describe the use of a degree-of-interest (DOI) model to capture the task context of program elements scattered across a code base. The Mylar tool that we built encodes the DOI of program elements by monitoring the programmer's activity, and displays the encoded DOI model in views of Java and AspectJ programs. We also present the results of a preliminary diary study in which professional programmers used Mylar for their daily work on enterprise-scale Java systems.
Gregor Kiczales and Mira MeziniSeparation of Concerns with Procedures, Annotations, Advice and Pointcuts
In
Andrew P Black, editor,
ECOOP 2005 - Object-Oriented Programming,
vol. 3586 of Lecture Notes in Computer Science,
pp. 195–213.
Springer Berlin / Heidelberg,
2005.
There are numerous mechanisms for separation of concerns at the source code level. Three mechanisms that are the focus of recent attention – metadata annotations, pointcuts and advice – can be modeled together with good old-fashioned procedures as providing different kinds of bindings: procedure calls bind program points to operations, annotations bind attributes to program points; pointcuts bind sets of points to various descriptions of those sets; named pointcuts bind attributes to sets of points; and advice bind the implementation of an operation to sets of points. This model clarifies how the mechanisms work together to separate concerns, and yields guidelines to help developers use the mechanisms in practice.
Gregor Kiczales and Mira MeziniAspect-oriented programming and modular reasoning
In
Proceedings of the 27th international conference on Software engineering,
pp. 49–58,
St. Louis, MO, USA,
2005.
Aspects cut new interfaces through the primary decomposition of a system. This implies that in the presence of aspects, the complete interface of a module can only be determined once the complete configuration of modules in the system is known. While this may seem anti-modular, it is an inherent property of crosscutting concerns, and using aspect-oriented programming enables modular reasoning in the presence of such concerns.
Gregor KiczalesAspect-oriented programming
In
Proceedings of the 27th international conference on Software engineering,
p. 730,
St. Louis, MO, USA,
2005.
Miryung Kim, Vibha Sazawal, David Notkin, and Gail MurphyAn empirical study of code clone genealogies
In
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering,
pp. 187–196,
Lisbon, Portugal,
2005.
Invited Paper
Gail C. Murphy, Mik Kersten, Martin P. Robillard, and Davor ČubranićThe emergent structure of development tasks
In
ECOOP,
pp. 33–-48,
2005.
Integrated development environments have been designed and engineered to display structural information about the source code of large systems. When a development task lines up with the structure of the system, the tools in these environments do a great job of supporting developers in their work. Unfortunately, many development tasks do not have this characteristic. Instead, they involve changes that are scattered across the source code and various other kinds of artifacts, including bug reports and documentation. Today’s development environments provide little support for working with scattered pieces of a system, and as a result, are not adequately supporting the ways in which developers work on the system. Fortunately, many development tasks do have a structure. This structure emerges from a developer’s actions when changing the system. In this paper, we describe how the structure of many tasks crosscuts system artifacts, and how by capturing that structure, we can make it as easy for developers to work on changes scattered across the system’s structure as it is to work on changes that line up with the system’s structure.
Martin P. Robillard and Gail C. MurphyJust-in-time concern modeling
SIGSOFT Softw. Eng. Notes, 30(4):1–3,
2005.
In this position paper, we propose the notion of just-in-time concern modeling. As some concerns emerge late in the software life cycle and can be ephemeral, we argue that mechanisms should be available to capture descriptions of concerns as they emerge or become relevant. Based on our experience with the FEAT concern modeling and analysis tool, we highlight the essential characteristics, benefits, and pitfalls of just-in-time concern modeling at the source code level.
Jonathan Sillito, Kris De Volder, Brian Fisher, and Gail C. MurphyManaging software change tasks: an exploratory study
In
International Symposium on Empirical Software Engineering,
10 pp.,
2005.
Programmers often have to perform change tasks that involve unfamiliar portions of a software system's code base. To help inform the design of software development tools intended to support programmers in this context, we conducted a qualitative study of how programmers manage such change tasks. In the study we observed Java programmers using a state-of-the-practice IDE to work on real change tasks to a medium-sized open source software system. In this paper we present our results, describing eight observations about the programmers' behavior and the impact of the development environment on their behavior. We also highlight several key challenges faced by the programmers and discuss the implications of our results on the design of development tools.
Maria Tkatchenko and Gregor KiczalesUniform Support for Modeling Crosscutting Structure
In
Lionel Briand and Clay Williams, editors,
Model Driven Engineering Languages and Systems,
vol. 3713 of Lecture Notes in Computer Science,
pp. 508–521.
Springer Berlin / Heidelberg,
2005.
We propose bottom-up support for modeling crosscutting structure in UML by adding a simple join point model to the meta-model. This supports built-in crosscutting modeling constructs such as sequence diagrams. It also facilitates adding new kinds of crosscutting modeling constructs such as role bindings, inter-type declarations, and advice. A simple weaver produces a uniform representation of the crosscutting structure, which can then be displayed or analyzed in a variety of ways.
Eric Wohlstadter, Stefan Tai, Thomas Mikalsen, Isabelle Rouvellou, and Premkumar DevanbuTwo-Party Aspect Agreement using a COTS Solver
In
Proceedings of the 4th AOSD Workshop on Aspects, Components, and Patterns for Infrastructure Software (ACP4IS),
Chicago, Illinois, USA,
2005.
A number of researchers have proposed an aspect-oriented approach for integrating concerns with component based applications. With this approach, components only implement a functional interface; aspects such as security are left unresolved until deployment time. In this paper we present the latest version of our declarative language, GlueQoS, used to specify aspect deployment policies. Our work is focused on automating the process of configuring cooperating remote aspects using a client-server handshake. During the handshake the two parties agree on aspect configuration by using mixed integer programming. A security example is presented as well as initial performance observations.
Davor Čubranić, Gail C. Murphy, Janice Singer, and Kellogg S. BoothHipikat: a project memory for software development
IEEE Transactions on Software Engineering, 31(6):446–465,
2005.
Sociological and technical difficulties, such as a lack of informal encounters, can make it difficult for new members of noncollocated software development teams to learn from their more experienced colleagues. To address this situation, we have developed a tool, named Hipikat that provides developers with efficient and effective access to the group memory for a software development project that is implicitly formed by all of the artifacts produced during the development. This project memory is built automatically with little or no change to existing work practices. After describing the Hipikat tool, we present two studies investigating Hipikat's usefulness in software modification tasks. One study evaluated the usefulness of Hipikat's recommendations on a sample of 20 modification tasks performed on the Eclipse Java IDE during the development of release 2.1 of the Eclipse software. We describe the study, present quantitative measures of Hipikat's performance, and describe in detail three cases that illustrate a range of issues that we have identified in the results. In the other study, we evaluated whether software developers who are new to a project can benefit from the artifacts that Hipikat recommends from the project memory. We describe the study, present qualitative observations, and suggest implications of using project memory as a learning aid for project newcomers.
2004
Doug Janzen and Kris De VolderProgramming with Crosscutting Effective Views
In
Martin Odersky, editor,
ECOOP 2004 – Object-Oriented Programming,
vol. 3086 of Lecture Notes in Computer Science,
pp. 275–306.
Springer Berlin / Heidelberg,
2004.
Aspect-oriented systems claim to improve modularity by providing explicit mechanisms that allow modularization of concerns which crosscut the object-oriented decomposition of a system in terms of classes. However, by modularizing concerns which crosscut classes, at the same time the structure and functionality associated with the classes themselves becomes scattered across the implementation of different aspects. This may hamper system understanding in other ways. In this paper we present a system that addresses this issue by allowing a developer to move fluidly between two alternative modular views on the decomposition of the program, editing the program either as decomposed into classes, or alternatively as decomposed into modules that crosscut classes. Thus developers gain the advantages of open classes, without having to give up the ability to edit the program directly in terms of classes.
Edward McCormick and Kris De VolderJQuery: finding your way through tangled code
In
Companion to the 19th annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications,
pp. 9–10,
Vancouver, BC, Canada,
2004.
A typical IDE based exploration of an OOP system will often involve multiple searches through class hierarchies, field accesses, method calls, regular expression matches and more. Developers who must follow connections between these disconnected views may find great difficulty in combining the capabilities of each view and may as well suffer significant disorientation due to loss of context while switching. toolname is a flexible, query-based source code browser that alleviates this disorientation by allowing the user to explore the various types of structural relationships between elements of the code without the distraction of switching tools. Using toolname, a developer can define his or her own top-level browsers on-the-fly by formulating logic queries and running them against the source code. Elements in the tree can then be queried individually in the same manner, allowing further exploration of the complex web of relationships that exist between scattered elements of code.
Martin P. Robillard and Gail C. MurphyProgram navigation analysis to support task-aware software development environments
In
"Workshop on Directions in Software Engineering Environments (WoDiSEE2004)" W2S Workshop - 26th International Conference on Software Engineering,
pp. 83–88,
Edinburgh, Scotland, UK,
May 2004.
Performing a software modification requires a developer to investigate a program to find and understand the code relevant to the modification task. Although standard program investigation tools can help developers in this activity, developers often get lost in the complex web of information available about a program. To address this problem we propose to use program navigation analysis, a technique to record and analyze the actions of a developer using a software development environment in order to infer the current task and the subset of a program relevant to this task. Our hypothesis is that we can use the results of program navigation analysis to dynamically configure the interface of a software development environment in a way that alleviates the problems of disorientation experienced by developers. In this paper, we define program navigation analysis and present an overview of its underpinnings, summarize our experience with the technique, highlight important technical challenges, and discuss the benefits that can be reaped from use of the technique.
Martin P. Robillard, Wesley Coelho, and Gail C. MurphyHow effective developers investigate source code: an exploratory study
IEEE Transactions on Software Engineering, 30(12):889–903,
2004.
Prior to performing a software change task, developers must discover and understand the subset of the system relevant to the task. Since the behavior exhibited by individual developers when investigating a software system is influenced by intuition, experience, and skill, there is often significant variability in developer effectiveness. To understand the factors that contribute to effective program investigation behavior, we conducted a study of five developers performing a change task on a medium-size open source system. We isolated the factors related to effective program investigation behavior by performing a detailed qualitative analysis of the program investigation behavior of successful and unsuccessful developers. We report on these factors as a set of detailed observations, such as evidence of the phenomenon of inattention blindness by developers skimming source code. In general, our results support the intuitive notion that a methodical and structured approach to program investigation is the most effective.
Jonathan Sillito, Christopher Dutchyn, Andrew David Eisenberg, and Kris De VolderUse Case Level Pointcuts
In
Martin Odersky, editor,
ECOOP 2004 – Object-Oriented Programming,
vol. 3086 of Lecture Notes in Computer Science,
pp. 197–216.
Springer Berlin / Heidelberg,
2004.
Software developers create a variety of artifacts that model the behaviour of applications at different levels of abstraction; e.g. use cases, sequence diagrams, and source code. Aspect-oriented programming languages, such as AspectJ, support the modularization of crosscutting concerns at the source code level. However, crosscutting concerns also arise in other behavioural models of software systems. We provide a new aspect language, AspectU, which supports modularization of crosscutting concerns in the use-case model. Further, we provide a prototype tool that partially translates AspectU aspects into AspectJ aspects. To facilitate this translation we introduce a third aspect language, AspectSD, which targets the sequence-diagram model. AspectU together with our translation tool allows developers to express advice using use case level concepts while still affecting the runtime behaviour of a system, yielding a natural and intensional expression of some concerns.
Mitchell Wand, Gregor Kiczales, and Christopher DutchynA semantics for advice and dynamic join points in aspect-oriented programming
ACM Trans. Program. Lang. Syst., 26(5):890–910,
2004.
A characteristic of aspect-oriented programming, as embodied in Aspect J, is the use of advice and point cuts to define behavior that crosscuts the structure of the rest of the code. The events during execution at which advice may execute are called join points. A pointcut is a set of join points. An advice is an action to be taken at the join points in a particular pointcut. In this model of aspect-oriented programming, join points are dynamic in that they refer to events during the flow of execution of the program.We give a denotational semantics for a minilanguage that embodies the key features of dynamic join points, pointcuts, and advice. This is the first semantics for aspect-oriented programming that handles dynamic join points and recursive procedures. It is intended as a baseline semantics against which future correctness results may be measured.
Annie T.T. Ying, Gail C. Murphy, Raymond Ng, and Mark C. Chu-CarrollPredicting Source Code Changes by Mining Change History
IEEE Transactions on Software Engineering, 30(9):574–586,
2004.
Software developers are often faced with modification tasks that involve source which is spread across a code base. Some dependencies between source code, such as those between source code written in different languages, are difficult to determine using existing static and dynamic analyses. To augment existing analyses and to help developers identify relevant source code during a modification task, we have developed an approach that applies data mining techniques to determine change patterns—sets of files that were changed together frequently in the past—from the change history of the code base. Our hypothesis is that the change patterns can be used to recommend potentially relevant source code to a developer performing a modification task. We show that this approach can reveal valuable dependencies by applying the approach to the Eclipse and Mozilla open source projects and by evaluating the predictability and interestingness of the recommendations produced for actual modification tasks on these systems.
Davor Čubranić, Gail C. Murphy, Janice Singer, and Kellogg S. BoothLearning from project history: a case study for software development
In
Proceedings of the 2004 ACM conference on Computer supported cooperative work,
pp. 82–91,
Chicago, Illinois, USA,
2004.
The lack of lightweight communication channels and other technical and sociological difficulties make it hard for new members of a non-collocated software development team to learn effectively from their more experienced colleagues while they are coming up-to-speed on a project. To address this situation, we have developed a tool, named Hipikat, that provides developers with efficient and effective access to the group memory for a software development project that is implicitly formed by all of the artifacts produced during the development. This \textlessi\textgreaterproject memory\textless/i\textgreater is built automatically with little or no change to existing work practices. We report an exploratory case study evaluating whether software developers who are new to a project can benefit from the artifacts that Hipikat recommends from the project memory. To assess the appropriateness of the recommendations, we investigated when and how developers queried the project memory, how the evaluated the recommended artifacts, and the process by which they utilized the artifacts. We found that newcomers did use the recommendations and their final solutions exploited the recommended artifacts, although most of the Hipikat queries came in the early stages of a change task. We describe the case study, present qualitative observations, and suggest implications of using project memory as a learning aid for project newcomers.
Davor Čubranić and Gail C. MurphyAutomatic bug triage using text categorization
In
SEKE 2004: Proceedings of the Sixteenth International Conference on Software Engineering & Knowledge Engineering,
pp. 92–-97,
2004.
Bug triage, deciding what to do with an incoming bug report, is taking up increasing amount of developer resources in large open-source projects. In this paper, we propose to apply machine learning techniques to assist in bug triage by using text categorization to predict the developer that should work on the bug based on the bug’s description. We demonstrate our approach on a collection of 15,859 bug reports from a large open-source project. Our evaluation shows that our prototype, using supervised Bayesian learning, can correctly predict 30 \% of the report assignments to developers
2003
Elisa L. A. Baniassad, Gail C. Murphy, and Christa SchwanningerDesign Pattern Rationale Graphs: linking design to source
In
Proceedings of the 25th International Conference on Software Engineering,
pp. 352–362,
Portland, Oregon,
2003.
A developer attempting to evolve a system in which design patterns have been applied can benefit from knowing which code implements which design pattern. For instance, the developer may be able to understand the purpose, or to assess the flexibility of the code, more quickly. The degree to which the developer benefits depends upon their understanding of the pattern. Achieving an in-depth understanding of even a simple pattern can be difficult as pattern descriptions span several pages of text, and discuss interrelated design concepts and choices. To enable a developer to effectively trace the design goals associated with a pattern to and from source, we have developed the Design Pattern Rationale Graph (DPRG) approach and associated tool. A DPRG makes explicit the relationships between design concepts in a design pattern, provides a graphical representation of the design pattern text, and supports the linking of those concepts to implementing code. In this paper, we introduce the DPRG approach and tool, and present case studies to show that a DPRG can, at low-cost, help a developer identify design goals in a pattern, and can improve a developer's confidence about how those goals are realized in a code base.
Yvonne Coady and Gregor KiczalesBack to the future: a retroactive study of aspect evolution in operating system code
In
Proceedings of the 2nd international conference on Aspect-oriented software development,
pp. 50–59,
Boston, Massachusetts,
2003.
The FreeBSD operating system more than doubled in size between version 2 and version 4. Many changes to primary modularity are easy to spot at a high-leveL For example, new device drivers account for 38\% of the growth. Not surprisingly, changes to crosscutting concerns are more difficult to track. In order to better understand how an aspect-oriented implementation would have fared during this evolution, we introduced several aspects to version 2 code, and then rolled them forward into their subsequent incarnations in versions 3 and 4 respectively. This paper describes the impact evolution had on these concerns, and provides a comparative analysis of the changes required to evolve the tangled versus aspect-oriented implementations.Our results show that for the concerns we chose, the aspect-oriented implementation facilitated evolution in four key ways: (1) changes were better localized, (2) configurability was more explicit, (3) redundancy was reduced, and (4) extensibility aligned with an aspect was more modular. Additionally, we found that the aspect-oriented implementation had negligible impact on performance.
Premkumar Devanbu, Bob Balzer, Don Batory, Gregor Kiczales, John Launchbury, David Parnas, and Peri TarrModularity in the new millenium: a panel summary
In
Proceedings of the 25th International Conference on Software Engineering,
pp. 723–724,
Portland, Oregon,
2003.
Jan Hannemann, Thomas Fritz, and Gail C. MurphyRefactoring to aspects: an interactive approach
In
Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange,
pp. 74–78,
Anaheim, California,
2003.
Current refactorings for restructuring existing software systems preserve the behavior of the software. Aspect-oriented programming constructs make existing refactorings more complex, and introduce the potential for new kinds of refactorings that target entire concerns. In many cases, behaviour preservation may be neither possible nor desirable. In this position paper, we propose an approach to refactoring aspects into a system that actively involves a developer in a dialogue with the refactoring tool. We are exploring this approach by developing two Eclipse plug-ins: one which bases the refactoring on descriptions of a concern in the code; the other which bases the refactoring on a target aspect structure.
Doug Janzen and Kris De VolderNavigating and querying code without getting lost
In
Proceedings of the 2nd international conference on Aspect-oriented software development,
pp. 178–187,
Boston, Massachusetts,
2003.
A development task related to a crosscutting concern is challenging because a developer can easily get lost when exploring scattered elements of code and the complex tangle of relationships between them. In this paper we present a source browsing tool that improves the developer's ability to work with crosscutting concerns by providing better support for exploring code. Our tool helps the developer to remain oriented while exploring and navigating across a code base. The cognitive burden placed on a developer is reduced by avoiding disorienting view switches and by providing an explicit representation of the exploration process in terms of exploration paths. While our tool is generally useful, good navigation support is particularly important when exploring crosscutting concerns.
Doug Janzen and Kris De VolderPrograms as information
In
Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange,
pp. 69–73,
Anaheim, California,
2003.
In any programming system the environment in which a program is constructed is tightly bound to the format of the data used to represent that program. As software development environments are becoming more sophisticated, there is a growing need to get richer representations of programs that allow programs to be treated at a much higher level of abstraction than as sequences of characters in source files.In this paper we explore the use of a database representation as a medium for representing and manipulating programs. We report on the work we did on two different Eclipse plugins exemplifying the potential advantages of such a representation. The first plugin explores the use of a database representation to store programs written in a traditional programming language (Java). The second plugin is part of a research effort to try to define a programming language directly in terms of a database representation.
H. Masuhara, G. Kiczales, and C. DutchynA Compilation and Optimization Model for Aspect-Oriented Programs
In
Görel Hedin, editor,
Compiler Construction,
vol. 2622 of Lecture Notes in Computer Science,
pp. 46–60.
Springer Berlin / Heidelberg,
2003.
This paper presents a semantics-based compilation model for an aspect-oriented programming language based on its operational semantics. Using partial evaluation, the model can explain several issues in compilation processes, including how to find places in program text to insert aspect code and how to remove unnecessary run-time checks. It also illustrates optimization of calling-context sensitive pointcuts (cflow), implemented in real compilers.
Tom Mens, Roel Wuyts, Kris De Volder, and Kim MensDeclarative Meta Programming to Support Software Development: Workshop Report
SIGSOFT Softw. Eng. Notes, 28(2):1,
2003.
This paper reports on the results of the workshop on Declarative Meta Programming to Support Software Development in Edinburgh on September 23, 2002. It enumerates the presentations made, classifies the contributions and lists the main results of the discussions held at the workshop. As such it provides the context for future workshops around this topic.
Gail C. MurphyLearning from the past
In
10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings.,
p. 2,
Victoria, BC, Canada,
November 2003.
Martin P. Robillard and Gail C. MurphyStatic analysis to support the evolution of exception structure in object-oriented systems
ACM Trans. Softw. Eng. Methodol., 12(2):191–221,
2003.
Exception-handling mechanisms in modern programming languages provide a means to help software developers build robust applications by separating the normal control flow of a program from the control flow of the program under exceptional situations. Separating the exceptional structure from the code associated with normal operations bears some consequences. One consequence is that developers wishing to improve the robustness of a program must figure out which exceptions, if any, can flow to a point in the program. Unfortunately, in large programs, this exceptional control flow can be difficult, if not impossible, to determine.In this article, we present a model that encapsulates the minimal concepts necessary for a developer to determine exception flow for object-oriented languages that define exceptions as objects. Using these concepts, we describe why exception-flow information is needed to build and evolve robust programs. We then describe Jex, a static analysis tool we have developed to provide exception-flow information for Java systems based on this model. The Jex tool provides a view of the actual exception types that might arise at different program points and of the handlers that are present. Use of this tool on a collection of Java library and application source code demonstrates that the approach can be helpful to support both local and global improvements to the exception-handling structure of a system.
Brian de Alwis and Gregor KiczalesApostle: A Simple Incremental Weaver for a Dynamic Aspect Language
Technical Report
TR-2003-16,
Department of Computer Science, University of British Columbia,
October 2003.
This paper describes the incremental weaving implementation of Apostle, an aspect-oriented language extension to Smalltalk modelled on AspectJ. Apostle implements incremental weaving in order to make aspect-oriented programming (AOP) a natural extension of the incremental edit-run-debug cycle of Smalltalk environments. The paper analyzes build dependencies for aspect declarations, and shows that two simple dependency table structures are sufficient to produce reasonable re-weaving efficiency. The resulting incremental weaver provides re-weaving performance proportional to the change in the program.
Davor Čubranić and Gail C. MurphyHipikat: recommending pertinent software development artifacts
In
Proceedings of the 25th International Conference on Software Engineering,
pp. 408–418,
Portland, Oregon,
2003.
A newcomer to a software project must typically come up-to-speed on a large, varied amount of information about the project before becoming productive. Assimilating this information in the open-source context is difficult because a newcomer cannot rely on the mentoring approach that is commonly used in traditional software developments. To help a newcomer to an open-source project become productive faster, we propose Hipikat, a tool that forms an implicit group memory from the information stored in a project's archives, and that recommends artifacts from the archives that are relevant to a task that a newcomer is trying to perform. To investigate this approach, we have instantiated the Hipikat tool for the Eclipse open-source project. In this paper, we describe the Hipikat tool, we report on a qualitative study conducted with a Hipikat mock-up on a medium-sized in-house project, and we report on a case study in which Hipikat recommendations were evaluated for a task on Eclipse.
2002
Elisa L. A. Baniassad, Gail C. Murphy, Christa Schwanninger, and Michael KircherManaging crosscutting concerns during software evolution tasks: an inquisitive study
In
Proceedings of the 1st international conference on Aspect-oriented software development,
pp. 120–126,
Enschede, The Netherlands,
2002.
Code is modularized, for many reasons, including making it easier to understand, change, and verify. Aspect-oriented programming approaches extend the kind of code that can be modularized, enabling the modularization of crosscutting code. We conducted an inquisitive study to better understand the kinds of crosscutting code that software developers encounter and to better understand how the developers manage this code. We tracked eight participants: four from industry and four from academia. Each participant was currently evolving a non-trivial software system. We interviewed these participants three times about crosscutting concerns they had encountered and the strategies they used to deal with the concerns. We found that crosscutting concerns tended to emerge as obstacles that the developer had to consider to make the desired change. The strategy used by the developer to manage the concern depended on the form of the obstacle code. The results of this study provide empirical evidence to support the problems identified by the aspect-oriented programming community, and provide a basis on which to further assess aspect-oriented programming.
Johan Brichau, Kim Mens, and Kris De VolderBuilding Composable Aspect-Specific Languages with Logic Metaprogramming
In
Don Batory, Charles Consel, and Walid Taha, editors,
Generative Programming and Component Engineering,
vol. 2487 of Lecture Notes in Computer Science,
pp. 110–127.
Springer Berlin / Heidelberg,
2002.
The goal of aspect-oriented programming is to modularize crosscutting concerns (or aspects) at the code level. These aspects can be defined in either a general-purpose language or in a language that is fine-tuned to a specific aspect in consideration. Aspect-specific languages provide more concise and more readable aspect declarations but are limited to a specific domain. Moreover, multiple aspects may be needed in a single application and composing aspects written in different aspect languages is not an easy task. To solve this composition problem, we represent both aspects and aspect languages as modularized logic metaprograms. These logic modules can be composed in flexible ways to achieve combinations of aspects written in different aspect-specific languages. As such, the advantages of both general-purpose and aspect-specific languages are combined.
Avi Bryant, Andrew Catton, Kris De Volder, and Gail C. MurphyExplicit programming
In
Proceedings of the 1st international conference on Aspect-oriented software development,
pp. 10–18,
Enschede, The Netherlands,
2002.
Many design concepts can be expressed only indirectly in source code. When this occurs, a single concept at design results in a verbose amount of code that is scattered across the system structure. In this paper, we present explicit programming, an approach that enables a developer to introduce new vocabulary into the source to capture a design concept explicitly. An introduced vocabulary item modularizes the implementation details associated with a design concept, reducing the scattering of code needed to express the concept. The vocabulary item appears in the code where the concept is needed; uses of the vocabulary may thus remain distributed through the code. We believe explicit programming provides a useful engineering point, balancing modularization and separation in (at least) two cases. First, when a design concept is tightly coupled with particular constructs in a program, separation is unlikely to lead to any benefits of reusability or comprehensibility. Second, concepts that emerge as a system evolves can be encapsulated and recorded, paving the way for later separation when conditions warrant it. We introduce ELIDE, a tool that supports explicit programming in Java, and describe several cases showing the utility of the explicit programming approach.
Yvonne Coady, Gregor Kiczales, Joon Suan Ong, Andrew Warfield, and Michael FeeleyBrittle systems will break - not bend: can aspect-oriented programming help?
In
Proceedings of the 10th workshop on ACM SIGOPS European workshop,
pp. 79–86,
Saint-Emilion, France,
2002.
As OS code moves to new settings, it must be continually reshaped. Kernel code however, is notoriously brittle -- a small, seemingly localized change can break disparate parts of the system simultaneously. The problem is that the implementation of some system concerns are not modular because they naturally crosscut the system structure.Aspect-oriented programming proposes new mechanisms to enable the modular implementation of cross-cutting concerns. This paper evaluates aspect-oriented programming in the context of two crosscutting concerns in a FreeBSD 4.4 kernel -- page daemon activation and disk quotas. The ways in which aspects allowed us to make these implementations modular, the impact they have on comprehensibility and configurability, and the costs associated with supporting a prototype of an aspect-oriented runtime environment are presented.
Jan Hannemann and Gregor KiczalesDesign pattern implementation in Java and AspectJ
In
Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications,
pp. 161–173,
Seattle, Washington, USA,
2002.
AspectJ implementations of the GoF design patterns show modularity improvements in 17 of 23 cases. These improvements are manifested in terms of better code locality, reusability, composability, and (un)pluggability.The degree of improvement in implementation modularity varies, with the greatest improvement coming when the pattern solution structure involves crosscutting of some form, including one object playing multiple roles, many objects playing one role, or an object playing roles in multiple pattern instances.
Albert Lai and Gail C. MurphyBehavioural concern modelling for software change tasks
In
Proceedings of the International Conference on Software Maintenance,
pp. 112–121,
2002.
Many modification tasks on an existing software system result in changes to code that crosscuts the system's structure. Making these changes is difficult because a developer must understand large parts of the system, and must reason about how the modification will interact with the existing behaviour. Typically, developers make these kinds of changes using an ad-hoc approach with tools that help in gaining some understanding of the existing system, but that do not provide any specific support for reasoning about, implementing, or analyzing just that part of the system related to the modification. We present the behavioural concern modelling (BCM) approach and tool that provide direct support for a systematic approach to modification tasks. This approach enables a developer to create a partial, abstract, grounded behavioural model of a concern(s). By grounded, we mean that the relationship between the model and the code is explicit: A developer describes which code contributes to which parts of the model. The examples we describe use a finite state machine as a model. We show how the approach can help a developer capture a concern, reason about design options, and implement modifications.
Martin P. Robillard and Gail C. MurphyConcern graphs: finding and describing concerns using structural program dependencies
In
Proceedings of the 24th International Conference on Software Engineering,
pp. 406–416,
Orlando, Florida,
2002.
Many maintenance tasks address concerns, or features, that are not well modularized in the source code comprising a system. Existing approaches available to help software developers locate and manage scattered concerns use a representation based on lines of source code, complicating the analysis of the concerns. In this paper, we introduce the Concern Graph representation that abstracts the implementation details of a concern and makes explicit the relationships between different parts of the concern. The abstraction used in a Concern Graph has been designed to allow an obvious and inexpensive mapping back to the corresponding source code. To investigate the practical tradeoffs related to this approach, we have built the Feature Exploration and Analysis tool (FEAT) that allows a developer to manipulate a concern representation extracted from a Java system, and to analyze the relationships of that concern to the code base. We have used this tool to find and describe concerns related to software change tasks. We have performed case studies to evaluate the feasibility, usability, and scalability of the approach. Our results indicate that Concern Graphs can be used to document a concern for change, that developers unfamiliar with Concern Graphs can use them effectively, and that the underlying technology scales to industrial-sized programs.
2001
Alex Brodsky, Dima Brodsky, Ida Chan, Yvonne Coady, Stephan Gudmundson, Jody Pomkoski, and Joon Suan OngCoping with Evolution: Aspects vs Aspirin?
In
OOPSLA Workshop on Advanced Separation of Concerns,
Tampa Bay, Florida, USA,
October 2001.
Attempts to evolve a code base in an effective and comprehensible manner can give almost anyone a headache. For example, consider version 2 vs version 3 of FreeBSD’s implementation of the Network File System (NFS) [5]. The v2 code base is approximately 10,000 lines, to which the integration of v3 adds over 100 small, scattered clusters of code. Although this code is differentiated from v2 by appropriate compiler-directives and system-wide identifiers, its crosscutting nature adds complexity to the original code, and introduces implicit coupling that poses further challenges for future evolution. This observation is consistent with Lehman and Belady’s study showing structural deterioration over successive releases of OS/360 [4]. We are currently trying to determine the material impact aspect-oriented modularity has on the evolution of NFS code. Towards this end, we are studying implementations of versions 2 and 3, along with the specifications of 4 (not yet available in implementation). To date, we have designed an aspect that structures v3 client functionality relative to a v2 implementation for FreeBSD, and are working on OS neutral v4 features that we expect to be highly portable to both FreeBSD and Linux NFS implementations. This short paper presents some of our preliminary work, including (1) an example aspect-oriented implementation of a v4 related feature, replication, developed for a model of NFS, (2) a comparison of this implementation with an interposition approach, and (3) a characterization of how to build highly portable aspect-oriented implementations.
Siobhán Clarke and Robert J. WalkerSeparating Crosscutting Concerns Across the Lifecycle: From Composition Patterns to AspectJ and Hyper/J
Technical Report
TR-2001-05,
Department of Computer Science, University of British Columbia,
May 2001.
Requirements that have a crosscutting impact on software (such as distribution or persistence) present many problems for software development that manifest themselves throughout the lifecycle. Inherent properties of crosscutting requirements, such as scattering (where their support is scattered across multiple classes) and tangling (where their support is tangled with elements supporting other requirements), reduce the reusability, extensibility, and traceability of the affected software artefacts. Scattering and tangling exist both in designs and code and must therefore be addressed in both. To remove scattering and tangling properties, a means to separate the designs and code of crosscutting behaviour into independent models or programs is required. This paper discusses approaches that achieve exactly that in either designs or code, and presents an investigation into a means to maintain this separation of crosscutting behaviour seamlessly across the lifecycle. To achieve this, we work with composition patterns at the design level, AspectJ and Hyper/J at the code level, and investigate a mapping between the two levels. Composition patterns are a means to separate the design of crosscutting requirements in an encapsulated, independent, reusable, and extensible way. AspectJ and Hyper/J are technologies that provide similar levels of separation for Java code. We discuss each approach, and map the constructs from composition patterns to those of AspectJ and Hyper/J. We first illustrate composition patterns with the design of the Observer pattern, and then map that design to the appropriate code. As this is achieved with varying levels of success, the exercise also serves as a case study in using those implementation techniques.
Siobhán Clarke and Robert J. WalkerComposition patterns: an approach to designing reusable aspects
In
Proceedings of the 23rd International Conference on Software Engineering,
pp. 5–14,
Toronto, Ontario, Canada,
2001.
Requirements such as distribution or tracing have an impact on multiple classes in a system. They are cross-cutting requirements, or aspects. Their support is, by necessity, scattered across those multiple classes. A look at an individual class may also show support for cross-cutting requirements tangled up with the core responsibilities of that class. Scattering and tangling make object-oriented software difficult to understand, extend and reuse. Though design is an important activity within the software lifecycle with well-documented benefits, those benefits are reduced when cross-cutting requirements are present. This paper presents a means to mitigate these problems by separating the design of cross-cutting requirements into composition patterns. Composition patterns require extensions to the UML, and are based on a combination of the subject-oriented model for composing separate, overlapping designs, and UML templates. This paper also demonstrates how composition patterns map to one programming model that provides a solution for separation of cross-cutting requirements in code—aspect-oriented programming. This mapping serves to illustrate that separation of aspects may be maintained throughout the software lifecycle.
Yvonne Coady, Gregor Kiczales, Michael Feeley, Norm Hutchinson, Joon Suan Ong, and Stephan GudmundsonExploring an Aspect-Oriented Approach to OS Code
In
4th ECOOP Workshop on Object-Orientation and Operating Systems,
Budapest, Hungary,
June 2001.
Yvonne Coady, Gregor Kiczales, Michael Feeley, Norm Hutchinson, and Joon Suan OngStructuring System Aspects
In
ASOC Workshop at ICSE 2001,
Toronto, Ontario, Canada,
May 2001.
Yvonne Coady, Gregor Kiczales, Mike Feeley, and Greg SmolynUsing AspectC to improve the modularity of path-specific customization in operating system code
In
Proceedings of the 8th European software engineering conference held jointly with 9th ACM SIGSOFT international symposium on Foundations of software engineering,
pp. 88–98,
Vienna, Austria,
2001.
Layered architecture in operating system code is often compromised by execution path-specific customizations such as prefetching, page replacement and scheduling strategies. Path-specific customizations are difficult to modularize in a layered architecture because they involve dynamic context passing and layer violations. Effectively they are vertically integrated slices through the layers. An initial experiment using an aspect-oriented programming language to refactor prefetching in the FreeBSD operating system kernal shows significant benefits, including easy (un)pluggability of prefetching modes, independent development of prefetching modes, and overall improved comprehensibility.
Yvonne Coady, Gregor Kiczales, Mike Feeley, Norm Hutchinson, Joon Suan Ong, and Stephan GudmundsonAspect-oriented system structure
In
Proceedings of the Eighth Workshop on Hot Topics in Operating Systems,
p. 166,
2001.
Operating system structure is important; it leads to understandable, maintainable, 'pluggable' code. But despite our best efforts, some system elements have been difficult to structure. We propose a new analysis of this problem, and a new technology that can structure these elements. Aspect-oriented programming (AOP) (G. Kiczales et al., 1997) uses linguistic mechanisms to support the separation of crosscutting elements, or aspects of the system, from primary functionality. We have developed a proof-of-concept AOP implementation of prefetching in FreeBSD (www.cs.ubc.ca/labs/spl/aspects/aspectc.html). In our implementation, we have been able to modularize prefetching.
Tzilla Elrad, Mehmet Aksit, Gregor Kiczales, Karl Lieberherr, and Harold OssherDiscussing aspects of AOP
Commun. ACM, 44(10):33–38,
2001.
Stephan Gudmundson and Gregor KiczalesData Abstraction in AspectJ
In
Akinori Yonezawa and Satoshi Matsuoka, editors,
Metalevel Architectures and Separation of Crosscutting Concerns,
vol. 2192 of Lecture Notes in Computer Science,
pp. 270–271.
Springer Berlin / Heidelberg,
2001.
The AspectJ project[1] is exploring language support to enable programmers to implement crosscutting concerns in a modular fashion. Previous work in this area has primarily examined the expressiveness of AspectJ, to further aspect-oriented programming language research. In our work we focus on critical software engineering issues related to system modularity. In particular, we want to understand how use of AspectJ interacts with the well-known data abstraction principle[2]. In this abstract, we describe some of our work in identifying the explicit and implicit ways that modules can become dependent upon design decisions of another module in AspectJ. We hope that this information will provide a useful perspective to aspect-oriented programming language designers and will help users of AspectJ make informed design decisions. Given the space constraints, we must assume that the reader is familiar with the AspectJ language[1].
Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William GriswoldAn Overview of AspectJ
In
Jørgen Knudsen, editor,
ECOOP 2001 — Object-Oriented Programming,
vol. 2072 of Lecture Notes in Computer Science,
pp. 327–354.
Springer Berlin / Heidelberg,
2001.
AspectJ™ is a simple and practical aspect-oriented extension to Java.. With just a few new constructs, AspectJ provides support for modular implementation of a range of crosscutting concerns. In AspectJ’s dynamic join point model, join points are well-defined points in the execution of the program; pointcuts are collections of join points; advice are special method-like constructs that can be attached to pointcuts; and aspects are modular units of crosscutting implementation, comprising pointcuts, advice, and ordinary Java member declarations. AspectJ code is compiled into standard Java bytecode. Simple extensions to existing Java development environments make it possible to browse the crosscutting structure of aspects in the same kind of way as one browses the inheritance structure of classes. Several examples show that AspectJ is powerful, and that programs written using it are easy to understand.
Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William GriswoldGetting started with AspectJ
Commun. ACM, 44(10):59–65,
2001.
Gregor Kiczales and Erik HilsdaleAspect-oriented programming
In
Proceedings of the 8th European software engineering conference held jointly with 9th ACM SIGSOFT international symposium on Foundations of software engineering,
p. 313,
Vienna, Austria,
2001.
Aspect-oriented programming (AOP) is a technique for improving separation of concerns in software design and implementation. AOP works by providing explicit mechanisms for capturing the structure of crosscutting concerns. This tutorial shows how to use AOP to implement crosscutting conerns in a concise modular way. It works with AspectJ, a seamless aspect-oriented extension to the Java(tm) programming language, and with AspectC, an aspect-oriented extension to C in the style of AspectJ. It also includes a description of their underlying model, in terms of which a wide range of AOP languages can be understood.
G.C. Murphy, D. Notkin, and K.J. SullivanSoftware reflexion models: bridging the gap between design and implementation
IEEE Transactions on Software Engineering, 27(4):364–380,
2001.
The artifacts constituting a software system often drift apart over time. We have developed the software reflexion model technique to help engineers perform various software engineering tasks by exploiting, rather than removing, the drift between design and implementation. More specifically, the technique helps an engineer compare artifacts by summarizing where one artifact (such as a design) is consistent with and inconsistent with another artifact (such as source). The technique can be applied to help a software engineer evolve a structural mental model of a system to the point that it is “good enough” to be used for reasoning about a task at hand. The software reflexion model technique has been applied to support a variety of tasks, including design conformance, change assessment, and an experimental reengineering of the million-lines-of-code Microsoft Excel product. We provide a formal characterization of the reflexion model technique, discuss practical aspects of the approach, relate experiences of applying the approach and tools, and place the technique into the context of related work
Gail C. Murphy, Albert Lai, Robert J. Walker, and Martin P. RobillardSeparating Features in Source Code: An Exploratory Study
In
Software Engineering, International Conference on,
p. 0275,
Los Alamitos, CA, USA,
2001.
Most software systems are inflexible. Reconfiguring a system's modules to add or to delete a feature requires substantial effort. This inflexibility increases the costs of building variants of a system, amongst other problems. New languages and tools that are being developed to provide additional support for separating concerns show promise to help address this problem. However, applying these mechanisms requires determining how to enable a feature to be separated from the codebase. In this paper, we investigate this problem through an exploratory study conducted in the context of two existing systems: gnu.regexp and jFTPd. The study consisted of applying three different separation of concern mechanisms-Hyper/JTM, AspectJTM, and a lightweight, lexically-based approach-to separate features in the two packages. In this paper, we report on the study, providing contributions in two areas. First, we characterize the effect different mechanisms had on the structure of the codebase. Second, we characterize the restructuring process required to perform the separations. These characterizations can help researchers to elucidate how the mechanisms may be best used, tool developers to design support to aid the separation process, and early adopters to apply the techniques.
2000
Elisa L. A. Baniassad, Gail C. Murphy, Christa Schwanninger, and Michael KircherWhere are Programmers Faced with Concerns?
In
Advanced Separation of Concerns Workshop at OOPSLA 2000,
Minneapolis, Minnesota, USA,
October 2000.
Antonia Bertolino and Gail C. MurphyAn overview of the ICSE 2000 workshop program
In
Proceedings of the 22nd international conference on Software engineering,
p. 793,
Limerick, Ireland,
2000.
Past ICSE attendees will recognize—with pleasure, we hope—workshops that have been successful in previous years. Indeed, we have tried to balance the program between workshops based on novel and promising ideas, with those strongly continuing the work started in previous ICSEs. In two cases, the program also includes workshops that already have some tradition, but are associated with ICSE for the first time: the ISAW workshop (4th edition) and the DSV-IS workshop (7th edition).Advanced summaries of many of the workshops follow this overview. For those of you unable to attend a workshop, we hope that this provides a flavor of the interesting discussions that occurred. For those of you who were able to attend, we hope it serves as a reminder of those discussions.We would like to thank Pascale Le Gall (University of Evry, France) and Premkumar (Prem) Devanbu (University of California at Davis, USA) for helping us in reviewing submissions and making the program. Their contributions have been invaluable!
Martin P. Robillard and Gail C. MurphyDesigning robust Java programs with exceptions
In
Proceedings of the 8th ACM SIGSOFT international symposium on Foundations of software engineering: twenty-first century applications,
pp. 2–10,
San Diego, California, United States,
2000.
Exception handling mechanisms are intended to help developers build robust systems. Although an exception handling mechanism provides a basis for structuring source code dealing with unusual situations, little information is available to help guide a developer in the appropriate application of the mechanism. In our experience, this lack of guidance leads to complex exception structures. In this paper, we reflect upon our experiences using the Java exception handling mechanism. Based on these experiences, we discuss two issues we believe underlie the difficulties encountered: exceptions are a global design problem, and exception sources are often difficult to predict in advance. We then describe a design approach, based on work by Litke for Ada programs, which we have used to simplify exception structure in existing Java programs.
Robert J. WalkerEliminating Cycles in Composed Class Hierarchies
Technical Report
TR-2000-07,
Department of Computer Science, University of British Columbia,
July 2000.
Multiple class hierarchies can be used each to represent a separate requirement or design concern. To yield a working system, these disparate hierarchies must be composed in a semantically meaningful way. However, cycles can arise in the composed inheritance graph that restrict the space of composable hierarchies. This work presents an approach to eliminating these cycles by means of separating the type hierarchy from the implementation hierarchy; separate solutions are provided for languages permitting multiple inheritance, such as C++, and those permitting only interfaces, such as Java. The resulting acyclic class hierarchy will maintain the significant constraints imposed by the original, separate hierarchies, such as type-safety.
Robert J. Walker, Gail C. Murphy, Jeffrey Steinbok, and Martin P. RobillardEfficient mapping of software system traces to architectural views
In
Proceedings of the 2000 conference of the Centre for Advanced Studies on Collaborative research,
p. 12,
Mississauga, Ontario, Canada,
2000.
Information about a software system's execution can help a developer with many tasks, including software testing, performance tuning, and program understanding. In almost all cases, this dynamic information is reported in terms of source-level constructs, such as procedures and methods. For some software engineering tasks, source-level information is not optimal because there is a wide gap between the information presented (i.e., procedures) and the concepts of interest to the software developer (i.e., subsystems). One way to close this gap is to allow developers to investigate the execution information in terms of a higher-level, typically architectural, view. In this paper, we present an encoding technique for dynamic trace information that makes it tractable and efficient to manipulate a trace from a variety of different architecture-level viewpoints. To motivate the need for the encoding technique, we describe two tools that use the technique: a visualization tool and a path query tool. We present the encoding technique to enable the development of additional tools that manipulate dynamic information at a higher-level than source.
Robert J. Walker and Gail C. MurphyImplicit context: easing software evolution and reuse
In
Proceedings of the 8th ACM SIGSOFT international symposium on Foundations of software engineering: twenty-first century applications,
pp. 69–78,
San Diego, California, United States,
2000.
Software systems should consist of simple, conceptually clean software components interacting along narrow, well-defined paths. All too often, this is not reality: complex components end up interacting for reasons unrelated to the functionality they provide. We refer to knowledge within a component that is not conceptually required for the individual behaviour of that component as extraneous embedded knowledge (EEK). EEK creeps into a system in many forms, including dependences upon particular names and the passing of extraneous parameters. This paper proposes the use of implicit context as a means for reducing EEK in systems by combining a mechanism to reflect upon what has happened in a system, through queries on the call history, with a mechanism for altering calls to and from a component. We demonstrate the benefits of implicit context by describing its use to reduce EEK in the Java™ Swing library.
1999
Mik Kersten and Gail C. MurphyAtlas: a case study in building a web-based learning environment using aspect-oriented programming
In
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications,
pp. 340–352,
Denver, Colorado, United States,
1999.
The Advanced Teaching and Learning Academic Server (Atlas) is a software system that supports web-based learning. Students can register for courses, and can navigate through personalized views of course material. Atlas has been built according to Sun Microsystem's Java™ Servlet specification using Xerox PARC's aspect-oriented programming support called Aspect™. Since aspect-oriented programming is still in its infancy, little experience with employing this paradigm is currently available. In this paper, we start filling this gap by describing the aspects we used in Atlas and by discussing the effect of aspects on our object-oriented development practices. We describe some rules and policies that we employed to achieve our goals of maintainability and modifiability, and introduce a straightforward notation to express the design of aspects. Although we faced some obstacles along the way, this combination of technology helped us build a fast, well-structured system in a reasonable amount of time.
Gail C. Murphy, Robert J. Walker, and Elisa L. A. BanlassadEvaluating emerging software development technologies: lessons learned from assessing aspect-oriented programming
IEEE Transactions on Software Engineering, 25(4):438–455,
1999.
Determining whether a new software development technique is useful and usable is a challenging taste. Various flavors of empirical study may be used to help with this task, including surveys, case studies, and experiments. Little guidance is available within the software engineering community to help choose among these alternatives when assessing a new and evolving software development technique within some cost bounds. We faced this challenge when assessing a new programming technique called aspect-oriented programming. To assess the technique, we chose to apply both a case study approach and a series of four experiments because we wanted to understand and characterize the kinds of information that each approach might provide. We describe and critique the evaluation methods we employed, and discuss the lessons we have learned. These lessons are applicable to other researchers attempting to assess new programming techniques that are in an early stage of development
Martin P. Robillard and Gail C. MurphyMigrating a Static Analysis Tool to AspectJ
In
OOPSLA'99 Workshop on Multi-Dimensional Separation of Concerns in Object-Oriented Systems,
Denver, Colorado, United States,
November 1999.
Martin P. Robillard and Gail C. MurphyAnalyzing exception flow in Java programs
In
Proceedings of the 7th European software engineering conference held jointly with the 7th ACM SIGSOFT international symposium on Foundations of software engineering,
pp. 322–337,
Toulouse, France,
1999.
Exception handling mechanisms provided by programming languages are intended to ease the difficulty of developing robust software systems. Using these mechanisms, a software developer can describe the exceptional conditions a module might raise, and the response of the module to exceptional conditions that may occur as it is executing. Creating a robust system from such a localized view requires a developer to reason about the flow of exceptions across modules. The use of unchecked exceptions, and in object-oriented languages, subsumption, makes it difficult for a software developer to perform this reasoning manually. In this paper, we describe a tool called Jex that analyzes the flow of exceptions in Java code to produce views of the exception structure. We demonstrate how Jex can help a developer identify program points where exceptions are caught accidentally, where there is an opportunity to add finer-grained recovery code, and where error-handling policies are not being followed.
1998
Robert J. Walker, Gail C. Murphy, Bjørn Freeman-Benson, Darin Wright, Darin Swanson, and Jeremy IsaakVisualizing dynamic software system information through high-level models
In
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications,
pp. 271–283,
Vancouver, British Columbia, Canada,
1998.
Dynamic information collected as a software system executes can help software engineers perform some tasks on a system more effectively. To interpret the sizable amount of data generated from a system's execution, engineers require tool support. We have developed an off-line, flexible approach for visualizing the operation of an object-oriented system at the architectural level. This approach complements and extends existing profiling and visualization approaches available to engineers attempting to utilize dynamic information. In this paper, we describe the technique and discuss preliminary qualitative studies into its usefulness and usability. These studies were undertaken in the context of performance tuning tasks.
|