Broadly, my research interests revolve around software architecture and the use of architectural models in software engineering. Rather than being limited to design-time artifacts, architectural models can also be useful in implementing, maintaining, and evolving software systems.
Building toward this pervasive vision for the use of architecture, my current interests include: social aspects of software engineering; self-adaptive software architectures; architectural description languages and their accompanying tool support; self-adaptive robotic control systems; domain-specific architectural styles for robotics and sustainability technologies; decentralized peering architectures; and, systems-of-systems modeling.
Students: If you're interested in research opportunities and any or all of this sounds interesting to you, just drop me an email or come by my office and visit. We'll chat and see how to work out a research project for you.
Design Challenges and Stories
Design is a core activity in computer science and software engineering and it determines the function and quality of software systems. As a result, it is vitally important that computer science graduates possess strong design skills. Conventional curricula, however, do not adequately support design learning since they isolate the explicit study of design to only a few select courses while using ill suited instructional techniques. This project is aiming at significantly improving the strategies used to support design learning in computer science, through two key thrusts: The first is developing a modular instructional approach that enables students to use reflective learning in creating narratives we call design stories. The second thrust is developing an online repository, which allows educators to search, access, and contribute instructional materials that adopt the project's approach.
This research is supported in part by the National Science Foundation under Grant number DUE-1245427.
Runtime Architectural Visualization
Current practice in software engineering adopts a slew of visualization techniques for abstracting the complexity of software system structure, therefore supporting higher understandability. While techniques for visualizing software structure vary in appearance and in the semantic elements used, they are predominantly static -- even if they attempt to capture dynamic aspects of software operation. This newly-initiated project is focused on developing the next generation of architectural visualization techniques that both integrate animated elements showing runtime system behavior and also explore fundamentally different types of visualization approaches that leverage color and three-dimensional shapes to better support understanding the behavior and interactions of software module.
To date, our efforts have been focused on prototyping and experimenting with dynamic visualizations that both augment existing visualization methods with animation to depict runtime activity but also work that breaks the conventional box-and-arrow paradigm used in techniques ranging from the once-ubiquitous flowchart to the currently-ubiquitous Unified Modeling Language class diagram.