1.1 Moose in a nutshell
Moose is a generic platform for engineers that want to understand data in general, and software systems in particular. From a conceptual point of view, Moose is organized as follows.
The input is always some piece of data. By data, we understand all sorts of structures that contain objects, properties and relations. For example, a software system written in Java. Or, a set of configuration files written in XML. Or, some meta-data about your system.
Introduce an example of importing from Java and explain the Moose components using this example
This data is loaded in Moose via importers. In Moose, you can import data from various sources and in various formats. For example, Moose can handle importing the structure of software systems written in various programming languages either through internal importers (e.g., Smalltalk, XML, MSE), or through external ones (e.g., Java, JEE, C++).
The importing of data is a rather unexciting step, but a necessary one. Once imported, the data is stored in models. This is where things get more interesting, because on top of these models you can start performing various kinds of analyses.
What do we mean by analyses? Tons of metrics, a multitude of queries, various data mining and graph-based algorithms, duplication detection, interactive visualizations of all sorts, or data browsers. There a multitude of basic services like these provided by default. These tools can be applied interactively, and can be combined to produce more complex analyses such as: computation of dependency cycles, detection of high level design problems, identification of exceptional entities and so on. A key concept is that the results obtained after applying a specific analysis are fed back into the model and are available for further analysis. This enables an iterative process through which the analysis is built and refined gradually.
But, Moose is more than a tool. Moose is a platform. This is not just marketing, but it actually means that it helps you build your own tools. This is achieved by means of several engines through which you can control and customize the complete analysis workflow. In particular, you can:
- build new importers for new data sets,
- define new models to store the data, and
- create new analysis algorithms and tools such as: complex graph visualizations, charts, new queries, or even complete browsers and reporting tools altogether.