Complex Software Systems

Complex software systems are required in telecommunications, control systems, biomedical engineering, bioinformatics, and reservation systems amongst others. These are usually large-scale software systems where the interaction with their environment is a critical feature. Two major obstacles to the development of such systems are complexity and change. Complexity makes it difficult for developers to achieve intellectual control over their task because of the myriad of details and the intricate dependencies amongst the items of information. Change makes it difficult for developers to achieve intellectual control over their task because their model of the system is forever becoming obsolete, and the combination of new and old information just increases complexity.

We are interested in building and evolving high-quality systems quickly by reusing the experience captured in design artifacts such as software architectures, object-oriented application frameworks, and design patterns.

Our work is done mainly in C++, and involves building actual systems.


Object-Oriented Frameworks

Frameworks offer a concrete realization of a product line. A framework is an architecture, plus an implementation, plus documentation that capture the intended use of the framework for building applications. A framework provides a highly effective mechanism for software reuse within an application domain. The framework captures the features that are common across the product line. In return for relinquishing some design authority, the developer can build a new application faster by hooking to the framework just the code that is unique to the new application.

The Know-It-All Project is investigating methodologies for the development, application, and evolution of frameworks. A concrete framework for database management systems is being developed as a case study for the methodology research. The methodology revolves around a set of models for the domain, the functionality, the architecture, the design, and the code. These models reflect the common and variable features of the domain. There is a set of alignment maps between models that provides traceability while preserving commonality and variability. The methodology under development is called cascaded refactoring. It is an issue-driven process of restructuring and extension of a coherent set of (partial) models of the domain and the framework.

The Know-It-All project, which has been underway at Concordia University since 1997, has three sets of aims:

  1. to research methodologies and models for framework development, application, and evolution;
  2. to develop a framework for database managements systems, supporting a variety of data models of data and knowledge, the integration of different paradigms, and heterogeneous databases; and
  3. to apply the Know-It-All framework to advanced database applications for bioinformatics.
The research on software methodology in an academic setting needs a concrete case study in order to evaluate the methodology and models; the framework case study needs to be evaluated by creating real applications. For us the database framework is a case study to validate our methodology, while the applications to bioinformatics allow us to validate the database framework.


The Know-It-All Framework

The Know-It-All is an object-oriented framework for database management systems. It is written in C++, with some Java for user interfaces, and XML for communication of data between the C++ framework and the Java tools. The user interfaces will provide a full range of query mechanisms, from icons for canned queries, to forms, to textual queries in set comprehension languages, and diagrammatic queries.

From a database perspective, our aim is to provide support for all data models, integrated and hetereogeneous databases, and eventually support for incomplete and uncertain data. The current prototype covers the relational data model. Our short-term goal is to add deductive databases and graph databases, thus providing diagrammatic queries to support applications in bioinformatics.


Truckin'

Truckin' is a platform for researching the application of evolutionary programming to software development. The aim is to "evolve" reliable robust software able to operate in many contexts and to adapt to change. The kind of software that we envisage will be capable of modifying its behaviour in response to changes in its environment. Changes may come from users whose demands on the system alter as they learn to use it more effectively. Other changes may come from other systems or system components, as when a network router adapts its behaviour to changing loads or faults in another part of the network.

Truckin' simulates the economy of a small ``country'' in which trucks cooperate with retailers to transport goods from producers to consumers. Trucks and retailers evolve with the goal of maximising their individual profits. The simulation as a whole tends towards an optimum at which flows are maximised. It should be able to respond to external perturbations and even radical changes by moving to a new optimum without catastrophic failure.


Last modified on July 31, 2001 by gregb@cs.concordia.ca