Learn More
Optimal organization of the asset base in a software product line (SPL) depends on how the assets are used to produce products. It has been assumed that collecting an appropriate set of assets would automatically lead to economically produced products. However, industry experience suggests that simply having the right assets is not sufficient to allow easy(More)
Software libraries have long been an integral element of software development. Recent advances in areas such as software product lines and extensibility mechanisms have fo-cused renewed attention on collections, particularly heterogeneous collections, of software artifacts. The contribution of this paper is to propose a model for a software library. Our(More)
The ability to produce products that can be easily adapted to a variety of customers is becoming increasingly important. A key element for adaptable software products is the ability to include or omit features for different product variants. Even when a design method supports feature adaptation there remains the task of actually implementing the modules. In(More)
As multi-core processors become the norm, it is becoming apparent that understanding concurrent programming is becoming increasingly important. However, there are few simple easy to understand examples of concurrent programming available. The California speedway project provides a simple to understand project that is inherently concurrent. The project in(More)
Component Based Software Engineering (CBSE) is a technique for designing and assembling systems from existing parts that has important implications for a number of software engineering practices. The basic principles of CBSE, including modularity, substitutability, and composition are important throughout the SE curriculum. The ability to build a component(More)
Software variability is "the ability of a software artifact to vary its behavior at some point in its life cycle" [12]. Almost every software artifact requires some type of variability. While variability is endemic to the creation of software it is rarely the direct focus of study. In addition, software systems have shown an increasing amount of variability(More)
Our goal in teaching undergraduate computer science should not be merely to impart knowledge, but to develop professionals. This paper uses Aristotle's concept of intellectual virtues as a starting point for understanding the range of skills needed to build professional competence. The paper then discusses the use of various evaluation approaches (tests,(More)