Design Pattern Density and Design Maturity

JUnit is a widely-adopted unit testing framework for Java, developed by Kent Beck and Erich Gamma. In their discussion of JUnit 3.8’s design, the authors state:

Notice how TestCase, the central abstraction in the framework, is involved in four patterns. Pictures of mature object designs show this same ‘pattern density’. The star of the design has a rich set of relationships with the supporting players.

The notion of design pattern density has been around forever, but with little serious work being done to refine the idea. I’m calling on all experts (reading this blog…) to tell me whether they agree or disagree with the following statement:

Continue reading “Design Pattern Density and Design Maturity”

Bertrand Meyer: Electrical Engineering vs. Computer Science

Bertrand Meyer, at the 40 Years of Software Engineering panel at ICSE 2008, on May 16, 2008, 11:56am: “Electrical engineering is to computer science what making a bed is to making love.” I’m not entirely sure this is true, but it certainly makes for a memorable quote.

UPDATE: I had mentioned my enjoyment of this quote to Prof. Meyer at the conference. A few days later I received an email from him in which he generously (and gracefully) corrects me with the exact statement, which first appeared in his inaugural lecture at ETH Zurich:

We appreciate our debt to electrical engineering, without which there would be no computers. Indeed, computer science is to electrical engineering as the art of making love is to the art of making beds.

Much better, and certainly less crude than my in-the-moment snapshot.

FOSSBazaar: Open Source Under the CIO’s Radar Screen: Good or Bad?

Commercial open source has a peculiar sales process. Frequently, when a firm decides to buy (license) a specific type of software like a content management system or a wiki engine, they’ll find that their company already employs multiple solutions, downloaded for free from the Internet. By some measures, this is dangerous to IT governance, as it bypasses corporate purchasing and operating regulations. On the other hand, open source empowers IT users to make their own decisions early on without having to go through lengthy approval processes, keeping them nimble and speedy. So, is commercial open source good or bad for IT operations and the CIO?

Read more on FOSSBazaar…

Archived copy of article.

Object-Oriented Software Design Documentation

Software researchers need case studies to validate new tools and methods of object-oriented software design. A good thing to do is to standardize on a set of open source frameworks and libraries that are known and available to everyone. Basically, a benchmark set for new tools and methods in object-oriented software design. JUnit and JHotDraw come to mind.

Most open source frameworks and libraries that are being used in research studies have little original documentation associated with them. However, I as well as others have written up such documentation. Here are those frameworks that I see increasingly being used in scientific studies, as well as any design documentation documentation that I may have provided.

Continue reading “Object-Oriented Software Design Documentation”

SDN: Is Open Source Competing Unfairly?

Commercial open source firms go to market trying to create an “unfair” competitive advantage that lets them win customers more easily than their competitors. So do most other companies. Commercial open source firms do this by bypassing the traditional purchasing process by getting their software into customer companies for free, before the customers even know they will need the software. But is an employee’s decision to install a piece of open source software a good decision for the company? After all, every software locks in its users, whether open source or not.

Continue reading “SDN: Is Open Source Competing Unfairly?”

Commercial, Professional, and Community Open Source: Resolving the Naming Confusion

As a researcher, imprecise naming bothers me. The general confusion around the terms commercial open source, professional open source, and community open source warrants closer analysis.

First my proposal, then some litmus tests, followed by a bit of history.

  • Commercial open source is software provided as open source where a single legal entity owns the rights to the software (SugarCRM, Alfresco, etc.)
  • Professional open source is software provided as open source where a dominant firm provides services around the software without actually owning it (JBoss, Spring, etc.)
  • Community open source is software provided as open source where multiple stakeholders hold the rights and no player dominates the software (Linux, Apache, etc.)

Continue reading “Commercial, Professional, and Community Open Source: Resolving the Naming Confusion”

International Journal of Open Source Software & Processes

I’m a founding member and associate editor of the International Journal of Open Source Software & Processes. Please consider submitting a paper to this new journal, call for papers appended.

CALL FOR PAPERS

International Journal of Open Source Software & Processes (IJOSSP)

An Official Publication of the Information Resources Management Association – New in 2009

www.igi-global.com/ijossp

Editor-in-Chief: Stefan Koch, Vienna University of Economics and BA, Austria

Published: Quarterly (both in Print and Electronic form)

Continue reading “International Journal of Open Source Software & Processes”

JUnit 3.8 Documented Using Collaborations

Author: Dirk Riehle

Abstract: This paper describes the design of the unit testing framework JUnit v3.8. The documentation technique employed is an enhanced version of collaboration-based design, also known as role modeling. In collaboration-based design, objects are viewed as playing multiple roles in different contexts, and different contexts are viewed as task specific collaborations. The documentation accounts for every method in the JUnit 3.8 framework by assigning it to a role. It thereby investigates whether roles and collaborations can serve as basic units of functionality provided by a design like a framework. Such a measure of functionality can serve multiple purposes, for example estimating implementation efforts or measuring complexity.

Keywords: JUnit 3.8 Documentation

Reference: In Software Engineering Notes Volume 33, Issue 2 (March 2008), Article No 5. ACM Press, 2008.

Available as a PDF file.