Learn Object-Oriented (OO) Analysis with Generative Analysis (GA)
I have been teaching OOAD to commercial and academic clients for many years now, and one of the things that I have noticed repeatedly is that even after the best OOAD course in the world, it still takes software engineers many months to become credible OO analysts. In fact, leading training companies estimate that after an OOAD course, an analyst might need up to a year working in OOAD before being considered a "good" analyst.
This figure of up to a year has bothered me for a long time. Given the rate at which software engineering moves forward, a year is an incredibly long time. Why does it take so long? A glib but rather unhelpful answer is that analysts need to gain practical "experience" of OOAD before they achieve excellence. This is like most activities in life—there is just no substitute for experience. Or is there?
Surely if you can analyze and identify the constituents of "experience" and teach them in an effective way, you should be able to short-circuit the process, at least to some degree. Perhaps it’s even possible to create good (if not excellent) OO analysts in a matter of weeks, rather than months or even years.
This is exactly and precisely what my wife Ila and I set out to do in our forthcoming book Secrets of Analysis [Arlow 1]. The approach we have taken is to analyze the constituents of the experience of excellent OO analysts, create a model for this experience, and then find ways to teach it effectively. It’s been an interesting journey, and along the way I have learned much about my own modeling approach—in particular, I have learned how I model effectively.
In this article, I’ll discuss one of the secrets of OO analysis: generative analysis (GA). GA isn’t just another analysis technique; instead, GA is about learning to be an analyst. The essence of this is learning to approach information in an effective, intelligent manner. GA is a general tool that can be used with any analysis technique you happen to be using, be it use case modeling, class modeling, or activity modeling. It’s also entirely applicable to non-OO modeling, although that’s really outside the scope of this article.
Because GA is a fairly detailed approach, I can’t cover it all here. In particular, I don’t have space to cover M++ (a pattern language for human communication in analysis) in detail. Instead, I intend to give you a useful yet broad overview of GA that I might follow up with more detailed articles in the future.
What is GA?
OO analysis begins with the gathering and analysis of unstructured information. In fact, you can view the whole software engineering process as a process of transformation in which informal, unstructured information is transformed by analysis and design into information that is sufficiently structured and formal that it can be executed by a computational system.
When you look at methodologies such as the UP, you see that these methodologies give you many ways of structuring information once you have it (as use cases, etc.), but they have little to say about how you analyze informal, unstructured information. For example, how do you get from something as informal and unstructured as a user interview to something like a use case or class diagram? This is one of the missing pieces that analysts generally acquire through hard experience.
GA addresses unstructured, informal information head on. In fact, it assumes that the majority of the information you acquire in your analysis activities is as follows:
- Partial—Essential information is deleted
- Inaccurate—Essential information is distorted
- Generalized—Essential information is modified by rules and beliefs about the world that might or might not be true
As we discuss in Secrets of Analysis, this is merely a restatement of the three filters that Noam Chomsky [Chomsky 1] says characterize all human communication: deletion, distortion, and generalization.
Based on the assumptions of informal, unstructured information; and deletion, distortion, and generalization, GA provides you with the following tools:
- Specific ways to capture unstructured, informal information
- Specific ways to organize unstructured, informal information
- Specific techniques to recover deleted, distorted and generalized information
- A set of transformations to generate high-quality information from low-quality information
The last bullet is the "generative" part of GA; information of low quality and low value is transformed by specific analysis techniques to information of high quality and high value. You perform GA recursively on information until it has the quality you need to move on to some more formal approach such as class modeling.
In Secrets of Analysis, we present GA quite formally to make it teachable and learnable. However, GA is really more about learning an attitude and a set of internalized approaches to information rather than any formal technique.
We’ll take a quick look at the various aspects of GA over the next few sections, starting with capturing unstructured, informal information.