5.4.1. Системы формального преобразования и верификации программ
Поддержка технологий формального преобразования и верификации программ осуществляется специальными системами. Большинство из них являются научно-исследовательскими и не имеют коммерческого применения. Одной из наиболее интересных современных работ в области формальных подходов верификации программ является В-технология. На ее основе была осуществлена разработка системы управления парижским метрополитеном "METEOR".
Цель создания средств формального преобразования программ состояла в том, чтобы автоматизировать задачи разработки программного обеспечения, модификацию программ и исправление ошибок. Преобразования специфицировались, используя правила, левая часть которых - это образец исходного кода, а правая - действия, которые должны быть выполнены, если левая часть встретилась в тексте. Приведем примеры таких систем.
Система TXL [Kozaczynsky, Hing, Engberts 1992] конвертирует код, написанный на диалекте, в код на базовом языке. Это выполняется через преобразование синтаксического дерева грамматики диалекта в синтаксическое дерево базового языка, а затем получение новой программы из последнего. Для преобразования деревьев использовался рекурсивный алгоритм обхода дерева.
Средство IntelliJ Renamer (http://www.intellij.com/products/) - это мощное средство для преобразования программ и поиска в программном коде, разработанное для языка Java. Оно позволяет производить переименование методов, пакетов, полей, переменных и параметров методов с автоматическим исправлением вхождений. IntelliJ CodeSearch позволяет делать поиск в исходном коде на языке Java, к примеру, вызовов определенных методов или определения классов, реализующих некоторый интерфейс. Это средство корректно работает с перегруженными методами различных классов с одинаковыми именами. В этих средствах используется идея работы по синтаксическому дереву.
Система RescueWare (http://www.relativity.com/products/rescueware/) является системой производства программ с новой бизнес-логикой, преобразуя и используя части существующих программных ресурсов. Для осуществления этих операций система предлагает разделение задачи на несколько подзадач. Сначала проходит стадия понимания программ [Бульонков, Бабурин 2000]. На этом этапе выделяются такие сущности, как программный уровень, потоки данных, карта вызовов. Далее проходит стадия изоляции определенной бизнес-логики. На этом этапе выделяются компоненты, пригодные для переиспользования. Впоследствии созданные компоненты используются для генерации новой программной системы с учетом особенностей новых платформ. В таких подходах ключевым моментом, зачастую, является преобразование программы на процедурном языке в программу на объектно-ориентированном языке. Для осуществления такого преобразования объекты должны быть идентифицированы из процедурных частей. Объектно-ориентированные программы (в сравнении с процедурно-базируемыми) считаются более простыми в сопровождении.
Существуют также системы, которые предназначены для анализа исходных кодов с целью получения высокоуровневых абстракций. Так, например, существуют средства [Niere, Wadsack, Zundorf 2000], которые анализируют код на языке Java с целью генерации диаграмм UML. Данный подход базируется на использовании сетей рассуждений, построенных на нечеткой логике [Jahnke, Heitbreder 1998]. Также существуют средства, которые предоставляют среду разработки для объектно-ориентированных языков, используя диаграммы UML. Они позволяют не только генерировать код по диаграммам, но и анализировать его с целью построения такой диаграммы. Это позволяет более наглядно представлять архитектуру разрабатываемой системы и улучшать ее понимание.
- 5. Системы программирования
- 5.1. Введение в системы программирования
- 5.1.1. Основные понятия и определения
- 5.1.2. История и эволюция
- 5.1.2.1. Некоторые важные даты
- 5.1.2.2. Основные этапы в формировании состава систем программирования
- 5.1.2.3. История развития системы программирования компании Borland Inc. На базе языка Pascal
- 5.1.3. Классификация
- 5.1.3.1. Классификация по ориентации на поддержку процессов
- 5.1.3.2. Функциональная классификация
- 5.1.3.3. Классификация по категориям
- 5.1.3.4. Классификация по предоставляемому интерфейсу
- 5.1.4. Проблемы и перспективы развития
- 5.1.5. Рекомендации по литературе
- 5.2. Процесс-ориентированный инструментарий
- 5.2.1. Возникновение и исследование идеи
- 5.2.2. Управление
- 5.2.2.1. Системы управления проектами
- 5.2.2.2. Организационные средства
- 5.2.2.3. Средства оценки качества
- 5.2.3. Анализ требований и проектирование
- 5.2.3.1. Системы на основе структурной методологии
- 5.2.3.2. Системы на основе объектно-ориентированной методологии
- 5.2.4. Программирование (реализация)
- 5.2.4.1. Трансляторы
- 5.2.4.2. Компиляторы
- 5.2.4.3. Системы генерации трансляторов
- 5.2.4.4. Системы анализа корректности программного кода
- 5.2.4.5. Интерпретаторы
- 5.2.4.6. Декомпиляторы
- 5.2.4.7. Усложнители декомпиляции (шифраторы, обфускаторы)
- 5.2.4.8. Системы управления компиляцией и построением программ
- 5.2.5. Тестирование и отладка
- 5.2.5.1. Тестовые мониторы
- 5.2.5.2. Средства отслеживания тестового покрытия
- 5.2.5.3. Средства динамического построения профиля программы
- 5.2.5.4. Системы построения срезов программы
- 5.2.5.5. Отладчики
- 5.2.5.6. Системы отслеживания проблем (ошибок)
- 5.2.6. Ввод в действие
- 5.2.7. Сопровождение
- 5.2.8. Завершение эксплуатации
- 5.3. Универсальный инструментарий
- 5.3.1. Инструменты работы с текстом
- 5.3.1.1. Средства, базирующиеся на регулярных выражениях
- 5.3.1.2. Средства поиска различий
- 5.3.1.3. Средства поиска на основе шаблонов
- 5.3.1.4. Обозреватели и базы данных программ
- 5.3.1.5. Средства обнаружения плагиата
- 5.3.1.6. Текстовые редакторы
- 5.3.1.7. Синтаксически-ориентированные редакторы
- 5.3.1.8. Гипертекстовые средства
- 5.3.2. Системы документирования
- 5.3.3. Системы разработки интерфейсов
- 5.3.4. Системы управления базами данных
- 5.3.5. Системы управления базами знаний и экспертные системы
- 5.3.5.1. Системы искусственного интеллекта
- 5.3.5.2. Механизмы выводов на знаниях
- 5.3.5.3. Неточный вывод на знаниях
- 5.3.6. Электронные библиотеки и инструментарий Интернета
- 5.3.6.1. Парадигма усиления информации
- 5.3.6.2. Профессиональный поиск информации
- 5.3.6.3. Проблемы работы с информационными ресурсами Интернета
- 5.3.6.4. Коллекции информационных ресурсов в Интернете
- 5.3.6.5. Базы данных в Интернете
- 5.3.6.6. Краткая история поисковых средств Интернета
- 5.3.6.7. Искусственный интеллект и задача поиска в Интернете
- 5.4. Инструментарий поддержки процессов некоторых технологических подходов
- 5.4.1. Системы формального преобразования и верификации программ
- 5.4.2. Средства сборочного программирования
- 5.5. Инструментальные системы
- 5.5.1. Инструментальные среды программирования
- 5.5.2. Средства автоматизации разработки программ (case-средства)
- 5.5.3. Интегрированные среды
- 5.5.4. Репозитории проекта
- 5.6. Средства поддержки коллективной разработки
- 5.6.1. Системы разделения файлов
- 5.6.1.1. Система управления версиями файлов
- 5.6.1.2. Система управления пространствами
- 5.6.1.3. Система синхронизации удаленных пространств
- 5.6.2. Системы поддержки работы виртуальных групп
- 5.7. Естественно-языковый интерфейс
- 5.7.1. Диалоговые системы
- 5.7.2. Вопросно-ответные системы
- 5.7.3. Автоматизированные обучающие системы и системы контроля знаний
- 5.7.4. Системы искусственного интеллекта