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

Mark Grechanik

dblp:p/MGrechanik · DBLP profile ↗
← Back
49ranked-venue papers
21as first author
1since 2021 · last 2024
0000-0002-8364-595XORCID · verified

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

Software engineering, systems software and programming languages · 47 · 21 first-author · 1 since 2021Artificial intelligence and machine learning · 2 · 1 first-authorApplied, interdisciplinary, general and emerging computing · 2 · 1 first-authorSystems, architecture and hardware · 1Databases, data management, data science and information retrieval · 1

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
19 papers
Software maintenance and evolution · 36% Software testing · 25% Program analysis · 14%
Databases, data mining, and information retrieval
5 papers
Information retrieval · 42% Transaction processing and concurrency control · 37% Database system architecture and tuning · 16%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Performance modeling and evaluation · 77% Cloud and datacenter computing · 23%

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

TopicWeightPapersLastEvidence papers
Software maintenance and evolution
software reuse
0.652012
Detecting similar software applications · ICSE 2012
Portfolio: a search engine for finding functions and their usages · ICSE 2011
Portfolio: finding relevant functions and their usage · ICSE 2011
Software maintenance and evolution
code search
0.642013
Portfolio: Searching for relevant functions and their usages in millions of lines of code · ACM Trans. Softw. Eng. Methodol. 2013
Exemplar: A Source Code Search Engine for Finding Highly Relevant Applications · IEEE Trans. Software Eng. 2012
Portfolio: a search engine for finding functions and their usages · ICSE 2011
Program analysis › static analysis
bug detection
0.412020
T-BASIR: Finding Shutdown Bugs for Cloud-Based Applications in Cloud Spot Markets · IEEE Trans. Parallel Distributed Syst. 2020
Debugging and program repair
fault localization
0.412020
T-BASIR: Finding Shutdown Bugs for Cloud-Based Applications in Cloud Spot Markets · IEEE Trans. Parallel Distributed Syst. 2020
Information retrieval › document retrieval › domain-specific retrieval › enterprise search
application search
0.222010
Exemplar: EXEcutable exaMPLes ARchive · ICSE (2) 2010
A search engine for finding highly relevant applications · ICSE (1) 2010
Information retrieval › document retrieval › domain-specific retrieval
code search
0.222010
Exemplar: EXEcutable exaMPLes ARchive · ICSE (2) 2010
A search engine for finding highly relevant applications · ICSE (1) 2010
Software testing
search-based software testing
0.212015
Automating performance bottleneck detection using search-based application profiling · ISSTA 2015
Performance modeling and evaluation › profiling
application profiling
0.212015
Automating performance bottleneck detection using search-based application profiling · ISSTA 2015
Performance modeling and evaluation
bottleneck analysis
0.212015
Automating performance bottleneck detection using search-based application profiling · ISSTA 2015
Empirical software engineering
mining software repositories
0.222013
ExPort: Detecting and visualizing API usages in large source code repositories · ASE 2013
Detecting similar software applications · ICSE 2012
Database system architecture and tuning › database interface
application-database interaction
0.212013
Preventing database deadlocks in applications · ESEC/SIGSOFT FSE 2013
Empirical software engineering › mining software repositories › source-code mining
API usage mining
0.212013
ExPort: Detecting and visualizing API usages in large source code repositories · ASE 2013
Software maintenance and evolution › API usage
API usage analysis
0.112012
Exemplar: A Source Code Search Engine for Finding Highly Relevant Applications · IEEE Trans. Software Eng. 2012
Software testing
performance testing
0.112012
Automatically finding performance problems with feedback-directed learning software testing · ICSE 2012
Software testing › test coverage › code coverage
statement coverage
0.112012
CarFast: achieving higher statement coverage faster · SIGSOFT FSE 2012
Software testing
test coverage
0.112012
CarFast: achieving higher statement coverage faster · SIGSOFT FSE 2012
Software testing › test process › test design
test input selection
0.112012
Automatically finding performance problems with feedback-directed learning software testing · ICSE 2012
Cloud and datacenter computing › utility computing › cloud pricing
spot market
0.112020
T-BASIR: Finding Shutdown Bugs for Cloud-Based Applications in Cloud Spot Markets · IEEE Trans. Parallel Distributed Syst. 2020
Privacy and data protection
anonymization
0.112011
Testing software in age of data privacy: a balancing act · SIGSOFT FSE 2011
Software testing
GUI testing
0.112009
Maintaining and evolving GUI-directed test scripts · ICSE 2009
Program analysis › error detection
API misuse detection
0.112007
Finding errors in components that exchange xml data · ASE 2007
Software maintenance and evolution
program comprehension
0.112007
Recovering and using use-case-diagram-to-source-code traceability links · ESEC/SIGSOFT FSE 2007
Requirements engineering and software design
requirements traceability
0.112007
Recovering and using use-case-diagram-to-source-code traceability links · ESEC/SIGSOFT FSE 2007
Program analysis › error detection
runtime error detection
0.112007
Finding errors in components that exchange xml data · ASE 2007
Program analysis
static analysis
0.112007
Finding errors in components that exchange xml data · ASE 2007
Software maintenance and evolution › traceability
traceability link recovery
0.112007
Recovering and using use-case-diagram-to-source-code traceability links · ESEC/SIGSOFT FSE 2007
Transaction processing and concurrency control
deadlock
0.012013
REDACT: preventing database deadlocks from application-based transactions · ESEC/SIGSOFT FSE 2013
Data mining › text mining
topic model
0.012013
ExPort: Detecting and visualizing API usages in large source code repositories · ASE 2013
Operating systems › resource management › process management
CPU scheduling
0.012013
Preventing database deadlocks in applications · ESEC/SIGSOFT FSE 2013
Empirical software engineering
developer studies
0.012013
Portfolio: Searching for relevant functions and their usages in millions of lines of code · ACM Trans. Softw. Eng. Methodol. 2013

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

program analysis · 0.7information retrieval · 0.6genetic algorithm · 0.4execution trace analysis · 0.4contrast data mining · 0.4system-call interposition · 0.4system call interposition · 0.4static analysis · 0.4visualization · 0.3relational topic model · 0.3SQL statement analysis · 0.3data privacy framework · 0.1
YearPublicationVenuePosition
2024 Feedback-Directed Cross-Layer Optimization of Cloud-Based Functional Actor Applications
abstract
Even though actor-based frameworks such as Akka have been used by thousands of companies for over a decade, it is very difficult to configure cloud-based functional actor applications in a way to minimize their response time and to utilize provisioned resources with the maximal efficacy at the computing distributed cloud cluster nodes where these applications are deployed. As a result, the performance-tuning process is ad-hoc, laborious, manual, tedious and very expensive.We developed a novel low-code approach for cross-layer optimization of actor-based distributed applications. In our method, runtime information is automatically collected and analyzed in parallel to the executing application using search-based genetic algorithms. These algorithms generate changes to the application design, which are automatically applied to regenerate the application while it continues to service clients’ requests. We applied our approach to automatically created distributed Akka applications demonstrating its effectiveness in finding an optimal configuration.
Andrea Cappelletti, Mark Grechanik
ISSRE2
2020 T-BASIR: Finding Shutdown Bugs for Cloud-Based Applications in Cloud Spot Markets
abstract
One of the major advantages of cloud spot instances in cloud computing is to allow stakeholders to economically deploy their applications at much lower costs than that of other types of cloud instances. In exchange, spot instances are often exposed to revocations (i.e., terminations) by cloud providers. With spot instances becoming pervasive, terminations have become a part of the normal behavior of cloud-based applications; thus, these applications may be left in an incorrect state leading to certain bugs. Unfortunately, these applications are not designed or tested to deal with this behavior in the cloud environment, and as a result, the advantages of cloud spot instances could be significantly minimized or even entirely negated. We propose a novel solution to automatically find these bugs and locate their causes in the source code. We evaluate our solution using 10 popular open-source applications. The results show that our solution not only finds more instances and different types of these bugs compared to the random approach, but it also locates the causes of these bugs to help developers improve the design of the shutdown process and is more efficient in finding instances of these bugs since it interposes at the system call layer.
Abdullah Alourani, Ajay D. Kshemkalyani, Mark Grechanik
IEEE Trans. Parallel Distributed Syst.3
2019 Testing for Bugs of Cloud-Based Applications Resulting from Spot Instance Revocations
abstract
One of the major advantages of cloud spot instances in cloud computing is to allow stakeholders to economically deploy their applications at much lower costs than that of other types of cloud instances. In exchange, spot instances are often exposed to revocations (i.e., terminations) by cloud providers. With spot instances becoming pervasive, terminations have become a part of the normal behavior of cloud-based applications; thus, these applications may be left in an incorrect state leading to certain bugs. Unfortunately, these applications are not designed or tested to deal with this behavior in the cloud environment, and as a result, the advantages of cloud spot instances could be significantly minimized or even entirely negated. We propose a novel solution to automatically find these bugs and locate their causes in the source code. We evaluate our solution using 10 popular open-source applications. The results show that our solution not only finds more instances and different types of these bugs compared to the random approach, but it also locates the causes of these bugs to help developers to improve the design of the shutdown process for cloud-based applications.
Abdullah Alourani, Ajay D. Kshemkalyani, Mark Grechanik
CLOUD3
2019 Generating Integration Tests Automatically Using Frequent Patterns of Method Execution Sequences
abstract
Integration testing is vitally important for ensuring software quality, since many serious software defects are not isolated in single components.Unfortunately, creating integration tests is often a manual and laborious effort.A fundamental problem of software testing is how to automatically create effective integration tests with oracles that find bugs efficiently.We created a novel approach for Automatically SyntheSizing Integration Software Tests (ASSIST) that automatically obtains models that describe frequently interacting components in software applications, thus reducing the number of synthesized integration tests and increasing their bug-finding power.In ASSIST, static and dynamic analyses are used along with carving runtime states to obtain test input data as well as oracles for the synthesized integration tests.We experimented with three Java applications and show that integration tests that are synthesized using ASSIST have comparable bug finding power with manually created integration tests.
Mark Grechanik, Gurudev Devanla
SEKE1
2018 Differencing Graphical User Interfaces
abstract
Graphical User Interface (GUI)-based APplications (GAPs) are ubiquitous and provide a wealth of sophisticated services. Nontrivial GAPs evolve through many versions, and understanding how GUIs of different versions of GAPs differ is crucial for various software quality tasks such as testing, cross-platform UI comparison and project effort estimation. Yet despite the criticality of automating GUI differencing, it is a manual, tedious, and laborious task. We offer a novel approach for differencing GUIs that combines tree edit distance measure algorithms with accessibility technologies for obtaining GUI models in a non-intrusive, platform and language-independent way, and it does not require the source code of GAPs. We developed a tool called GUI DifferEntiator (GUIDE) that allows users to difference GUIs of running GAPs. To evaluate GUIDE, we created an experimental platform that generates random GUIs with controlled differentials among them that serve as oracles. GUIDE enables researchers to plug-and-play various GUI differencing algorithms and to automatically run experiments. We evaluated GUIDE on 5,000 pairs of generated complex GUIs and three open-source GAPs and the results of our evaluation suggest that GUIDE can find differences between GUIs with a high degree of automation and precision.
Mark Grechanik, Chi Wu Mao, Ankush Baisal, David Rosenblum, B. M. Mainul Hossain
QRS1
2018 Search-Based Stress Testing the Elastic Resource Provisioning for Cloud-Based Applications
abstract
One of the main benefits of cloud computing is to enable customers to deploy their applications on a cloud infrastructure that provisions resources (e.g., memory) to these applications on as-needed basis. Unfortunately, certain workloads can cause customers to pay for resources that are provisioned to, but not fully used by their applications, and as a result their performances then deteriorate beyond some acceptable thresholds and the benefits of cloud computing may be significantly reduced or even completely obliterated. We propose a novel approach to automatically discover these workloads to stress test elastic resource provisioning for cloud-based applications. We experimented with four non-trivial applications on the Microsoft Azure cloud to determine how effectively and efficiently our approach explores a very large space of the workload parameters’ values. The results show that our approach discovers the first irregular workload faster in the search space of over $$10^{40}$$ input combinations compared to the random approach, and it discovers more irregular workloads that result in much higher costs and performance degradations for applications in the cloud.
Abdullah Alourani, Md. Abu Naser Bikas, Mark Grechanik
SSBSE3
2017 Automatically detecting integrity violations in database-centric applications
abstract
Database-centric applications (DCAs) are widely used by many companies and organizations to perform various control and analytical tasks using large databases. Real-world databases are described by complex schemas that oftentimes contain hundreds of tables consisting of thousands of attributes. However, when software engineers develop DCAs, they may write code that can inadvertently violate the integrity of these databases. Alternatively, business analysts and database administrators can also make errors that lead to integrity violations (semantic bugs). To detect these violations, stakeholders must create assertions that check the validity of the data in the rows of the database tables. Unfortunately, creating assertions is a manual, laborious and error-prone task. Thus, a fundamental problem of testing DCAs is how to find such semantic bugs automatically. We propose a novel solution, namely DACITE, that enables stakeholders to automatically obtain constraints that semantically relate database attributes and code statements using a combination of static analysis of the source code and associative rule mining of the databases. We rely on SAT-solvers to validate if a solution to the combined constraints exists and issue warnings on possible semantic bugs to stakeholders. We evaluated our approach on eight open-source DCAs and our results suggest that semantic bugs can be found automatically with high precision. The results of the study with developers show that warnings produced by DACITE are useful and enable them to find semantic bugs faster.
Boyang Li 0002, Denys Poshyvanyk, Mark Grechanik
ICPC3
2017 FOREPOST: finding performance problems automatically with feedback-directed learning software testing
Aswathy Nair, Mark Grechanik, Denys Poshyvanyk
Empir. Softw. Eng.3
2016 Mining performance regression inducing code changes in evolving software
abstract
During software evolution, the source code of a system frequently changes due to bug fixes or new feature requests. Some of these changes may accidentally degrade performance of a newly released software version. A notable problem of regression testing is how to find problematic changes (out of a large number of committed changes) that may be responsible for performance regressions under certain test inputs.
Denys Poshyvanyk, Mark Grechanik
MSR3
2016 Mutation Integration Testing
abstract
In integration testing, integrated software modules or components are evaluated as a whole to determine if they behave correctly. Mutation testing is recognized as one of the strongest approaches for evaluating the effectiveness of test suites, and it is important to generate effective mutants efficiently for integration tests. However, it is difficult to generate integration mutants that create an error state in one component with certain assurances that this error state will affect computations in some other components. Unfortunately, little research exists that addresses this big and important problem to improve the quality of integration test suites. In this paper, we propose a theory and a solution for generating mutants that specifically target integration tests. We formulate a fault model for integration bugs that uses static dataflow analysis to obtain information about how integrated components interact in an application. Integration mutants are generated by applying mutation operators to instructions that lie in dataflow paths among integrated components. We implemented our approach and evaluated it on five open-source applications. In comparison to muJava, our approach reduces the number of generated mutants by up to approximately 19 times with a strong power to determine inadequacies in integration test suites.
Mark Grechanik, Gurudev Devanla
QRS1
2016 Enhancing Rules For Cloud Resource Provisioning Via Learned Software Performance Models
abstract
In cloud computing, stakeholders deploy and run their software applications on a sophisticated infrastructure that is owned and managed by third-party providers. The ability of a given cloud infrastructure to effectively re-allocate resources to applications is referred to as elasticity. To enable elasticity, programmers study the behavior of applications and write scripts that guide the cloud to provision resources for these applications. This is an imprecise, laborious, manual and expensive approach that drastically increases the cost of application deployment and maintenance in the cloud. We propose an approach, coined as Provisioning Resources with Experimental SofTware mOdeling (PRESTO), to automatically learn behavioral models of software applications during performance testing in order to recommend programmers how to improve provisioning strategies that guide the cloud to (de)allocate resources to these applications. We applied PRESTO to two software applications and our experiments demonstrate that with PRESTO programmers can create rules for provisioning resources with a high degree of precision when the performance is about to worsen, so that the applications maintain their throughputs at the desired level.
Mark Grechanik, Denys Poshyvanyk, Adam A. Porter
ICPE1
2016 RUGRAT: Evaluating program analysis and testing tools and compilers with large generated random benchmark applications
abstract
Benchmarks are heavily used in different areas of computer science to evaluate algorithms and tools. In program analysis and testing, open-source and commercial programs are routinely used as benchmarks to evaluate different aspects of algorithms and tools. Unfortunately, many of these programs are written by programmers who introduce different biases, not to mention that it is very difficult to find programs that can serve as benchmarks with high reproducibility of results. We propose a novel approach for generating random benchmarks for evaluating program analysis and testing tools and compilers. Our approach uses stochastic parse trees, where language grammar production rules are assigned probabilities that specify the frequencies with which instantiations of these rules will appear in the generated programs. We implemented our tool for Java and applied it to generate a set of large benchmark programs of up to 5M lines of code each with which we evaluated different program analysis and testing tools and compilers. The generated benchmarks let us independently rediscover several issues in the evaluated tools. Copyright © 2014 John Wiley & Sons, Ltd.
Ishtiaque Hussain, Christoph Csallner, Mark Grechanik, Qing Xie 0003, Kunal Taneja, B. M. Mainul Hossain
Softw. Pract. Exp.3
2015 1st International Workshop on Complex faUlts and Failures in LargE Software Systems (COUFLESS 2015)
abstract
COUFLESS is a one-day workshop that starts with keynote speaker, Prof. Kishor S. Trivedi from Duke University, North Carolina, USA whose talk's title is titled: "Why Does Software Fail and What Should be Done About It?" A total of 15 papers were submitted to COUFLESS with 53 authors from nine countries and each paper received at least three reviews by the 26 members of the program committee from 11 countries, making it a truly International Workshop. After a long discussion, 11 papers were accepted with the acceptance rate of 73%. Accepted papers address the issues of localizing and debugging complex faults in large-scale software applications.
Mark Grechanik, Allen P. Nikora
ICSE (2)1
2015 Automating performance bottleneck detection using search-based application profiling
abstract
Application profiling is an important performance analysis technique, when an application under test is analyzed dynamically to determine its space and time complexities and the usage of its instructions. A big and important challenge is to profile nontrivial web applications with large numbers of combinations of their input parameter values. Identifying and understanding particular subsets of inputs leading to performance bottlenecks is mostly manual, intellectually intensive and laborious procedure. We propose a novel approach for automating performance bottleneck detection using search-based input-sensitive application profiling. Our key idea is to use a genetic algorithm as a search heuristic for obtaining combinations of input parameter values that maximizes a fitness function that represents the elapsed execution time of the application. We implemented our approach, coined as Genetic Algorithm-driven Profiler (GA-Prof) that combines a search-based heuristic with contrast data mining of execution traces to accurately determine performance bottlenecks. We evaluated GA-Prof to determine how effectively and efficiently it can detect injected performance bottlenecks into three popular open source web applications. Our results demonstrate that GA-Prof efficiently explores a large space of input value combinations while automatically and accurately detecting performance bottlenecks, thus suggesting that it is effective for automatic profiling.
Du Shen, Denys Poshyvanyk, Mark Grechanik
ISSTA4
2015 Enhancing Performance And Reliability of Rule Management Platforms
abstract
RulE Management Platforms (REMPs) enable software engineers to represent programming logic as conditional sentences that relate statements of facts. A key benefit of REMPs is that they make software adaptable by burying the complexity of rule invocation in their engines, so that programmers can concentrate on business aspects of highly modular rules. Naturally, rule-driven applications are expected to have excellent performance, since REMP engines should be able to invoke highly modular rules in parallel in response to asserting different facts. In reality, it is very difficult to parallelize rule executions, since it leads to the loss of reliability and adaptability of rule-driven applications.
Mark Grechanik, B. M. Mainul Hossain
ICPE1
2014 Sanitizing and Minimizing Databases for Software Application Test Outsourcing
abstract
Testing software applications that use nontrivial databases is increasingly outsourced to test centers in order to achieve lower cost and higher quality. Not only do different data privacy laws prevent organizations from sharing this data with test centers because databases contain sensitive information, but also this situation is aggravated by big data - it is time consuming and difficult to anonymize, distribute, and test with large databases. Deleting data randomly often leads to significantly worsened test coverages and fewer uncovered faults, thereby reducing the quality of software applications. We propose a novel approach for Protecting and mInimizing databases for Software TestIng taSks (PISTIS) that both sanitizes and minimizes a database that comes along with an application. PISTIS uses a weight-based data clustering algorithm that partitions data in the database using information obtained using program analysis that describes how this data is used by the application. For each cluster, a centroid object is computed that represents different persons or entities in the cluster, and we use associative rule mining to compute and use constraints to ensure that the centroid objects are representative of the general population of the data in the cluster. Doing so also sanitizes information, since these centroid objects replace the original data to make it difficult for attackers to infer sensitive information. Thus, we reduce a large database to a few centroid objects and we show in our experiments with two applications that test coverage stays within a close range to its original level.
Boyang Li 0002, Mark Grechanik, Denys Poshyvanyk
ICST2
2014 Redacting sensitive information in software artifacts
abstract
In the past decade, there have been many well-publicized cases of source code leaking from different well-known companies. These leaks pose a serious problem when the source code contains sensitive information encoded in its identifier names and comments. Unfortunately, redacting the sensitive information requires obfuscating the identifiers, which will quickly interfere with program comprehension. Program comprehension is key for programmers in understanding the source code, so sensitive information is often left unredacted.
Mark Grechanik, Collin McMillan, Tathagata Dasgupta, Denys Poshyvanyk, Malcom Gethers
ICPC1
2014 On the Accuracy of Forward Dynamic Slicing and Its Effects on Software Maintenance
abstract
Dynamic slicing is a practical and popular analysis technique used in various software-engineering tasks. Dynamic slicing is known to be incomplete because it analyzes only a subset of all possible executions of a program. However, it is less known that its results may inaccurately represent the dependencies that occur in those executions. Some researchers have identified this problem and developed extensions such as relevant slicing, which incorporates static information. Yet, dynamic slicing continues to be widely used, even though the extent of its inaccuracy is not well understood, which can affect the benefits of this analysis. In this paper, we present an approach to assess the accuracy of forward dynamic slices, which are used in software maintenance and evolution tasks. Because finding all actual dependencies is an undecidable problem, our approach instead computes bounds of the precision and recall of forward dynamic slices. Our approach uses sensitivity analysis and execution differencing to find a subset of all program statements that truly depend at runtime on another statement. Using this approach, we studied the accuracy of many forward dynamic slices from a variety of Java applications. Our results show that forward dynamic slicing can have low recall -- for dependencies in the analyzed executions -- and some potential imprecision. We also conducted a case study that shows how this inaccuracy affects a software maintenance task. To the best of our knowledge, ours is the first work that quantifies the intrinsic limitations of dynamic slicing.
Siyuan Jiang, Raúl A. Santelices, Mark Grechanik, Haipeng Cai
SCAM3
2014 On using machine learning to automatically classify software applications into domain categories
Mario Linares-Vásquez, Collin McMillan, Denys Poshyvanyk, Mark Grechanik
Empir. Softw. Eng.4
2013 Enhancing Software Traceability by Automatically Expanding Corpora with Relevant Documentation
abstract
Software trace ability is the ability to describe and follow the life of a requirement in both a forward and backward direction by defining relationships to related development artifacts. A plethora of different trace ability recovery approaches use information retrieval techniques, which depend on the quality of the textual information in requirements and software artifacts. Not only is it important that stakeholders use meaningful names in these artifacts, but also it is crucial that the same names are used to specify the same concepts in different artifacts. Unfortunately, the latter is difficult to enforce and as a result, software trace ability approaches are not as efficient and effective as they could be - to the point where it is questionable whether the anticipated economic and quality benefits were indeed achieved. We propose a novel and automatic approach for expanding corpora with relevant documentation that is obtained using external function call documentation and sets of relevant words, which we implemented in Trace Lab. We experimented with three Java applications and we show that using our approach the precision of recovering trace ability links was increased by up to 31% in the best case and by approximately 9% on average.
Tathagata Dasgupta, Mark Grechanik, Evan Moritz, Bogdan Dit, Denys Poshyvanyk
ICSM2
2013 Testing Database-Centric Applications for Causes of Database Deadlocks
abstract
Many organizations deploy applications that use databases by sending Structured Query Language (SQL) statements to them and obtaining data that result from executions of these statements. Since applications often share the same databases concurrently, database deadlocks routinely occur in these databases. Testing applications to determine how they cause database deadlocks is important as part of ensuring correctness, reliability, and performance of these applications. Unfortunately, it is very difficult to reproduce database deadlocks, since it involves different factors such as the precise interleavings in executing SQL statements. We created a novel approach for Systematic TEsting in Presence of DAtabase Deadlocks (STEPDAD) that enables testers to instantiate database deadlocks in applications with a high level of automation and frequency. We implemented STEPDAD and experimented with three applications. On average, STEPDAD detected a number of database deadlocks exceeding the deadlocks obtained with the baseline approach by more than an order of magnitude. In some cases, STEPDAD reproduced a database deadlock after running an application only twice, while no database deadlocks could be obtained after ten runs using the baseline approach.
Mark Grechanik, B. M. Mainul Hossain, Ugo A. Buy
ICST1
2013 ExPort: Detecting and visualizing API usages in large source code repositories
abstract
This paper presents a technique for automatically mining and visualizing API usage examples. In contrast to previous approaches, our technique is capable of finding examples of API usage that occur across several functions in a program. This distinction is important because of a gap between what current API learning tools provide and what programmers need: current tools extract relatively small examples from single files/functions, even though programmers use APIs to build large software. The small examples are helpful in the initial stages of API learning, but leave out details that are helpful in later stages. Our technique is intended to fill this gap. It works by representing software as a Relational Topic Model, where API calls and the functions that use them are modeled as a document network. Given a starting API, our approach can recommend complex API usage examples mined from a repository of over 14 million Java methods.
Evan Moritz, Mario Linares-Vásquez, Denys Poshyvanyk, Mark Grechanik, Collin McMillan, Malcom Gethers
ASE4
2013 Preventing database deadlocks in applications
abstract
Many organizations deploy applications that use databases by sending Structured Query Language (SQL) statements to them and obtaining data that result from the execution of these statements. Since applications often share the same databases concurrently, database deadlocks routinely occur in these databases resulting in major performance degradation in these applications. Database engines do not prevent database deadlocks for the same reason that the schedulers of operating system kernels do not preempt processes in a way to avoid race conditions and deadlocks - it is not feasible to find an optimal context switching schedule quickly for multiple processes (and SQL statements), and the overhead of doing it is prohibitive.
Mark Grechanik, B. M. Mainul Hossain, Ugo A. Buy, Haisheng Wang
ESEC/SIGSOFT FSE1
2013 REDACT: preventing database deadlocks from application-based transactions
abstract
In this demonstration, we will present a database deadlocks prevention system that visualizes our algorithm for detecting hold-and-wait cycles that specify how resources (e.g., database tables) are locked and waited on to be locked during executions of SQL statements and utilizes those cycles information to prevent database deadlocks automatically.
B. M. Mainul Hossain, Mark Grechanik, Ugo A. Buy, Haisheng Wang
ESEC/SIGSOFT FSE2
2013 Portfolio: Searching for relevant functions and their usages in millions of lines of code
abstract
Different studies show that programmers are more interested in finding definitions of functions and their uses than variables, statements, or ordinary code fragments. Therefore, developers require support in finding relevant functions and determining how these functions are used. Unfortunately, existing code search engines do not provide enough of this support to developers, thus reducing the effectiveness of code reuse. We provide this support to programmers in a code search system called Portfolio that retrieves and visualizes relevant functions and their usages. We have built Portfolio using a combination of models that address surfing behavior of programmers and sharing related concepts among functions. We conducted two experiments: first, an experiment with 49 C/C++ programmers to compare Portfolio to Google Code Search and Koders using a standard methodology for evaluating information-retrieval-based engines; and second, an experiment with 19 Java programmers to compare Portfolio to Koders. The results show with strong statistical significance that users find more relevant functions with higher precision with Portfolio than with Google Code Search and Koders. We also show that by using PageRank, Portfolio is able to rank returned relevant functions more efficiently.
Collin McMillan, Denys Poshyvanyk, Mark Grechanik, Qing Xie 0003
ACM Trans. Softw. Eng. Methodol.3
2012 Automatically finding performance problems with feedback-directed learning software testing
abstract
A goal of performance testing is to find situations when applications unexpectedly exhibit worsened characteristics for certain combinations of input values. A fundamental question of performance testing is how to select a manageable subset of the input data faster to find performance problems in applications automatically. We offer a novel solution for finding performance problems in applications automatically using black-box software testing. Our solution is an adaptive, feedback-directed learning testing system that learns rules from execution traces of applications and then uses these rules to select test input data automatically for these applications to find more performance problems when compared with exploratory random testing. We have implemented our solution and applied it to a medium-size application at a major insurance company and to an open-source application. Performance problems were found automatically and confirmed by experienced testers and developers.
Mark Grechanik, Qing Xie 0003
ICSE1
2012 Detecting similar software applications
abstract
Although popular text search engines allow users to retrieve similar web pages, source code search engines do not have this feature. Detecting similar applications is a notoriously difficult problem, since it implies that similar highlevel requirements and their low-level implementations can be detected and matched automatically for different applications. We created a novel approach for automatically detecting Closely reLated ApplicatioNs (CLAN) that helps users detect similar applications for a given Java application. Our main contributions are an extension to a framework of relevance and a novel algorithm that computes a similarity index between Java applications using the notion of semantic layers that correspond to packages and class hierarchies. We have built CLAN and we conducted an experiment with 33 participants to evaluate CLAN and compare it with the closest competitive approach, MUDABlue. The results show with strong statistical significance that CLAN automatically detects similar applications from a large repository of 8,310 Java applications with a higher precision than MUDABlue.
Collin McMillan, Mark Grechanik, Denys Poshyvanyk
ICSE2
2012 CarFast: achieving higher statement coverage faster
abstract
Test coverage is an important metric of software quality, since it indicates thoroughness of testing. In industry, test coverage is often measured as statement coverage. A fundamental problem of software testing is how to achieve higher statement coverage faster, and it is a difficult problem since it requires testers to cleverly find input data that can steer execution sooner toward sections of application code that contain more statements.
B. M. Mainul Hossain, Ishtiaque Hussain, Christoph Csallner, Mark Grechanik, Kunal Taneja, Qing Xie 0003
SIGSOFT FSE5
2012 Exemplar: A Source Code Search Engine for Finding Highly Relevant Applications
abstract
A fundamental problem of finding software applications that are highly relevant to development tasks is the mismatch between the high-level intent reflected in the descriptions of these tasks and low-level implementation details of applications. To reduce this mismatch we created an approach called EXEcutable exaMPLes ARchive (Exemplar) for finding highly relevant software projects from large archives of applications. After a programmer enters a natural-language query that contains high-level concepts (e.g., MIME, datasets), Exemplar retrieves applications that implement these concepts. Exemplar ranks applications in three ways. First, we consider the descriptions of applications. Second, we examine the Application Programming Interface (API) calls used by applications. Third, we analyze the dataflow among those API calls. We performed two case studies (with professional and student developers) to evaluate how these three rankings contribute to the quality of the search results from Exemplar. The results of our studies show that the combined ranking of application descriptions and API documents yields the most-relevant search results. We released Exemplar and our case study data to the public.
Collin McMillan, Mark Grechanik, Denys Poshyvanyk, Qing Xie 0003
IEEE Trans. Software Eng.2
2011 Portfolio: finding relevant functions and their usage
abstract
Different studies show that programmers are more interested in finding definitions of functions and their uses than variables, statements, or arbitrary code fragments [30, 29, 31]. Therefore, programmers require support in finding relevant functions and determining how those functions are used. Unfortunately, existing code search engines do not provide enough of this support to developers, thus reducing the effectiveness of code reuse.
Collin McMillan, Mark Grechanik, Denys Poshyvanyk, Qing Xie 0003
ICSE2
2011 Portfolio: a search engine for finding functions and their usages
abstract
In this demonstration, we present a code search system called Portfolio that retrieves and visualizes relevant functions and their usages. We will show how chains of relevant functions and their usages can be visualized to users in response to their queries.
Collin McMillan, Mark Grechanik, Denys Poshyvanyk, Qing Xie 0003
ICSE2
2011 Categorizing software applications for maintenance
abstract
Software repositories hold applications that are often categorized to improve the effectiveness of various maintenance tasks. Properly categorized applications allow stakeholders to identify requirements related to their applications and predict maintenance problems in software projects. Unfortunately, for different legal and organizational reasons the source code is often not available, thus making it difficult to automatically categorize binary executables of software applications. In this paper, we propose a novel approach in which we use Application Programming Interface (API) calls from third-party libraries as attributes for automatic categorization of software applications that use these API calls. API calls can be extracted from source code and more importantly, from the byte-code of applications, thus making automatic categorization approaches applicable to closed source repositories. We evaluate our approach along with other machine learning algorithms for software categorization on two large Java repositories: an open-source repository containing 3,286 projects and a closed-source one with 745 applications. Our contribution is twofold: not only do we propose a new approach that makes it possible to categorize software projects without any source code using a small number of API calls as attributes, but also we carried out the first comprehensive empirical evaluation of automatic categorization approaches.
Collin McMillan, Mario Linares-Vásquez, Denys Poshyvanyk, Mark Grechanik
ICSM4
2011 Testing software in age of data privacy: a balancing act
abstract
Database-centric applications (DCAs) are common in enterprise computing, and they use nontrivial databases. Testing of DCAs is increasingly outsourced to test centers in order to achieve lower cost and higher quality. When proprietary DCAs are released, their databases should also be made available to test engineers. However, different data privacy laws prevent organizations from sharing this data with test centers because databases contain sensitive information. Currently, testing is performed with anonymized data, which often leads to worse test coverage (such as code coverage) and fewer uncovered faults, thereby reducing the quality of DCAs and obliterating benefits of test outsourcing. To address this issue, we offer a novel approach that combines program analysis with a new data privacy framework that we design to address constraints of software testing. With our approach, organizations can balance the level of privacy with needs of testing. We have built a tool for our approach and applied it to nontrivial Java DCAs. Our results show that test coverage can be preserved at a higher level by anonymizing data based on their effect on corresponding DCAs.
Kunal Taneja, Mark Grechanik, Rayid Ghani, Tao Xie 0001
SIGSOFT FSE2
2010 An empirical investigation into a large-scale Java open source code repository
abstract
Getting insight into different aspects of source code artifacts is increasingly important – yet there is little empirical research using large bodies of source code, and subsequently there are not much statistically significant evidence of common patterns and facts of how programmers write source code. We pose 32 research questions, explain rationale behind them, and obtain facts from 2,080 randomly chosen Java applications from Sourceforge. Among these facts we find that most methods have one or zero arguments or they do not return any values, few methods are overridden, most inheritance hierarchies have the depth of one, close to 50 % of classes are not explicitly inherited from any classes, and the number of methods is strongly correlated with the number of fields in a class. Categories and Subject Descriptors
Mark Grechanik, Collin McMillan, Luca DeFerrari, Marco Comi, Stefano Crespi-Reghizzi, Denys Poshyvanyk, Qing Xie 0003, Carlo Ghezzi
ESEM1
2010 A search engine for finding highly relevant applications
abstract
A fundamental problem of finding applications that are highly relevant to development tasks is the mismatch between the high-level intent reflected in the descriptions of these tasks and low-level implementation details of applications. To reduce this mismatch we created an approach called Exemplar (EXEcutable exaMPLes ARchive) for finding highly relevant software projects from large archives of applications. After a programmer enters a natural-language query that contains high-level concepts (e.g., MIME, data sets), Exemplar uses information retrieval and program analysis techniques to retrieve applications that implement these concepts. Our case study with 39 professional Java programmers shows that Exemplar is more effective than Sourceforge in helping programmers to quickly find highly relevant applications.
Mark Grechanik, Qing Xie 0003, Collin McMillan, Denys Poshyvanyk, Chad M. Cumby
ICSE (1)1
2010 Exemplar: EXEcutable exaMPLes ARchive
abstract
Searching for applications that are highly relevant to development tasks is challenging because the high-level intent reflected in the descriptions of these tasks doesn't usually match the low-level implementation details of applications. In this demo we show a novel code search engine called Exemplar (EXEcutable exaMPLes ARchive) to bridge this mismatch. Exemplar takes natural-language query that contains high-level concepts (e.g., MIME, data sets) as input, then uses information retrieval and program analysis techniques to retrieve applications that implement these concepts.
Mark Grechanik, Qing Xie 0003, Collin McMillan, Denys Poshyvanyk, Chad M. Cumby
ICSE (2)1
2010 Is Data Privacy Always Good for Software Testing?
abstract
Database-centric applications (DCAs) are common in enterprise computing, and they use nontrivial databases. Testing of DCAs is increasingly outsourced to test centers in order to achieve lower cost and higher quality. When releasing proprietary DCAs, its databases should also be made available to test engineers, so that they can test using real data. Testing with real data is important, since fake data lacks many of the intricate semantic connections among the original data elements. However, different data privacy laws prevent organizations from sharing these data with test centers because databases contain sensitive information. Currently, testing is performed with fake data that often leads to worse code coverage and fewer uncovered bugs, thereby reducing the quality of DCAs and obliterating benefits of test outsourcing. We show that a popular data anonymization algorithm called k-anonymity seriously degrades test coverage of DCAs. We propose an approach that uses program analysis to guide selective application of k-anonymity. This approach helps protect sensitive data in databases while retaining testing efficacy. Our results show that for small values of k = 7, test coverage drops to less than 30% from the original coverage of more than 70%, thus making it difficult to achieve good quality when testing DCAs while applying data privacy.
Mark Grechanik, Christoph Csallner, Qing Xie 0003
ISSRE1
2009 Maintaining and evolving GUI-directed test scripts
abstract
Since manual black-box testing of GUI-based applications (GAPs) is tedious and laborious, test engineers create test scripts to automate the testing process. These test scripts interact with GAPs by performing actions on their GUI objects. An extra effort that test engineers put in writing test scripts is paid off when these scripts are run repeatedly. Unfortunately, releasing new versions of GAPs with modified GUIs breaks their corresponding test scripts thereby obliterating benefits of test automation. We offer a novel approach for maintaining and evolving test scripts so that they can test new versions of their respective GAPs. We built a tool to implement our approach, and we conducted a case study with forty five professional programmers and test engineers to evaluate this tool. The results show with strong statistical significance that users find more failures and report fewer false positives (p < 0.02) in test scripts with our tool than with a flagship industry product and a baseline manual approach. Our tool is lightweight and it takes less than eight seconds to analyze approximately 1KLOC of test scripts.
Mark Grechanik, Qing Xie 0003
ICSE1
2009 Experimental assessment of manual versus tool-based maintenance of GUI-directed test scripts
abstract
Since manual black-box testing of GUI-based APplications (GAPs) is tedious and laborious, test engineers create test scripts to automate the testing process. These test scripts interact with GAPs by performing actions on their GUI objects. As GAPs evolve, testers should fix their corresponding test scripts so that they can reuse them to test successive releases of GAPs. Currently, there are two main modes of maintaining test scripts: tool-based and manual. In practice, there is no consensus what approach testers should use to maintain test scripts. Test managers make their decisions ad hoc, based on their personal experience and perceived benefits of the tool-based approach versus the manual. In this paper we describe a case study with forty five professional programmers and test engineers to experimentally assess the tool-based approach for maintaining GUI-directed test scripts versus the manual approach. Based on the results of our case study and considering the high cost of the programmers' time and the lower cost of the time of test engineers, and considering that programmers often modify GAP objects in the process of developing software we recommend organizations to supply programmers with testing tools that enable them to fix test scripts faster so that these scripts can unit test software. The other side of our recommendation is that experienced test engineers are likely to be as productive with the manual approach as with the tool-based approach, and we consequently recommend that organizations do not need to provide each tester with an expensive tool license to fix test scripts.
Mark Grechanik, Qing Xie 0003
ICSM1
2009 Guide: A GUI differentiator
abstract
Applications with Graphical User Interfaces (GUIs) are ubiquitous. Nontrivial GUI-based applications (GAPs) evolve frequently, and understanding how GUIs of different versions of GAPs differ is crucial for various tasks such as testing and project effort estimation. We offer a novel approach for comparing GUIs. We built a tool called GUI DifferEntiator (GUIDE) that allows users to visualize differences between GUIs of running GAPs automatically, so that the identified changes can be served as guidance to test the new release of the GAP or to estimate the effort of a project.
Qing Xie 0003, Mark Grechanik, Chad M. Cumby
ICSM2
2009 Inferring Types of References to GUI Objects in Test Scripts
abstract
Since manual black-box testing of GUI-based applications (GAPs) is tedious and laborious, test engineers create test scripts to automate the testing process. These test scripts interact with GAPs by performing actions on their GUI objects. Unlike conventional languages that require programmers to declare types of variables explicitly, test script statements reference GUI objects using their properties (e.g., location, color, size, etc). The absence of type information exacerbates the process of understanding test scripts, making maintenance and evolution of these scripts expensive and prohibitive, thus obliterating benefits of test automation. We offer a novel approach for type inference of GUI object references (TIGOR) in test scripts. TIGOR makes types of GUI objects explicit in the source code of scripts, enabling test engineers to reason more effectively about the interactions between operations in complex test scripts and GUI objects that these operations reference. We describe our implementation and give an algorithm for automatically inferring types of GUI objects. We built a tool and evaluated it on different GAPs. Our experience suggests that TIGOR is practical and efficient, and it yields appropriate types of GUI objects.
Mark Grechanik, Qing Xie 0003
ICST2
2008 REST: A tool for reducing effort in script-based testing
abstract
Since manual black-box testing of GUI-based APplications (GAPs) is tedious and laborious, test engineers create test scripts to automate the testing process. These test scripts interact with GAPs by performing actions on their GUI objects. An extra effort that test engineers put in writing test scripts is paid off when these scripts are run repeatedly. Unfortunately, releasing new versions of GAPs breaks their corresponding test scripts thereby obliterating benefits of test automation. We propose a tool called Reducing Effort in Script-based Testing (REST) for guiding test personnel through changes in test scripts so that they can use these modified scripts to test new versions of their respective GAPs. During demonstration of REST we will show how this tool enables test personnel to maintain and evolve test scripts with a high degree of automation and precision.
Qing Xie 0003, Mark Grechanik
ICSM2
2007 Automatic Test Generation From GUI Applications For Testing Web Services
abstract
Graphical User Interface (GUI) Applications (GAPs) are ubiquitous and provide various services. Since many GAPs are not designed to exchange information (i.e., intemperate), companies replace legacy GAPs with web services, that are designed to intemperate over the Internet. However, it is laborious and inefficient to create unit test cases to test the web services. We propose a novel approach for generating tests for web services from legacy GAPs. This approach combines accessibility technologies for accessing and controlling GAPs in a uniform way with a visualization mechanism that enables nonprogrammers to generate unit test cases for web services by performing drag-and-drop operations on GUI elements of legacy GAPs. We built a tool based on our approach, and we used this tool to generate unit test cases from different GAPs. We believe that our approach is unique, and our evaluation suggests that our approach is effective and it can be used to generate test cases from nontrivial GAPs.
Kevin M. Conroy, Mark Grechanik, Matthew Hellige, Edy S. Liongosari, Qing Xie 0003
ICSM2
2007 Finding errors in components that exchange xml data
abstract
Two or more components (e.g., objects, modules, or programs) interoperate when they exchange data, such as XML data. Using Application Programming Interface (API) calls exported by XML parsers remains a primary mode of accessing and manipulating XML, and these API calls lead to various run-time errors in components that exchange XML data. Currently, no tool checks the source code of interoperating components for potential flaws caused by third-party API calls that lead to incorrect XML data exchanges and runtime errors, even when components are located within the same application
Mark Grechanik
ASE1
2007 Smart: a tool for application reference testing
abstract
Graphical User Interface (GUI) APplications (GAPs) are ubiquitous and provide various services. Since many GAPs are not designed to exchange information (i.e., interoperate), companies replace legacy GAPs with web services, that are designed to interoperate over the Internet. However, it is laborious and inefficient to create unit test cases to test the web services.
Qing Xie 0003, Mark Grechanik, Matthew Hellige
ASE2
2007 Recovering and using use-case-diagram-to-source-code traceability links
abstract
Use case diagrams (UCDs) are widely used to describe requirements and desired functionality of software products. However, UCDs are loosely linked to source code, and maintaining traces between the source code and elements of UCDs is a manual, tedious, and laborious process. These traces help programmers to understand code that they maintain and evolve.
Mark Grechanik, Kathryn S. McKinley, Dewayne E. Perry
ESEC/SIGSOFT FSE1
2005 Using AOP to Monitor and Administer Software for Grid Computing Environments
abstract
Monitoring is a task of collecting measurements that reflect the state of a system. Administration is a collection of tasks for control and manipulation of computer systems. Monitoring and Administering computer Resources (MARS) in a distributed grid computing environment (i.e. a distributed environment for coordinated resource sharing and problem solving in dynamic, multi-institutional virtual organizations) is an important, expensive, and critical task. We present a novel solution based on applying crosscuts using binary rewriters and an event-based model that allows developers to create non-trivial MARS programs easily and uniformly. Our approach converts low-level API resource calls into system-wide events that MARS programs can monitor. This is accomplished by introducing advice that contains event-generating code at join points in programs that represent computer resources. We categorize low-level resource APIs by imposing a transactional metaphor to simplify the complexity of interactions between resources and to enable reasoning about MARS programs. We report both a case study and simulation that supports the viability of our approach.
Mark Grechanik, Dewayne E. Perry, Don S. Batory
COMPSAC (1)1
2004 Design of Large-Scale Polylingual Systems
abstract
Building systems from existing applications written in two or more languages is common practice. Such systems are polylingual. Polylingual systems are relatively easy to build when the number of APIs needed to achieve language interoperability is small. However, when the number of distinct APIs become large, maintaining and evolving polylingual systems becomes a notoriously difficult task. In this paper, we present a simple, practical, and effective way to develop, maintain, and evolve large-scale polylingual systems. Our approach relies on recursive type systems whose instances can be manipulated by reflection. Foreign objects (i.e. objects that are not defined in a host programming language) are abstracted as graphs and path expressions are used for accessing and manipulating data. Path expressions are implemented by type reification - turning foreign type instances into first-class objects and enabling access to and manipulation of them in a host programming language. Doing this results in multiple benefits, including coding simplicity and uniformity that we demonstrate in a complex commercial project.
Mark Grechanik, Don S. Batory, Dewayne E. Perry
ICSE1
2002 Integrating and Reusing GUI-Driven Applications
Mark Grechanik, Don S. Batory, Dewayne E. Perry
ICSR1