rect
You are viewing an archived version of CBSE 1999. This page has been archived via the Internet Archive Wayback Machine for the ICSA conference series history. Some links on this page might not work.
← return to the ICSA homepage.
General Navigation Buttons - Home | Search | Contact Us | Site Map | Whats New
engineering graphic
Engineering Practices
Welcome
Architecture Tradeoff Analysis
CERT Coordination Center
COTS-Based Systems
Overview
Activity Areas
Products and Services
CBS Team
References
Events
What's New
Opportunities to work with us
Briefings, Courses, and Workshops
Spiral Development Workshops
CURE (COTS Usage Risk Evaluation)
COTS-Based Systems Monographs
COTS_Spot Column
Little Red Book
Dependable System Upgrade
Information Repositories
Personal & Team Software Process
Product Line Practice
Software Engineering Measurement & Analysis (SEMA)
Complete Technical Project List
Common Acronyms
Featured Publications
Technical Initiatives
Courses
Conferences
About SEI|Mgt|Eng|Acq|Collaboration|Prod.& Services|Pubs
Rollover Popup Hints for Topic Navigation Buttons above
Comments on the CBSE Strawman Document


David Budgen
Department of Computer Science
Keele University
Staffordshire
ST5 5BG
U.K.

1. Comments

My (brief) comments on this are as follows:

  • The idea of exploring the issues via a Strawman document such as this seems a very good one, and I think that producing such a document forms an excellent step in the development of the area.
  • I would argue that the document cannot afford to ignore the problems of creating such systems and that there is a need for a section that addresses this, even if at the present, we have only limited experiences to offer.  I have suggested the outline for a new section below (probably it should become a new section 3, with the present 3 becoming 4).  As a part-justification for this, I would observe that this is identified as a significant theme within the PITAC Interim Report (http://www.ccic.gov/ac/interim/), which comments that "Special emphasis should be placed on component based software design and production techniques" in identifying research priorities.
  • The other area that has emerged as needing more attention from some work of our own, that has involved making a small investigation into how people design solutions from components, is that of component documentation.  This is an area where there appears to be a potentially key need for standard forms of description to be developed.

2.  Suggested structure for a new section

    System development for CBSE-based projects
      Life-cycle issues
        Integration with 'traditional' waterfall activities (req. elicitation; design; testing)
        Role in Rapid Application Development
      Design Practices
        Reuse strategies (horizontal/vertical)
        Changes to practices used in system design
        Underpinning technology needs   /* reason to precede existing section 3 */
        Component development practices
      Testing and Evaluation
        Recommended practices
        Documentation

 3.  Discussion of design practices for CBSE

At present no widely recognised software design practices incorporate the concept of reusing pre-existing components.  The 'historical' approach to software development has (on paper at least) encouraged the adoption of design methods such as SSA/SD, JSD, OOSD etc., which assume:
  • A 'clean slate' solution, in which each design solution is custom-built to fit the needs of the particular problem.
  • The reuse of design 'process' experience is mainly conveyed through the practices of the design method.
Indeed, some of the current interest in the concept of 'design patterns' [Gamma et al., 1995] may well reflect the difficulty that these existing practices have in incorporating guidance on reuse.

Support for the idea of software component reuse in design needs to be related to the concept of software architecture.  In the past, each system has been custom built, and its architectural form has been determined on the basis of such considerations as reuse and locally preferred practices, or as a separate and independent choice.  This is also an area where the experience of hardware development has been very positive, in that the adoption of standard architectural forms has formed an important underpinning to component reuse.  For software the concept is still in relatively formative stages [Shaw and Garlan, 1996; Monroe et al., 1997], and the ease with which software can be modified also makes it harder to enforce any standards for software architecture.

Historically the main corpus of software design literature has been focused upon the task of designing 'bespoke' solutions, although it can be argued that use of a design method produces an 'architectural style' that increases the potential for reusing elements of designs produced using the same practices.  However, th
is has traditionally received little attention and we are not aware of the existence of any widely used systematic practices that are based upon reuse of part-solutions.

Observations of software designers and their practices in a 'bespoke development' context have indicated that such reuse of part-solutions does occur [Adelson and Soloway, 1985; Guindon, 1990], although during the design process this may be more a case of reusing paradigms or idioms from previous experience (termed 'labels for plans'), rather than involving actual system elements.

These notes review the question of how a transition to a component-based paradigm is likely to alter the designer's goals and the overall system expectations.  We then examine some of the empirical work on software design activities as a preliminary to considering how design practices will need to change to meet these goals.  Finally, we make some brief comments based upon some recent work of our
own.
 

Changing the goal posts

The distinction between our expectations when producing bespoke software solutions and reusing components should perhaps be similar to our expectations of `made to measure' and mass-produced clothing.  It we have a suit `made to measure', then we expect it to be not only a good fit (and many people are physically asymmetrical as regards such issues as shoulder height and arm length), but also to be able to provide for any personal preferences such as secure inner pockets.  However, if purchasing `off the peg' clothing then we are prepared to accept some degree of compromise providing that the overall fit and serviceability is acceptable (and of course, that the cost is also significantly less than that of the bespoke product).  Should it become necessary to alter the off the peg product to achieve an acceptable fit, the question of cost becomes critical, since this may approach or even exceed the cost of purchasing a bespoke garment.

Within the software development process there are clear analogies to this, and in order to achieve an equivalent degree of compromise when proposing to develop a solution using components, we need to be able to determine both:

  • what degree of compromise we can accept
  • how we are to measure this
and to agree these 'up front' before beginning the processes of design and development.  Indeed, it may even be that a thorough analysis will reveal that a component-based solution is not necessarily more cost-effective than a bespoke development.  (There is an interesting caution to this effect in the conclusions of [Lewis et al., 1992], where they observe that what they term `strong reuse encouragement' may lead to "the subject's reuse of inappropriate components", resulting in lower productivity!)

Unfortunately, the invisible and multi-faceted nature of software makes it much harder to find criteria for compromise than is the case for clothing!  Some possible parameters that a designer might need to consider (for both the overall solution and also in some cases, for the components) include:
        eventual system performance
        resource use (especially memory)
        interface forms
        functionality
(Note that these are not necessarily independent.)  These factors will also have implications for the ways that components may need to be documented.
 

Empirical studies of designers

The corpus of material covering empirical studies of software design activities is a fairly small one, generated chiefly by workers with a background in cognitive psychology as well as software.  A significant feature of this is the relatively small number of subjects used by most researchers, reflecting the difficulty of gaining access to suitable experienced software designers, and even of suitably inexperienced student subjects, since even inexperienced subjects need knowledge about design.

We review this material here mainly in terms of the extent to which any component-related concepts can be identified.  (Since none of it was originally concerned with such systems, we should not regard this as necessarily providing an exhaustive analysis!)

One of the earliest published studies on observations of larger-scale software design activities is that of [Adelson and Soloway, 1985], which examined the strategies used by a small number of experienced designers (three) plus two novice designers, when faced with problems that could be categorised as follows.

  •         familiar problems in a familiar domain
  •         unfamiliar problems in a familiar domain
  •         unfamiliar problems in an unfamiliar domain
Two of the important ideas that they identified in terms of our own focus of interest was that designers frequently adopted an opportunistic strategy (which we can characterise as being problem-driven rather than method-driven) in solving their problems, and the concept of labels for plans.  The latter can be considered as a means of identifying where previous experience can be reused, by noting the existence of a previously-used plan for a part-solution, which can be retrieved from memory without the need to work this through in detail while solving the current problem.

Later work by Guindon was based upon a study of three experienced designers, and the work reported in [Guindon, 1990] focused on investigating the means by which the subjects exploited their prior knowledge and experience in solving a problem.  In particular, this study identified the use of schemas by designers to aid reuse of experience, where "a schema is a complex rule composed of a pattern which specifies the similarities in requirements between different instances of a class of systems".  Such a description of a schema can probably be loosely equated to the concept of 'labels for plans' described by Adelson and Soloway.  It was also noted that "designers tend to reuse the same successful solutions over and over in their career".

In terms of a component-based approach, both of these studies do indicate that experience is reused at an abstract level, although not necessarily mapped on to concrete components.  However, since components were not included in the studies, this is perhaps not surprising.

A very thorough analysis of both the nature of the design process as applied to software, and also of the methodological issues that arise when conducting any study of how software is designed is provided in [Davies and Castell, 1992] .  A similar analysis in [Visser and Hoc, 1990] contains one of the few references to problem of reuse that we could identify, and concludes that:

    "one may think that most psychological studies paying so little attention to this reuse - contrary to software engineering, which considers it a major problem to be solved - is due to their limited context making reuse difficult to implement"
 

Modifying the design process

Having argued that the 'traditional' approach to software development based upon design methods that produced bespoke solutions does not provide adequate support for a component-based development strategy, and identified that the bulk of empirical studies do not address the component concept, one question that arises is that of how such systems might be most effectively developed.

Two identifiable strategies, based on different criteria, are described below.  We should note that these probably describe fairly extreme forms, and that any practical development is likely to involve some degree of compromise between the two.
 

    1.  Assuming that an architectural style is already established, for whatever reasons, then the components need to be identified on the basis of their ability to conform to the needs of the architecture as well as on their functionality.  We can regard this strategy as one of Framework First, using the pre-determined framework to help narrow down the search space for components.  Certainly such an architecture will itself have some specific characteristics, and is likely to imply some form of open, loosely coupled interaction, including the possibility of `plug and play' capability to support evolution.

    2.  A quite different approach is one that begins by identifying a set of suitable components and then to decide upon the architectural form for the solution on the basis of how to get the best from the selected components.  Again, such an Element First approach is more likely to imply a more closely coupled strategy, and may provide less scope for long-term evolution.

Framework First  The adoption of such a strategy is consistent with the needs of larger organisations, concerned with reuse of internally generated components as well as those obtained externally, and with longer-term maintenance needs also in view.  As with adoption of design methods, such a strategy does require careful consideration before choosing the framework, since this decision occurs both early in development (or in transition to a component-based philosophy) and may also have significant longer-term effects.  (While the Object-Oriented paradigm is probably the predominant one currently in use for new developments, it may not always be the most appropriate framework, especially where real-time needs predominate.)

Implicit in this choice of strategy must be an acceptance that it may be necessary to develop either new components, or modifications to existing ones, in order to achieve a solution for a given problem.  This represents a major risk factor, and is also strongly linked to the choice of framework.

Element First  For this strategy to work, the designer may need to be able to search a very large solution space in order to find appropriate components [Frakes and Pole, 1994].  Its adoption is therefore much less one of an organisational one, and as we identified above, it is probably a strategy that is only really suited to solving 'one-off' problems, with relatively little need to consider longer-term maintenance needs.

The main problem (or risk factor) is that of making an adequate search for components at the outset.  This requires both a wide search space and also efficient methods of searching this.  Given that component classification is likely to be uneven, ensuring that any search is made effectively is likely to present the major risk, since an eventual set of components that have mis-matched interfaces are unlikely to provide an overall solution that is satisfactory in terms of the parameters identified above.

A second issue that arises is the degree of modification that is acceptable [Basili et al., 1994].  Since modification is likely to be expensive; require expert skills; introduce the need for additional version management; and increase testing needs, it is clearly an option that requires care.  The idea of the wrapper [Brown and Short, 1997] is probably a more attractive approach.
 

Observations from some simple empirical studies

We have undertaken some simple studies of design activity, based upon the use of Unix processes as reusable components, with some intermediate findings being described in [Budgen and Pohthong, 1999].  Since the choice of shell programs effectively constitutes an element of 'Framework First', we have been mainly concerned to investigate the search and selection strategies used by our subjects in a series of studies.   (We might also observe that the whole philosophy of Unix also means that Unix utilities are effectively designed for the purpose of reuse.)

One significant issue that has emerged is the designer's need for information about a candidate component, regardless of the strategy used to find it.  On some occasions,  this has also included executing the component separately, in order to investigate its behaviour when used in a particular mode.  While these observations do need to be further investigated in a wider context, they have significant implications for both the design of tools intended to support component-based development and also for any documentation standards that might emerge.
 

References

[Adelson and Soloway, 1985]  Beth Adelson and Elliott Soloway, The role of domain experience in software design, IEEE Transactions on Software Engineering, 11(11), November 1985, 1351-1360.

[Basili et al., 1994]  V R Basili, L C Briand and W I Melo,  How Reuse influences productivity in Object-Oriented Systems, Communications of the ACM, 37(5), 1994, 104-115.

[Brown and Short, 1997]  Alan W Brown and Keith Short, On Components and Objects: The Foundations of Component-Based Development, Proceedings of the 5th Int. Symposium on Assessment of Software Tools and Technologies, 1997, 112-121.

[Budgen and Pohthong, 1999]  David Budgen and Amnart Pohthong, Component Reuse in Software Design: An Observational Study, submitted for publication.

[[Davies and Castell, 1992]  S P Davies and A M Castell, Contextualizing design: narratives and rationalization in empirical studies of software design, Design Studies, 13(4), 1992, 379-392.

[Frakes and Pole, 1994]  W B Frakes and T P Pole, An Empirical Study of Representation Methods for Reusable Software Components, IEEE Transactions on Software Engineering, 20(8), 1994, 617-630.

[[Gamma et al.,  1995]  E Gamma, R Helm, R Johnson and J Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995.

[Guindon, 1990]  Raymonde Guindon, Knowledge exploited by experts during software system design, Int. Journal of Man-Machine Studies, 33, 1990, 279-304.

[Lewis et al., 1992]  J A Lewis, S M Henry, D G Kafura and R S Schulman, On the relationship between the object-oriented paradigm and software reuse: an empirical investigation, Journal of Object-Oriented Programming, 5(4), 1992, 35-41.

[Monroe et al., 1997]  R T Monroe, A Kompanek, R Melton and D Garlan,  Architectural Styles, Design Patterns, and Objects, IEEE Software, January 1997, 43-52.

[Shaw and Garlan, 1996], Mary Shaw and David Garlan, Software Architecture: Perspectives on an Emerging Discipline, Prentice/Hall, 1996.

[Visser, 1987]  Willemien Visser, Strategies in Programming Programmable Controllers: A Field Study on a Professional Programmer, in Empirical Studies of Programmers: Second Workshop, Editors G Olson, S Sheppard & E Soloway, Ablex Publishing, 1987, 217-230.

[Visser and Hoc, 1990]  W Visser and H-M Hoc, Expert Software Design Strategies, in Psychology of Programming, Editors J-M Hoc, T Green, R Samurçay and D Gilmore, Academic Press, 1990, 235-249.
 
 
 
   

 

 

 

download the PDF file
contact the organizers


The Software Engineering Institute (SEI) is a federally funded research and development center sponsored by the U.S. Department of Defense and operated by Carnegie Mellon University.

Copyright 2001 by Carnegie Mellon University
URL: http://www.sei.cmu.edu/papers/28/28.htm
Last Modified: 27 September 2000