{'fraction_non_alphanumeric': 0.017653167185877467, 'fraction_numerical': 0.0, 'mean_word_length': 5.513513513513513, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Separating Product Variance and Domain Concepts in the Specification of Software Product Lines

Software design aims at a mapping from domain concepts to an implementation. Abstractions that are not highlighted in the implementation structure often exist only in the minds of the developers during development. While this works reasonably well for single-purpose systems, software product lines, i.e., systems built by reusing the same core functionality, require explicit presence of several types of abstractions. In particular, the relation between the implementation and underlying domain concepts, and product variance must both be mastered in parallel. In this paper, we will discuss these dimensions of concern, and introduce a way to manage them in software product lines with logical layers. The principal idea is to superimpose different aspects rather than partition the system into straightforward implementation components in the specification phase.