December 2005

Monthly Archive

innerworkings season’s greetingsInnerWorkings would like to take this opportunity to wish all our customers, partners, and employees a happy and peaceful holiday season. It has been a pleasure working with you over the past 12 months and we’re excited about the year ahead!

We’d also like to extend our best wishes to the entire .NET developer community over the holiday season. Thanks for your collective dedication and invaluable product feedback - we look forward to working with each and every one of you in 2006.

Best regards,

The InnerWorkings Team

Add this post to: del.icio.us:Season's Greetings From InnerWorkings digg:Season's Greetings From InnerWorkings spurl:Season's Greetings From InnerWorkings simpy:Season's Greetings From InnerWorkings newsvine:Season's Greetings From InnerWorkings blinklist:Season's Greetings From InnerWorkings furl:Season's Greetings From InnerWorkings reddit:Season's Greetings From InnerWorkings Y!:Season's Greetings From InnerWorkings google:Season's Greetings From InnerWorkings technorati:Season's Greetings From InnerWorkings stumbleupon:Season's Greetings From InnerWorkings windowslive:Season's Greetings From InnerWorkings

If you consider domain specific modeling products as simply glorified code generation tools, you might get away with just rushing through the product documentation and jotting down the first thing that comes to your mind.

However, as vendors are becoming more successful in fulfilling the promise of enabling people within organizations to model their own domain specific languages, many are realizing that simply mastering the features (and limitations) of a particular modeling tool is manifestly insufficient.

I’m certainly not trying to classify such tools as interchangeable commodities; in fact, I speculate that, at least for the next few years, the choice of one tool versus another could easily contribute to the failure of a project.
There are already several documented cases of organizations that use modeling tools to drive entire product lines with enormous success. Frankly, I just assume that the very same tools have been employed within different realities with opposite results.

One of the goals for DSL authors is to generate as much code as possible whilst hiding implementation details behind reasonably flexible models and notations. This goal presents challenges that go beyond the tool in use.

If it is that hard, who should create DSLs? Will organizations need to create a specialized development role as some are arguing?
It is realistic to assume that experienced developers/architects who fully understand the domain and have been involved in the development of enterprise frameworks are the natural candidates for authoring well thought DSLs for an individual organization.

On the other hand, there is a danger that such authors might treat DSLs exactly like class frameworks, without realizing that the forces at work are significantly different.

When building frameworks we don’t necessarily know how our components will be consumed. For example, if we create a custom control and omit to expose a particular event, the entire control might turn out to be totally unsuitable for a whole category of users. It is then reasonable to take a “safe” approach by adding extra options, in the form of events, method overloads, extra parameters, extensibility patterns, etc.

However, using this tactic for DSLs would lead us to create “flexible” implementations of a language through the introduction of (superfluous) configuration/customization options to our models, without considering that every time we add an extra element, attribute or connection to a DSL we arguably make the language more difficult to use and, ironically, less adaptable:

  • It is more difficult from the user perspective because there are more elements in the language to understand and deal with.
  • It is less resilient to change because those options might expose subtle aspects of design and implementation of a solution that, over time, would be harder to modify and improve.

Of course, since we want to use DSLs to solve categories of problems, we cannot totally eliminate all forms of variation, but my point is that, in order to add flexibility to a domain specific language, we should take a systematic approach and reduce options rather than blindly increase them!
Is it possible? Yes, if we narrow the scope of application of the language to a well-known domain and we favor abstractions and conventions over configuration options.

Add this post to: del.icio.us:DSLs are not frameworks digg:DSLs are not frameworks spurl:DSLs are not frameworks simpy:DSLs are not frameworks newsvine:DSLs are not frameworks blinklist:DSLs are not frameworks furl:DSLs are not frameworks reddit:DSLs are not frameworks Y!:DSLs are not frameworks google:DSLs are not frameworks technorati:DSLs are not frameworks stumbleupon:DSLs are not frameworks windowslive:DSLs are not frameworks

I was at the INDA meeting last night where Robert Scoble gave a talk on the rise of blogging and a panel answered questions from the floor about the future of .NET programming from Vista and beyond.

Pretty quickly the discussion got round to Visual Studio 2005, with all its little imperfections. One thing that really got people going was the recent MSDN article which attempted to describe how to use Team System to write code in a test-driven way. The article was widely ridiculed and for good reason: there was nothing remotely test-driven about the approach it described. It used tests, sure, but being test driven is about a lot more than just having tests. I didn't like the article more than anyone else, and added my own 1/9 vote. I'm glad they took it offline, because I wouldn't want people to be misled about the aims of test-driven development.

That said, the tool itself has actually got a lot of features that make it an efficient IDE for writing test-driven code. When it comes down to it, the core tool you need for unit testing just calls a bunch of methods and displays their results -- it doesn't get much simpler (Kent Beck even says you should write your own). On this measure, Team System performs perfectly well (how could it not?), as does NUnit.

Team System though has a couple of extra features that improve on the regular NUnit experience. For one thing, you get first rate IDE integration. Once you set the test as the startup project, Ctrl-F5 runs the tests, F5 on its own runs them in the debugger. You can do much the same with testdriven.net, or configure NUnit to start up in a similar way, but having everything a keystroke away is essential once you get hooked on the red/green/refactor rhythm.

The other killer feature is code coverage. Just by selecting an option in the build properties you get full analysis of what lines of code your tests hit, with red/green highlighting of each line and percentages for each namespace, class and method. Again, NCover does the same thing (particularly when you combine it with NCover Browser), but IDE integration brings it that little bit further.

Add all this to the base Team System functionality, with its check-in policies, work item management and proper source control (not to mention the rest), and you've got a great tool for using (and enforcing) TDD in teams.

Yeah, they've included a lot of stuff that isn't of interest to TDD fans. If you're test driven, you won't be interested in creating "tests" from code you've already written, but then you won't be interested in the support for manual test scripts either. Just ignore it: someone else wants those features even if you don't. Most of all though, don't reject the tool just because someone wrote a crappy article about it. Give it a chance, and you might be pleasantly surprised.

Add this post to: del.icio.us:Visual Studio Team Suite: great for TDD (flame me :) digg:Visual Studio Team Suite: great for TDD (flame me :) spurl:Visual Studio Team Suite: great for TDD (flame me :) simpy:Visual Studio Team Suite: great for TDD (flame me :) newsvine:Visual Studio Team Suite: great for TDD (flame me :) blinklist:Visual Studio Team Suite: great for TDD (flame me :) furl:Visual Studio Team Suite: great for TDD (flame me :) reddit:Visual Studio Team Suite: great for TDD (flame me :) Y!:Visual Studio Team Suite: great for TDD (flame me :) google:Visual Studio Team Suite: great for TDD (flame me :) technorati:Visual Studio Team Suite: great for TDD (flame me :) stumbleupon:Visual Studio Team Suite: great for TDD (flame me :) windowslive:Visual Studio Team Suite: great for TDD (flame me :)

VSLiveInnerWorkings will be attending the VSLive! conference in San Francisco’s Moscone Center from January 29th to February 2nd, 2006.

At the event, we’ll be unveiling our newest smart client application, Developer Interface v3.0, which integrates tightly with Visual Studio 2005 and includes a cool code search and retreival feature that will make a developer’s life much easier!

Look for the InnerWorkings staff at Booth #608. We’ll be running a special VSLive! coding contest and leader board, with lots of cool prizes (like satellite radio subscriptions, MP3 players, and free coding challenges).

Simply swipe your attendee badge at our booth to enter the contest and put yourself in a position to win some great daily prizes and free content.

See you at the show!

The InnerWorkings Team

Add this post to: del.icio.us:Join InnerWorkings in San Francisco at VSLive! digg:Join InnerWorkings in San Francisco at VSLive! spurl:Join InnerWorkings in San Francisco at VSLive! simpy:Join InnerWorkings in San Francisco at VSLive! newsvine:Join InnerWorkings in San Francisco at VSLive! blinklist:Join InnerWorkings in San Francisco at VSLive! furl:Join InnerWorkings in San Francisco at VSLive! reddit:Join InnerWorkings in San Francisco at VSLive! Y!:Join InnerWorkings in San Francisco at VSLive! google:Join InnerWorkings in San Francisco at VSLive! technorati:Join InnerWorkings in San Francisco at VSLive! stumbleupon:Join InnerWorkings in San Francisco at VSLive! windowslive:Join InnerWorkings in San Francisco at VSLive!

Categories

Archives