Designing Software Product Lines with UML: From Use Cases to Pattern-Based Software Architectures