Knowledge Discovery Metamodel: Brief Summary
KDM specifies a comprehensive set of common concepts required for understanding existing software systems in preparation for software assurance and modernization and provides infrastructure to support specialized definitions of domain-specific, application-specific, or implementation-specific knowledge.
The above figure illustrates the layers of the KDM specification and shows dependencies between KDM packages by arranging packages into a stack. Each package depends on one or more packages at the lower layers of the stack. In particular, each KDM package depends on the Core package. The nature of this dependency is that the meta-elements defined by each package are subclasses of one of the core classes. Also, each package depends on the kdm package. Each KDM package above the kdm package defines a KDM model, which corresponds to a certain facet of knowledge about existing software system. The Kdm package provides the infrastructure for all KDM models. The nature of the dependency on the kdm package is twofold. First, each package defines a subclass of the KDMModel class, defined in the kdm package. Second, each kdm package provides several concrete classes that are instantiated in each KDM representation as part of the infrastructure. kdm package defines several important mechanisms that are used by all KDM models: the annotation mechanism, the mechanism of user-defined attributes and the light-weight extension mechanism. The meta-model elements that support these mechanisms can be instantiated by any KDM model.
The Source package and the Code package of the Program Elements Layer represent the most fundamental, primitive knowledge about existing software systems. Most pieces of this knowledge are explicitly represented by the original source code of the existing software system. It is expected that KDM implementations extract this kind of knowledge automatically, for example by implementing a bridge to an existing software development environment. Such bridge provides a mapping from the programming language (or languages) used for the development of the existing software system, to a language-independent KDM representation, that can be further analyzed and transformed by various KDM tools.
Packages of the Runtime Resource Layer represent higher-level knowledge about existing software systems. Most pieces of this knowledge are implicitly represented by the original source code of the software system and the corresponding configuration and resource descriptions. This kind of knowledge is determined not by the syntax and semantics of the programming language (or languages) used for the development of the existing software system, but by the corresponding runtime platform. Incremental analysis of the primitive KDM representation may be required to extract and explicitly represent some of these pieces of knowledge. KDM implementations of the corresponding packages define a mapping from the platform-specific artifacts to a language- and platform-independent KDM representation, that can be further analyzed and transformed by various KDM tools.
Packages of the Abstractions Layer represent even higher-level abstractions about existing software, such as domain-specific knowledge, business rules, implemented by the existing software system, architectural knowledge about the existing software system, etc. This knowledge is implicit, and often there is no formal representation of such knowledge anywhere in the artifacts of the existing software system (and often, even in the documentation). Extracting this kind of knowledge and part of the integrated KDM representation usually involves input from experts and analysts.
- The Core package defines the basic abstractions of KDM
- The Kdm package provides static context shared by all KDM models
- The Source package defines the inventory of the physical artifacts of the existing software system and references to the source code
- The Code package defines the low-level building blocks of application source files, such as procedures, datatypes, classes, etc. (as determined by a programming language)
- Action package defines end points of relations, and the majority of KDM relations
- Platform package defines artifacts, related to the run time platform of the enterprise application
- UI package defines the user-interface aspects of the application
- Event package defines a common concept related to event-driven programming
- Data package defines the persistent data aspects of an application
- Structure package defines the architectural components of existing application, subsystems, layers, packages, etc.
- Conceptual package defines the domain-specific elements of an application
- Build package defines the artifacts related to engineering of an application