Project

General

Profile

Module extractor strategies » History » Version 1

Alexey Polushkin, 06/15/2018 04:25 PM

1 1 Alexey Polushkin
h1. Module extractor stategies
2
3
h2. Single File
4
5
Эта стратегия сопоставляет каждому объектному файлу, полученому после команды компиляции, свой модуль, который содержит файлы, из которых был скомпилирован этот объектный файл. Данная стратегия не имеет специфичных требований к проекту. 
6
Стратегия не имеет параметров.
7
8
h2. Linux Kernel
9
10
Эта стратегия предназначена для извлечения модулей для ядра Linux и объектных файлов ядра Linux. 
11
Стратегия имеет следующие параметры
12
*modules* : bool. По умолчанию True. Данный параметр сообщает стратегии извлекать модули ядра Linux (не объектные файлы самого ядра)
13
*kernel* : bool. По умолчанию False. Данный параметр сообщает стратегии излвекать объектные файлы самого ядра
14
*kernel subdirs* : bool. По умолчанию False. Данный параметр сообщает стратегии о необходимости группировать объектные файлы самого ядра в один модуль, если они находятся в одной подсистеме
15
16
h2. Graph Partitioner
17
18
Данная стратегия предназначена для извлечения модулей, используя сторонние инструменты: Scotch, Metis. Является предпочитаемой стратегией для использования в произвольных проектах.
19
Стратегия сводит задачу декомпозиции программы на модули к задаче декомпозиции графа на подграфы. Каждому объектному файлу, полученному в результате комплияции сопоставляется вершина графа. Дуга ведет из вершины А в вершину В, если файл, соответстующий вершине А вызывает функции из файла, соответствующего вершине В. Каждой вершине приписано число - размер файла в строках кода. Каждой дуге приписано число - число вызываемых функций. Используемые инструменты производят декомпозицию графа на подграфы таким образом, что сумма чисел, приписанных разрезанным дугам минимальна, а сумма чисел, приписанных вершинам каждого подграфа стремятся быть схожими.
20
Стратегия имеет следующие параметры
21
*bin path* : String. Путь до исполняемого файла, осуществляющего декомпозицию графа
22
*tool* : String. Используемый инструмент. Возможные значения - "scotch", "metis"
23
*must modules* : List<List<String>>. Список из списка файлов, которые должны быть в одном модуле.
24
*partitions* : Int. Число частей, на которые необходимо осуществить декомпозицию.
25
*module size* : Int. Размер модуля, выраженный в числе файлов, входящих в него.
26
При этом, должен быть указан один из параметров *partitions*, *module size*.
27
28
h2. Vertex Merge
29
30
Данная стратегия предназначена для извлечения модулей, компонуя файлы в один модуль, если их вызывают одни и те же модули. Данная стратегия хорошо применима к проектам, содержащим библиотеки или расширения (busybox, nginx, apache). Данная стратегия сводит задачу декомпозиции к задаче декомпозиции графа как и предыдущая стратегия. Затем, на каждой итерации находит две вершины, у которых есть общий предок (вершина, из которой есть дуга в эти вершины) и при этом, размер симметричной разности предков каждой вершины минимален среди остальных. Затем, эти две вершины сливаются в одну, образуя модуль. При этом, у вершин из одной подсистемы приоритет на слияние при прочих равных.
31
Стратегия имеет следующие параметры
32
*max iters* : Int. По умолчанию 200. Максимальное число итераций слияния. Стратегия может завершить свое выполнение и до достижения заданного числа, если не найдены вершины для слияния
33
*max locs* : Int. Максимальное число строк для создаваемых модулей
34
*max files* : Int. Максимальное число файлов для создаваемых модулей
35
*same subsystms* : Bool. Производить слияние только файлов из одной подсистемы
36
37
h2. Breadth
38
39
Данная стратегия предназначена для извлечения модулей, обходя граф завимостей между файлами в ширину и генерируя модули до достижения их максимального размера. 
40
Данная стратегия имеет следующие параметры
41
*max locs* : Int. Максимальный размер модуля в строках кода
42
*module size* : Int. По умолчанию 3. Максимальный размер модуля в файлах.