Learn 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)
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)