
Keith Brian Gallagher- PhD
- Managing Director at Florida Institute of Technology
Keith Brian Gallagher
- PhD
- Managing Director at Florida Institute of Technology
About
55
Publications
11,532
Reads
How we measure 'reads'
A 'read' is counted each time someone views a publication summary (such as the title, abstract, and list of authors), clicks on a figure, or views or downloads the full-text. Learn more
1,681
Citations
Introduction
Skills and Expertise
Current institution
Additional affiliations
September 1985 - January 2004
January 2010 - present
January 2000 - December 2009
Education
September 1986 - December 1989
September 1980 - January 1982
September 1978 - September 1980
Publications
Publications (55)
Comprehension of computer programs is daunting, due in part to clutter in the software developer's visual environment and the need for frequent visual context changes. Previous research has shown that nonspeech sound can be useful in understanding the runtime behavior of a program. We explore the viability and advantages of using nonspeech sound in...
Detection of communities within social networks is a nontrivial problem. Allowing communities to overlap—i.e. nodes can belong to more than one community simultaneously—further complicates the problem. Nevertheless, people do belong to multiple social groups simultaneously and being able to detect overlapping communities is an important step into b...
There has been considerable interest in identifying communities within large collections of social networking data. Existing algorithms will classify an actor (node) into a single group, ignoring the fact that in real-world situations people tend to belong concurrently to multiple (overlapping) groups. Our work focuses on the ability to find overla...
We propose a unique approach to finding overlapping communities within complex networks that leverages swarm intelligence, for decentralized multi-threading processing, with label propagation, for its fast identification of communities. The combination of the two technologies offers a high performance approach to overlapped community detection that...
Almost all software contracts that are not open-source contain broad bans on reverse engineering, but as far as we can tell, almost all professional software development does reverse engineering to some degree. This is a fundamental, unresolved conflict. Every student and practitioner of software of engineering will face reverse engineering issues...
Software systems change and evolve over time. Each time a system is changed regression tests have to be run to validate
these changes. The aim of this research is to significantly reduce the number of test cases that need to be run after system changes have been made. Decomposition slicing provides a technique that is capable of identifying the unc...
Program robustness is the ability of software to behave correctly under stress. Measuring program robustness allows programmers to find the program's vulnerable points, repair them, and avoid similar mistakes in the future. In this paper, a Robustness Grid will be introduced as a program robustness measuring technique. A Robustness Grid is a table...
Robustness of a program is the degree of system correctness of all parts. Measuring robustness is a goal for many researchers. In this paper, program slicing is used to build a robustness hierarchy, where this hierarchy will be used to test, and build a robust program.
There has been considerable interest in improving the capability to identify communities within large collections of social networking data. However, many of the existing algorithms will compartment an actor (node) into a single group, ignoring the fact that in real-world situations people tend to belong concurrently to multiple groups. Our work fo...
Comprehension is the quintessence of human activity: we cannot do anything useful until we understand. From physicians to plumbers, we demand understanding of the problem at hand. So it is with software engineering. Comprehension is the foundation of all professional action: construction, reuse, and re-engineering; evolution, reverse engineering, a...
Use of non-speech sound can facilitate the understanding of a software program. Non-speech sound has been shown to be useful in dynamic program comprehension, that is, understanding the dynamic behavior of a program. We have developed a sonification scheme to describe static software entities in Java programs, and we show that it is useful in stati...
A dependence cluster is a set of program statements, all of which are mutually inter-dependent. This paper reports a large scale empirical study of dependence clusters in C program source code. The study reveals that large dependence clusters are surprisingly commonplace. Most of the 45 programs studied have clusters of dependence that consume more...
This research uses an exclusive technique to reduce the regression tests size. Exclusive technique means that a large number of tests will be excluded and leave a relatively small but safe test set. Decomposition slicing is used to empirically investigate whether it can reduce regression tests by an exclusive technique. Decomposition slicing provid...
Program slicing is a decomposition technique that slides program components not relevant to a chosen computation, referred to as a slicing criterion. The remaining components form an executable program called a slice that computes a projection of the original programpsilas semantics. Using examples coupled with fundamental principles, a tutorial in...
In order to characterize and improve software architecture visualization practice, the paper derives and constructs a qualitative framework, with seven key areas and 31 features, for the assessment of software architecture visualization tools. The framework is derived by the application of the Goal Question Metric paradigm to information obtained f...
Operational software is constantly evolving. Regression testing is used to identify the unintended consequences of evolutionary changes. As most changes affect only a small proportion of the system, the challenge is to ensure that the regression test set is both safe (all relevant tests are used) and inclusive (only relevant tests are used). Previo...
Popular software testing tools, such as JUnit, allow frequent retesting of modified code; yet the manually created test scripts are often seriously incomplete. A unit-testing tool called JWalk ...
Traditional program slicing requires two parameters: a program location and a variable, or perhaps a set of variables, of interest. Stop-list slicing adds a third parameter to the slicing criterion: those variables that are not of interest. This third parameter is called the stoplist. When a variable in the stop-list is encountered, the data-flow d...
Comprehending a computer program can be a daunting task. There is much to understand, including the interaction among different parts of the code. Program slicing is a vehicle that can help one understand this interaction. Because present-day visual development environments tend to become cluttered, and because a program slice may involve the inter...
Program comprehension of unfamiliar software is a daunting task and existing comprehension environments, although helping significantly, do not fully alleviate the information overload involved. The visual medium has been well-explored in aiding software engineers understanding of source code and other artifacts concerned with maintaining existing...
In order to assess software architecture visualisation strategies, we qualitatively characterize then construct an assessment framework with 7 key areas and 31 features. The framework is used for evaluation and comparison of various strategies from multiple stakeholder perspectives. Six existing software architecture visualisation tools and a seven...
Monkeysort is a pedagogical program that turns the usual concern of efficiency upside down by attempting to be as "dumb" as possible, yet still correct. In this program, whose inner workings are accessible to all students, monkeysort exhibits significant ideas that are central to computer science: partial correctness, generate-and-test solutions to...
Weiser's algorithm for computing interprocedural slices has a serious drawback: it generates spurious criteria which are not feasible in the control flow of the program. When these extraneous criteria are used the slice becomes imprecise in that it has statements that are not relevant to the computation. Horwitz, Reps and Binkley solved this proble...
In order to further understand and assess decomposition slicing we characterize and evaluate the size of reductions obtained by computing equivalent decomposition slices from the perspective of the comprehender, maintainer, tester and researcher. The analysis was performed on 68 C language systems of sizes 100 to 50,000 lines. All decomposition sli...
The attempt to design and integrate consistent changes to an existing system is the essence of software maintenance. Software developers also confront similar problems: there are changes during testing and the release of new system builds. Whether in development or maintenance, changes to evolving systems must be made consistently; that is, without...
When computing program slices on all variables in a system, we observed that many of these slices are the same. This leads to the question: Are we looking at software clones? We discuss the genesis of this phenomena and present some of the data observations that led to the question. The answer to our query is not immediately clear. We end by presen...
Introduction Many software technology problems can be characterised as problems of scale, one of the most important of which is the shear size of the source code which describes the system itself. Program slicing addresses this problem head on, reducing program size by focusing attention on a sub computation denoted by a `slicing criterion'. Mark W...
Comprehension, the primordial task, has not changed much in 40 years. Whether the comprehension task is global (architectural) or atomic (single statement effect), the approach is the same. We run it. We read it. We grep (search) it. An electronic search on the criteria ¿comprehension and tools¿ yielded no results. Therefore, while there is program...
Current practice for examination of a high integrity software artifact is often a manual process that is slow, tedious, and prone to human errors. This report describes a Computer Aided Software Engineering (CASE) tool, unravel, that can assist evaluation of high integrity software by using program slices to extract computations for examination. Th...
Program comprehension is the process in which software engineers gain an understanding of a system. A program comprehension environment provides tools to capture and manipulate information to carry out understanding tasks. We describe an information model and framework for program understanding and show how decomposition slicing (a maintenance meth...
Software maintenance is the process of designing and integrating consistent changes to an existing software system. It is difficult for the maintainer to ascertain the complete effect of a code change; the maintainer may make a change to a program that is syntactically and semantically legal, but has ripples into the parts of the program that were...
for software maintainers and developers of ansi C programs. It is based on the premises that maintainers need to be able to limit the scope of changes and that (most) development starts from some existing, similar systems. The Decomposition Slice Display System (dsds xvcg), a component of the Surgeon's Assistant, automates and visualizes impact ana...
Visual impact analysis is a software visualisation technique that
lets software maintainers judge the impact of proposed changes and plan
maintenance accordingly. An existing CASE tool uses a directed acyclic
graph display derived from decomposition slicing of a program for visual
impact analysis. In this paper, we analyse the graph display and sho...
Program understanding tools are currently not interoperable,
leading researchers to waste significant resources reinventing already
existing tools. Even commercial environments that have been designed to
support the construction of program understanding tools have serious
flaws in this regard. This paper discusses CORUM (Common Object-based
Re-engi...
Program slicing is a technique for reducing the amount of information that needs to be absorbed by a programmer. Given a point of “interest” in a program, described by a variable and a statement, a program slice gives all the statements that contributed to the value of the variable at the point, and elides unnecessary statements. This chapter surve...
Current practice for examination of a high integrity software artifact is often a manual process that is slow, tedious, and prone to human errors. This report describes a Computer Aided Software Engineering (CASE) tool, unravel, that can assist evaluation of high integrity software by using program slices to extract computations for examination. Th...
Describes a novel application of program slicing to two issues of
software safety: functional diversity and the validation and
verification of safety-critical components. Software quality assurance
auditors are faced with a myriad of difficulties, ranging from
inadequate time to inadequate CASE tools. One particular problem is the
localization of s...
The author reports on an empirical evaluation of decomposition
slicing as a maintenance method as implemented in the Surgeon's
Assistant. The improvement-oriented software maintenance model presented
by H. D. Rombach and B.T. Ulery (1988) is used as the foundation. A
reprise of software process modeling, a short introduction to software
maintenance...
Program slicing is applied to the software maintenance problem by extending the notion of a program slice (that originally required both a variable and line number) to a decomposition slice, one that captures all computation on a given variable, i.e., is independent of line numbers. Using the lattice of single variable decomposition slices ordered...
After a brief overview, eight tools to help the maintenance programmer analyze and understand code are described in separate presentations. All of them are code-visualization tools. However, while all these tools show how a program is structured, they use different means to achieve different ends. The tools covered are: Objective-C Browser; Vifor;...
The authors use M. Weisers (1984) technique, to approximate the
notion of direct-sum decomposition for the flowgraph representation of a
program. Given a program slice, they define its complement and
demonstrate how to obtain it; the slices and complements are used to
define the components of the decomposition. These components are
independent in t...
The authors use data-flow techniques to form a notion of direct
sum decomposition for programs. The decomposition yields a method and
guidelines for software maintainers to use so that changes can be
assured to be completely contained in the modules under consideration
and that there are no undetected linkages between the modified and
unmodified co...