Steven P. Reiss

dblp:r/StevenPReiss · DBLP profile ↗
← Back
72ranked-venue papers
47as first author
1since 2021 · last 2025
0000-0003-0942-1883ORCID · verified

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

Software engineering, systems software and programming languages · 61 · 40 first-author · 1 since 2021Human-computer interaction and ubiquitous computing · 7 · 5 first-authorDatabases, data management, data science and information retrieval · 4 · 3 first-authorTheory of computation · 3 · 1 first-authorApplied, interdisciplinary, general and emerging computing · 2 · 1 first-authorSystems, architecture and hardware · 1Security and privacy · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
34 papers
Debugging and program repair · 47% Software maintenance and evolution · 15% Programming languages and type systems · 9%
Human-computer interaction and pervasive computing
8 papers
User interface design and tools · 98% Interaction techniques and input · 2%
Computer architecture, parallel and distributed computing, and storage systems
4 papers
Performance modeling and evaluation · 79% Parallel and multicore computing · 11% Distributed systems · 10%

Topics — the 30 heaviest of 66, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Debugging and program repair
automated program repair
1.432025
ROSE: An IDE-Based Interactive Repair Framework for Debugging · ACM Trans. Softw. Eng. Methodol. 2025
Leveraging syntax-related code for automated program repair · ASE 2017
Identifying test-suite-overfitted patches through test case generation · ISSTA 2017
Debugging and program repair
fault localization
1.032025
ROSE: An IDE-Based Interactive Repair Framework for Debugging · ACM Trans. Softw. Eng. Methodol. 2025
Leveraging syntax-related code for automated program repair · ASE 2017
Fault Localization With Nearest Neighbor Queries · ASE 2003
Programming languages and type systems › programming environment
live programming
0.622018
SEEDE: simultaneous execution and editing in a development environment · ASE 2018
A demonstration of simultaneous execution and editing in a development environment · ASE 2017
Software maintenance and evolution
code reuse
0.322016
Hunter: next-generation code reuse for Java · SIGSOFT FSE 2016
Semantics-based code search · ICSE 2009
Debugging and program repair › automated program repair › patch correctness assessment
overfitting patch detection
0.312017
Identifying test-suite-overfitted patches through test case generation · ISSTA 2017
Software testing
test generation
0.312017
Identifying test-suite-overfitted patches through test case generation · ISSTA 2017
Debugging and program repair › automated program repair
patch validation
0.312025
ROSE: An IDE-Based Interactive Repair Framework for Debugging · ACM Trans. Softw. Eng. Methodol. 2025
Software maintenance and evolution › program comprehension
working sets
0.222010
A research demonstration of code bubbles · ICSE (2) 2010
Code bubbles: rethinking the user interface paradigm of integrated development environments · ICSE (1) 2010
Concurrent programming › concurrency analysis
multithreaded program analysis
0.212014
Automated analysis of multithreaded programs for performance modeling · ASE 2014
Program synthesis and code generation
search-based program synthesis
0.212014
Seeking the user interface · ASE 2014
Concurrent programming › concurrency analysis
synchronization analysis
0.212014
Automated analysis of multithreaded programs for performance modeling · ASE 2014
Performance modeling and evaluation › performance model construction
automated performance modeling
0.212014
Automated analysis of multithreaded programs for performance modeling · SIGMETRICS 2014
Performance modeling and evaluation
performance model construction
0.212014
Automated analysis of multithreaded programs for performance modeling · SIGMETRICS 2014
Debugging and program repair
debugging tools
0.112012
Code Bubbles: A practical working-set programming environment · ICSE 2012
Program analysis
heap analysis
0.112010
Visualizing the Java heap · ICSE (2) 2010
Operating systems › resource management
memory management
0.112010
Visualizing the Java heap · ICSE (2) 2010
Program analysis
dynamic analysis
0.132010
Fault Localization With Nearest Neighbor Queries · ASE 2003
Visualizing the Java heap · ICSE (2) 2010
Encoding Program Executions · ICSE 2001
Software maintenance and evolution
artifact consistency
0.122006
Incremental Maintenance of Software Artifacts · IEEE Trans. Software Eng. 2006
CLIME: An Environment for Constrained Evolution Demonstration Description · ICSE 2003
Software maintenance and evolution
code search
0.112009
Semantics-based code search · ICSE 2009
Software maintenance and evolution
program comprehension
0.142012
Debugger Canvas: Industrial experience with the code bubbles paradigm · ICSE 2012
Encoding Program Executions · ICSE 2001
Support for Maintaining Object-Oriented Programs · IEEE Trans. Software Eng. 1992
Software maintenance and evolution
software evolution
0.112006
Incremental Maintenance of Software Artifacts · IEEE Trans. Software Eng. 2006
Parallel and multicore computing › parallel computing › parallel application performance
multithreaded application performance
0.112014
Automated analysis of multithreaded programs for performance modeling · SIGMETRICS 2014
Program analysis › dynamic analysis
program tracing
0.112005
Arithmetic program paths · ESEC/SIGSOFT FSE 2005
Programming languages and type systems › programming paradigms
dataflow language
0.012004
Dataflow Language for Scriptable Debugging · ASE 2004
Programming languages and type systems
language design
0.012004
Dataflow Language for Scriptable Debugging · ASE 2004
Program verification › dynamic verification
runtime verification
0.012004
CHET: A System for Checking Dynamic Specifications · ASE 2004
Debugging and program repair › debugging tools
scriptable debugging
0.012004
Dataflow Language for Scriptable Debugging · ASE 2004
Software testing
software testing tools
0.012012
Code Bubbles: A practical working-set programming environment · ICSE 2012
Software maintenance and evolution › software configuration management
consistency management
0.012003
CLIME: An Environment for Constrained Evolution Demonstration Description · ICSE 2003
Debugging and program repair › fault localization
spectrum-based fault localization
0.012003
Fault Localization With Nearest Neighbor Queries · ASE 2003

Methods — techniques the papers use, named apart from their topics

live programming · 0.9flow analysis · 0.9abstract interpretation · 0.9prototype design · 0.4user study · 0.3test input generation · 0.3syntactic code search · 0.3semantic difference analysis · 0.3code chunk matching · 0.3program synthesis · 0.2static analysis · 0.2dynamic analysis · 0.2code transformation · 0.2code search · 0.2automated model construction · 0.2user evaluation · 0.1qualitative usability evaluation · 0.1controlled experiment · 0.1
YearPublicationVenuePosition
2025 ROSE: An IDE-Based Interactive Repair Framework for Debugging
abstract
Debugging is costly. Automated program repair (APR) holds the promise of reducing its cost by automatically fixing errors. However, current techniques are not easily applicable in a realistic debugging scenario because they assume a high-quality test suite and frequent program re-execution, have low repair efficiency, and only handle a limited set of errors. To improve the practicality of APR for debugging, we propose ROSE, an interactive repair framework that is able to suggest quick and effective repairs of semantic errors while debugging in an Integrated Development Environment (IDE). ROSE allows an easy integration of existing APR patch generators and can do program repair without assuming the existence of a test suite and without requiring program re-execution. It works in conjunction with an IDE debugger and assumes a debugger stopping point where a problem symptom is observed. ROSE asks the developer to quickly describe the symptom. Then it uses the stopping point, the identified symptom, and the current environment to identify potentially faulty lines, uses a variety of APR techniques to suggest repairs at those lines, and validates those repairs without re-executing the program. Finally, it presents the results so the developer can examine, select, and make the appropriate repair. ROSE uses novel approaches to achieve effective fault localization and patch validation without a test suite or program re-execution. For fault localization, ROSE builds on a fast abstract interpretation-based flow analysis to compute a static backward slice approximating the real dynamic slice while taking into account the symptom and the current execution. For patch validation without re-running the program, ROSE generates simulated traces based on a live-programming system for both the original and repaired executions and compares the traces with respect to the problem symptoms to infer patch correctness. We implemented a prototype of ROSE that works in an Eclipse-based IDE and evaluated its potency and utility with an effectiveness study and a user study. We found that ROSE’s fault localization and validation are highly effective and a ROSE-based tool using existing APR patch generators generated correct repair suggestions for many errors in only seconds. Moreover, the user study demonstrated that ROSE was helpful for debugging and developers liked to use it.
Steven P. Reiss, Xuan Wei 0002, Jiahao Yuan 0001, Qi Xin 0001
ACM Trans. Softw. Eng. Methodol.1
2018 SEEDE: simultaneous execution and editing in a development environment
abstract
We introduce a tool within the Code Bubbles development environment that allows for continuous execution as the programmer edits. The tool, SEEDE, shows both the intermediate and final results of execution in terms of variables, control and data flow, output, and graphics. These results are updated as the user edits. The tool can be used to help the user write new code or to find and fix bugs. The tool is explicitly designed to let the user quickly explore the execution of a method along with all the code it invokes, possibly while writing or modifying the code. The user can start continuous execution either at a breakpoint or for a test case. This paper describes the tool, its implementation, and its user interface. It presents an initial user study of the tool demonstrating its potential utility.
Steven P. Reiss, Qi Xin 0001, Jeff Huang 0002
ASE1
2018 Seeking the user interface
Steven P. Reiss, Yun Miao, Qi Xin 0001
Autom. Softw. Eng.1
2018 Automatic performance prediction of multithreaded programs: a simulation approach
Alexander Tarvo, Steven P. Reiss
Autom. Softw. Eng.2
2017 Identifying test-suite-overfitted patches through test case generation
abstract
A typical automatic program repair technique that uses a test suite as the correct criterion can produce a patched program that is test-suite-overfitted, or overfitting, which passes the test suite but does not actually repair the bug. In this paper, we propose DiffTGen which identifies a patched program to be overfitting by first generating new test inputs that uncover semantic differences between the original faulty program and the patched program, then testing the patched program based on the semantic differences, and finally generating test cases. Such a test case could be added to the original test suite to make it stronger and could prevent the repair technique from generating a similar overfitting patch again. We evaluated DiffTGen on 89 patches generated by four automatic repair techniques for Java with 79 of them being likely to be overfitting and incorrect. DiffTGen identifies in total 39 (49.4%) overfitting patches and yields the corresponding test cases. We further show that an automatic repair technique, if configured with DiffTGen, could avoid yielding overfitting patches and potentially produce correct ones.
Qi Xin 0001, Steven P. Reiss
ISSTA2
2017 A demonstration of simultaneous execution and editing in a development environment
Steven P. Reiss, Qi Xin 0001
ASE1
2017 Leveraging syntax-related code for automated program repair
abstract
We present our automated program repair technique ssFix which leverages existing code (from a code database) that is syntax-related to the context of a bug to produce patches for its repair. Given a faulty program and a fault-exposing test suite, ssFix does fault localization to identify suspicious statements that are likely to be faulty. For each such statement, ssFix identifies a code chunk (or target chunk) including the statement and its local context. ssFix works on the target chunk to produce patches. To do so, it first performs syntactic code search to find candidate code chunks that are syntax-related, i.e., structurally similar and conceptually related, to the target chunk from a code database (or codebase) consisting of the local faulty program and an external code repository. ssFix assumes the correct fix to be contained in the candidate chunks, and it leverages each candidate chunk to produce patches for the target chunk. To do so, ssFix translates the candidate chunk by unifying the names used in the candidate chunk with those in the target chunk; matches the chunk components (expressions and statements) between the translated candidate chunk and the target chunk; and produces patches for the target chunk based on the syntactic differences that exist between the matched components and in the unmatched components. ssFix finally validates the patched programs generated against the test suite and reports the first one that passes the test suite. We evaluated ssFix on 357 bugs in the Defects4J bug dataset. Our results show that ssFix successfully repaired 20 bugs with valid patches generated and that it outperformed five other repair techniques for Java.
Qi Xin 0001, Steven P. Reiss
ASE2
2016 Hunter: next-generation code reuse for Java
abstract
In many common scenarios, programmers need to implement functionality that is already provided by some third party library. This paper presents a tool called Hunter that facilitates code reuse by finding relevant methods in large code bases and automatically synthesizing any necessary wrapper code. Since Hunter internally uses advanced program synthesis technology, it can automatically reuse existing methods even when code adaptation is necessary. We have implemented Hunter as an Eclipse plug-in and evaluate it by (a) comparing it against S6, a state-of-the-art code reuse tool, and (b) performing a user study. Our evaluation shows that Hunter compares favorably with S6 and increases programmer productivity.
Yuepeng Wang 0001, Yu Feng 0001, Ruben Martins, Arati Kaushik, Isil Dillig, Steven P. Reiss
SIGSOFT FSE6
2014 Towards Creating Test Cases Using Code Search
abstract
Testing and testing code are critical to maintaining modern, evolving systems. Yet generating a good set of relevant test cases that covers what is important remains a difficult task. We propose a new approach to generating test cases through the use of code search. Open source repositories have made an enormous amount of code available. These contain unit tests for a wide variety of programs where the programmer has often given substantial thought to what should be tested, what is important to test, and how to test it. Our approach is to extract the relevant tests from on-line repositories and use these as the basis for test cases for user code.
Steven P. Reiss
ICSME1
2014 Tool Demo: Browsing Software Repositories
abstract
We demonstrate a tool for browsing large software repositories such as Github or Source Forge using all the facilities one normally associates with an integrated development environment. The tool integrates code search engines with the Code Bubbles development environment. It lets the user perform and compare multiple searches, investigate and explore the results that are returned, expand searches as necessary, and eventually export appropriate results.
Steven P. Reiss
ICSME1
2014 Seeking the user interface
abstract
User interface design and coding can be complex and messy. We describe a system that uses code search to simplify and automate the generation of such code. We start with a simple sketch of the desired interface along with a set of keywords describing the application context. We then use existing code search engines to find results based on the keywords. We look for potential Java-based user interface solutions within those results and apply a series of code transformations to the solutions to generate derivative solutions, aiming to get solutions that constitute only the user interface and that will compile and run. We run the resultant solutions and compare the generated interfaces to the user's sketches. Finally, we let programmers interact with the matched solutions and return the running code for the solutions they choose. The system can be used not only for generating initial user interface code for an application, but also for exploring alternative interfaces and for looking at the user interfaces in a code repository.
Steven P. Reiss
ASE1
2014 Automated analysis of multithreaded programs for performance modeling
abstract
The behavior of multithreaded programs is often difficult to understand and predict. Synchronization operations and limited computational resources combine to produce complex non-linear dependencies between a program's configuration parameters and its performance. Performance models are used to understand these dependencies. Such models are complex, and constructing them requires a solid understanding of the program's behavior. As a result, building models of complex applications manually is extremely time-consuming and error-prone. In this paper we demonstrate that such models can be built automatically.
Alexander Tarvo, Steven P. Reiss
ASE2
2014 Automated analysis of multithreaded programs for performance modeling
abstract
We present an approach for building performance models of multithreaded programs automatically. We use a combination of static and a dynamic analyses of a single representative run of the program to build its model. The model can predict performance of the program under a variety of configurations. This paper outlines how we construct the model and demonstrates how the resultant models accurately predict the performance %and resource utilization of complex multithreaded programs.
Alexander Tarvo, Steven P. Reiss
SIGMETRICS2
2014 The Challenge of Helping the Programmer during Debugging
abstract
Programmers spend considerable time debugging their systems. They add logging statements and use debuggers to run their systems in a controlled environment all in an attempt to understand what is happening as their program executes. Our hypothesis is that visualization tools can significantly improve the debugging process. A wide variety of tools have been developed for visualizing and understanding the dynamics of program execution. These tools can provide lots of information about executions. However, most tools are not designed to be used with a debugger. What is needed are tools that can work while the programmer is debugging a system and that provide the information the programmer needs to understand and assist the debugging process. We have started to develop such tools within the context of the Code Bubbles development environment. However, there is much room for improvement and we call upon the software visualization community to think about and develop practical tools that will improve the debugging process.
Steven P. Reiss
VISSOFT1
2014 Plugging in and into code bubbles: the code bubbles architecture
abstract
ABSTRACT Code Bubbles is an attempt to redefine the user interface for an integrated programming environment. As it represents a whole new user interface, implementing it as a plug‐in is inherently difficult. We get around this difficulty by combining two different plug‐in architectures, a standard one based on registrations and callbacks and a message‐based one that puts the plug‐in at arm's length and defines a narrower two‐way interface. This paper describes both how we have implemented Code Bubbles as a plug‐in to Eclipse and how Code Bubbles itself is implemented as a set of plug‐ins representing the different aspects of the environment, using both traditional and message‐based plug‐in architectures as appropriate. It also shows how the resultant architecture is flexible enough to support collaboration, different back ends, and a cloud‐based environment. Copyright © 2013 John Wiley & Sons, Ltd.
Steven P. Reiss, Jared N. Bott, Joseph J. LaViola Jr.
Softw. Pract. Exp.1
2013 Automatic categorization and visualization of lock behavior
abstract
We consider the problem of understanding locking behavior in large Java programs using a combination of data collection, data analysis, and visualization. Our technique starts by collecting partial information about all locks used in the program. It then analyzes this information to determine sets of locks with common behaviors and to determine, for each set of locks, how that lock is used, e.g. if it is used as a mutex, semaphore, read-write lock, etc. The result of the analysis is then presented to the user who can select specific locks for full analysis during a subsequent run. Visualizing locking information is particularly difficult since the time scale of a lock can be ten or more orders of magnitude different from the time scale of the overall run and locks can be used millions of times. We provide different visualizations and visualization techniques for this purpose. First, we analyze either the partial or full traces and identify patterns of how each lock is used and display just those patterns along with their frequency. Second, we provide a thread-centric view of locking that supports fish-eye views at the microsecond level as well as time compression. Third, we provide a lock-centric view that is based on the specific type of lock to show its particular behavior.
Steven P. Reiss, Alexander Tarvo
VISSOFT1
2013 Tool demonstration: The visualizations of code bubbles
abstract
Code Bubbles is an integrated development environment that concentrates on the user experience. The environment is very visual and includes a number of different visualizations, both static and dynamic. We will demonstrate the environment and the various visualizations on a realistic scenario based on our current work.
Steven P. Reiss, Alexander Tarvo
VISSOFT1
2012 Debugger Canvas: Industrial experience with the code bubbles paradigm
abstract
At ICSE 2010, the Code Bubbles team from Brown University and the Code Canvas team from Microsoft Research presented similar ideas for new user experiences for an integrated development environment. Since then, the two teams formed a collaboration, along with the Microsoft Visual Studio team, to release Debugger Canvas, an industrial version of the Code Bubbles paradigm. With Debugger Canvas, a programmer debugs her code as a collection of code bubbles, annotated with call paths and variable values, on a two-dimensional pan-and-zoom surface. In this experience report, we describe new user interface ideas, describe the rationale behind our design choices, evaluate the performance overhead of the new design, and provide user feedback based on lab participants, post-release usage data, and a user survey and interviews. We conclude that the code bubbles paradigm does scale to existing customer code bases, is best implemented as a mode in the existing user experience rather than a replacement, and is most useful when the user has a long or complex call paths, a large or unfamiliar code base, or complex control patterns, like factories or dynamic linking.
Robert DeLine, Andrew Bragdon, Kael Rowan, Jens Jacobsen, Steven P. Reiss
ICSE5
2012 Code Bubbles: A practical working-set programming environment
abstract
Our original work on the Code Bubbles environment demonstrated that a working-set based framework for software development showed promise. We have spent the past several years extending the underlying concepts into a fully-functional system. In our demonstration, we will show the current Code Bubbles environment for Java, how it works, how it can be used, and why we prefer it over more traditional programming environments. We will also show how we have extended the framework to enhance software development tasks such as complex debugging, testing, and collaboration. This paper describes the features we will demonstrate.
Steven P. Reiss, Jared N. Bott, Joseph J. LaViola Jr.
ICSE1
2012 Using computer simulation to predict the performance of multithreaded programs
abstract
Predicting the performance of a computer program facilitates its efficient design, deployment, and problem detection. However, predicting performance of multithreaded programs is complicated by complex locking behavior and concurrent usage of computational resources. Existing performance models either require running the program in many different configurations or impose restrictions on the types of programs that can be modeled. This paper presents our approach towards building performance models that do not require vast amounts of training data. Our models are built using a combination of queuing networks and probabilistic call graphs. All necessary information is collected using static and dynamic analyses of a single run of the program. In our experiments these models were able to accurately predict performance of different types of multithreaded programs and detected those configurations that result in the programs' high performance.
Alexander Tarvo, Steven P. Reiss
ICPE2
2011 What Is My Program Doing? Program Dynamics in Programmer's Terms
Steven P. Reiss, Alexander Tarvo
RV1
2010 Code bubbles: a working set-based interface for code understanding and maintenance
abstract
Developers spend significant time reading and navigating code fragments spread across multiple locations. The file-based nature of contemporary IDEs makes it prohibitively difficult to create and maintain a simultaneous view of such fragments. We propose a novel user interface metaphor for code understanding based on collections of lightweight, editable fragments called bubbles, which form concurrently visible working sets. We present the results of a qualitative usability evaluation, and the results of a quantitative study which indicates Code Bubbles significantly improved code understanding time, while reducing navigation interactions over a widely-used IDE, for two controlled tasks.
Andrew Bragdon, Robert C. Zeleznik, Steven P. Reiss, Suman Karumuri, William Cheung 0003, Joshua Kaplan, Christopher Coleman, Ferdi Adeputra, Joseph J. LaViola Jr.
CHI3
2010 Code bubbles: rethinking the user interface paradigm of integrated development environments
abstract
Today's integrated development environments (IDEs) are hampered by their dependence on files and file-based editing. We propose a novel user interface that is based on collections of lightweight editable fragments, called bubbles, which when grouped together form concurrently visible working sets. In this paper we describe the design of a prototype IDE user interface for Java based on working sets. A quantitative evaluation shows that developers could expect to view a sizeable number of functions concurrently with relatively few UI operations. A qualitative user evaluation with 23 professional developers indicates a high level of excitement, interest, and potential benefits and uses.
Andrew Bragdon, Steven P. Reiss, Robert C. Zeleznik, Suman Karumuri, William Cheung 0003, Joshua Kaplan, Christopher Coleman, Ferdi Adeputra, Joseph J. LaViola Jr.
ICSE (1)2
2010 A research demonstration of code bubbles
abstract
Today's integrated development environments (IDEs) are hampered by their dependence on files and file-based editing. We propose a novel user interface that is based on collections of lightweight editable fragments, called bubbles, which when grouped together form concurrently visible working sets. We describe the design of a prototype IDE user interface for Java based on working sets.
Andrew Bragdon, Steven P. Reiss, Robert C. Zeleznik, Suman Karumuri, William Cheung 0003, Joshua Kaplan, Christopher Coleman, Ferdi Adeputra, Joseph J. LaViola Jr.
ICSE (2)2
2010 Visualizing the Java heap
abstract
Many of the problems that occur in long-running systems involve the way that the system uses memory. We have developed a framework for extracting and building a model of the heap from a running Java system. Such a model is only useful if programmers can extract from it the information they need to understand, find, and eventually fix memory-related problems in their system. We demonstrate the tool in action, showing how it works dynamically on running processes and how it is designed to address a variety of specific memory issues.
Steven P. Reiss
ICSE (2)1
2010 Visualizing threads, transactions and tasks
abstract
Modern systems, particularly servers, involve multiple threads dealing with multiple incoming transactions using either implicit or explicit internal tasks. Understanding the inherently complex behavior of such systems can be quite difficult. We present a framework that offers a visualization of this behavior in system-specific terms in real time. The framework is unique in that it uses a combination of program analyses to minimize the work the user needs to do to construct the visualization.
Steven P. Reiss, Suman Karumuri
PASTE1
2009 Semantics-based code search
abstract
Our goal is to use the vast repositories of available open source code to generate specific functions or classes that meet a user's specifications. The key words here are specifications and generate. We let users specify what they are looking for as precisely as possible using keywords, class or method signatures, test cases, contracts, and security constraints. Our system then uses an open set of program transformations to map retrieved code into what the user asked for. This approach is implemented in a prototype system for Java with a Web interface.
Steven P. Reiss
ICSE1
2009 Semantics-based code search demonstration proposal
abstract
Our goal is to use the vast repositories of available open source code to generate specific functions or classes that meet a user's specifications. The key words here are specifications and generate. We let users specify what they are looking for as precisely as possible using keywords, class or method signatures, test cases, contracts, and security constraints using a simple, Web-based interface. Our system then uses an open set of program transformations to map retrieved code into what the user asked for. This approach is implemented in a prototype system for Java with a Web interface.
Steven P. Reiss
ICSM1
2009 Visualizing the Java heap demonstration proposal
abstract
Many of the problems that occur in long-running systems involve the way that the system uses memory. We have developed a framework for extracting and building a model of the heap from a running Java system. Such a model is only useful if the programmer can extract from it the information they need to understand, find, and eventually fix memory-related problems in their system. We propose to demonstrate the tool in action, showing how it works dynamically on running processes and how it is designed to address a variety of specific memory issues.
Steven P. Reiss
ICSM1
2009 Automatic detection of internal queues and stages in message processing systems
abstract
Complex applications today involve multiple processes, multiple threads of control, distributed processing, thread pools, event handling, messages. The behaviors and misbehaviors of these nondeterministic, message-based systems are difficult to capture and understand. The typical approach is to trace the behavior of the systems and track how the different incoming messages are processed throughout the system. While messages between processes can be captured automatically at the network or library level, tracing the message processing within a system, which is often more complex and error-prone, requires the programmer to manually instrument the code by identifying the different message handlers, thread states, processing stages, and shared queues accurately and completely. In this paper we show how dynamic analysis can be used to automatically identify the transactions, stages and shared queues in Java programs as a prelude to trace-based comprehension.
Suman Karumuri, Steven P. Reiss
ICPC2
2008 Tracking source locations
abstract
Many programming tools require information to be associated with source locations. Current tools do this in different ways with different degrees of effectiveness. This paper is an investigation into the various approaches to maintaining source locations. It is based on an experiment that attempts to track a variety of locations over the evolution of a source file. The results demonstrate that relatively simple techniques can be very effective.
Steven P. Reiss
ICSE1
2007 Finding Unusual Code
abstract
We describe an automated approach to finding code fragments that are unusual and hence might represent potential problems. Many potential problems in programs arise in code that is uncommon either because it represents rarely used constructs and hence is unfamiliar to the programmer, or because it represents a mistyping or other error that still happens to be legal code, albeit not very common. We present an approach that first finds what is "unusual" by reading a corpus of code and building a library of common patterns. The approach can then take any existing program and check if it contains any unusual patterns. We have run the system using a large corpus and have identified problems in a number of sample projects with otherwise working code.
Steven P. Reiss
ICSM1
2007 Automatic code stylizing
abstract
Coding style is an important aspect of software development. We present a system that uses machine learning to deduce the coding style from a corpus of code and then applies this knowledge to convert arbitrary code to the learned style. We use a broad definition of coding style that includes spacing, indentation, naming, ordering, and equivalent programming constructs. The result provides a more flexible and powerful approach to code stylizing than current techniques.
Steven P. Reiss
ASE1
2007 The design and implementation of a dataflow language for scriptable debugging
Guillaume Marceau, Gregory H. Cooper, Jonathan P. Spiro, Shriram Krishnamurthi, Steven P. Reiss
Autom. Softw. Eng.5
2006 Incremental Maintenance of Software Artifacts
abstract
Software is multidimensional, but the tools that support it are not. This lack of tool support causes the software artifacts representing different dimensions to evolve independently and to become inconsistent over time. In order to properly support the evolution of software, one must ensure that the different dimensions evolve concurrently. We have built a software development tool, CLIME that uses constraints implemented as database queries to ensure just this. Our approach makes the tool responsible for detecting inconsistencies between software design, specifications, documentation, source code, test cases, and other artifacts without requiring any of these to be a primary representation. The tool works incrementally as the software evolves, without imposing a particular methodology or process. It includes a front end that lets the user explore and fix current inconsistencies. This paper describes the basis for CLIME, the techniques underlying the tool, the interface provided to the programmer, the incremental maintenance of constraints between these artifacts, and our experiences
Steven P. Reiss
IEEE Trans. Software Eng.1
2005 Demonstration of JIVE and JOVE: Java as it happens
abstract
Dynamic software visualization is designed to provide programmers with insights as to what the program is doing. Most current visualizations either use program traces to show information about prior runs, slow the program down substantially, show only minimal information, or force the programmer to indicate when to turn visualizations on or off. We have developed a dynamic Java visualizer that provides a statement-level view of a Java program in action with low enough overhead so that it can be used almost all the time by programmers to understand what their program is doing while it is doing it.
Steven P. Reiss, Manos Renieris
ICSE1
2005 Incremental Maintenance of Software Artifacts
abstract
We have built a software development tool, CLIME, that uses constraints implemented as database queries to ensure the consistency of the different artifacts of software development. This approach makes the environment responsible for detecting inconsistencies between software design, specifications, documentation, source code, and test cases without requiring any of these to be a primary representation. The tool works incrementally as the software is written and evolves without imposing a particular methodology or process. It includes a front end that lets the user explore and fix current inconsistencies. This paper describes the techniques underlying the tool, concentrating on the user interface and the incremental maintenance of constraints between these artifacts.
Steven P. Reiss
ICSM1
2005 A component model for internet-scale applications
abstract
This paper describes a component model where the overall semantics of a component is included in the interface definition. Such a model is necessary for future computing where programs will run at Internet-scales and will employ a combination of web services, grid technologies, peer-to-peer sharing, autonomic capabilities, and open source implementations. The component model is based on packages and supports static and dynamic objects, interfaces, structures, and exceptions. The interface definitions provide a practical approach to defining functional semantics and include appropriate extensions to provide semantics for security, privacy, recovery, and costs. The component model has been implemented in a prototype framework and demonstrated in an Internet-scale example.
Steven P. Reiss
ASE1
2005 Arithmetic program paths
abstract
We present Arithmetic Program Paths, a novel, efficient way to compress program control-flow traces that reduces program bit traces to less than a fifth of their original size while being fast and memory efficient. In addition, our method supports online, selective tracing and compression of individual conditionals, trading off memory usage and compression rate. We achieve these properties by recording only the directions taken by conditional statements during program execution, and using arithmetic coding for compression. We provide the arithmetic coder with a probability distribution for each conditional that we obtain using branch prediction techniques. We implemented the technique and experimented on several SPEC 2000 programs. Our method matches the compression rate of state-of-the-art tools while being an order of magnitude faster.
Manos Renieris, Shashank Ramaprasad, Steven P. Reiss
ESEC/SIGSOFT FSE3
2005 Visualizing What People Are Doing on the Web
abstract
What are people currently looking at in their Web browser? Do the patterns of pages change over time? Are changes periodic or just related to current events or other factors? We are developing a tool that attempts to provide insight into these and other questions. The tool sits on top of an Internet-scale programming backbone supports large numbers of simultaneous users. The tool itself provides a unique category-based visualization of browsing history and includes the necessary code to obtain the raw data.
Steven P. Reiss, Guy Eddon
VL/HCC1
2004 Dataflow Language for Scriptable Debugging
Guillaume Marceau, Gregory H. Cooper, Shriram Krishnamurthi, Steven P. Reiss
ASE4
2004 CHET: A System for Checking Dynamic Specifications
Steven P. Reiss
ASE1
2004 Elided conditionals
abstract
Many software testing and automated debugging tools rely on structural coverage techniques. Such tools implicitly assume a relation between individual control-flow choices made in conditional statements during a program run and the outcome of the run. In this paper, we develop the notion of elided choices that, viewed in isolation, have no impact on the outcome of the program. We call the conditionals that make such choices elided conditionals. We develop an experimental framework for discovering elided conditionals. From looking at three programs of varying complexity under this framework, we discovered that elided conditionals do occur, sometimes with alarming frequency. We discuss the impact of elided conditionals on various forms of dynamic analysis and suggest future work that would extend elision to general expressions.
Manos Renieris, Sébastien Chan-Tin, Steven P. Reiss
PASTE3
2003 JIVE: Visualizing Java in Action Demonstration Description
abstract
Dynamic software visualization should provide a programmer with insights as to what the program is doing. Most current dynamic visualizations either use program traces to show information about prior runs, slow the program down substantially, show only minimal information, or force the programmer to indicate when to turn visualizations on or off. We have developed a dynamic Java visualizer that provides a view of a program in action with low enough overhead that it can be used almost all the time by programmers to understand what their program is doing while it is doing it.
Steven P. Reiss
ICSE1
2003 CLIME: An Environment for Constrained Evolution Demonstration Description
abstract
We are building a software development environment that uses constraints to ensure the consistency of the different artifacts associated with software. This approach to software development makes the environment responsible for detecting most inconsistencies between software design, specifications, documentation, source code, and test cases. The environment provides facilities to ensure that these various dimensions remain consistent as the software is written and evolves. The environment works with the wide variety of artifacts typically associated with a large software system. It handles both the static and dynamic aspects of software. Moreover, it works incrementally so that consistency information is readily available to the developer as the system changes. The demonstration will show this environment and its capabilities.
Steven P. Reiss, Christina M. Kennedy, Tom Wooldridge, Shriram Krishnamurthi
ICSE1
2003 Fault Localization With Nearest Neighbor Queries
abstract
We present a method for performing fault localization using similar program spectra. Our method assumes the existence of a faulty run and a larger number of correct runs. It then selects according to a distance criterion the correct run that most resembles the faulty run, compares the spectra corresponding to these two runs, and produces a report of "suspicious" parts of the program. Our method is widely applicable because it does not require any knowledge of the program input and no more information from the user than a classification of the runs as either "correct" or "faulty". To experimentally validate the viability of the method, we implemented it in a tool, Whither, using basic block profiling spectra. We experimented with two different similarity measures and the Siemens suite of 132 programs with injected bugs. To measure the success of the tool, we developed a generic method for establishing the quality of a report. The method is based on the way an "ideal user" would navigate the program using the report to save effort during debugging. The best results obtained were, on average, above 50%, meaning that our ideal user would avoid looking half of the program.
Manos Renieris, Steven P. Reiss
ASE2
2002 Constraining Software Evolution
abstract
Software is multidimensional but the tools that support it are not. The lack of tool support causes the software artifacts representing different dimensions to evolve independently and inconsistently. In order to support the evolution of multidimensional software, an environment must ensure that the different dimensions evolve concurrently. This can be accomplished through an integration framework that maintains consistency of the different dimensions as they evolve. We have built a prototype of such a mechanism by setting up and maintaining constraints among artifacts representing the different software dimensions. This paper describes that prototype and our experiences with it to date.
Steven P. Reiss
ICSM1
2001 ECSE Workshop on Software Visualization
Wim De Pauw, Steven P. Reiss, John T. Stasko
ICSE2
2001 Encoding Program Executions
abstract
Dynamic analysis is based on collecting data as the program runs. However, raw traces tend to be too voluminous and too unstructured to be used directly for visualization and understanding. We address this problem in two phases: the first phase selects subsets of the data and then compacts it, while the second phase encodes the data in an attempt to infer its structure. Our major compaction/selection techniques include gprof-style N-depth call sequences, selection based on class, compaction based on time intervals, and encoding the whole execution as a directed acyclic graph. Our structure inference techniques include run-length encoding, context free grammar encoding, and the building of finite state automata.
Steven P. Reiss, Manos Renieris
ICSE1
2001 An overview of BLOOM
abstract
BLOOM is a system for doing software understanding through visualization. It provides facilities for static and dynamic data collection. It offers a wide range of data anal?yses. It includes a visual query language for specifying what information should be visualized. All these are used in con?junction with a back end that supports a variety of 2D and 3D visualization strategies.
Steven P. Reiss
PASTE1
1999 The Desert environment
abstract
The Desert software engineering environment is a suite of tools developed to enhance programmer productivity through increased tool integration. It introduces an inexpensive form of data integration to provide additional tool capabilities and information sharing among tools, uses a common editor to give high-quality semantic feedback and to integrate different types of software artifacts, and builds virtual files on demand to address specific tasks. All this is done in an open and extensible environment capable of handling large software systems.
Steven P. Reiss
ACM Trans. Softw. Eng. Methodol.1
1998 Software Visualization in the Desert Environment
abstract
While software visualization has been widely used for navigation, its use for understanding has been much more limited. Software visualizations are expensive to develop, require large amounts of information that is often difficult to collect, and even then, are good only at addressing the specific task for which they were developed. Our work on software visualization in the Desert environment is aimed at making software visualization a viable approach to understanding. We do this by providing ready access to a variety of information about the system at hand, a range of high-quality, high-density visualizations, and a simple interface that lets the programmer rapidly create new software visualizations for understanding problems as they arise. In this paper we describe the approach we have taken.
Steven P. Reiss
PASTE1
1996 Configuration Management with Logical Structures
Yi-Jing Lin, Steven P. Reiss
ICSE2
1996 Simplifying Data Integration: The Design of the Desert Software Development Environment
Steven P. Reiss
ICSE1
1993 Stretching the Rubber Sheet: A Metaphor for Viewing Large Layouts on Small Screens
abstract
Article Free Access Share on Stretching the rubber sheet: a metaphor for viewing large layouts on small screens Authors: Manojit Sarkar Department of Computer Science, Brown University, Providence, RI Department of Computer Science, Brown University, Providence, RIView Profile , Scott S. Snibbe Department of Computer Science, Brown University, Providence, RI Department of Computer Science, Brown University, Providence, RIView Profile , Oren J. Tversky Department of Computer Science, Brown University, Providence, RI Department of Computer Science, Brown University, Providence, RIView Profile , Steven P. Reiss Department of Computer Science, Brown University, Providence, RI Department of Computer Science, Brown University, Providence, RIView Profile Authors Info & Claims UIST '93: Proceedings of the 6th annual ACM symposium on User interface software and technologyDecember 1993 Pages 81–91https://doi.org/10.1145/168642.168650Published:01 December 1993Publication History 160citation1,270DownloadsMetricsTotal Citations160Total Downloads1,270Last 12 Months59Last 6 weeks11 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
Manojit Sarkar, Scott S. Snibbe, Oren J. Tversky, Steven P. Reiss
ACM Symposium on User Interface Software and Technology4
1992 Support for Maintaining Object-Oriented Programs
abstract
It is explained how inheritance and dynamic binding make object-oriented programs difficult to maintain, and a concrete example of the problems that arise is given. It is shown that the difficulty lies in the fact that conventional tools are poorly suited for work with object-oriented languages, and it is argued that semantics-based tools are essential for effective maintenance of object-oriented programs. A system developed for working with C++ programs is described. It comprises a relational database system for information about programs and an interactive database interface integrated with a text editor. The authors describe the system architecture, detail the database relations, provide informal evidence on the system's effectiveness, and compare it to other research with similar goals.>
Moises Lejter, Scott Meyers, Steven P. Reiss
IEEE Trans. Software Eng.3
1991 Support for maintaining object-oriented programs
abstract
The authors explain how inheritance and dynamic binding make object-oriented programs difficult to maintain, and give a concrete example of the problems that arise. They show that the difficulty lies in the fact that conventional tools are poorly suited for work with object-oriented languages, and argue that semantics-based tools are essential for effective maintenance of object-oriented programs. The authors describe a system developed for working with C++ programs. This system comprises a relational database system for information about programs, and an interactive database interface integrated with a text editor. They describe the system architecture, detail the database relations, provide informal evidence on the system's effectiveness, and compare it to other research with similar goals.>
Moises Lejter, Scott Meyers, Steven P. Reiss
ICSM3
1990 Interacting with the FIELD environment
Steven P. Reiss
Softw. Pract. Exp.1
1989 Representing programs in multiparadigm software development environments
abstract
A canonical program representation, semantic program graphs (SPGs), is described, and it is shown how SPGs can act as the foundation for multiparadigm software development environments. Using SPGs as the basis for program representation allows developers to see different views of programs that correspond to different ways of thinking about them, and it allows editors to be created so that the underlying program can be edited using any of the paradigms. As the sole program representation, SPGs also facilitate communication between paradigms: changes made in one view can be immediately reflected in all other views.>
Scott Meyers, Steven P. Reiss
COMPSAC2
1989 Using GELO to visualize software systems
abstract
GELO is a package that supports the interactive graphical display of software systems. Its features include built-in panning and zooming, abstraction of objects too small to see, pick correlation, windowing, and scroll bars. GELO creates a hierarchy of graphical objects that correspond to the components of the structure being displayed. Five flavors of graphical objects are supported, including those for simple structures, tiled layouts, and graph-based layouts. This framework is powerful enough to handle a wide variety of graphical visualizations, and it is general enough that new object flavors can be smoothly integrated in the future.
Steven P. Reiss, Scott Meyers, Carolyn K. Duby
UIST1
1987 A Conceptual Programming Environment
Steven P. Reiss
ICSE1
1987 Automatic Compiler Production: The Front End
abstract
This paper describes a system for automatically producing complete compiler front ends from simple, nonprocedural specifications of the source language. This system is based on a detailed model of a compiler front end that is presented first. The system itself is then described using a Pascal subset as an example. This work was part of a larger project aimed at producing complete compilers in a similar fashion.
Steven P. Reiss
IEEE Trans. Software Eng.1
1985 PECAN: Program Development Systems that Support Multiple Views
abstract
This paper describes the PECAN family of program development systems. PECAN supports multiple views of the user's program. The views can be representations of the program or of the corresponding semantics. The primary program view is a syntax-directed editor. The current semantic views include expression trees, data type diagrams, flow graphs, and the symbol table. PECAN is designed to make effective use of powerful personal machines with high-resolution graphics displays and is currently implemented on APOLLO workstations.
Steven P. Reiss
IEEE Trans. Software Eng.1
1984 PECAN: Program Development Systems That Support Multiple Views
Steven P. Reiss
ICSE1
1984 Practical Data-Swapping: The First Steps
abstract
The problem of statistical database confidentiality in releasing microdata is addressed through the use of approximate data-swapping. Here, a portion of the microdata is replaced with a database that has been selected with approximately the same statistics. The result guarantees the confidentiality of the original data, while providing microdata with accurate statistics. Methods for achieving such transformations are considered and analyzed through simulation.
Steven P. Reiss
ACM Trans. Database Syst.1
1983 Generation of Compiler Symbol Processing Mechanisms
abstract
Compiler symbol processing has become complex as programming languages have evolved.In this paper we describe a comprehensive model of symbol processing, and a system that uses this model to generate the symbol processing portions of a compiler from simple specifications.The model supports a variety of entities with different types of names.It includes a detailed view of scoping.It provides a simple picture of the complex mapping from a source token to a specific entity.The model is illustrated with examples from Ada.The system is divided into two parts.The first takes a nonprocedural description of the semantics of symbols in the language and produces a symbol table module for a compiler for that language.The second supports a simple symbol processing language that allows the easy connection of syntax and semantic processing to the symbol module.
Steven P. Reiss
ACM Trans. Program. Lang. Syst.1
1982 Non-reversible Privacy Transformations
abstract
Article Free Access Share on Non-reversible privacy transformations Authors: Steven P. Reiss Brown University, Providence, RI Brown University, Providence, RIView Profile , Mark J. Post Brown University, Providence, RI Brown University, Providence, RIView Profile , Tore Dalenius Brown University, Providence, RI Brown University, Providence, RIView Profile Authors Info & Claims PODS '82: Proceedings of the 1st ACM SIGACT-SIGMOD symposium on Principles of database systemsMarch 1982 Pages 139–146https://doi.org/10.1145/588111.588134Online:29 March 1982Publication History 14citation288DownloadsMetricsTotal Citations14Total Downloads288Last 12 Months7Last 6 weeks1 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
Steven P. Reiss, Mark J. Post, Tore Dalenius
PODS1
1980 Practical Data-Swapping: The First Steps
abstract
The problem of statistical database confidentiality in releasing microdata is addressed through the use of approximate data-swapping. Here a portion of the microdata is replaced with a database that has been selected with approximately the same statistics. The result guarantees the confidentialityof the original data, while providing microdata with accurate statistics. Methods for achieving such transformations are considered and analyzed through simulation.
Steven P. Reiss
S&P1
1980 The Complexity of Linear Programming
David P. Dobkin, Steven P. Reiss
Theor. Comput. Sci.2
1979 Linear Programming is Log-Space Hard for P
David P. Dobkin, Richard J. Lipton, Steven P. Reiss
Inf. Process. Lett.3
1979 Rational Search
Steven P. Reiss
Inf. Process. Lett.1
1979 Security in Databases: A Combinatorial Study
abstract
Security ~s considered m the context of an abstract model of a database where queries revolving the mean or medmn of a pnvdeged field are allowed For this model, the method of lumtmg the number and types of quenes that can be asked of such a database is constdered as a means for providmg statistical access whale insuring that no mdlwdual data are compromised The resultant questions are primarily combinatorial m nature and are mterestmg m themselves KEY WORDS AND PHRASES statistical database, data security,
Steven P. Reiss
J. ACM1