My research interests are in the field of software engineering. A common theme, and long-term goal, of my research is development and evolution of reliable, highly adaptable, distributed, large-scale software systems. Practitioners have traditionally faced many problems with achieving support for software reuse, reconfiguration, and extension in a manner that preserves desired system properties and relationships. These problems are becoming even more important with the recent emergence of small, resource-constrained, and highly-mobile computing platforms. The main hypothesis of my research is that an explicit architectural focus can remedy many of these difficulties. I therefore focus on software architectures as a key to developing mechanisms for engineering reliable, flexible, highly-distributed, large-scale software. Architectures present a high-level view of a system, enabling developers to abstract away the unnecessary details and focus on the “big picture.” My work to date has investigated a wide range of issues in the area of software architectures: software (re)deployment, architectural middleware, architecture-based software evolution, self-healing systems, and architecture-level configuration management. Each one of these areas is described below.

Software (re)deployment

My dissertation research focuses on techniques for supporting disconnected operation of distributed systems, i.e., improving the availability of distributed systems in the face of (temporary) network failures. I have extensively studied existing disconnected operation techniques in the areas of distributed file systems, database systems, code mobility, and ad-hoc networks. This study has resulted in a preliminary taxonomy of the existing techniques and identification of the areas they do not adequately address [1]. A key observation about distributed systems is that the assignment of software components onto hardware nodes (i.e., a system’s deployment architecture) greatly influences the system’s availability in the face of connectivity losses. However, determining a software system’s deployment that will maximize its availability is an exponentially complex (NP-hard) problem that depends on a number of system parameters: frequencies of interaction among software components, volumes of data exchanged among them, the components’ memory requirements, reliabilities and bandwidths of connections among hardware hosts, available memory on each host, and so on. I have developed a suite of polynomial-time approximation algorithms that improve system-wide availability while taking into account the above system parameters [3]. These algorithms have experimentally shown very good performance. I have also implemented an environment that allows observation of the effects of modifying system parameters (e.g., network connectivity, interaction frequency) at runtime and comparison of the behavior, performance, and precision of different algorithms. In order to automate the simulation of different deployment architectures, the environment supports automatic generation of canonical components with desired processing delays, network links with desired reliability and bandwidth, hosts with desired memory and CPU characteristics, and so on [2,3].

Publicatons in this area:

  1. Marija Mikic-Rakic and Nenad Medvidovic. Toward a Framework for Classifying Disconnected Operation Techniques. In Proceedings of the Second International Workshop on Software Architectures for Dependable Systems (WADS’03) , Portland, Oregon, May 2003. (PDF)

  2. Marija Mikic-Rakic and Nenad Medvidovic. Architecture-Level Support for Software Component Deployment in Resource Constrained Environments. In Proceedings of the First International IFIP/ACM Working Conference on Component Deployment (CD’02) , Berlin, Germany, June 2002. (PDF )

  3. Marija Mikic-Rakic and Nenad Medvidovic. Software Architectural Support for Disconnected Operation in Highly Distributed Environments. Technical Report USC-CSE-2003-506 , Center for Software Engineering, University of Southern California, 2003. (PDF)

  4. Marija Mikic-Rakic, Sam Malek, and Nenad Medvidovic. Improving Availability in Large, Distributed, Component-Based Systems via Redeployment. Technical Report USC-CSE-2003-515 , Center for Software Engineering, University of Southern California, 2003. (PDF)

  5. Marija Mikic-Rakic and Nenad Medvidovic. Software Architectural Support for Disconnected Operation in Highly Distributed Environments. International Symposium on Component-Based Software Engineering (CBSE7), Edinburgh, UK, May 2003.(PDF)

  6. Marija Mikic-Rakic, Sam Malek, Nels Beckman, and Nenad Medvidovic. A Tailorable Environment for Assessing the Quality of Deployment Architectures in Highly Distributed Settings. 2nd International Working Conference on Component Deployment (CD 2004), Edinburgh, UK, May 2004. (PDF)

  7. Marija Mikic-Rakic and Nenad Medvidovic. Support for Disconnected Operation via Architectural Self-Reconfiguration. International Conference on Autonomic Computing (ICAC’04), New York, May 2004.(PDF)

  8. Marija Mikic-Rakic, Sam Malek, Nels Beckman, and Nenad Medvidovic. Improving Availability of Distributed Event-Based Systems via Run-Time Monitoring and Analysis. ICSE/DSN 2004 Twin Workshop on Architecting Dependable Systems (WADS 2004), Edinburgh, UK, May 2004, and Florence, Italy, June 2004.(PDF)


Architectural middleware

To be truly useful in a development setting, software architectures must be accompanied by support for their implementation. This is particularly important in the context of highly distributed, decentralized, mobile, and long-lived systems, where there is an increasing risk of architectural drift unless there exists a clear relationship between the architecture and its implementation. As part of my dissertation research I have worked on the design and implementation of Prism-MW, a highly extensible, efficient, and scalable middleware platform that supports implementation of distributed, mobile, and resource-constrained systems in a number of architectural styles (e.g., pipe-and-filter, client-server, publish-subscribe, peer-to-peer). I have leveraged Prism-MW’s extensibility to develop implementation-level support for the problem of disconnected operation discussed above, including component deployment, system monitoring, component mobility, and runtime system reconfigurability. Prism-MW has been used in several courses at USC, and successfully evaluated by two industrial organizations.

Prism web site

Publicatons in this area:

  1. Nenad Medvidovic, Marija Mikic-Rakic, Nikunj Mehta, and Sam Malek. Software Architectural Support for Handheld Computing. Cover feature in IEEE Computer , September 2003. (PDF )

  2. Nenad Medvidovic and Marija Rakic. Exploiting Software Architecture Implementation Infrastructure in Facilitating Component Mobility. In Proceedings of the Software Engineering and Mobility Workshop , Toronto, Canada, May 2001. (PDF )

  3. Nenad Medvidovic and Marija Mikic-Rakic. Programming-in-the-Many: A Software Engineering Paradigm for the 21st Century. Workshop on New Visions for Software Design and Productivity: Research and Applications , Nashville, Tennessee, December 2001. (PDF )

  4. Nenad Medvidovic, Nikunj R. Mehta, and Marija Mikic-Rakic. A family of software architecture implementation frameworks. In Proceedings of the 3rd IFIP Working International Conference on Software Architectures , Montreal, Canada, August 2002. (PDF )

  5. Marija Mikic-Rakic and Nenad Medvidovic. A Connector-Aware Middleware for Distributed Deployment and Mobility. In Proceedings of the ICDCS Workshop on Mobile Computing Middleware (MCM’03) . Providence, Rhode Island, May 2003. (PDF )

  6. Marija Mikic-Rakic and Nenad Medvidovic. Adaptable Architectural Middleware for Programming-in-the-Small-and-Many. In Proceedings of the ACM/IFIP/USENIX International Middleware Conference (Middleware 2003) , Rio De Janeiro, Brazil, June 2003. (PDF )

  7. Nenad Medvidovic, Marija Mikic-Rakic and Sam Malek. Software Architectures for Embedded Systems. In Proceedings of the Monterey Workshop Series – Workshop on Software Engineering for Embedded Systems: From Requirements to Implementation. Chicago, Illinois, September 2003. (PDF )


Architecture-based software evolution

I have investigated a specific instance of software evolution which involves component upgrade, i.e., incorporating into a system a new version of an already existing component. Prior to performing component upgrade it is important to assess the behavior of a new component version, including whether the new version correctly preserves the functionality carried over from the old version, whether the new version introduces new errors, whether there is any performance discrepancy between the old and new versions, and so forth. Specifically, I have designed and developed special-purpose software connectors, called multi-versioning connectors (M-V-Cs), to ensure dependable system composition and evolution. M-V-Cs allow multiple versions of a component to execute “side-by-side” in the deployed system. M-V-Cs unintrusively collect and analyze the execution statistics of multiple component versions and perform comparisons of their performance (i.e., execution speed), reliability (i.e., number of failures), and correctness (i.e., ability to produce expected results). Although this thread of research has resulted in several publications, it has not been the focus of my dissertation, and a number of issues remain to be explored.

Publicatons in this area:

  1. Marija Rakic and Nenad Medvidovic. Increasing the Confidence in Off-the-Shelf Components: A Software Connector-Based Approach. In Proceedings of the 2001 Symposium on Software Reusability (SSR 2001) , Toronto, Canada, May 2001. (PDF)

  2. Marija Mikic-Rakic and Nenad Medvidovic. Architecture-Level Support for Software Component Deployment in Resource Constrained Environments. In Proceedings of the First International IFIP/ACM Working Conference on Component Deployment (CD’02) , Berlin, Germany, June 2002. (PDF)

Architecture-level configuration management

As part of a collaborative effort related to my work on M-V-C, I have participated in the design and implementation of an architecture evolution environment, called Mae. Mae facilitates an incremental design process in which all changes to architectural elements are integrally captured and related. This project has resulted in a rich system model that combines architectural concepts with those from the field of configuration management. This system model has been shown to enable precise capture of system characteristics needed to support architectural evolution. While this is not a part of my immediate research goals, I intend to integrate Mae with my disconnected operation support to enable integrated architecture-level system modeling, analysis, implementation, deployment, and evolution.

Mae web site

Publications in this area:

  1. André van der Hoek, Marija Rakic, Roshanak Roshandel, and Nenad Medvidovic. Taming Architectural Evolution. In Proceedings on the Joint 8th European Software Engineering Conference and 9th ACM SIGSOFT Symposium on the Foundations of Software Engineering (ESEC/FSE 2001) , Vienna, Austria, September 2001. (PDF)


Self-healing systems

In order to improve the understanding of the emerging class of large, complex, mobile, distributed, but frequently resource-constrained systems, I have also worked on identifying the characteristics of architectural styles suitable for self-healing systems. Self-healing systems are an emerging class of software systems that exhibit the ability to adapt themselves at runtime to handle situations such as resource variability, changing user needs, and system faults. As part of this study, I have identified a set of requirements that an effective style for self-healing systems should satisfy, and have classified these requirements along five dimensions I have identified as distinguishing characteristics of architectural styles: external structure, topology rules, behavior, interaction, and data flow. One aspect of self-healing I have specifically focused on in my thesis research is support for disconnected operation. However, many other aspects of self-healing remain open research questions.

Publications in this area:

  1. Marija Mikic-Rakic, Nikunj R. Mehta, and Nenad Medvidovic. Architectural style requirements for self-healing systems. In Proceedings of the First Workshop on Self-Healing Systems , Charleston, South Carolina, November 2002. (PDF)