Оригинал: Julia Rubin, Marsha Chechik, 2012
http://www.cs.toronto.edu/~chechik/pubs/fase12.pdf
Множество компаний разрабатывает и придумывает целые семейства, связанных между собой продуктов ПО. У этих продуктов схожий набор фич и они удовлетворяют определенным нуждам потребителей. Такие семейства называются software product lines(SPLs). Software Product Line Engineering(SPLE) - это инженерия, направленная на предоставление методов для работы с разработкой SPL. Методы SPLE делятся на 2 категории: композиционные, которые реализуют функции продукта в качестве отдельных фрагментов и позволяют генерировать конкретный продукт, составленный из фрагментов, и аннотативные, которые предполагают, что существует один “максимальный” продукт, в котором аннотации указывают на функцию продукта, которую реализует отдельный фрагмент. Далее будет рассматриваться аннотативный подход. Техника повторного использования линейки программных продуктов предлагает забрасывать существующие продукты для создания новых, что кажется очень непрактичным. Наш подход основан на сравнении элементов существующих продуктов друг с другом (путем вычисления взвешенного подобия их соответствующих подэлементов), соответствии тех, чье сходство выше заданного порогового значения, и их слиянии.
Элемент m модели - это кортеж ‹m|id, m|t, m|r, m|v, m|s›, где m|id - это числовой номер элемента, m|t ∈ T - это тип элемента, m|r ∈ R - это роль элемента, m|v - это значение элемента, m|s - это список подэлементов.
Пусть M1, M2 ∈ 2M отдельные наборы элементов. m1 ∈ M1, m2 ∈ M2 эквивалентны, m1≅m2, если m1|t = m2|t, m1|r = m2|r,
m1|v = m2|v,
m1|s = m2|s. m1=m2, если m1≅m2 и соответствующие деревья подэлементов изоморфны.
Множество элементов M ∈ 2M является моделью, если все элементы в М связаны в дерево структуры при помощи отношений подэлементов и у любого m ∈ M свой уникальный номер. Модели эквивалентны, M1=M2, если их соответствующие корневые элементы эквивалентны.
Пусть задано множество фич элементов F, модель фич FM = ‹F, φ› - это множество фич F ∈ 2F и функция φ, определенная на фичах из F. Конфигурация фич FM - это множество выбранных фич из F, для которых φ(f) = true, f ∈ FM.
Линейка продуктов PL = ‹FM, M, R› - это тройка, где FM - это модель фич, M ∈ 2M модель предметной области и R ⊆ F × M - это множество отношений, которые сопоставляют элементам из M фичи из F.
Пусть PL = ‹FM, M, R› линейка продуктов и пусть FM ее конфигурация фич. Множество элементов M выведено из линейки продуктов PL при конфигурации FM, М = Δ(PL, FM), если:
Пусть PL = ‹FM, M, R› линейка продуктов, FM конфигурация фич и M' = Δ(PL, FM). Тогда для каждого M' выполнено M' = M.
Пусть M1, M2 ∈ 2M - это модели. Сравнение(M1, M2, W) это функция, которая создает тройки C ⊆ (M1 × M2 × [0..1]), которая удовлетворяет следующим пунктам:
Пусть M1, M2 ∈ 2M - это модели и пусть С - это множество троек, порожденных сравнением (M1, M2, W). Тогда сопоставление(M1, M2, С, S) - это функция, которая создает наборы пар S ⊆ (M1 × M2), для которой выполняется следующее:
Пусть M1, M2 ∈ 2M - это модели и пусть С - это множество троек, порожденных сравнением (M1, M2, W) и сопоставлением(M1, M2, С, S). Тогда слияние(M1, M2, S) - это функция, которая создает слившуюся модель M, которая удовлетворяет следующим свойствам:
PL' = ‹FM', M', R'› линейка продуктов, построенная слиянием продукта M в продуктовую линию PL(PL' = PL⊕W,SM, используя следующие правила:
PL - это первоначальная продуктовая линейка, PL' - это конечная продуктовая линейка.
Пусть FM - это подмножество FM. Тогда FM - это конфигурация фич FM ⇔ - это конфигурация фич FM'.
Пусть FM - это подмножество FM. Если FM - это конфигурация фич FM , M = Δ(PL, FM) и M' = Δ(PL', FM), тогда M = M'.
Ниже приведено схематичное доказательство Леммы 3:
{fM} - это конфигурация фич PL'.
Пусть {fM} - это конфигурация фич. Тогда модель, полученная из PL' c этой конфигурацией, эквивалентна М. М = Δ(PL', {fM}).
[PL'] = [PL] U {M}.
В этой работе была формально определена простая информационная модель и техники рефакторинга для трансформированная отдельных продуктов в более компактное представление продуктовой линейки.