Abstract:Software development of knowledge-based systems is difficult. To alleviate this task we propose to apply software engineering techniques. This paper investigates BLOCKS, a component framework for designing and reengineering knowledge-based system inference engines. BLOCKS provides reusable building blocks common to various engines, independently on their task or application domain. It has been used to build several engines for various tasks (planning, classification, model calibration) in different domains. The approach appears well fitted to knowledge-based system generators; it allows a significant gain in time, as well as it improves software legibility and safeness.
MOTIVATIONOur objective is to facilitate operational knowledgebased system (KBS) implementation and evolution. Knowledge-based systems are mainly composed of three parts: a knowledge base storing expertise in a particular domain, a fact base containing facts about an end-user problem in this domain, and an engine, written by a software designer, performing inferences to solve the end-user problem based on the expert knowledge. For instance, if the task is to classify objects within a taxonomy, the knowledge base contains a description of the class hierarchy and features, the fact base a set of observed features concerning yet unclassified objects, and the engine implements an algorithm that infers the classes of the objects by traversing the class hierarchy. Building a KBS means to develop all the tools for both experts and end-users to interact with the system, such as inference engine, knowledge representation schemes, knowledge editors/verificators, etc. Each element by itself represents a great amount of code. Moreover, all elements must work together, although every one may evolve independently. So, not only developing new KBSs but also modifying them is a software engineering challenge. For both activities, designers have to convert a cognitive model, as expressed by experts, into a software model and eventually an operational system. This implies to bridge a large conceptual gap and recent software engineering techniques seem good candidates to support this task. Indeed, KBS software designers have little adapted support, much effort has been devoted to facilitate experts and end-users' tasks. Since the major modifications usually concern engines (changes in reasoning strategy) we focus this paper on a solution to allow easier building and reconfiguration of KBS engines by means of an extensible and reusable component framework.For a long time now, frameworks have been considered as a powerful tool for designing and building complex software systems in a rather economical and flexible way. Following this line, our framework, named BLOCKS, provides designers with building blocks to create engines at a level of abstraction higher than ordinary programming languages. It helps cope with model changes, ensuring programming security and rapid code production. Moreover, it provides a way to compare different reasoning strategies.After th...