Table of Contents

Towards a Language-Independent Approach for Reverse-Engineering of Software Product Lines

На основе статьи:

Tewfik Ziadi, Christopher Henard, Mike Papadakis, Mikal Ziane, and Yves Le Traon. 2014. Towards a language-independent approach for reverse-engineering of software product lines. In Proceedings of the 29th Annual ACM Symposium on Applied Computing (SAC '14). ACM, New York, NY, USA, 1064-1071. DOI: http://dx.doi.org/10.1145/2554850.2554874

Введение

Часто так получается, что во многих компаниях разрабатывают одни и те же программы (в смысле требуемых от них функций), используют одни и те же библиотеки, совершая при этом одни и те же ошибки. Для того чтобы сократить время разработки и избежать повторяющихся ошибок предполагается использовать feature-based подход, то есть собирать желаемый функционал системы из некоторого высокоуровневого конструктора. Будет рассмотрен алгоритм восстановления частей конструктора(то есть выделение feature) на основе исходного кода программ, сгенерированных с его помощью. Утверждается, что алгоритм не нуждается в каких-то специальных пометках в коде и не зависит от используемого языка программирования.

Терминология

В статье активно используются различные термины. Хорошо бы их пояснить.

Описание алгоритма

Еще немного определений

Пусть <latex> AllP </latex> - набор всех программных продуктов, из которых мы хотим извлечь features. Тогда для элементов <latex> cp_1, cp_2 \in AllCP </latex> - набора всех СP определяется следующее отношение эквивалентности:

Отношение эквивалентности "зависимость":

<latex>(\exists P \in AllP cp_1 \in P \wedge cp_2 \in P ) \wedge (\forall P \in AllP cp_1 \in P \Leftrightarrow cp_2 \in P)</latex> Легко заметить, что это бинарное отношение является отношением эквивалентности.

Теперь сам алгоритм:

  1. На вход подаются файлы с исходным кодом программ, изготовленных с помощью линейки ПО.
  2. На основе этих файлов строятся FST с помощью фреймворка FeatureHouse
  3. Из FST извлекается набор CP
  4. Набор CP разбивается на классы эквивалентности относительно отношения “зависимость”(Здесь имеется ввиду зависимость между компонентами. По свойствам отношения эквивалентности ясно, что если есть зависимость, то CP лежат в одном классе эквивалентности).
  5. Каждый из непересекающихся классов представляет собой feature.
  6. С помощью фреймворка FeatureHouse генерируется код для features, полученных на предыдущем шаге.(Здесь опять же есть зависимость от целевого языка и для использования произвольного языка программирования требуется писать генератор кода из FST)

Пример парсинга кода на Java

Исходный код 3х разных версий:

Соответствующие FST:

Проблемы данного подхода

Этот подход является высокоуровневым, что лишает его гибкости и препятствует более широкому. Также он никак не учитывает возможные ограничения на выбор features. А ведь они могут быть взаимоисключающими. Для достижения независимости от языков нужно писать и поддерживать парсер для FeaturesHouse. Если посмотреть на статью [1], то можно понять что написать хороший парсер можно только для объектно-ориентированных языков. Чтобы написать такой парсер для Haskell или C, нужно наложить дополнительные ограничения на структуру кода.

Список литературы

[1] Sven Apel, Christian Kastner, and Christian Lengauer. 2009. FEATUREHOUSE: Language-independent, automated software composition. In Proceedings of the 31st International Conference on Software Engineering (ICSE '09). IEEE Computer Society, Washington, DC, USA, 221-231. DOI=10.1109/ICSE.2009.5070523 http://dx.doi.org/10.1109/ICSE.2009.5070523

[2] Tewfik Ziadi, Christopher Henard, Mike Papadakis, Mikal Ziane, and Yves Le Traon. 2014. Towards a language-independent approach for reverse-engineering of software product lines. In Proceedings of the 29th Annual ACM Symposium on Applied Computing (SAC '14). ACM, New York, NY, USA, 1064-1071. DOI: http://dx.doi.org/10.1145/2554850.2554874