JDJ asked Grady Booch of UML and Rational fame to answer your toughest questions. One of the original developers of the Unified Modeling Language (UML), Booch is recognized internationally for his innovative work in software architecture, modeling, and software engineering processes.
Arun Kumar: The AOP design method is improving a lot in project development phases. Can you suggest some methods for UML testing?
Grady Booch: There's a testing profile for the UML underway inside the OMG but, even now, the current practice is toward greater visualization in the testing process. From the outside in, this involves applying use cases and then their associated behavioral diagrams to assert a test case; from the inside out (meaning, in the debugging of a system), XDE has facilities to create sequence diagrams from a running system, thus facilitating tracking down errant behavior, even in a distributed system.
Sanjay Choudhary: I'm a great fan of yours and have been reading your books since 1996. My question is: Why do we need collaboration diagrams? When should we use them? I always try to convey my point using the sequence diagram. I read a couple of books but none gave a satisfactory answer.
Booch: I tend to use collaboration diagrams when it's important to indicate the structural relationships among objects; most of the time, I too use sequence diagrams, but when there are structural relationships among the associated objects, it helps to show them in collaboration.
James McGovern: As a series editor for a prestigious publisher, you are aware of the decline in the technology book marketplace. What should people be reading and publishers publishing?
Booch: As I walk down the aisles of Borders and Barnes & Noble (and the virtual aisles of Amazon), I notice a preponderance of books whose half-life can be measured in weeks or months, largely because they cover the same ground that associated product documentation addresses, albeit in some cases in a more approachable fashion. Some of these books are interesting and I certainly respect the labor that went into all of them, but there are only a small number of books that really cut at the fundamentals of building quality systems. I'm a voracious reader of both books and journals (and a few Web sites): on the book front, I always appreciate the classics (Knuth, Brooks, anything with Parnas in it); on the journal front I read a variety of professional and trade journals; on the Web front, I'm a regular visitor to Slashdot, ExtremeTech, and SourceForge.
Nenad Nikolic: What is the current situation in the field(s) of generating executable code from UML? To make this question broader, maybe some scriptable API can be scripted though a model in UML, or there is some UML derivative intermediate language? What does the future look like? Perhaps there's some strong advancement in this regard in a particular field, e.g., information systems or maybe network protocol drivers?
Booch: Your question is the very essence of model-driven development. Today we know how to generate code from a variety of structural and behavioral models from the UML; the current trend is toward direct executability of models, with the resulting code being, in essence, an assembly language that's invisible to the developer. The low-hanging fruit for this space lies in business rules, deployment, and schemas, where products exist that already do so. As for an intermediate representation, a lot of what's gone inside UML 2.0 tightens the underlying semantics and metamodel, and you'll see that bear fruit in tooling soon. EMF (the Eclipse Modeling Framework: http://dev.eclipse.org/viewcvs/indextools.cgi/
~checkout~/emf-home/main.html) is another good example of the trajectory toward richer underlying metamodels that play with the UML.
George Phillips: What do you think about Extreme Programming compared to the more traditional design approach that you favor? Do you think there's room for both in a good developer's toolkit?
Booch: I'm a founding board member of the AgileAlliance (www.agilealliance.org/home); I'm a strong believer in agile methods. In fact, at Rational, we've worked with Robert Martin's company to create an agile plug-in for the RUP. While I still have concerns about scale, what strikes me about agile methods in general is that they address many of the social dynamics among team members that amplify good engineering practice - test-driven development, pair programming, and the creation of a stream of executable releases are all really sound ideas. Kent Beck and I have publicly debated the issue, and I'd conclude that the focus on architecture is the one element that separates my world view from XP: in my experience, a focus on architecture first helps to drive out technical risk, but only when followed by a regular stream of executable releases; in Kent's world view, architecture is something that emerges.
Dennis Ceglenski: How does UML development process map to the traditional development process of data modeling, activities, and the interaction of the data and activities?
Booch: Let me start not with the process but with the architecture. In our world view, the architecture of a system involves many views that are woven together. One of these views (the logical view) addresses, among other things, the vocabulary of the problem space, and that in turn involves traditional schemas; another view (the component view) addresses the packaging of these things, such as into databases; the deployment view addresses the distribution of these physical databases through the system. From the process perspective in the RUP, you attack each of these views in parallel, driven by the highest risk. In some domains, it's possible to defer these traditional data decisions; in most others, it's an early and important part of the evolution and construction of a system.
Adeeb Khan: A software design validation tool - like running a Unit test in which the results are either success or failure - is there any such tool through which we can test a design for its scalability, concurrency control, security, and other architectural features? If there's not, what about the possibility of developing one, at least to validate some aspects of software architecture.
Booch: These nonfunctional requirements are typically attached to functional use cases, and so through these use cases you test these elements. As for performance, I suggest you look at the work by Lloyd Williams on modeling performance with the UML.
Bahram: In USDP what is the best time to fix a data model with the end user? What is the maximum iteration that we can have in medium-scale projects?
Booch: I have to plead ignorance as to what USDP is, sorry. As I indicated earlier, though, there's no "best time"...it really depends on the business and technical context, although if you are risk driven with validation through a stream of executable releases, you'll rarely go wrong. I have to offer a similar answer to your second question: it really depends on context, although I'd advise you to run your process with a regular rhythm of releases, each mapped to a set of use cases and each representing a successive refinement of the system's architecture.
Sajan Thomas: I'm not a good OO programmer and have more experience with DBA, data modeling, and conventional programming. My experience with UML is in using use cases and some UML modeling tools to generate diagrams. One thing I noted in the UML approach (I'm not sure of the validity of this question) is that it differs in relational data modeling in the representation of the one-to-many relationship. Is there any reason? Also, will the philosophy of UML grow to a level that helps us bring relational data, OO data, and OO programming under one umbrella? I don't see a clear way of getting it done using UML.
Booch: Take a look at the UML User Guide and you'll see some examples of traditional database modeling with the UML; also, you ought to read Eric Naiburg's book UML for Database Design on the same topic.
David E. Gonzalez: What is your opinion on the future of UML, Java, XML, or any other technology. Do you see the possibility of some kind of "grand unifying" approach to these flexible, portable, and open technologies? In addition, where can I find some real-world examples of UML applications for teaching purposes?
Booch: Well, Java's not the last language, although it may be Scott McNealy's last language...
The UML has very much entered the mainstream of development; model-driven development will drive the UML even deeper into various parts of the development process. My personal opinion is that we won't see a purely executable UML, but rather it will coexist with traditional textual languages. In the longer term, I'm keeping my eye on aspect-oriented development, which addresses issues of cost-cutting concerns.
As for teaching resources, Rational has a university program (SEED), www.rational.com/corpinfo/college_relations/seed/index.jsp, and you may find what you're looking for there.
Joe: What are your thoughts on the usefulness and realities of solutions that claim to automatically take you all the way from a UML model to a generated complete Web application solution? Are they real or pipe dreams?
Booch: For certain well-defined domains and platforms these things are a reality (note Rational's architected rapid application development tools). The general solution, however, is hard, although the UML 2.0 semantics go a long way to help make this possible for broader domains.
Joe: Rational's UML Resources Site hosts the 1999 PDF of UML Web Modeling extensions, and there's Jim Conallen's recently updated book on the subject, but that appears to be about all I can find on Web Modeling Extensions (the 1999 PDF says to look at the Rational UML site for updates, but none can be found). Are the Web Modeling Extensions actually useful for real-world Web modeling? (The book and PDF appear to be geared more toward MVC1 JSP-based designs than to MVC2 controller-based designs). If you guys think this stuff is useful for Web application design, it would be great if you updated it to reflect where J2EE is going with MVC2 designs (e.g., Struts-based apps and so on).
Booch: I'll let Jim and our Webmasters know!
There's some interesting work going on in the modeling of Web services with the UML, by the way.
Brian Wintz: There seems to be an ongoing battle over development processes - waterfall is viewed as too heavy and inflexible whereas agile/Xtreme/iterative seem to be in vogue. It seems to me that this often heated debate over which is the right approach tends to focus more on personal opinion than on substance. I'm inclined to believe that each development approach has its strengths and weaknesses - speed to market, quality of product, and cost to develop. Could you provide some insight about development processes?
Booch: The pendulum swings every now and then from high-ceremony to low-ceremony processes. I think the RUP has the right balance: architecture first, followed by the iterative and incremental growth of that architecture through a series of executable releases. In general, it's a matter of balance: those organizations that tend to favor high-ceremony, waterfallish processes tend to be afraid of confronting risks and producing executable products, and so often hide behind a process; those who tend to favor low-ceremony processes tend to be allergic to control, predictability, and repeatability.