Главная страница
Навигация по странице:

  • 5.2.5. Тестирование и отладка Заблуждения, заключающие в себе некоторую долю правды, самые опасные. Адам Смит

  • 5.2.5.1. Тестовые мониторы

  • 5.2.5.2. Средства отслеживания тестового покрытия

  • 5.2.5.3. Средства динамического построения профиля программы

  • 5.2.5.4. Системы построения срезов программы

  • 5.2.5.6. Системы отслеживания проблем (ошибок)

  • 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. Системы программирования


    Скачать 175.93 Kb.
    Название5. Системы программирования
    Дата05.09.2022
    Размер175.93 Kb.
    Формат файлаdocx
    Имя файлаинт.среды.docx
    ТипДокументы
    #663216
    страница3 из 7
    1   2   3   4   5   6   7


    Листинг 5.1. Пример файла с инструкциями для утилиты make

    BASE_DIR = /usr

    BIN_DIR = $(BASE_DIR)/bin

    LIB_DIR = $(BASE_DIR)/lib

    # В результате такого описания получится, что значение
    # переменной BIN_DIR стало равным /usr/bin, a LIB_DIR - /usr/lib.

    OBJS = main.о classa.o classb.o

    LIBS = libCstd.a libCrun.a

    main: clean $(OBJS)

       $(CCC) -o $@ $(OBJS) -L $(LIB_DIR) $(LIBS)

    # Разыменование переменной ССС, которая у нас не присутствует,
    # но может присутствовать в окружении.
    # Использование $@ после параметра -о приводит к тому, что результирующий файл будет
    # называться тоже main.

    clean:

       rm -f *.o main core

    # Удаление всех объектных файлов и core-файла, который может быть
    # создан в результате некорректного завершения предыдущей компиляции.

    classa.o: classa.h

    # Указывает зависимость - т. е. когда будет изменен файл classa.h,
    # файл classa.o потребует перекомпиляции.

    Система make может работать в нескольких режимах, задаваемых при старте системы, следующими параметрами:

    • -n - только печатать команды, не исполняя их. То есть если make примет решение на исполнение команд, то система, не передавая их интерпретатору команд, напечатает их на экране;

    • -p - напечатать все макроопределения. То есть после разбора файла определений (makefile) напечатать все найденные там определения макросов и продолжить работу;

    • -s - не печатать команды. Без указания этой опции make при передаче команд интерпретатору команд печатает их на экран;

    • -m - обновить только цель. С этой опцией make, произведя разбор файла определений, выполняет только команды, необходимые для обновления главной цели, и никаких других команд в интерпретатор команд более не передает. Причем команды для обновления главной цели выполняются обязательно, вне зависимости от необходимости.

    Также при старте make может получить в качестве параметров имя файла определений и имя главной цели его работы. Если имя файла определений не указано, то в текущем каталоге ищется файл с именем makefile, а если он не находится, то make прекращает работу с сообщением об ошибке. Если не указано имя главной цели, то make по умолчанию берет в качестве главной цели первую цель, найденную ею в файле определений.

    Существуют расширения стандартной системы make. Например, одно из них оценивает файл описаний с точки зрения его параллельной обработки и параллельного исполнения команд, необходимых для обновления главной цели. Команды могут быть выполнены параллельно только, если они требуются для обновления абсолютно независимых целей. Иначе они будут по-прежнему исполняться последовательно.

    5.2.5. Тестирование и отладка

    Заблуждения, заключающие в себе некоторую долю правды, самые опасные. 
    Адам Смит


    Мы будем изучать вместе инструментарий, применяемый как на этапе тестирования, так и на этапе отладки. Очень часто оказывается, что один и тот же инструмент может указать на факт наличия ошибки, одновременно локализовать место ее возникновения и указать причину. Большая часть инструментов связана с технической стороной вопроса (http://www.softwareqatest.com/qatweb1.html).

    5.2.5.1. Тестовые мониторы

    Тестовый монитор состоит из трех основных компонентов.

    • Ядро системы, содержащее основные программы тестирования и оформления результатов.

    • Собственно тестовая база, включающая исходный тест и эталонные результаты пропуска тестов.

    • Тестовое пространство, обычно содержащее специфический настроечный файл.

    В результате запуска тестового монитора в тестовом пространстве начинают исполняться заданные сюиты из тестовой базы. На основе результатов тестирования можно сделать выводы об изменении качества программного продукта.

    5.2.5.2. Средства отслеживания тестового покрытия

    Системы такого типа предназначены для выявления тестового покрытия программы, в том числе участков кода, пропущенных при тестировании.

    Важную роль здесь играет понятие линейного участка - фрагмента программы, на протяжении которого нет передачи управления. Если выполняется первый оператор такого участка, то будут выполнены и все остальные. Часто данные системы используют в качестве вспомогательного средства профайлер (см. разд. 5.2.5.3).

    Примеры систем:

    • Rational PureCoverage (компании Rational Software Corporation (http://www.rational.com/));

    • Java Test Coverage and Instrumentation Toolkits (компании Glen McCluskey & Associates LLC (http://www.glenmccl.com/)).

    5.2.5.3. Средства динамического построения профиля программы

    Построение профиля программы позволяет обнаружить фрагменты кода, исполняемые при запуске программы. Полученная информация к размышлению позволяет выявить в программе те места, которые надо оптимизировать. Работа со средствами динамического построения профиля программы включает три этапа.

    • Компиляция и сборка программы с включенным режимом добавления кода с целью генерации информации для построения профиля.

    • Запуск программы с целью получения информации, необходимой для построения профиля.

    • Запуск профайлера для анализа полученной информации.

    В самом простейшем случае результатом работы профайлера будет исходный текст программы, где для каждого линейного участка указана цифра: сколько раз этот исходный участок был исполнен. Следовательно, наиболее часто исполняемые участки надо максимально оптимизировать с целью ускорения работы всей программы. Примеры профайлеров:

    • prof (компании Sun Microsystems Inc. (http://www.sun.com/));

    • gnuprof (организации Free Software Foundations (http://www.gnu.org/));

    • ProDelphi (авторская разработка Гельмута Адольфа (Helmuth Adolph) (http://www.prodelphi.de/)).

    5.2.5.4. Системы построения срезов программы

    Программный срез состоит из всех операторов программы, которые могут влиять на значение некоторой переменной в некоторой позиции. Срезы были введены для использования:

    • в отладке программ;

    • в тестировании программ;

    • в понимании смысла программ.

    Причины возникновения данного направления очевидны. При работе с исходным текстом программы часто необходимо проследить формирование значения некоторой переменной. Это особенно актуально. при отладке и. сопровождении программ. В этом случае получение среза приносит существенное облегчение работы, поскольку резко снижается объем исследуемого кода. Предположим, что во время тестирования мы установили, что некоторая переменная в некоторой позиции содержит неверное значение. Получив соответствующий срез, мы локализуем проблему. В дополнение к сказанному, срезы позволяют разбить большую программу на небольшие компоненты. Это способствует более простому пониманию смысла программы, что очень актуально при сопровождении программных продуктов. Впоследствии часть этих компонентов может быть использована при создании новой программы. Бадгер и Вейзер продемонстрировали [Badger, Weiser 1988], как срезы могут быть использованы для автоматической параллелизации. Однако основной областью применения срезов остается отладка и сопровождение программ.

    В начальном понимании понятие срез (статический срез) учитывает все возможные пути исполнения программы. Однако обычно на практике мы имеем дело с частным случаем, в котором программа работает некорректно, и, естественно, нас интересует причина происходящего. Таким образом, вместо того, чтобы отслеживать все множество входных данных, мы будем рассматривать срез, который сохранит свойства программы для определенного входа. Такой тип среза был обозначен термином динамический срез.

    Большинство существующих методов вычисления динамического среза основано на так называемом обратном анализе, когда после исполнения программы записывается ее трассировка, и затем алгоритм отслеживает эту трассировку в обратном направлении для получения зависимостей по данным и по контролю, которые в свою очередь используются для вычисления динамического среза. Существуют методы, вычисляющие динамический срез в процессе исполнения программы и не записывающие трассировку.

    Практически все существующие методы вычисления динамического среза рассчитаны на работу с программами, написанными в стиле структурного программирования. Бол и Хорвиц [Ball, Horwitz 1993] предложили подход для вычисления статических срезов для неструктурированных программ, модифицировав понятие зависимости по контролю для данного случая.

    В существующих алгоритмах основной целью вычисления динамического среза является определение той части кода, которая влияет на значение интересующей переменной, путем выявления зависимостей по данным и по контролю (см. разд. 4.3.3.6) в трассировке. При определении динамического среза важно найти не только части, влияющие на процесс вычисления интересующей переменной, но также и части, не влияющие на него. Чем больше таких не влияющих частей будет найдено, тем меньший динамический срез может быть получен.

    5.2.5.5. Отладчики

    Отладчик — программа, помогающая анализировать поведение отлаживаемой программы, обеспечивая ее трассировку. При этом большинство отладчиков позволяют выполнять остановки в указанных точках или при заданных условиях, просматривать текущие значения переменных, ячеек памяти, регистров процессора и, при необходимости, изменять эти значения. Нужные для отладчика данные порождает компилятор при включенном режиме генерации отладочной информации. Это данные о типах, начале и конце блоков, специфических конструкциях и т. п.

    Кроме классических отладчиков существуют еще несколько групп инструментов.

    • Средства динамической отладки распределения памяти — специальный инструментарий, позволяющий анализировать распределение памяти в процессе исполнения программы.

    • Средства отладки многопоточных и параллельных приложений. Это те приложения, которые в некоторой точке могут разветвиться для выполнения параллельной работы, потом попадают в точку ожидания и опять выполняются последовательно. Примеры — средства компании Sun Microsystems Inc. (http://www.sun.com/):

      • thd (Thread Analiser) — нитевой анализатор, который исполняется для того, чтобы отслеживать многопоточные приложения;

      • locklint - анализатор корректности взаимных исключений;

      • looptool - анализатор распараллеливания программ.

    5.2.5.6. Системы отслеживания проблем (ошибок)

    Системы отслеживания проблем обычно представляют собой интерфейс к обыкновенной базе данных. Наиболее сложный вопрос при разработке таких систем - отбор информации, которая связана с проблемой (ошибкой). Вот одна из возможных структур такой информации:

    • основная информация об ошибке:

      • номер ошибки;

      • краткое описание проблемы;

      • ключевые слова;

      • приоритет;

      • состояние;

    • место проявления ошибки:

      • программный продукт;

      • версия продукта;

      • компонент;

      • особенность;

    • персоналии:

      • ответственный менеджер;

      • ответственный инженер;

      • инженер, выставивший ошибку;

      • адреса рассылки;

    • анализ ошибки и исправление:

      • подробное описание ошибки;

      • тест, на котором проблема проявляется;

      • предлагаемое исправление;

      • комментарии;

      • информация для пользователей;

    • влияние исправления:

      • интеграция регрессионного теста в тестовую базу данных;

      • влияние исправления на документацию к программному продукту;

      • влияние исправления на другие компоненты.

    Примерами систем отслеживания проблем являются:

    • Bugzilla, применяемая для сбора информации об ошибках гипертекстового браузера Mozilla (http://bugzilla.mozilla.org/);

    • Open Source Web Browser (авторская разработка Адама Сигеля (Adam Siegel) (http://www.asgtools.com/products/bt.html)).

    5.2.6. Ввод в действие

    Основная группа систем данного процесса - это системы инсталляции. Укажем самые популярные инсталляторы для операционной системы Windows (http://www.softshape.com/swrus/faq_swrus.html):

    • MindVision's Installer VISE - мощнейший профессиональный инсталлятор, используемый даже крупными корпорациями;

    • WISE - известен самым маленьким размером получающегося дистрибутива. Имеет богатый язык скриптов;

    • InstallShleld Professional/Express - старейший продукт, обладающий всеми необходимыми возможностями для создания сколь угодно сложных сценариев установки;

    • CreateInstall - простой, легкий в освоении и компактный инсталлятор.

    5.2.7. Сопровождение

    Можно выделить следующие основные группы инструментов, используемых при сопровождении программ:

    • связанные с технической стороной сопровождения (трансляторы, отладчики, системы управления версиями текстов и т. п.). Поскольку сопровождение представляет мини-модель жизненного цикла, то инструменты, применяемые во всех процессах жизненного цикла, могут понадобиться и здесь;

    • связанные с анализом и пониманием кода. Это специальные средства реинжиниринга и обратной инженерии. Также сюда мы относим средства восстановления спецификаций, конверторы и другие системы;

    • связанные с организационной стороной сопровождения. Эти средства дают возможность выполнения административных функций (например, ведения базы данных ошибок) сопровождающему программный продукт.

    5.2.8. Завершение эксплуатации

    Основная группа систем данного процесса - это системы деинсталляции. Такие системы выполняют действие, обратное действию инсталляции, и, как правило, входят в инсталляционный пакет.

    5.3. Универсальный инструментарий

    Напомним, что в этом разделе под универсальностью инструментария будем понимать возможность его применения в нескольких процессах

    5.3.1. Инструменты работы с текстом

    Существующие на сегодняшний момент системы можно подразделить на несколько классов. Так, некоторые из них используются как простые средства для обработки текстов, другие же представляют собой мощные автоматизированные программные комплексы. В этом разделе перечислены наиболее значимые из них.

    5.3.1.1. Средства, базирующиеся на регулярных выражениях

    Развитыми средствами определения шаблонов и осуществления поиска являются средства семейства grep в операционной системе Unix. Как grep, так и egrep могут искать участки текста, используя регулярные выражения. Наряду со специальными утилитами используются механизмы, встроенные в некоторые языки обработки текстов, например Perl (http://www.perl.org/).

    Эти средства используют текстовый поиск и в них не заложена семантика входного текста. А значит с их помощью нельзя отличить поиск по регулярным выражениям в произвольном тексте от поиска в исходном тексте программ. Можно провести аналогии с использованием архивирующих систем: те из них, которые предназначены для архивации текста, будут обладать гораздо меньшей эффективностью для архивации потоков звука и видео, и наоборот. Поэтому такие средства обладают рядом ограничений.

    • Написание конкретного шаблона для поиска в исходном тексте может быть затруднительным, а иногда и невозможным. Например, пусть требуется локализовать два последовательных оператора цикла: цикл типа for, следующий за циклом типа while, причем оба с произвольными условиями и блоками операторов, на одном и том же уровне вложенности. Возможная спецификация для grep может быть такой: .*while.*for. Однако такая спецификация grep отыщет не только последовательные операторы цикла, но и вложенные. Дополнительно будут найдены такие последовательные операторы, которые непосредственно не следуют друг за другом. Кроме того, оба требуемых ключевых слова могут оказаться в комментарии.

    • Вторая проблема, связанная с использованием grep, заключается в написании шаблонов для отыскания деклараций. Рассмотрим написание шаблона для поиска декларации целой переменной х и символьной с. Поскольку порядок деклараций на одном и том же уровне вложенности в большинстве случаев не столь важен, они могут оказаться в любом порядке в исходном тексте. Поэтому для отыскания, например, двух деклараций с помощью регулярных выражений надо применять конструкцию такого вида: (.*int[ ]*x[ ]*;.*char[ ]*c[ ]*;) | (.*char[ ]*c[ ]*;.*int[ ]*x[ ]*;). Сложность же такой спецификации для более чем двух отыскиваемых деклараций очевидна. Если в исходном тексте была декларирована инициализированная целая переменная (int x=0;), то поиск для нее окажется неудачным в любом случае.

    • Третья проблема, которая может возникнуть при использовании средств семейства grep, связана со специальными символами. Обычно эти средства воспринимают символ "новая строка" как разделитель даже тогда, когда мы ищем выражение в многострочном контексте. Это особенно мешает поиску в исходном тексте, поскольку зачастую предмет поиска охватывает несколько строк. К тому же необходимость постоянно учитывать разделители (пробелы, символы "новая строка", символы табуляции) затрудняет составление регулярных выражений.

    Регулярные выражения для поиска по шаблонам используются в утилитах ed, sed, awk и perl:

    • ed и sed являются текстовыми преобразователями. Они позволяют находить и заменять фрагменты, базируясь на регулярных подвыражениях (в случае sed - многострочных). Они тоже воспринимают входной текст как поток символов, что некорректно;

    • awk воспринимает входной текст как набор записей, и, несмотря на то, что это уже более подходящая абстракция, нежели символ, она все же не адекватна в применении к программному тексту. Семантически разные части могут оказаться в одной записи. Например, for (i=0;i<5,-i++) { - это все одна запись;

    • perl, в частности версии 5, обладает более широким механизмом регулярных выражений, но даже и они остаются не столь удобными для поиска в исходном тексте программы, поскольку не учитывают его особенности.

    5.3.1.2. Средства поиска различий

    Средства поиска различий предназначены для обнаружения разницы между файлами. Такая необходимость возникает достаточно часто. Например, для сравнения старой и новой версии одного файла или сравнения изменений, внесенными двумя разными людьми на основе одной исходной версии. Стандартным результатом работы таких средств являются строки файлов, которые нужно изменить для того, чтобы привести файлы в соответствие друг с другом. В большинстве случаев находится минимальный достаточный набор различий.

    Примеры таких систем:

    • diff (компании Sun Microsystems Inc. (http://www.sun.com/)) входит в состав операционной системы Solaris;

    • GNU diff (организации Free Software Foundations (http://www.gnu.org/software/diff/diffutils/)) представляет собой совокупность нескольких утилит:

      • diff - основная утилита для нахождения различий между двумя файлами;

      • cmp - утилита, выдающая информацию о номерах строк, в которых в файлах есть различия;

      • diff3 - утилита, находящая различия между тремя файлами;

      • sdiff - утилита для интерактивного объединения двух файлов в один.

    5.3.1.3. Средства поиска на основе шаблонов

    Средства поиска на основе шаблонов в качестве входных данных получают исходный код на языке программирования и запрос на языке шаблонов (образцов). На выходе выдается информация о том, какие строки исходного программного кода соответствуют спецификации шаблона.

    В запросе можно также указать поиск последовательности операторов. В таком случае запрос понимается как поиск указанной последовательности операторов в любом месте исследуемого кода. Вся последовательность воспринимается как один запрос.

    Для того чтобы специфицировать запрос к исходному коду, используется язык образцов. Язык образцов для спецификации запроса является расширением базового языка. Расширения включают набор специальных символов, которые используются для замены синтаксических сущностей базового языка. Без учета дополнительных расширений запрос может состоять из участка программы для осуществления конкретного поиска по исходному тексту. Когда же спецификация запроса включает дополнительный символ или символы, то они играют роль абстрактных шаблонов. Шаблоны потенциально могут быть заменены реальными фрагментами кода в соответствии с семантикой того или иного символа.

    Специальные символы языка запросов применяются для замены синтаксических сущностей, таких как:

    • декларация произвольной переменной с указанием произвольного типа;

    • произвольный идентификатор, константа или выражение;

    • произвольный формальный параметр или группа формальных параметров;

    • произвольный оператор или группа операторов.

    Запросы могут быть следующих типов:

    Для примера приведено несколько конструкций запросов. В качестве базового языка выбран язык С.

    • Найти все операторы цикла while, в которых происходит сравнение какого-нибудь выражения на неравенство его нулю. Запрос будет выглядеть так: while (# != 0) @. На основе данного запроса система производит поиск всех операторов while, удовлетворяющих вышесказанному условию, на любом уровне вложенности. Знак # - это шаблон для произвольного выражения, а @ - шаблон для произвольного оператора. Такой запрос может оказаться полезным, если необходимо выявить все конструкции в программе с таким условием, с целью их замены на while (#) @.

    • Найти все вхождения трех подряд идущих операторов if. Запрос будет выглядеть так: if (#) @ if (#} @ if (#) @. Целью такого запроса может стать локализация потенциальных кандидатов на преобразование последовательных операторов if в оператор switch.

    • Найти все вхождения оператора if, где в качестве условия возможно ошибочное использование оператора присваивания = вместо равенства ==. Запрос будет выглядеть так: if (# = #) @. Целью такого запроса может стать локализация часто встречающейся ошибки в коде на языке С, когда в выражениях сравнения используется оператор присваивания.

    • Найти последовательности операторов, в которых три или более операторов if встречаются подряд, причем возможно их разделение другими операторами. Запрос будет выглядеть так: if (#) @ @* if (#) @ @* if (#) @. Целью такого поиска может стать локализация участков с большой цикломатической сложностью - в данном примере имеется восемь различных путей управления через данную последовательность операторов.

    5.3.1.4. Обозреватели и базы данных программ

    Обозреватели генерируют базу данных программы, куда в качестве сущностей включаются имена файлов, имена функций, переменные и другие сущности программы с хорошо определенными отношениями между ними. Чтобы получить информацию о том, какая функция вызывает определенную процедуру или глобальные данные, используемые какой-то определенной Функцией, могут быть сделаны запросы к этой базе данных программы.

    Хотя такие средства очень мощны и полезны, все же они поддерживают ограниченный диапазон запросов, которые базируются на концепции "сущность-отношение-атрибут". При таком рассмотрении отсутствует структурность, присущая исходному программному коду.

    Примеры инструментов, разработанных для выполнения запросов к исходному коду и упрощающих просмотр текста:

    • Omega [Linton 1984];

    • CIA [Chert, Nishimoto, Ramamoorthy 1990] и CIA++ [Grass 1992];

    • Microscope [Ambras, O'Day 1987].

    5.3.1.5. Средства обнаружения плагиата

    Инструменты для определения плагиата в программах (особенно академических) в основном базируются на метриках Холстеда. Другая категория таких инструментов использует статическое дерево исполнения (граф потока управления) программы, чтобы составить "отпечаток пальцев" программы. Далее дерево исполнения анализируется, и на основе анализа делаются выводы о том, была ли программа заимствована. Основное ограничение таких систем состоит в том, что сравнение программ в них зависит от статистической информации.

    В работе (http://www.iam.unibe.ch/

    scg/) представлено средство обнаружения повторяющихся участков кода. В нем используется техника абстракции от языка. Это осуществляется с помощью подхода, названного авторами визуализацией кода. Он основан на первоначальном преобразовании кода к удобному для дальнейшего исследования виду. Данный подход базируется на преобразовании текста, а не на синтаксических сущностях.

    5.3.1.6. Текстовые редакторы

    Текстовый редактор - программа, позволяющая вводить в файл символьную информацию и модифицировать ее. Можно выделить несколько разновидностей текстовых редакторов.

    • Строковые редакторы, позволяющие смотреть и редактировать текст только на одной строке. При этом текст воспринимается как последовательность строк, разделенных символом "конец строки".

    • Потоковые редакторы, позволяющие воспринимать текст в виде потока символов. При этом признаки конца строки также являются символами.

    • Экранные редакторы, позволяющие перемещать по тексту окно, в котором можно передвигать курсор и устанавливать его в нужные позиции. Многие экранные текстовые редакторы позволяют видеть на экране текст в том виде, в котором он будет напечатан (концепция What You See Is What You Get - WYSIWYG).

    Сейчас распространены универсальные текстовые редакторы, которые избыточны для большинства конкретных задач. Рассмотрим несколько уровней текстовых редакторов, каждый из которых обладает дополнительными возможностями по сравнению с предыдущими:

    1. Редакторы для составления программ. Их основные возможности - поддержка средств работы с блоками текста, поиск и замена по файлу.

    2. Редакторы для подготовки статей без графики и сложных формул. Добавляются возможности форматирования абзацев, расстановки переносов и разбиения текста на страницы.

    3. Редакторы для подготовки статей со сложными рисунками и формулами. Добавляются возможности включения графики в текст, поддержки многих кодировок и управления шрифтами.

    4. Редакторы для подготовки книг и журналов. Добавляются возможности работы с большими файлами и сбор оглавления.

    5. Редакторы для подготовки научно-технической документации. Добавляются возможности поддержки" листов изменений, колонтитулов и предметных указателей.

    Редакторы для составления программ могут учитывать синтаксическую структуру обрабатываемой программы и выполнять дополнительный анализ и проверку (см. разд. 5.3.1.7).

    Вот несколько наиболее известных и популярных текстовых редакторов:

    • Microsoft Word (компании Microsoft (http://www.microsoft.com/)) в операционной системе Windows и аналогичный ему по возможностям редактор StarOffice (компании Sun Microsystems Inc. (http://www.sun.com/staroffice/)) в Unix;

    • Биллом Джоем (Bill Joy) был разработан полноэкранный текстовый редактор для Unix - vi. Этот редактор до сих пор является одним из самых используемых стандартных текстовых редакторов на компьютерах с операционной системой Unix.

    5.3.1.7. Синтаксически-ориентированные редакторы

    Синтаксически-ориентированные редакторы учитывают при работе структуру обрабатываемого текста. Они позволяют реализовать следующие возможности:

    • предоставление пользователю возможности редактирования текста на уровне смысловых конструкций используемого языка;

    • избавление пользователя от необходимости детально знать правила записи конструкций языка программирования;

    • ускорение ввода программы за счет подстановки языковой конструкции целиком при нажатии одной функциональной клавиши;

    • ведение непрерывного контроля правильности программы, включая синтаксис и полную статическую семантику;

    • обеспечение автоматического форматирования текста программ и ее просмотра в удобном режиме. Примеры синтаксически-ориентированных редакторов:

    • EMACS (организации Free Software Foundations (http://www.gnu.org/software/emacs/)) - редактор, в основе которого лежит LISP-система;

    • MENTOR - исторически первая система структурного редактирования;

    • ALOE - генератор структурных редакторов в рамках проекта GANDALF.

    5.3.1.8. Гипертекстовые средства

    Средства исследования и просмотра с гипертекстовыми возможностями позволяют просматривать и редактировать текст (обычно - программный код), используя специальные средства браузеров, такие как выделение цветом, стилем, гипертекст и т. п. Разработаны и продолжают разрабатываться системы, целью которых является исследование и просмотр исходного текста крупных проектов с открытым исходным текстом. В качестве средства просмотра используется обычный html-браузер. Примеры средств:

    • Linux Cross-Reference - LXR (http://lxr.linux.no/) - было создано как средство просмотра ядра операционной системы Linux;

    • Mozilla Cross-Reference (http://lxr.mozilla.org/) - средство просмотра исходных текстов браузера Mozilla;

    • FreeBSD Unix Cross-Reference (http://lxr.linux.no/freebsd/source/) - средство просмотра текстов операционной системы FreeBSD Unix.

    5.3.2. Системы документирования

    Существуют различные генераторы документации, большинство из которых основано на различных принципах сбора информации по исходным текстам программ. Примеры таких программ:

    • javadoc (компании Sun Microsystems, Inc. (http://www.sun.com/)) - генератор документации Java. Он считывает исходные тексты программ на языке Java, ищет комментарии специального вида и сопоставляет их с классами и методами, которые они описывают. Собрав все элементы, генератор придает им вид HTML-структуры и сохраняет в виде файла. Комментарии для генератора похожи на блочные комментарии в языке С, но имеют две звездочки после первой наклонной черты. Существует несколько ярлыков - символов, имеющих специальное значение (например, знак @). Так, комбинация символа и слова - @author заставит программу использовать специальные команды HTML, выделяющие имя автора в программе;

    • ToolBook - инструментальная система разработки информационных приложений, создания гипермедиа-приложений (электронной документации, словарей, справочников и энциклопедий) и интерактивных обучающих программ. Отличительная особенность данной системы - использование метафоры книги в качестве основы создаваемых приложений. Приложение называется книгой, состоит из страниц и обладает всеми свойствами Windows-приложений [Смирнов, Керов, Дерюшев 1998].

    5.3.3. Системы разработки интерфейсов

    Системы разработки интерфейсов в начале 90-х годов прошлого века составляли большую долю в инструментарии. Сейчас такие системы входят составной частью в CASE-средства. Приведем примеры некоторых инструментов, которые можно использовать для разработки интерфейсов:

    • C++ Visual Studio (компании Microsoft (http://www.microsoft.com/));

    • C++ Workshop Visual (компании Sun Microsystems (http://www.sun.com/));

    • Delphi Suite (компании Borland Inc. (http://www.borland.com/));

    • средства построения графического интерфейса в Java (компоненты и контейнеры).

    5.3.4. Системы управления базами данных

    База данных - это последовательная совокупность данных, отображающая состояние объектов и их отношения в рассматриваемой предметной области и хранящаяся с минимальной избыточностью.

    Система управления базами данных (СУБД) - совокупность языковых и программных средств, предназначенных для создания и ведения базы данных. СУБД располагается между собственно физической базой данных и пользователями системы.

    Основная функция СУБД - предоставление пользователю базы данных возможности работать с ней, не вникая в детали на уровне аппаратного обеспечения. Другие функции СУБД - реализация транзакций, обеспечение безопасности данных и т. п.

    По типу поддержки модели данных различают несколько классов СУБД:

    • реляционные СУБД;

    • объектные СУБД;

    • логические СУБД.

    Значительно менее популярными в настоящее время являются СУБД, поддерживающие модели данных: иерархическую, сетевую, плоский файл, реляционную с вложенностью, семантическую и многомерную.

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

    • предметная область (в которой проводятся исследование, абстрагирование, поиск);

    • информационные потребности пользователя (на основе которых выполняются описания).

    Дейт [Дейт 2000] утверждает, что "и с экономической, и с теоретической точки зрения можно сказать, что реляционный подход наиболее важный (и это положение дел, по-видимому, не изменится в обозримом будущем)". Вот некоторые наиболее известные реляционные СУБД:

    • DB2 (компании IBM (http://www-4.ibm.com/software/data/));

    • Oracle (компании Oracle (http://www.oracle.com/));

    • Access (компании Microsoft (http://www.microsoft.com/)).

    Две следующие разработки относятся к классу расширяемых реляционных СУБД, позволяющих высококвалифицированным пользователям настроить систему заданным образом (например, определить собственные типы данных, структуры-хранения, функции и т. п.).

    • POSTGRES (создана в университете Беркли (http://db.cs.berkeley.edu/));

    • Starburst (компании IBM (http://www.research.ibm.com/)).

    5.3.5. Системы управления базами знаний и экспертные системы

    5.3.5.1. Системы искусственного интеллекта
    1   2   3   4   5   6   7


    написать администратору сайта