Привет!
Попытался в общих чертах выделить основные свойства современных парадигм программирования применительно с точки зрения статического анализа исходных кодов программы. Главная цель — определить направления исследования (наконец сел
писать диссер — а то все идеи да мысли
).
Зацените, плз, и если можно укажите ошибки/недостатки/упущения (на метрики можно не обращать внимания):
1. Метрики, применимые при различных подходах проектирования ПО.
Выделим 4 современных парадигмы программирования для императивных ЯП:
1. Процедурное программирование (ПП)
ПП предполагает разделение процесса обработки данных на процедуры по неким общим признакам и целям обработки.
1.1. Поток управления: определенная последовательность вызовов функций.
1.2. Поток данных: данные представляют собой набор значений, над которыми производится операции. Данные и функции обработки данных логически не связаны между собой.
1.3. Взаимодействие с внешней средой осуществляется путем предоставления списка доступных функций с описанием их сигнатуры, и списка глобальных данных.
1.4. Метаданные: отсутствуют
Для статического анализа исходного кода можно применять метрики:
— Объем программы: LOC-оценки, метрики Холстеда
— Потока управления программы: метрики Маккейба, Майерса, Джилба, «Подсчет точек пересечения», метод граничных значений.
— Потока данных: метрики Чепина, Спена, Овьедо, метрика «модуль-глобальная переменная»
2. Объектно-ориентированное программирование (ООП)
ООП предполагает группировку процесса обработки данных и самих обрабатываемых данных в единый объект по некоторым признакам общности.
2.1. Поток управления: состоит из двух частей — неопределенная последовательность взаимодействий объектов и определенная последовательность вызвов методов внутри объекта.
2.2. Поток данных: состоит из двух частей: данные, передаваемые между объектами, и данные, инкапсулированные внутри объектов. Обработка данных производится только внутри объектов, которым они принадлежат.
2.3. Взаимодействие с внешней средой осуществляется через описание интерфейса объекта и только через него. Интерфейс объекта – это список доступных методов объекта с описанием их сигнатуры и список типов данных, которые можно получить от объекта.
2.4. Метаданные: необязательны, применяются для задания дополнительных аттрибутов как объектам в целом, так и их методам и данным.
Анализ объектно-ориентированной программы можно разделить на две части:
— анализ структуры каждого отдельного объекта: здесь возможно применить все методы анализа процедурных программ. Дополнительно к ним требуется провести анализ интерфейсов объектов и метаданных объектов. Метаданные могут также быть использованы как дополнительная информация для анализа объектов. При этом анализ объекта должен проводится вне контекста взаимодействующих с ним других объектов.
— анализ взаимодействия объектов: анализ графа объектов, степень зависимости объектов и их интерфейсов друг от друга, характеристики потока данных и потока управления между объектами. Здесь применимы метрики связности класса по данным и по методам, зависимости изменений между классами, локальности данных класса, наборы метрик Чидамбера и Кемерера, Лоренца и Кидда, Абреу.
3. Компонентно-ориентированое программирование (КОП)
КОП предполагает объединение ПП-процедур или ООП-объектов в компоненты по принципу функциональной общности и целостности. В отличие от ООП-объектов компонент должен быть независимым от внешней среды в рамках, определяющих его функциональное назначение.
3.1. Поток управления: также состоит из двух частей – взаимодействие ПП-процедур или ООП-объектов внутри компонента и взаимодействие между компонентами в системе. При оценке ПУ для КОП ПС можно применять те же методы, что и для ПП и ООП с учетом свойства «независимости» компонентов друг от друга.
3.2. Поток данных: также можно разделить на два субпотока – данные, поступающие из/во внешний мир и данные, циркулирующие внутри компонента. Аналогично анализу потока управления можно использовать методы ПП или ООП анализа.
3.3. Взаимодействие с внешней средой: осуществляется, как и в ООП, через объявление интерфейса компонента. Но если интерфейс ООП-объекта просто предоставляет «наружу» список возможностей объекта, интерфейс компонента также предъявляет определенные требования к взамодействующим с ним компонентам.
3.4. Метаданные: наличие обязательно, т.к. они являются основным инструментом определения интерфейса компонента.
Структура анализа КОП программ аналогична ООП, для анализа можно использовать модифицированные методы ООП.
4. Аспектно-ориентированое программирование (АОП) (?)
АОП является, по сути, расширением возможностей ООП парадигмы за счет непосредственного внедрения метаданных в ЯП. В АОП дополнительно вводится обобщение объектов, методов и данных объектов на основе их принадлежности к некоторым общим группам по признакам т.н. «сквозной» функциональности. В целом, можно сказать, что такие группы являются отдельными объектами, но в то же время являются частями всех объектов в группе.
4.1. Поток управления: анализ ПУ аналогичен анализу в ООП, но с учетом того, что подпотоки групп являются одинаковыми для всех объектов, принадлежащих некоторой группе и по сути являются отдельными (?) потоками.
4.2. Поток данных: содержит в себе подпотоки данных, являющихся общими для всех объектов групп, но в тоже время каждый из этих подпотоков индивидуален для каждого объекта.
4.3. Взаимодействие с внешней средой: полностью аналогично ООП.
4.4. Метаданные: обязательны, являются частью ЯП.
Структура анализа АОП программ аналогична ООП, для анализа можно использовать модифицированные методы ООП.
Заранее ОГРОМНОЕ спасибо за конструктивную критику