1 Introduction
Software engineers often need to answer questions that explore trade-offs between competing goals. For example:
What is the smallest set of test cases that cover all program branches?
What is the set of requirements that balances software development cost and customer satisfaction?
What sequence of refactoring steps take the least effort while most decreasing the future maintenance costs of a system?