An Object Oriented Design Taxonomy

Jonathan Holloway
November 2008

Abstract

How prepared are final year students for Object-Oriented Design in industry? The difference between a good developer and an average developer is their knowledge and experience [Bro75] of design and coding. Design patterns and principles are the result of design decisions which have been captured during the software development process that may be beneficial to software developers. They are also common within open source software projects used within industry [Warren05]. Throughout an undergraduate course, students may learn various design patterns [Gam94] and principles [Riel96] to varying levels. However, there are apparent problems [Eck06, Wood07, Jones07] with graduating students and their ability to design software. This may be due to a number of reasons:

Whilst undergraduates understand how to code they do not necessarily know how to produce high quality, well planned solutions [McCracken01, Walker06, Spohrer86] with respect to good patterns and principles [Buck00]; it is more about getting the job done quickly [Vizcaíno00] or constructing the program in a clever manner.  By attempting to understand which patterns and principles are used within industry when design decisions are made we can attempt to better prepare students for industrial development.

Mastering the patterns and principles can be quite hard. It is difficult for a beginner to know which patterns to learn first and how they relate to specific design principles.  There are a number of different pattern languages and classifications available [Gam94, Pree94, Busc96], some of which detail pattern relationships [Tich97].  A limited number of learning approaches [Lew02, Kerievsky00] exist for novices to learn design patterns.  In addition to this, a basic high level model [Sha05] exists to detail the relationship between design patterns, heuristics and object-oriented principles.  However, there is no consistent model to describe patterns, principles and their relationships.

Two experiments were conducted using developers in industry to ascertain their views and knowledge regarding the design process and the design artifacts that are part of it.  The first describes a questionnaire regarding the design process and the various views held by developers in industry.  The second experiment involved a number of interviews with expert developers regarding the design artifacts2 they believed were important in object-oriented design to novice developers. The most common design patterns, antipatterns [Brown98] and principles selected were then arranged into a taxonomy structure constructed with IHMC CMapTools [IHMC08]. This was further refined and validated by the expert developers. Further interviews were undertaken with a group of undergraduate developers at Aberystwyth University. They were assessed using the SOLO taxonomy [Biggs82] as to their understanding of the design artifacts in the taxonomy. This provided some insight into the gap that existed between the two groups of developers which could be used to improve the content of the design courses at the university. Finally, a generic approach is described for building knowledge taxonomies based on the experiment findings. This will enable further research into a specific domain in order to build a taxonomy of relevant and related concepts.

Introduction

This thesis provides a number of contributions. The main question that it attempts to provide an answer for is:

“How can we provide a method for investigating important knowledge required for a novice starting to work within a particular industrial domain?”

It also attempts to answer the following sub questions:

  1. “What are the most important design artifacts for a novice developer when they begin development within industry?”
  2. “What is the gap that exists between undergraduate developers and expert developers in terms of their knowledge of Object-Oriented design artifacts?”
  3. “How prepared are undergraduate developers for Object-Oriented Design in industry?”

Chapters one to three of this thesis describe the current state of the art. Chapter one provides an overview of the process of software design - describing what it is, where it takes places and the activities that take place. Chapter two looks at the design decisions made during the process of design and the artifacts that are part of that process. Chapter three completes the state of the art by discussing the design artifacts in relation to the Computer Science education field, and in learning object-oriented design and programming. It also covers research that has taken place within academia and industry involving design artifacts and the importance of aligning academic course curriculum with industry to ensure that students are learning skills that equip them for the real world. The state of the art was approached from a number of different perspectives:

Computer Science Education; Object-Oriented Design And Programming; Industrial Software Development; Cognitive Psychology;

A number of conferences were attended to present information contained within this thesis and gain feedback:

Chapters four and five describe two empirical experiments that were undertaken in industry. The first experiment investigates the various design conceptions of developers in industry using a questionnaire. The second looks at interviews carried out with expert developers into design patterns, antipatterns and design principles believed to be of importance within industry. The information is arranged into a taxonomy which is then used in a series of interviews with undergraduate developers to understand the existing gap between them and the expert developers in industry.