Gunnar Kudrjavets

Paranoia is a virtue

Is anyone (still) using CASE tools?

Last weekend I was reading "No Silver Bullet" again and as a direct result of this I accumulated number of pessimistic thoughts and therefore I'll rant about one specific thing for a while. In my mind I classify different software engineering methodologies, tools, and approaches into number of categories. One of them is called "esoteric stuff." For example, formal methods in software engineering belong IMHO under this category. Lately I’ve been thinking about moving CASE (Computer-Aided Software Engineering or use your favorite meaning for this acronym) tools under this class also. Why? I believe that generally the world of software development is mostly self-regulating. If something is good and causes better productivity then people use it and over the course of time more companies/people start incorporating "this something" into their processes. If something is good on paper, but doesn’t work IRL then eventually less and less people will use the technology and finally it’ll disappear from the radar screen. For myself I’ve found a couple of reasons to distance myself from CASE tools:

  • Use what you preach. With for example TDD being hyped and tools like NUnit it’s kind of cool to see that the NUnit developers use the same methodology they preach. If you look at NUnit community page you’ll see that they explicitly say "As such we will accept no code changes without associated tests." Die-hard Borland Delphi fans also remember the time about nine-ten years ago when Borland was hyping Delphi with "Delphi is written in Delphi" slogan (probably they still do). With CASE I haven’t found many references to the CASE tools where for example version n + 1 has been built using version n or the tool itself has been used during its own development. Possibly I’ve been just sloppy Google user, so if anyone has links to some articles or studies then please let me know.
  • Is anyone doing this? If I look around at work then I've never seen anybody composing models, generating code from diagrams, maintaining huge data repositories etc. During the entire first version of Speech Server I saw maybe less than ten different UML diagrams describing either architecture or detailed design of the system. Possibly this is something to be ashamed of or on the opposite, maybe we should be proud about this? I bet that Mel, A Real Programmer would definitely be proud of us ;-) Generally, if you look around, how much big software companies do you know who claim that they use CASE tools in their daily software development process? Again, before somebody slaps my wrist, possibly I’m just demonstrating my own ignorance. On a separate note, my copy of "Rise & Resurrection of the American Programmer" by Edward Yourdon includes a nice chapter called "The Microsoft Paradigm" where the some of the related things are discussed.

At the same time I could also make a couple of contra arguments:

  • There are still software companies producing CASE tools and selling successfully their products. Therefore somebody must be using these tools. I haven't bothered to search for huge amount of success stories, but I would assume that every vendor has a couple of them where for example thorough drawing of collaboration diagrams saved some software project ;-)
  • Classical "toolbox argument". Maybe CASE tools are just not applicable for the type of software my team is producing. Maybe if I would be working on something else I would spend my entire day on generating code from models?

Anyhow, as always there's no absolute truth and this is just one opinion amongst many. Today is apparently just anti-CASE day ;-)

P. S. Before somebody asks - I spent about three years working on daily basis with Oracle Designer, Rational Rose, Select Enterprise, and number of other modeling tools being my best friends and was once big believer in modeling. Thinking about this I even used to run UML seminar for graduate students. I guess the childhood is finally gone.

P. P. S. Martin Fowler has written a very interesting article called "Is Design Dead?" which poses some more fundamental questions and slightly touches modeling.

Posted: Sep 19 2004, 08:52 PM by gunnarku | with 6 comment(s)
Filed under:

Comments

Andrey Skvortsov said:

Thanks,very interesting point-I feel exactly the same;-)How about DSL/Whitehorse?
# September 20, 2004 2:55 AM

Gunnar Kudrjavets [MSFT] said:

Unfortunately I haven't had a time to play around with Visual Studio 2005 yet and try out the new design tools (therefore no experiences and opinions yet), but I think there's definitely lots of new cool stuff for all the enterprise developers.
# September 20, 2004 3:13 AM

TrackBack said:

# September 20, 2004 9:35 AM

PaulT said:

The Symbian OS use Rational quite a lot for design - the header files for some of the newer modules are generated straight from rose.
# September 22, 2004 9:52 AM

Tambet said:

After working several years with the same CASE tools as Gunnar I have found that a good toolkit/library/framework is always better than a code generator. Worst of the generated code is that there is no code reuse. All reuse occurs at model level, if at all. But no model can represent all the information that is in code. So you end up with reverse engineering, round-trips and such, basically just storing code in model. But that's the end of code reuse.

There is still one code generator that works for me. That's Qt's UI compiler (http://www.trolltech.com).
# September 24, 2004 11:39 AM

MikeG said:

What is your definition of CASE? In it's literal interpretation, any "Computer-Aided" tool can be considered a CASE tool. Ultimately, any tool that increases your productivity over manual methods can be labeled as "CASE". Using this definition, all UML tools with reverse-engineering capabilities would be considered a CASE tool.
Also, don't forget that the project is not finished until the documentation is complete, and any tool that helps the developer finish the design documentation is an aid to productivity.
In my experience, the productivity per source line of code (SLOC) using manual methods has not changed in 30 years. The average productivity for manually creating code is 1 SLOC per hour. Your overall productivity on a particular project depends on the amount of code reuse and autogeneration that you use. Most reusable code comes from previous versions of the software you're developing. For autogeneration, you need CASE tools. For example, if you're doing CORBA programming, you usually have a UML tool that autogenerates IDL from your class diagrams. Then the IDL generator for your ORB will autogenerate all the glue code for your application, plus the shell code to get you started.
As a final comment, I disagree that software development is self-regulating. Programmers like to program, even when it can be shown that a given tool will generate code faster. Good engineering requires discipline and skills that must be learned and applied. In addition, business practices affect the outcome of a project. Business perceptions and practices can often create tension and misunderstandings between the customer, management, and the development team. Perhaps that's why "The Mythical Man-Month", by Fred Brooks, is still a best seller today. In my experience, I found that most successful projects are not self-regulating, but rather depend on cooperative and proactive involvement from all parties. Tools are carefully selected to promote this successful interchange. The bottom line is cost and schedule, which are rarely self-regulated by the software development community.
# October 1, 2004 2:07 PM
Leave a Comment

(required) 

(required) 

(optional)

(required)