Product Line Engineering and Feature Models

advertisement
Product Line Engineering and
Feature Models
CPSC 410
Reading for Monday
• REST Topics
– http://www.infoq.com/articles/rest-introduction
– Arch book p. 414–422
– Roy Fielding’s thesis perhaps most cited CS thesis,
worth a scan if you want to see what one looks
like.
Product Lines
•
•
•
•
Want to make several related products
Products share many common features
But features vary between products
Want a formal description of all possible
product instances in a product line
• Use Feature Models!
• Model formalizes feature requirements
• Does not address implementation
Software Product Line Example
• Windows 7 Product Line
– Starter
– Home Premium
– Professional
– Ultimate
Informal Feature Matrix
Formal Feature Models
Cross-Tree Constraints
X
X
X
X Conflict
Requires
Realistic Feature Model
• For illustration purposes only
• Uses extra syntax we don’t learn in this course
Mandatory Feature
Product Line also referred to as Product Concept (denoted as C)
Optional Feature
eXclusive-Or (Alternative)
Inclusive-Or (Or)
Conflicting Features
• Two features that cannot
exist in the same product
• Used when features are not
siblings
• {C}, {C, f1}, {C, f1, f2}
{C, f2}, {C, f1, f3}
Dependent Features
• When one feature requires
another
• Used when features are
not parent/child
• {C}, {C, f1}, {C, f1, f2}
{C, f2}, {C, f1, f2, f3}
Feature Implementation
• Often, a feature is not a class
• Hence, feature models are not class diagrams
• A feature can be implemented many ways
–
–
–
–
–
Class
Set of classes
A scattered set of methods
A scattered set of statements
etc…
• The Feature Modeler does not concern themselves
with such details
Example: Logging Feature
class Account {
private double total;
public void deposit(double amount) {
System.out.println(“User is depositing: “ + amount);
…
}
public void withdraw(double amount) {
System.out.println(“User is withdrawing: “ + amount);
…
}
public double balance() {
System.out.println(“User is checking balance”);
…
}
}
Where is the logging feature?
Example: Logging Feature
class Account {
private double total;
Where is the logging feature?
public void deposit(double amount) {
System.out.println (“User is depositing: “ + amount);
…
}
public void withdraw(double amount) {
System.out.println(“User is withdrawing: “ + amount);
…
}
public double balance() {
System.out.println(“User is checking balance”);
…
}
}
Where is Logging in Apache Tomcat?
Picture from: Waterhouse and Kersten, kerstens.org/mik/publications/aspectj-tutorial-oopsla2004.ppt
Consider Your Project
• At the end of the term …
If I asked you where each User Story was in your
code …
• Most likely each User Story could not be isolated
to a single
– Class
– Method
– Statement
• A good bonus mark candidate would be to
describe your product using a feature model as
described here.
Variability Implementation
• How do we create variation in product lines?
•
•
•
•
Subclassing
Conditionals and IFDEF statements
Decorators/Connectors
Separate code bases
– Likely to be different branches of a repository
Linux variability
Linux has ~ 5400 features
Download