Software Product Line Engineering Topics: # This document summarizes the importent parts of the course Software Product Line Engineering. # It will help giving an overview about topics to learn. # This document does not have the claim to be complete. It should only support the process of getting an overview about the topics and support understanding the context. # Subject of the exam is the whole content of the lecture and exercise (not only this document)! - software product line engineering - background - examples - why tailor software systems - challenges - design and implementation of features - domain engineering - application engineering - general - product lines - features - variants - classic approach compared to domain engineering and application engineering - pros, cons - proactive, reactive, extractive approaches - feature modelling - feature selecting - constraints - valid / invalid variants - propositional formula - feature diagrams - modeling tools - runtime variability - runtime parameter - (command-line parameter, config file, dialog, source code, registry, ...) - global configuration options - propagating parameter - modularity - encapsulation / cohesion - coupling - divide and conquer, information hiding, maintainability, reusability, variability - problems - scattering - tangling - replication - design patterns for variability - observer - template - strategy - decorator - unflexible extention mechanism - diamant problem - delegation instead of inheritance - variability at compile time - version control systems - branching and merging - parallel development - scaling - code and non-code files - variants vs. revisions - version control in product lines - pro / con - build systems - build systems in product lines - pro / con - preprocessors - pp in java? - pp in product lines - examples - pro / con - feature tracability problem - components - components vs. objects/classes - components in product lines - class <-> component <-> package <-> module - pro / con - services and service-oriented architectures - frameworks - hot spots (variation poitns, extention points) - plugins - white-box / black-box frameworks - load plugins - frameworks and product lines - pro / con - crosscutting concerns - command pattern / method calls / middleware - tyranny of the dominant decomposition - example - expression problem - data centric vs. method centric - preplanning problem  - feature-oriented programming (FOP) - feature cohesion (feature traceability problem) - mapping from features to artifacts - feature composition - FOP in product lines - tools - decomposition of classes - collaborations and rolls - refinements - feature modules in product lines - principle of uniformity - aspect-oriented programming (AOP) - modularizing crosscutting features with aspects - AspectJ - static extention - dynamic extention - joint points, pointcuts (explicit & anonymous), advices - combination of pointcuts - parametrized pointcuts - within and withincode pointcuts - cflow and cflowbelow pointcuts - weaving aspects - obliviousness principle - aspects in product lines - pro / con (..., lexical comparison, fragile pointcut problem, complex syntax) - AOP vs. FOP - similarities and differences - heterogeneous vs. homogeneous extensions - static vs. dynamic extention - refinement, weaving - limits - relevance in practice - feature interactions - definition - examples - causes - feature optionality problem - dynamic vs. static - domain vs. implementation - higher order interaction - upperbound (theoretical in practice) - non-functional properties (NFP) - Configurtation with feature models - partial feature selection - non-functional requirements - McCall‘s Quality Model - quantitative, qualitative - practical relevance - measuring NFP - classification - methods - approaches - prediction - influence model - sampling - ... - learning performance models - finding the best configuration - optimization techniques - big picture - additionat topics - related topics - model-driven engineering - domain-specific engineering - software ecosystems - software architecture - service-oriented architectures - meta-programming - generative programming