Research Interests


Research Projects

Community-based Software Testing

Component integration rather than from-scratch programming increasingly defines software development. As a result, software developers often play diverse roles, including that of a component provider -- packaging a component for others to use, a component user -- integrating other providers' components into their software, and a component tester -- ensuring that other providers' components work as part of an integrated system. This project explores the conjecture that testing resources can be better utilized by focusing not just on individual component-based systems, but on groups of systems that form what we refer to as loosely-coupled software development communities, meaning a set of independently-managed systems that use many of the same components.

This project focuses on the following aspects:

  • Developing a set of metrics to quantify overlaps and synergies in testing software component assemblies;
  • Designing and implementing an information sharing system to store and exchange component testing data, which allows different software testing tools to coordinate their tasks;
  • Proposing different testing strategies across the community to either obtain better results or reduce effort.

Conch Framework Diagram
Web-service Based Information Sharing Repository

Rachet - Compatibility Testing of Component-based Systems

Modern component-based systems are typically composed of multiple components, where each component can have multiple versions, evolves over time, and may be developed by independent groups of developers. Since each possible combination of the components and their versions may be realized on an end-user's machine, testing the compatibility of multi-component based systems on top of possible field configurations is very important to improve system quality, and also to rationally manage support activities. However, the large number of potential field configurations makes it very difficult for developers to perform large-scale compatibility testing, so developers often pare down the test set to a small number of popular or default configurations and also must customize the configurations manually.

This project aims at developing methods and a tool called Rachet to support large-scale compatibility testing of evolving component-based systems. The research has so far focused on testing for correct builds of components in various configurations, but supporting functional tests will also be the objective of the Rachet project.

Rachet Framework Diagram
Rachet Software Architecture
(Rachet Project Page)

Professional Services

  • External Reviewer of 2013 International Conference on Parallel Processing - The 42nd Annual Conference (ICPP-2013), Ecole Normale Superieure de Lyon, Lyon, France, Oct. 2013
  • External Reviewer of 24th International Symposium on Computer Architecture and High Performance Computing (SBAC-PAD'2012), New York City, USA, Oct. 2012
  • External Reviewer of The 8th IEEE International Conference on eScience (eScience 2012), Chicago, Illinois, USA, Oct. 2012
  • External Reviewer of The 5th International Conference "Distributed Computing and Grid-technologies in Science and Education" (GRID'2012), Dubna, Russia, Jul. 2012
  • External Reviewer of International Conference for High Performance Computing, Networking, Storage and Analysis (SC11), Seattle, WA, USA, Nov. 2011


CMSC714: High Performance Computing Systems

Teaching Assistant, Fall 2012
CMSC 714 talks about selected topics in high-performance systems, including contemporary architectures, interconnection topologies, shared memory and message-passing systems, multi-threaded kernels, latency avoidance and hiding techniques, methods for data and workload partitioning, performance profiling, debugging.

CMSC216: Introduction to Computer Systems

Teaching Assistant, Spring 2010
CMSC 216 (former CMSC313) aims to convey the fundamental concepts that enable programs to execute on real hardware. Those concepts include how the operating system virtualizes the hardware to provide basic services and abstractions to enable a user program to effectively use the available hardware resources. The course also addresses how different programming constructs and idioms work.

CMSC102: Introduction to Information Technology

Teaching Assistant, Fall 2009
CMSC102 provides a historical and practical introduction to computer and network terminology, applications, and concepts. Students will have hands-on experience with a variety of tools available to find and access information on the Internet, to exchange information between computers, and to perform basic web design. Students will explore applications (such as browsers and spreadsheets) as well as different computing environments (such as Windows and UNIX). There will be discussions of social, legal, and ethical issues related to technology.