A common rule of thumb in making components reusable is to 'make components generic'. Unfortunately, this is not always an easy task, due in large part to the tendency of software engineers to design implementations in ways that are functionally fixed. That is, software engineers tend to design (a) in a way that solves the particular problem at hand but is not easily generalizable, and (b) in such a way that opportunities to reuse existing components are not easily 'seen'. The paper suggests how to manually uncommit design decisions from functionally fixed designs in such a way that their essence is kept. This uncommit process is done with the support of (a) reasoning by analogy, (b) statement of implications, (c) challenging of assumptions, and (of course) (d) previous experience/knowledge about both the problem domain and about general software engineering principles. It is shown how this method of working not only helps in designing a solution for a problem class instead of for a specific problem, but also how it helps in (a) seeing how a component can be applied, and (b) building (more reusable) components rather than (more) reusable components. The goal is thus to control functional fixedness in the design process both for and with reuse.
[1]
Philip N. Johnson-Laird,et al.
Thinking and reasoning: selected readings
,
1968
.
[2]
Edsger W. Dijkstra,et al.
A Discipline of Programming
,
1976
.
[3]
Birch Hg.
The relation of previous experience to insightful problem-solving.
,
1945
.
[4]
Bill Curtis.
Tutorial, Human Factors in Software Development
,
1990
.
[5]
Mark T. Keane.
Analogical problem solving
,
1988
.
[6]
H. Birch,et al.
The negative effect of previous experience on productive thinking.
,
1951,
Journal of experimental psychology.
[7]
P. Saugstad,et al.
Problem-solving, past experience and availability of functions.
,
1960,
British journal of psychology.
[8]
Ruven E. Brooks,et al.
Studying programmer behavior experimentally: the problems of proper methodology
,
1980,
CACM.
[9]
Neil Maiden,et al.
The Abuse of Re-use: Why Cognitive Aspects of Software Re-usability are Important
,
1991
.
[10]
Larry Latour,et al.
A methodology for the design of reuse engineered Ada components
,
1991,
SETA1.
[11]
Ted J. Biggerstaff,et al.
An Assessment and Analysis of Software Reuse
,
1992,
Adv. Comput..