In a 1976 article [4] Parnas observes, "Variations in application demands, variations in hardware configurations, and the ever-present opportunity to improve a program means that software will inevitably exist in many versions." He argues that the design of a program should be approached as the design of a family of related programs. He defines a program family as a set of programs "whose common properties are so extensive that it is advantageous to study the common properties of the programs before analyzing individual members." If programmers can identify and exploit these "common aspects and predicted variabilities" [6], the resulting software can be constructed to reuse code for the common parts and to enable convenient adaptation of the variable parts for specific applications. A quarter-century after his original article, Parnas notes that there is "growing academic interest and some evidence of real industrial success in applying this idea," yet "the majority of industrial programmers seem to ignore it in their rush to produce code" [5]. If software families are to become pervasive, students need to learn to design and construct them effectively.
[1]
Cuihua Zhang,et al.
Using classic problems to teach Java framework design
,
2006,
Sci. Comput. Program..
[2]
Timothy A. Budd,et al.
An introduction to object-oriented programming
,
1991
.
[3]
Daniel Hoffman,et al.
Software Fundamentals: Collected Papers by David L.Parnas
,
2001
.
[4]
David Lorge Parnas,et al.
On the Design and Development of Program Families
,
2001,
IEEE Transactions on Software Engineering.
[5]
H. Conrad Cunningham,et al.
Using Function Generalization to Design a Cosequential Processing Framework
,
2006,
Proceedings of the 39th Annual Hawaii International Conference on System Sciences (HICSS'06).
[6]
David M. Weiss,et al.
Software Product-Line Engineering: A Family-Based Software Development Process
,
1999
.