Table of Contents
Система интерактивного и автоматического анализа исходного кода (kuixing) предназначена для решения автоматизируемых задач в процессе как статического, так и динамического анализа исходных текстов программных продуктов.
Система пригодна для анализа модулей на императивных языках программирования, таких как C, Java, Python.
Система основывается на обобщенном внутреннем представлении программных модулей и реализации виртуальной машины конкретного языка/архитектуры для возможности интерпретации программы, что позволяет проводить как статический анализ (анализ структуры без ее модификации), так и анализ в динамике (изучение свойств и поведения управляющих конструкций в зависимости от задаваемого окружения).
Модель программной системы - внутреннее представление системой анализа объекта анализа - набора программных модулей, описания целевой среды и входных данных, составляющих объект анализа.
описание целевой среды выполнения: операционная система, контекст среды, версия целевого интерпретатора
контекст программной системы: параметры командной строки, контекст операционной среды, данные поступающие на вход программе
список программных модулей, участвующих в процессе анализа, как непосредственно анализируемых, так и задающих контекст выполнения для анализируемых конструкций
внутреннее представление анализируемых программных модулей
Конфигурация - контейнер сущностей, которыми оперирует система в процессе анализа, включает в себя:
модель программной системы в стартовый момент: начальное состояние
список сессий анализа
Сессия анализа - последовательность преобразований модели программной системы при динамическом анализе. Сессия хранит историю изменений своего состояния в процессе анализа.
Статический анализ - исследование программной системы без помощи интерпретатора.
Динамический анализ - исследование программной системы с помощью интерпретатора.
Контекст - отображение символьных имена
Программный модуль - TODO
Точка модификации контекста - TODO (уровни контекста: среды, конфигурации, инструкции)
Поток данных в системе анализа выглядит следующим образом:

На вход система получает набор программных модулей и данные необходимые для интерпретации:
спецификация среды выполнения (версия и класс операционной системы, версия и класс интерпретатора, набор системных библиотек, контекст операционной системы)
входные данные (параметры командной строки, модули данных)
На основе входных данных создается начальное состояние - отправная точка для всего процесса анализа.
Конфигурация, с внешней по отношению к системе анализа точки зрения, является той сущностью, которой оперирует система анализа. Т.е. по входным данным создается конфигурация, результаты анализа хранятся в конфигурации, промежуточное состояние сохраняется в конфигурацию и восстанавливается из конфигурации.
После создания конфигурации начинается последовательность сессий анализа.
Сессия анализа может быть создана, как на основе начального состояния из конфигурации, так и на основе любого промежуточного состояния модели из истории изменений уже существующей сессии.
Промежуточное состояние любой сессии может быть экспортировано в набор програмнных модулей и модулей данных (это может быть необходимо, например, при упрощении/рефакторинге программной системы). Так же по результату сессии анализа может быть создан тест в тест-плане, отражающий проведенные изменения и полученные результаты.
Результатом работы системы в целом становится тест-план, и, возможно, экспорты некоторых промежуточных состояний сессии анализа.
С точки зрения пользователя система делится на следующие компоненты:
компонента управления конфигурациями
компонента управления сессиями анализа (всеми сессиями)
компонента управления сессией анализа (текущей)
компонента создания отчетов
Эта компонента отвечает за хранение, восстановление, создание и модификацию конфигураций.
Каждая проведенная сессия анализа хранится как часть конфигурации в системе. Эта компонента отвечает за управление множеством сессий анализа: создание, копирование, удаление, переименование, категоризация.
Сессии в конфигурации могут находиться в двух состояниях: открытом и заархивированном. Изначально сессия создается в открытом состоянии, проходит последовательность модификаций и переходит в заархивированное состояние.
Сессия не может перейти из заархивированного состояния в открытое, если необходима последующая модификация состояния сессии, то создается новая копированием истории заданной.
Эта компонента отвечает за непосредственное управление сессией анализа. Компонета дает доступ к возможностям получения интересующих свойств модели в заданной точке, предоставляет возможность исполнять запросы по текущему состоянию. Хранит историю преобразования модели с возможностью отката. Управляет преобразованием модели через добавление и удаление конструкций (инструкций выполнения, определений, точек преобразований контекста).
Эта компонента отвечает за преобразование результатов полученных за сессию анализа (история изменения состояний модели в течение сессии) и последовательности действий, для получения этих результатов, в другие документы, такие как тест-план и результаты экспорта состояния модели.
Если не существует конфигурации с заданным идентификатором, то создается новая пустая конфигурация с заданным идентификатором, иначе пользователь получает сообщение о невозможности проведения операции.
В случае невозможности создания конфигурации по иным причинам, система выводит сообщение описывающее ошибку.
Заданный проект интегрированной среды разработки или набор Makefile'ов, описывающие программную систему, могут быть импортированы в качестве конфигурации в системе, таким образом, что перечисленные во входном проекте программные модули и модули данных присутствуют в созданной конфигурации.
Состояние конфигурации на текущий момент может быть сохранено на носитель данных.
В любой момент, по записи на носителе данных может быть восстановлена конфигурация с состоянием на момент сохранения.
В существующую конфигурацию может быть внесен новый программный модуль, либо модуль данных.
Создается новая сессия анализа с заданным идентификатором. Начальное состояние модели программной системы копируется из конфигурации.
Завершается сессия анализа, по итогам сессии пользователь получает возможность создать новый тест в тест-плане. Сессия архивируется и закрывается для модификации.
Указанная сессия анализа (открытая или заархивированная) удаляется из конфигурации. Если по результатам сессии был создан тес в тест-плане, то он так же удаляется.
Контекст любого из уровней: ОС, конфигурации, инструкции, может быть модифицирован добавлением точки модификации контекста.
Для любой конструкции модели программной системы текущей сессии анализа может быть получен контекст ее вычисления.
В случае если текущий контекст заданной инструкции достаточен для ее вычисления, конструкция может быть вычислена и заменена на результат своего вычисления.
Изменена модель программной системы текущей сессии анализа. Заданная конструкция заменена результатом вычисления. В истории сессии анализа добавилась запись о вычислении конструкции.
В случае если текущий контекст недостаточен для вычисления заданной конструкции, пользователь получает сообщение об ошибке.
Модель программной системы текущей сессии анализа может быть интерпретирована в пошаговом режиме начиная от точки входа до последней исполняемой конструкции, с соблюдением порядка перехода управления.
Для любого символа контекста заданной точки модели программной системы текущей сессии анализа может быть указан набор конструкций, на вычисление которых влияет (значит изменение символа коррелирует с изменением результата вычисления) его значение.
Для любой заданной последовательности модификаций модели програмнной системы текущей сессии анализа может быть указан набор конструкций модели, которые затронуты/не затронуты этой последовательностью модификаций.
Состояние модели программной системы текущей сессии анализа может быть экспортировано в программную систему таким образом, что повторное создание конфигурации на его основе приведет к получению модели программной системы идентичной исходной с точностью до вычисления конструкций изменения контекста.
Для любой конструкции (группы конструкций) модели программной системы текущей сессии анализа может быть сформирован список символов контекста необходимых для полного вычисления конструкции.
По истории заданной сессии анализа может быть создан тест в тест-плане конфигурации. Пользователю предоставляется возможность выбора необходимых для теста результатов вычисления.