Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Brian A. Malloy

dblp:m/BrianAMalloy · DBLP profile ↗
← Back
32ranked-venue papers
11as first author
0since 2021 · last 2019
—ORCID · none

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

Software engineering, systems software and programming languages · 27 · 8 first-authorSystems, architecture and hardware · 3 · 2 first-authorArtificial intelligence and machine learning · 2Databases, data management, data science and information retrieval · 1Human-computer interaction and ubiquitous computing · 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
7 papers
Debugging and program repair · 32% Compilers and program optimization · 20% Programming languages and type systems · 18%
Computer architecture, parallel and distributed computing, and storage systems
3 papers
Parallel and multicore computing · 46% Processor architecture and microarchitecture · 33% Electronic design automation · 12%

Topics — the 18 heaviest of 21, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Debugging and program repair
fault localization
0.112009
A Linear Programming Approach for Automated Localization of Multiple Faults · ASE 2009
Debugging and program repair › fault localization
multiple fault localization
0.112009
A Linear Programming Approach for Automated Localization of Multiple Faults · ASE 2009
Compilers and program optimization › parsing
parser generation
0.112009
Grammar Recovery from Parse Trees and Metrics-Guided Grammar Refactoring · IEEE Trans. Software Eng. 2009
Program verification › invariant verification
invariant checking
0.012002
Automated Validation of Class Invariants in C ++ Applications · ASE 2002
Program verification › dynamic verification
runtime verification
0.012002
Automated Validation of Class Invariants in C ++ Applications · ASE 2002
Software testing
test oracle
0.012002
Automated Validation of Class Invariants in C ++ Applications · ASE 2002
Program analysis › dynamic analysis › trace analysis
execution trace analysis
0.012009
A Linear Programming Approach for Automated Localization of Multiple Faults · ASE 2009
Processor architecture and microarchitecture
instruction-level parallelism
0.021994
Scheduling DAG's for Asynchronous Multiprocessor Execution · IEEE Trans. Parallel Distributed Syst. 1994
Instruction scheduling for the Motorola 88110 · MICRO 1993
Parallel and multicore computing › task scheduling
DAG scheduling
0.011994
Scheduling DAG's for Asynchronous Multiprocessor Execution · IEEE Trans. Parallel Distributed Syst. 1994
Parallel and multicore computing › parallelization strategies
fine-grained parallelism
0.011994
Scheduling DAG's for Asynchronous Multiprocessor Execution · IEEE Trans. Parallel Distributed Syst. 1994
Parallel and multicore computing
task scheduling
0.011994
Scheduling DAG's for Asynchronous Multiprocessor Execution · IEEE Trans. Parallel Distributed Syst. 1994
Compilers and program optimization › dependence analysis
control dependence analysis
0.011993
Efficient Construction of Program Dependence Graphs · ISSTA 1993
Program analysis
data dependence analysis
0.011993
Efficient Construction of Program Dependence Graphs · ISSTA 1993
Compilers and program optimization
instruction scheduling
0.011993
Instruction scheduling for the Motorola 88110 · MICRO 1993
Software maintenance and evolution
program comprehension
0.011993
A Unified Interprocedural Program Representation for a Maintenance Environment · IEEE Trans. Software Eng. 1993
Program analysis
program representation
0.011993
A Unified Interprocedural Program Representation for a Maintenance Environment · IEEE Trans. Software Eng. 1993
Electronic design automation › high-level synthesis
scheduling
0.011992
A shape matching approach for scheduling fine-grained parallelism · MICRO 1992
Processor architecture and microarchitecture
instruction scheduling
0.011994
Scheduling DAG's for Asynchronous Multiprocessor Execution · IEEE Trans. Parallel Distributed Syst. 1994

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

parse tree analysis · 0.1metrics-guided refactoring · 0.1manual instrumentation · 0.1linear programming · 0.1visitor pattern · 0.0table lookup · 0.0deterministic finite automaton · 0.0static schedule length analysis · 0.0simulation · 0.0parsing-time analysis · 0.0shape matching · 0.0
YearPublicationVenuePosition
2019 An empirical analysis of the transition from Python 2 to Python 3
Brian A. Malloy, James F. Power
Empir. Softw. Eng.1
2019 Grammar engineering for multiple front-ends for Python
abstract
Summary In this paper, we describe our experience in grammar engineering to construct multiple parsers and front ends for the Python language. We present a metrics‐based study of the evolution of the Python grammars through the multiple versions of the language in an effort to distinguish and measure grammar evolution and to provide a basis of comparison with related research in grammar engineering. To conduct this research, we have built a toolkit, pygrat, which builds on tools developed in other research. We use pygrat to build a system that automates much of the process needed to translate the Python grammars from EBNF to a formalism acceptable to the bison parser generator. We exploit the suite of Python test cases, used by the Python developers, to validate our parser generation. Finally, we describe our use of the menhir parser generator to facilitate the parser and front‐end construction, eliminating some of the transformations and providing practical support for grammar modularisation.
Brian A. Malloy, James F. Power
Softw. Pract. Exp.1
2017 Quantifying the Transition from Python 2 to 3: An Empirical Study of Python Applications
abstract
Background: Python is one of the most popular modern programming languages. In 2008 its authors introduced a new version of the language, Python 3.0, that was not backward compatible with Python 2, initiating a transitional phase for Python software developers. Aims: The study described in this paper investigates the degree to which Python software developers are making the transition from Python 2 to Python 3. Method: We have developed a Python compliance analyser, PyComply, and have assembled a large corpus of Python applications. We use PyComply to measure and quantify the degree to which Python 3 features are being used, as well as the rate and context of their adoption. Results: In fact, Python software developers are not exploiting the new features and advantages of Python 3, but rather are choosing to retain backward compatibility with Python 2. Conclusions: Python developers are confining themselves to a language subset, governed by the diminishing intersection of Python 2, which is not under development, and Python 3, which is under development with new features being introduced as the language continues to evolve.
Brian A. Malloy, James F. Power
ESEM1
2011 Capturing Interface Protocols to Support Comprehension and Evaluation of C++ Libraries
abstract
Developing and maintaining reliable object-oriented software requires a precise understanding of how individual classes must be used. Unfortunately, for many systems, especially those that are large, the available documentation is inadequate. Developers are left with incomplete information concerning the allowable set of call sequences that each class can accommodate. Techniques for reverse engineering this information and presenting it to developers in an intellectually scalable manner are critical. In this paper, we present four contributions to address this challenge. First, we describe a runtime trace collection system for large C++ applications. Second, we present a methodology for reverse engineering interface protocols from collected trace data. Third, we present a scalable, tunable algorithm for generating compact specifications of these protocols. Finally, we present a detailed case study involving the Mozilla Necko library. We consider popular applications in common use constructed using this library. The results are promising both in terms of the performance of the approach and the utility of the identified protocols.
Brian A. Malloy, Errol L. Lloyd, Jason O. Hallstrom, Edward B. Duffy
Int. J. Softw. Eng. Knowl. Eng.1
2010 The IELR(1) algorithm for generating minimal LR(1) parser tables for non-LR(1) grammars with conflict resolution
Joel E. Denny, Brian A. Malloy
Sci. Comput. Program.2
2009 A Linear Programming Approach for Automated Localization of Multiple Faults
abstract
In this paper, we address the problem of localizing faults by analyzing execution traces of successful and unsuccessful invocations of the application when run against a suite of tests. We present a new algorithm, based on a linear programming model, which is designed to be particularly effective for the case where multiple faults are present in the application under investigation. Through an extensive empirical study, we show that in the case of both single and multiple faults, our approach outperforms a host of prominent fault localization methods from the literature.
Brian C. Dean, William B. Pressly, Brian A. Malloy, Adam Whitley 0001
ASE3
2009 Grammar Recovery from Parse Trees and Metrics-Guided Grammar Refactoring
abstract
Many software development tools that assist with tasks such as testing and maintenance are specific to a particular development language and require a parser for that language. Because a grammar is required to develop a parser, construction of these software development tools is dependent upon the availability of a grammar for the development language. However, a grammar is not always available for a language and, in these cases, acquiring a grammar is the most difficult, costly, and time-consuming phase of tool construction. In this paper, we describe a methodology for grammar recovery from a hard-coded parser. Our methodology is comprised of manual instrumentation of the parser, a technique for automatic grammar recovery from parse trees, and a semi-automatic metrics-guided approach to refactoring an iterative grammar to obtain a recursive grammar. We present the results of a case study in which we recover and refactor a grammar from version 4.0.0 of the GNU C++ parser and then refactor the recovered grammar using our metrics-guided approach. Additionally, we present an evaluation of the recovered and refactored grammar by comparing it to the ISO C++98 grammar.
Nicholas A. Kraft, Edward B. Duffy, Brian A. Malloy
IEEE Trans. Software Eng.3
2008 Reverse Engineering Interface Protocols for Comprehension of Large C++ Libraries during Code Evolution Tasks
Edward B. Duffy, Jason O. Hallstrom, Brian A. Malloy
SEKE3
2007 An infrastructure to support interoperability in reverse engineering
Nicholas A. Kraft, Brian A. Malloy, James F. Power
Inf. Softw. Technol.2
2007 A tool chain for reverse engineering C++ applications
Nicholas A. Kraft, Brian A. Malloy, James F. Power
Sci. Comput. Program.2
2006 3D Visualization of Class Template Diagrams for Deployed Open Source Applications
Benjamin N. Hoipkemier, Nicholas A. Kraft, Brian A. Malloy
SEKE3
2006 A Tool to Automatically Map Implementation-based Testing Techniques to Classes
abstract
The object-oriented (OO) paradigm provides several benefits during analysis and design of large-scale software systems, but scores lower in terms of testability. The low testability score for OO software is due mainly to the composition of OO systems exhibiting the characteristics of abstraction, encapsulation, genericity, inheritance, polymorphism, concurrency and exception handling. To address the difficulty of testing the features of a class, a plethora of implementation-based testing techniques (IBTTs) have been developed. However, no one IBTT has emerged as the preferred technique to test the implementation of a class. In this paper we present a technique that automatically identify those IBTTs that are most suitable for testing a class based on the characteristics of that class. Our approach uses a taxonomy of OO classes that is used to succinctly abstract the characteristics of a class under test (CUT). We have implemented a tool that automates the process of mapping IBTTs to a class. In addition to identifying the IBTTs that would be best suited for testing a class, our tool provides feedback to the tester facilitating the identification of the characteristics of the class that are not suitably tested by any of the IBTTs in the list. We provide results of a study supporting the notion that using more than on IBTT during testing improves test coverage of a CUT.
Peter J. Clarke, Junhua Ding 0001, Djuradj Babich, Brian A. Malloy
Int. J. Softw. Eng. Knowl. Eng.4
2006 The implementation of an extensible system for comparison and visualization of class ordering methodologies
Nicholas A. Kraft, Errol L. Lloyd, Brian A. Malloy, Peter J. Clarke
J. Syst. Softw.3
2006 Exploiting design patterns to automate validation of class invariants
abstract
Abstract In this paper, techniques are presented that exploit two design patterns, the Visitor pattern and the Decorator pattern, to validate invariants about the data attributes in a C++ class automatically. To investigate the pragmatics involved in using the two patterns, a study of an existing, well‐tested application, keystone, a parser and front‐end for the C++ language, is presented. Results from the study indicate that these two patterns provide flexibility in terms of the frequency and level of granularity of validation of the class invariants, which are expressed in the Object Constraint Language (OCL). The quantitative results measure the impact of these approaches and the additional faults uncovered through validation of the case study. Copyright © 2005 John Wiley & Sons, Ltd.
Brian A. Malloy, James F. Power
Softw. Test. Verification Reliab.1
2005 A Language and Platform-Independent Approach for Reverse Engineering
abstract
We present an approach for reverse engineering a program to capture design and implementation artifacts such as metrics and UML class or sequence diagrams. We also describe an implementation of our approach, libthorin. However, unlike previous reverse engineering tools, libthorin can be applied to a variety of programming languages including C, C++, Java, Fortran 90 and C#. Moreover, libthorin can provide both coarse-grained and fine-grained information about the program under development to enable re-engineering of information and high-level diagrams such as metrics and class diagrams, or low-level diagrams such as sequence diagrams, control flow graphs and other program representations and analysis tools for testing, debugging and profiling an application under development.
Edward B. Duffy, Brian A. Malloy
SERA2
2005 Using a Molecular Metaphor to Facilitate Comprehension of 3D Object Diagrams
abstract
This paper presents a strategy for the visualization of dynamic object relationships in Java programs. The metaphor of a chemical molecule is used to aid comprehension, and to help in reducing the size of the object graph. Our strategy has been implemented by dynamically instrumenting Java bytecode to collect trace data, which is then analyzed and visualized in 3D using VRML. Quantitative and graphical results are presented, based on an analysis of programs in the SPEC JVM98 and JOlden benchmark suites.
Brian A. Malloy, James F. Power
VL/HCC1
2004 A metrics suite for grammar-based software
abstract
Abstract One approach to measuring and managing the complexity of software, as it evolves over time, is to exploit software metrics. Metrics have been used to estimate the complexity of the maintenance effort, to facilitate change impact analysis, and as an indicator for automatic detection of a transformation that can improve the quality of a system. However, there has been little effort directed at applying software metrics to the maintenance of grammar‐based software applications, such as compilers, editors, program comprehension tools and embedded systems. In this paper, we adapt the software metrics that are commonly used to measure program complexity and apply them to the measurement of the complexity of grammar‐based software applications. Since the behaviour of a grammar‐based application is typically choreographed by the grammar rules, the measure of complexity that our metrics provide can guide maintainers in locating problematic areas in grammar‐based applications. Copyright © 2004 John Wiley & Sons, Ltd.
James F. Power, Brian A. Malloy
J. Softw. Maintenance Res. Pract.2
2003 A Parameterized Cost Model to Order Classes for Class-based Testing of C++ Applications
abstract
In this paper we present the design and implementation of a class ordering system that is driven by a parameterized cost model. The parameters to the model assign weights to the edge types that describe the relationships between the classes in the graphical representation of the program. The nodes in the graph are classes and the edges express relationships between the classes. Previous research has included three or four edge types in the graph. However, to accommodate the full complement of C++ language constructs, which include template classes and functions and nested classes, we extend the graph to include six edge types. The parameters to the cost model can be tuned to remove certain types of edges in an attempt to reduce the cost of the testing effort or to reduce the cost of breaking cycles in the graph. Our case study indicates that inclusion of inheritance edges in cycle breaking considerations may reduce the number of edge removals by a factor of two or more.
Brian A. Malloy, Peter J. Clarke, Errol L. Lloyd
ISSRE1
2003 Decorating tokens to facilitate recognition of ambiguous language constructs
abstract
Abstract Software tools are fundamental to the comprehension, analysis, testing and debugging of application systems. A necessary first step in the development of many tools is the construction of a parser front‐end that can recognize the implementation language of the system under development. In this paper, we describe our use of token decoration to facilitate recognition of ambiguous language constructs. We apply our approach to the C++ language since its grammar is replete with ambiguous derivations such as the declaration/expression and template‐declaration/expression ambiguity. We describe our implementation of a parser front‐end for C++, keystone, and we describe our results in decorating tokens for our test suite including the examples from Clause Three of the C++ standard. We are currently exploiting the keystone front‐end to develop a taxonomy for implementation‐based class testing and to reverse‐engineer Unified Modeling Language (UML) class diagrams. Copyright © 2002 John Wiley & Sons, Ltd.
Brian A. Malloy, Tanton H. Gibbs, James F. Power
Softw. Pract. Exp.1
2002 Automated Validation of Class Invariants in C ++ Applications
abstract
In this paper, we describe a non-invasive approach for validation of class invariants in C++ applications. Our approach is fully automated so that the user need only supply the class invariants for each class hierarchy to be checked and our validator constructs an InvariantVisitor, a variation of the Visitor Pattern, and an InvariantFacilitator. Instantiations of the InvariantVisitor and InvariantFacilitator classes encapsulate the invariants in C++ statements and facilitate the validation of the invariants. We describe both our approach and our results of validating invariants in keystone, a well tested parser front-end for C++.
Tanton H. Gibbs, Brian A. Malloy, James F. Power
ASE2
2001 Using OCL-Queries for Debugging C++
Chanika Hobatr, Brian A. Malloy
ICSE2
2000 The Application of Correctness Preserving Transformations to Software Maintenance
abstract
The size and complexity of hardware and software systems continues to grow, making the introduction of subtle errors a more likely possibility. A major goal of software engineering is to enable developers to construct systems that operate reliably despite increased size and complexity. One approach to achieving this goal is through formal methods: mathematically based languages, techniques and tools for specifying and verifying complex software systems. The authors apply a theoretical tool (that is supported by many formal methods), the correctness preserving transformation (CPT), to a real software engineering problem: the need for optimization during the maintenance of code. We present four program transformations and a model that forms a framework for proof of correctness. We prove the transformations correct and then apply them to a cryptography application implemented in C++. Our experience shows that CPTs can facilitate generation of more efficient code while guaranteeing the preservation of original behavior.
J. Paul Gibson, Thomas F. Dowling, Brian A. Malloy
ICSM3
1999 Collecting Metrics for CORBA-Based Distributed Systems
John D. McGregor, Il-Hyung Cho, Brian A. Malloy, E. Lowry Curry, Chanika Hobatr
Empir. Softw. Eng.3
1997 The Complexity of Scheduling for Data Cache Optimization
Devidas Gupta, Brian A. Malloy, Alice A. McRae
Inf. Sci.2
1994 Scheduling DAG's for Asynchronous Multiprocessor Execution
abstract
A new approach is given for scheduling a sequential instruction stream for execution "in parallel" on asynchronous multiprocessors. The key idea in our approach is to exploit the fine grained parallelism present in the instruction stream. In this context, schedules are constructed by a careful balancing of execution and communication costs at the level of individual instructions, and their data dependencies. Three methods are used to evaluate our approach. First, several existing methods are extended to the fine grained situation. Our approach is then compared to these methods using both static schedule length analyses, and simulated executions of the scheduled code. In each instance, our method is found to provide significantly shorter schedules. Second, by varying parameters such as the speed of the instruction set, and the speed/parallelism in the interconnection structure, simulation techniques are used to examine the effects of various architectural considerations on the executions of the schedules. These results show that our approach provides significant speedups in a wide-range of situations. Third, schedules produced by our approach are executed on a two-processor Data General shared memory multiprocessor system. These experiments show that there is a strong correlation between our simulation results, and these actual executions, and thereby serve to validate the simulation studies. Together, our results establish that fine grained parallelism can be exploited in a substantial manner when scheduling a sequential instruction stream for execution "in parallel" on asynchronous multiprocessors.>
Brian A. Malloy, Errol L. Lloyd, Mary Lou Soffa
IEEE Trans. Parallel Distributed Syst.1
1993 Efficient Construction of Program Dependence Graphs
abstract
We present a new technique for constructing a program dependence graph that contains a program's control flow, along with the usual control and data dependence information. Our algorithm constructs a program dependence graph while the program is being parsed. For programs containing only structured transfers of control, our algorithm does not require information provided by the control flow graph or post dominator tree and therefore obviates the construction of these auxiliary graphs. For programs containing explicit transfers of control, our algorithm adjusts the partial control dependence subgraph, constructed during the parse, to incorporate exact control dependence information. There are several advantages to our approach. For many programs, our algorithm may result in substantial savings in time and memory since our construction of the program dependence graph does not require the auxiliary graph. Furthermore, since we incorporate control and data flow as well as exact control dependence information into the program dependence graph, our graph has a wide range of applicability. We have implemented our algorithm by incorporating it into the Free Software Foundation's GNU C compiler; currently we are performing experiments that compare our technique with the traditional approach.
Mary Jean Harrold, Brian A. Malloy, Gregg Rothermel
ISSTA2
1993 Instruction scheduling for the Motorola 88110
abstract
Static instruction scheduling is an important optimization to exploit instruction level parallelism. If the scheduler has to consider resource constraints to prevent structural hazards, usually the processor timing is simulated by overlaying binary matrices representing the resource usage of instructions. This technique is rather time consuming. It is shown that the timing can be simulated by a deterministic finite automaton and the matrix operations for a simulation step are replaced by two table lookups. A prototype implementation shows that about an eighteenfold speedup of the simulation can be expected. This performance gain can be used either to speed up existing scheduling algorithms or to use more complex algorithms to improve scheduling results.>
Mark Smotherman, Shuchi Chawla 0002, Stan Cox, Brian A. Malloy
MICRO4
1993 A Unified Interprocedural Program Representation for a Maintenance Environment
abstract
Unified interprocedural graph (UIG) that extracts the important features of existing program representations and adds new information to provide an integrated representation for maintenance tasks is presented. Algorithms that were developed for previous representations are adapted to use the UIG by identifying the subset of nodes and edges in the UIG required for that computation. Newly developed algorithms can use the UIG since it contains data flow, control flow, data dependence, and control dependence information. The main benefits of this approach are the reduction in storage space since individual representations are not kept, the savings in maintenance time of a single representation over the individual representations, and the convenience of accessing a single program representation without increase in access time. A single program representation also assists in program understanding since relationships among program elements are incorporated into one graph.>
Mary Jean Harrold, Brian A. Malloy
IEEE Trans. Software Eng.2
1992 Data flow testing of parallelized code
abstract
The authors present a novel system for re-engineering and retesting programs for execution in a shared memory multiprocessor environment. The system consists of two main components: a compiler that reengineers a sequential program for execution on shared memory multiprocessors, and a data-flow tester for the parallelized code. Several important enhancements to an existing parallelizing compiler have been made, including an efficient intermediate program representation on which data-flow analysis is performed. The compiler also inserts probes in a parallelized program to make it testable in its new environment. By inserting the probes in appropriate places, a compact execution trace is produced. The data-flow tester uses a new dynamic data-flow analysis algorithm to determine the test case coverage.>
Mary Jean Harrold, Brian A. Malloy
ICSM2
1992 A shape matching approach for scheduling fine-grained parallelism
Brian A. Malloy, Rajiv Gupta 0001, Mary Lou Soffa
MICRO1
1991 A unified interprocedural program representation for a maintenance environment
abstract
A unified interprocedural program representation, the unified interprocedural graph (UIG) is presented; it combines the features of existing program representations to permit access to information for modifying, understanding, analyzing, testing and debugging. The algorithms developed for each of these independent graphs are adapted to use this unified representation by identifying the subset of nodes and edges required for that computation. The UIG can be incorporated into a maintenance environment and the associated algorithms used to build program maintenance tools. The authors present a brief overview of the graph representations on which the UIG is based and illustrate them with an example. The algorithms that use these graphs to gather the interprocedural information are described.>
Mary Jean Harrold, Brian A. Malloy
ICSM2
1990 Conversion of Simulation Processes to Pascal Constructs
abstract
Abstract Although the expressive power of retentive control is widely accepted, languages possessing such control forms are not always available. In this paper, we present an implementation technique to extend a recursive language to one containing simulation processes. In particular, we report on the design of a preprocessor that translates SimCal, a language that combines Pascal and the process abstraction of Simula, into Pascal. The translation is done automatically by the preprocessor without additional information from the user. The preprocessor has been implemented for a microcomputer using Turbo Pascal, which is also used as the target language. SimCal has been found to be useful for teaching simulation and for programming simulation applications.
Brian A. Malloy, Mary Lou Soffa
Softw. Pract. Exp.1