The unknown system that we shall analyze is concepts, a tool that implements concept analysis. Concept analysis is a mathematical technique to analyze binary relations.
Concepts is a medium-sized system written in C. The author is Christian Lindig who developed it during his Ph.D. research at the University of Braunschweig. The tool is being used world-wide in the reengineering community. It is fairly well designed and implemented and may not show the symptoms of typical legacy systems. In particular, its consequent naming convention helps you to understand the system even if you are neither familiar with the system itself nor with its application domain.
We are using this system because it is still of manageable size for this kind of tutorial but not at all trivial. It allows us to show all facets of the Bauhaus toolkit. Bauhaus itself has been successfully applied to large industrial system up to 1.5 MLOC; but systems of this size require much more time than what is available for a tutorial.
Here is an excerpt from the man page of concepts, the only available user documentation:
concepts [ -o file ] [ -f format ] -c | -g | -G | -a | -s [file] calculates a lattice of concepts from a binary relation and outputs the result in a user specified format. Concept lattices are also known as Galois lattices. The relation associates objects with attributes. The input is read either from stdin or from file; output is written to stdout or to a file specified by the -o option. The format of the output is controlled by a format string supplied by the -f option. Beside all concepts, concepts can compute the arrow relation over the input, the number of concepts, and can create output suitable as graphplace input to print the structure of the concept lattice.The source files of this system are contained in two directories:
|directory||# file type||lines of code|
|lib||4 header files (.h)||256|
|4 C files (.c)||1.494|
|src||11 header files (.h)||447|
|10 C files (.c)||5.758|
Last modified: Tue Aug 26 14:32:43 MET DST 2003