Перейти к содержимому

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

  • автор:

Что такое библиотека DLL?

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

Применяется к: Windows 10 — все выпуски
Оригинальный номер базы знаний: 815065

Сводка

В этой статье поясняется, что такое DLL, описываются методы динамической компоновки, зависимости DLL, точки входа DLL, экспорт функций DLL и средства устранения неполадок DLL.

Эта статья завершается обобщенным сравнением библиотек DLL со сборками платформы Microsoft .NET Framework.

Для операционных систем Windows большая часть функциональности операционной системы обеспечивается DLL. Кроме того, при запуске программы в одной из операционных систем Windows большая часть функциональности программы может обеспечиваться библиотеками DLL. Например, некоторые программы могут содержать множество различных модулей, при этом каждый модуль программы содержится и распространяется в библиотеках DLL.

Использование DLL-библиотек способствует разбиению кода на модули, повторному использованию кода, эффективному использованию памяти и сокращению дискового пространства. Таким образом, операционная система и программы загружаются и работают быстрее, а также занимают меньше места на диске компьютера.

Когда программа использует DLL, проблема, которая называется зависимостью, может привести к тому, что программа не запустится. Когда программа использует библиотеку DLL, создается зависимость. Если другая программа перезаписывает и прерывает эту зависимость, исходная программа может не запуститься успешно.

С появлением платформы .NET Framework большинство проблем с зависимостями были устранены благодаря использованию сборок.

Дополнительная информация

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

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

Кроме того, обновления проще применять к каждому модулю, не затрагивая другие части программы. Например, у вас может быть программа расчета заработной платы, и ставки налога меняются каждый год. Если эти изменения изолированы в библиотеке DLL, можно применить обновление, не требуя сборки или установки всей программы еще раз.

В следующем списке описаны некоторые файлы, которые реализованы в виде библиотек DLL в операционных системах Windows:

  • Файлы элементов ActiveX (OCX) Примером элемента управления ActiveX является элемент управления календарем, который позволяет выбрать дату из календаря.
  • Файлы панели управления (CPL) Примером CPL-файла является элемент, расположенный в панели управления. Каждый элемент является специализированной библиотекой DLL.
  • Файлы драйвера устройства (DRV) Примером драйвера устройства является драйвер принтера, который управляет печатью на принтере.

Преимущества DLL-библиотек

В следующем списке описаны некоторые преимущества использования программой DLL-библиотек:

  • Использует меньше ресурсов Если несколько программ используют одну и ту же библиотеку функций, DLL-библиотека может уменьшить дублирование кода, загружаемого на диск и в физическую память. Это может сильно повлиять на производительность не только программы, выполняемой на переднем плане, но и других программ, работающих под управлением операционной системы Windows.
  • Улучшает модульную архитектуру Библиотека DLL помогает в разработке модульных программ. Она помогает разрабатывать большие программы, требующие использования нескольких языковых версий, или программы, требующие модульной архитектуры. Примером модульной программы является бухгалтерская программа со множеством модулей, которые могут быть динамически загружены во время выполнения.
  • Облегчает развертывание и установку Если функции в библиотеке DLL требуется обновление или исправление, для развертывания и установки библиотеки DLL не требуется повторная компоновка программы с этой библиотекой. Кроме того, если несколько программ используют одну и ту же библиотеку DLL, они смогут получить преимущества от обновления или исправления. Эта проблема может возникать чаще при использовании сторонних библиотек DLL, которые регулярно обновляются или исправляются.

Зависимости DLL

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

  • Зависимая библиотека DLL обновляется до новой версии.
  • Зависимая библиотека DLL исправлена.
  • Зависимая библиотека DLL перезаписывается более ранней версией.
  • Зависимая библиотека DLL удалена с компьютера.

Эти действия известны как конфликты DLL. Если обратная совместимость не применяется, программа может не запуститься.

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

  • Защита файлов Windows В защите файлов Windows операционная система предотвращает обновление или удаление системных библиотек DLL неавторизованным агентом. Когда установка программы пытается удалить или обновить библиотеку DLL, которая определена как системная библиотека DLL, защита файлов Windows выполнит поиск действительной цифровой подписи.
  • Частные библиотеки DLL Частные библиотеки DLL позволяют изолировать программу от изменений, вносимых в общие библиотеки DLL. Частные библиотеки DLL используют сведения о конкретной версии или пустой файл .local для принудительного применения версии библиотеки DLL, используемой программой. Чтобы использовать частные библиотеки DLL, найдите библиотеки DLL в корневой папке программы. Затем для новых программ добавьте сведения о конкретной версии в библиотеку DLL. Для старых программ используйте пустой файл .local . Каждый метод указывает операционной системе использовать частные библиотеки DLL, расположенные в корневой папке программы.

Средства устранения неполадок, связанных с библиотеками DLL

Для устранения неполадок с библиотеками DLL доступно несколько средств. Ниже приведены некоторые из этих средств.

Обходчик зависимостей

Средство «Обходчик зависимостей» может рекурсивно проверять все зависимые библиотеки DLL, используемые программой. При открытии программы в обходчике зависимостей будут выполнены следующие проверки:

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

С помощью обходчика зависимостей можно документировать все библиотеки DLL, используемые программой. Это может помочь предотвратить и устранить проблемы с библиотеками DLL, которые могут возникнуть в будущем. При установке Visual Studio 6.0 обходчик зависимостей находится в следующем каталоге:

drive\Program Files\Microsoft Visual Studio\Common\Tools

Универсальный устранитель проблем DLL

Универсальный устранитель проблем DLL (DUPS) используется для аудита, сравнения, документирования и отображения информации DLL. В следующем списке описаны утилиты, входящие в состав инструмента DUPS:

  • Dlister.exe Эта утилита перечисляет все библиотеки DLL на компьютере и записывает информацию в текстовый файл или в файл базы данных.
  • Dcomp.exe Эта утилита сравнивает библиотеки DLL, перечисленные в двух текстовых файлах, и создает третий текстовый файл, содержащий различия.
  • Dtxt2DB.exe Эта утилита загружает текстовые файлы, созданные с помощью утилит Dlister.exe и Dcomp.exe, в базу данных dllHell.
  • DlgDtxt2DB.exe Эта утилита предоставляет графический интерфейс пользователя (GUI) версии утилиты Dtxt2DB.exe.

Справочная база данных библиотеки DLL

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

Разработка библиотеки DLL

В этом разделе описываются проблемы и требования, которые следует учитывать при разработке собственных библиотек DLL.

Типы библиотек DLL

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

Динамическая компоновка во время загрузки

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

Динамическая компоновка во время выполнения

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

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

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

Точка входа DLL

При создании библиотеки DLL можно дополнительно указать функцию точки входа. Функция точки входа вызывается, когда процессы или потоки присоединяются к библиотеке DLL или отсоединяются от библиотеки DLL. Функцию точки входа можно использовать для инициализации структур данных или удаления структур данных, требуемых библиотекой DLL. Кроме того, если приложение является многопоточным, можно использовать локальную память потока (TLS) для выделения памяти, которая является частной для каждого потока в функции точки входа. Следующий код является примером функции точки входа DLL.

BOOL APIENTRY DllMain( HANDLE hModule,// Handle to DLL module DWORD ul_reason_for_call,// Reason for calling function LPVOID lpReserved ) // Reserved < switch ( ul_reason_for_call ) < case DLL_PROCESS_ATTACHED: // A process is loading the DLL. break; case DLL_THREAD_ATTACHED: // A process is creating a new thread. break; case DLL_THREAD_DETACH: // A thread exits normally. break; case DLL_PROCESS_DETACH: // A process unloads the DLL. break; >return TRUE; > 

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

Функция точки входа должна выполнять только простые задачи инициализации и не должна вызывать никаких других функций загрузки или завершения DLL. Например, в функции точки входа не следует прямо или косвенно вызывать функцию LoadLibrary или LoadLibraryEx . Кроме того, не следует вызывать функцию FreeLibrary при завершении процесса.

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

Экспорт функций DLL

Чтобы экспортировать функции DLL, можно добавить ключевое слово функции в экспортированные функции DLL или создать файл определения модуля (DEF), в котором перечислены экспортированные функции DLL.

Чтобы использовать ключевое слово функции, необходимо объявить каждую функцию, которую требуется экспортировать, с помощью следующего ключевого слова:
__declspec(dllexport)

Чтобы использовать экспортированные функции DLL в приложении, необходимо объявить каждую функцию, которую требуется импортировать, со следующими ключевое слово: __declspec(dllimport)

Как правило, для разделения инструкции экспорта и инструкции import используется один файл заголовка с инструкцией определения и инструкцией ifdef .

Вы также можете использовать файл определения модуля для объявления экспортированных функций DLL. При использовании файла определения модуля не нужно добавлять ключевое слово функции в экспортированные функции DLL. В файле определения модуля объявляется инструкция LIBRARY и инструкция EXPORTS для библиотеки DLL. Следующий код является примером файла определения.

// SampleDLL.def // LIBRARY "sampleDLL" EXPORTS HelloWorld 

Пример библиотеки DLL и приложения

В Visual C++ 6.0 можно создать библиотеку DLL, выбрав тип проекта Библиотека динамической компоновки Win32 или тип проекта Мастер приложений MFC (dll).

Следующий код является примером библиотеки DLL, созданной в Visual C++ с использованием типа проекта Библиотека динамической компоновки Win32.

// SampleDLL.cpp // #include "stdafx.h" #define EXPORTING_DLL #include "sampleDLL.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) < return TRUE; >void HelloWorld() < MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK); >// File: SampleDLL.h // #ifndef INDLL_H #define INDLL_H #ifdef EXPORTING_DLL extern __declspec(dllexport) void HelloWorld(); #else extern __declspec(dllimport) void HelloWorld(); #endif #endif 

Следующий код является примером проекта Приложение Win32, который вызывает экспортированную функцию DLL в библиотеке DLL SampleDLL.

// SampleApp.cpp // #include "stdafx.h" #include "sampleDLL.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

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

При динамической компоновке во время выполнения для вызова экспортируемой функции DLL SampleDLL.dll используется код, аналогичный следующему коду:

. typedef VOID (*DLLPROC) (LPTSTR); . HINSTANCE hinstDLL; DLLPROC HelloWorld; BOOL fFreeDLL; hinstDLL = LoadLibrary("sampleDLL.dll"); if (hinstDLL != NULL) < HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld"); if (HelloWorld != NULL) (HelloWorld); fFreeDLL = FreeLibrary(hinstDLL); >. 

При компиляции и компоновке приложения SampleDLL операционная система Windows ищет библиотеку DLL SampleDLL в следующих расположениях в следующем порядке:

  1. Папка приложения
  2. Текущая папка
  3. Системная папка Windows

Примечание. Функция GetSystemDirectory возвращает путь к системной папке Windows.
Примечание. Функция GetWindowsDirectory возвращает путь к папке Windows.

Сборка .NET Framework

С появлением платформ .NET и .NET Framework большинство проблем, связанных с библиотеками DLL, были устранены с помощью сборок. Сборка — это логический элемент функциональности, который выполняется под управлением общеязыковой среды выполнения .NET. Сборка физически существует в виде DLL-файла или EXE-файла. Однако внутри сборка отличается от библиотеки DLL Microsoft Win32.

Файл сборки содержит манифест сборки, метаданные типа, код MSIL и другие ресурсы. Манифест сборки содержит метаданные сборки, которые предоставляют все сведения, необходимые для самостоятельного описания сборки. В манифест сборки включены следующие сведения:

  • Имя сборки
  • Сведения о версии
  • Сведения о языке
  • Сведения о строгом имени
  • Список файлов сборки
  • Справочные сведения о типе
  • Сведения о ссылочных и зависимых сборках

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

В следующем списке описаны некоторые функции сборок по сравнению с функциями библиотек DLL Win32:

  • Самоописание При создании сборки все сведения, необходимые среде CLR для запуска сборки, содержатся в манифесте сборки. Манифест сборки содержит список зависимых сборок. Таким образом, среда CLR может поддерживать согласованный набор сборок, используемых в приложении. В библиотеках DLL Win32 нельзя поддерживать согласованность между набором библиотек DLL, используемых в приложении, когда используются общие библиотеки DLL.
  • Управление версиями. В манифесте сборки сведения о версии записываются и применяются средой CLR. Кроме того, политики версии позволяют принудительно применять использование конкретной версии. В библиотеках DLL Win32 управление версиями не может применяться операционной системой. Необходимо убедиться, что библиотеки DLL поддерживают обратную совместимость.
  • Параллельное развертывание Сборки поддерживают параллельное развертывание. Одно приложение может использовать одну версию сборки, а другое — другую. Начиная с Windows 2000, параллельное развертывание поддерживается путем поиска библиотек DLL в папке приложения. Кроме того, защита файлов Windows предотвращает перезапись или замену системных библиотек DLL неавторизованным агентом.
  • Автономность и изоляция Приложение, разработанное с помощью сборки, может быть автономным и изолированным от других приложений, запущенных на компьютере. Эта функция помогает создавать установки с нулевым влиянием.
  • Выполнение Сборка запускается с учетом разрешений безопасности, которые указаны в манифесте сборки и контролируются средой CLR.
  • Независимость от языка Сборку можно разработать с помощью любого поддерживаемого языка .NET. Например, можно разработать сборку в Microsoft Visual C#, а затем использовать сборку в проекте Visual Basic .NET.

Сбор данных

Если вам нужна помощь со стороны службы поддержки Майкрософт, мы рекомендуем собирать сведения, выполнив действия, описанные в разделе Сбор сведений с помощью TSS для проблем, связанных с развертыванием.

Ссылки

  • Развертывание и настройка приложений
  • Сборки
  • Динамическая компоновка во время выполнения
  • Локальная память потока

Методические условия использования динамической среды GeoGebra как средства визуализации геометрических построений Текст научной статьи по специальности «Науки об образовании»

ДИНАМИЧЕСКАЯ СРЕДА GEOGEBRA / ВИЗУАЛИЗАЦИЯ / СПОСОБЫ ПОВЫШЕНИЯ ЭФФЕКТИВНОСТИ ВНЕДРЕНИЯ ЭЛЕКТРОННОГО ОБУЧЕНИЯ / DYNAMIC ENVIRONMENT OF GEOGEBRA / VISUALIZATION / METHODS OF INCREASE OF EFFICIENCY OF INTRODUCTION OF E-LEARNING

Аннотация научной статьи по наукам об образовании, автор научной работы — Таранова Марина Владимировна

В статье представлены результаты исследования проблемы внедрения динамической среды GeoGebra как средства визуализации (свёртывания и разворачивания учебной информации) при изучении геометрических построений. Представлен вариант методического решения проблемы использования динамической среды в обучении математике.I

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

Похожие темы научных работ по наукам об образовании , автор научной работы — Таранова Марина Владимировна

Инновационные технологии в преподавании геометрии
Исследование функций в среде GeoGebra
Применение информационных технологий в математическом образовании
Реализация когнитивно-визуального подхода посредством интерактивной геометрической среды GeoGebra

Моделирование. Применение интерактивных геометрических сред как методическое средство повышения качества подготовки к ЕГЭ по математике

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

n the article the results of research of problem of introduction of dynamic environment of GeoGebra as facilities of visualization (rolling up and opening out of educational information) are presented at the study of geometrical constructions. The variant of methodical decision of problem of the use of dynamic environment is presented in educating to mathematics.

Текст научной работы на тему «Методические условия использования динамической среды GeoGebra как средства визуализации геометрических построений»

Методические условия использования динамической среды GeoGebra как средства визуализации геометрических построений

Таранова Марина Владимировна кандидат педагогических наук, доцент кафедры алгебры и математического анализа,

Новосибирский государственный педагогический университет, Институт физико-математического и информационно-экономического образования,

Новосибирск, Россия 630126, г. Новосибирск, ул. Вилюйская, д. 28 Тел.: 8-913-204-52-14 marinataranowa@yandex.ru

В статье представлены результаты исследования проблемы внедрения динамической среды GeoGebra как средства визуализации (свёртывания и разворачивания учебной информации) при изучении геометрических построений. Представлен вариант методического решения проблемы использования динамической среды в обучении математике. In the article the results of research of problem of introduction of dynamic environment of GeoGebra as facilities of visualization (rolling up and opening out of educational information) are presented at the study of geometrical constructions. The variant of methodical decision of problem of the use of dynamic environment is presented in educating to mathematics.

динамическая среда GeoGebra, визуализация, способы повышения эффективности внедрения электронного обучения

dynamic environment of GeoGebra, visualization, methods of increase of efficiency of introduction of e-learning

Многие страны мирового образовательного пространства, Россия, в том числе, захватили процессы реформирования образования посредством обновления его структуры и содержания. В частности, для образовательных учреждений России, создание и внедрение новых подходов, средств, способов организации взаимодействия участников образовательного процесса, вызванных стремительным развитием цифровых технологий, отвечающих вызовам современного общества, как никогда являются актуальными. К примеру, в 2016 году стартовал федеральный проект по постепенному переводу образовательной среды на цифровое обучение [8]. В рамках этого проекта планируется модернизация образовательного пространства учебных заведений в соответствии с нуждами цифровой экономики. В связи с чем, проблемы, связанные с реализацией идей цифрового обучения на практике, становятся актуальными и востребованными. Это, с одной стороны.

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

повышения эффективности учебного процесса [3, 4], влияние информационных средств поддержки учебного процесса на развитие наглядно-образного мышления и др. [7,10, 11]. Однако, по-прежнему остаются актуальными проблемы, связанные с методическим обеспечением учебного процесса средствами программных пакетов (проблема контентного наполнения, проблема роли и места той или иной программы в формировании знаний и способах их использования, проблема развития обучающихся и др.).

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

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

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

В педагогической литературе пока нет общепринятого понятия для определения нового вида наглядности, созданной на основе современных информационных технологий. Это вызвано тем, что данная наглядность представляет собой весьма сложное явление, отличительные признаки которого интегрированы в единую целостную систему, и поэтому так нелегко выявить ее сущность, то есть определить основные признаки и отличить их от второстепенных свойств. В частности, даже программные динамические среды типа ОеоОеЬга, Математический конструктор, Живая математика и др. называют и средствами динамической геометрии, и динамическая геометрия, и динамическая среда, динамическая программа. Единственную, пожалуй, классификацию, которую мы нашли, это классификация по их характеристикам [13], которые выстраиваются как пары противоположностей: статические (схемы, таблицы, слайды и пр.) и динамические (видео, анимации, динамические программы). Это значит, что основными характеристиками этих средств могут быть: интерактивность, динамизм, анимированность.

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

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

психического процесса, позволяющего конструировать в визуальной модальности зрительные образы во внутреннем, субъективном пространстве человека, отмечают в своих исследованиях многие учёные [6]. И поскольку, все динамические среды, используемые в школе, имеют структурированный интерфейс (в них содержание сжато, логично, концептуально), то ОеовеЪга, как дидактический объект, с одной стороны является носителем строго структурированной информации по математике, а с другой выступает средством формирования и развития структур визуализации. Следовательно, программа ОеовеЪга может быть и средством получения знаний (как информаций) по математике, и средством её усвоения.

Так как средствами веовеЪга можно организовать самостоятельный поиск, уровень самостоятельности которого определяется познавательными интересами [1, 5] и которые стимулируются и развиваются мотивами [9, 12], то веовеЪга как дидактический объект может выполнять стимулирующие функции по выводу школьника в процессы восприятия, осознания и свёртывания учебной информации во внутренний [2] план действий, то программу можно рассматривать как способ организации и управления процессами стимулирования визуализации. То есть, динамическая среда может, с одной стороны, быть способом стимулирования процессов визуализации у школьника, а с другой, быть способом организации и управления этими процессами. Это значит, что программу веовеЪга, как дидактический объект, можно рассматривать как форму проявления одного из активных методов обучения.

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

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

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

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

ЗАДАНИЕ 1. Панель инструментов содержит команды: построить прямоугольный треугольник, построить прямую по двум точкам, построить точку пересечения двух прямых. Как построить перпендикулярные прямые этими инструментами? (Обращаем внимание: команды построить прямую, проходящую через точку — нет).

В шестом классе, при изучении осевой и центральной симметрии, содержание заданий на декодирование может иметь следующий вид.

ЗАДАНИЕ 2. Панель инструментов сдержит команду: через точку построить прямую перпендикулярную данной. На экране (рис.1) две фигуры. Как такими инструментами проверить симметричны ли они?

Рис.1. Рисунок к заданию 2

ЗАДАНИЕ 3. На экране (в правой части рисунка) изображены образы двух вершин четырёхугольника — образов, полученных при осевой симметрии (рис. 2). Постройте остальные две.

Рис.2. Рисунок к заданию 3

Если в 5, 6 классах при формировании и развитии процессов визуализации наиболее уместно использовать приёмы декодирования, то в 7 и 8 классах, где собственно знания о решении простейших задач на построение является целью, а затем получают развитие в направлении усиления их трудности, введение понятия геометрического места точек и др., уместно использовать как вышеописанные подходы о декодировании учебной информации, так и приёмы использования простейших базовых задач, которые встраиваются в новые задачи.

Кроме того, особенности GeoGebra, как было показано, позволяют быть источником информаций и средством активизации процессов визуализации. Это значит, что программа, в силу своих конструктивных возможностей, позволяет учащимся самостоятельно создать обобщённый образ объектов, входящих в объём изучаемого понятия, описанного определением, условием теоремы или поставленной задачей [41, 53]. Более того, в силу динамических особенностей пакета GeoGebra, геометрические построения можно анимировать и на их основе провести сжато все этапы исследования. То есть, этапы решения задачи на построение, при использовании анимации, можно свернуть, что является основой процессов визуализации. Это значит, что в 7 и 8 классах, уместно использовать задания на декодирование, задания по созданию обобщённого образа объекта, задания анимации, задания исследования. С целью пояснения сказанного рассмотрим примеры таких заданий.

ЗАДАНИЕ 4. Панель инструментов содержит команды «построить окружность по центру и точке», «построить отрезок», «построить серединный перпендикуляр», «построить угол заданной величины», «анимировать». Как с

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

Указание к решению: Достаточно построить равнобедренный треугольник с длиной основания, равного длине заданного отрезка и углами при основании равными ^ — а, где а — величина заданного угла. Затем вершину равнобедренного треугольника анимировать (заставить двигаться по дуге окружности, описанной около построенного треугольника).

На основании проведённых исследований положения вершины треугольника, обучающийся может сделать вывод о том, что все углы, опирающиеся на одну и ту же дугу — имеют равную градусную меру.

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

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

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

Например, понятие параллелограмма в различных пособиях определяется по-разному: а) четырёхугольник, у которого противоположные стороны попарно параллельны; б) четырёхугольник, имеющий центр симметрии и др. С точки зрения дидактики эти определения неравноценны в том, что они обладают разной степенью наглядности. То есть они будут по-разному «просматриваться» через определение. А учитывая роль наглядности в формировании понятия и в актуализации процессов визуализации, можно утверждать, что в обучении геометрическим построениям, ориентированном на развитие визуального мышления определение параллелограмма в смысле (а) -наиболее предпочтительно. Этот вывод согласуется с тем, что в свёрнутом виде распознавание может осуществляться по внешним выраженным наглядным признакам используемых объектов (схема, образ, чертёж и др.), а не по тем признакам, по которым оно осуществляется при выполнении развёрнутого действия. Это, во-первых.

Во-вторых, процесс формирования понятия включает несколько этапов: мотивации, выявления существенных свойств понятия, формулировка понятия, усвоение логической структуры его определения, использование понятия в конкретной ситуации, осознание места понятия в системе понятий, установление связей и зависимостей с другими понятиями. А поэтому, комплекс задач и заданий с использованием динамической среды должен соответствовать этим этапам. Для пояснения рассмотрим примеры таких заданий при введении понятия «ось симметрии».

ЗАДАНИЕ 5 (выявление свойств понятия). Панель инструментов содержит команды «построить отрезок», «построить произвольный треугольник», «построить прямую», «анимировать».

Задания к компьютерному исследованию: 1) Как с помощью этих инструментов найти точку, которая была бы равноудалена от концов отрезка АВ? 2) Сколько таких точек Вы могли бы построить? 3) Какую траекторию будет описывать эта точка при её анимации? 4) Подумайте, какую точку нужно

анимировать, чтобы пронаблюдать за её свойствами? 5) Опишите свойства полученной траектории. 6) Как Вы думаете, в каком случае мы смогли бы узнать, что точка принадлежит траектории (сформулировать признак)?

Указание к решению: Достаточно выполнить построение точки пересечения двух сторон треугольников. Затем доказать (на основании признаков равенства треугольников), что точка их пересечения расположена на серединном перпендикуляре. Обучающиеся с помощью учителя, направляющего эксперимент, открывают то, что серединный перпендикуляр является осью симметрии такого геометрического объекта, как отрезок (см. рис. 3, 4).

Рис.3. Рисунок к решению Рис.4. Рисунок к описанию

задачи 5 траектории движения точки

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

ЗАДАНИЕ 6 (задание к учебному исследованию в среде GeoGebra). В треугольнике АБС из вершин А, В проведены высоты AD, BF. Через вершину С провели прямую, параллельную основанию треугольника. Если двигать вершину С вдоль построенной прямой, то основания этих двух высот треугольников будут описывать полуокружность, построенную на основании АВ как на диаметре (рис.5).

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

Рис.5. Рисунок к заданию 6 Рис.6. Рисунок к заданию 7

ЗАДАНИЕ 7 (задача следствие). Пронаблюдайте движение ортоцентра

Задания к компьютерному исследованию: 1) Какой след будет оставлять точка пересечения высот треугольника при её анимации? 2) Подумайте, какую точку нужно анимировать, чтобы пронаблюдать за её свойствами? 3) Опишите свойства полученной траектории. 4) Как Вы думаете, в каком случае мы смогли бы узнать, что точка принадлежит построенной траектории (сформулировать признак)?

Результаты проведённого исследования

Итак, подводя итоги, можно сказать, что содержание методических условий, с позиций использования динамической среды GeoGebra как средства визуализации геометрических построений, составляют задачи и их комплексы сконструированные в соответствии с принципом кодирования и декодирования информации, задания по созданию обобщённого образа объекта, задания анимации, задания исследования, задания, учитывающие этапы усвоения понятий, последовательность освоения теорем и др.

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

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

К опасным эффектам можно отнести так называемый «экспериментально-теоретический разрыв», характеризуемый снижением роли дедукции (все результаты, которые обучающийся получает в ходе эксперимента, берутся за «теоретическое» обоснование). По нашим наблюдениям этот эффект возникал в том случае, когда учитель динамическую среду использовал, в основном, для демонстрации и при постановке целей урока. Либо в том случае, когда задания носили чисто механический характер, типа; построить, найти точку пересечения, показать и т.д. и учитель предоставлял учащимся полную самостоятельность, то есть не обучал работе в динамической среде.

К положительным эффектам можно отнести возможность нивелирования экспериментально-теоретического разрыва посредством реализации методических условий. Кроме того, нами было отмечено, что более половины участников эксперимента достаточно активно выполняют задания на декодирование информации, задания на выделение основного отношения объекта, около 30% способны самостоятельно поставить цель и задачи к эксперименту, построению моделей и их отношений и др. Таким образом, реализация представленных методических условий способствует наиболее эффективному обучению геометрическим построениям, это, с одной стороны. А с другой, способствует актуализации структур визуализации у обучающихся.

1. Бабанский, Ю. К. Избранные педагогические труды / [сост. М. Ю. Бабанский ; авт. вступ. ст. Г. Н. Филонов, Г. А. Победоносцев, А. М. Моисеев ; авт. коммент. А. М. Моисеев] ; Акад. пед. наук СССР. — М. : Педагогика, 1989. — 558. — (Труды действительных членов и членов-корреспондентов Академии педагогических наук СССР).

2. Гальперин П.Я., Талызина Н.Ф. Современное состояние теории поэтапного формирования умственных действий. Вестник МГУ. Серия 14, Психология. -1979. — № 4.

3. Далингер, В.А. Теоретические основы когнитивно-визуального подхода к обучению математике: монография. Омск : Изд-во ОмГПУ, 2006. — 144 с.

4. Далингер, В.А. Формирование визуального мышления у учащихся в процессе обучения математике. Омск : Изд-во ОмГПУ, 1999. — 157 с.

5. Дидактика средней школы. Некоторые проблемы современной дидактики. Учеб. пособ. Для студентов пед. ин-тов. Под ред. М.А. Данилова, М.Н. Скаткина. М. : Просвещение. 1975. — 303 с.

6. Козлов В.В., Донченко И.А. Направленные визуализации: теория и метод / В.В. Козлов, И.А. Донченко. — Запорожье, 2015. — 227 с.

7. Обучение математике с использованием возможностей GeoGebra. // Ширикова Т.С., Шабанова М.В., Безумова О.Л., Ерилова Е.Н., Котова С.Н., Ларин С.В., Овчинникова Р.П., Патронова Н.Н., Павлова М.А., Томилова А.Е., Троицкая О.Н., Форкунова Л.В. — М.: Издательство Перо, 2013. — 128 с. (Коллективная монография).

8. Проект «Современная цифровая образовательная среда. Режим доступа: http://neorusedu.ru/about (свободный). Дата обращения: 01.04.2019.

9. Пидкасистый, П. И. Самостоятельная познавательная деятельность школьников в обучении: Теоретико-экспериментальное исследование. М, : 1980. С. 16 — 45.

10. Резник, Н.А. Технология визуального мышления [Текст] / Н.А. Резник // Школьные технологии. — 2000. — №4. — С. 127-141. 10

11. Сергеева, Т.Ф., Шабанова, М.В. GEOGEBRA в системе средств обучения математике // Северный (Арктический) федеральный университет имени М. В. Ломоносова, г. Архангельск. Режим доступа: http://letopisi.Org/images/b/b7 (свободный). Дата обращения: 12.05.2019.

12. Усова А.В. Формирование у школьников научных понятий в процессе обучения. -М.: Педагогика, 1986. — 174 с.

13. Шабат, Г.Б. «Живая математика» и математический эксперимент //Вопросы образования, 2005, №3. С. 156-165.

14. Якиманская И.С. Психологические основы математического образования. М.: Изд-кий центр Академия, 2004. 320 с.

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

Изготовление исполнимых программ из исходных текстов выполняется с помощью компиляторов, переводящих исходный текст программы в эквивалентную ей результирующую программу на языке машинных команд. Основными языками программирования на высокопроизводительных вычислительных системах являются С/C++ и Фортран . Язык С создавался как язык для написания системных приложений, однако в последнее время широко применяется и для написания вычислительных программ. Язык программирования Фортран изначально разрабатывался для написания вычислительных программ. Для него разработано множество библиотек прикладных подпрограмм, в которых реализованы различные вычислительные алгоритмы. Например, библиотека LAPACK содержит широчайший набор подпрограмм для решения различных задач линейной алгебры.

Синтаксис команды компиляции имеет вид:

компилятор [опции] файлы [библиотеки]

  • Здесь компилятор — команда вызова компилятора;
  • основные опции:
  • -o — создать выходной файл с заданным именем (без опции создается a.out);
  • -c — не изготавливать исполнимый модуль (при компиляции подпрограмм);
  • -O -O1,-O2,-O3 — задание уровня оптимизации;
  • -g — выполнить компиляцию в отладочном режиме;
  • файлы — компилируемые файлы;;
  • библиотеки — подключаемые библиотеки.

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

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

Пакет компиляторов GCC

В него входят компиляторы:

  • gcc — компилятор языка С;
  • g++ — компилятор языка С++;
  • gfortran — компилятор языка Фортран95.

Компиляторы GCC оптимизирующие, поддерживающие три уровня оптимизации (опции -O1, -O2, -O3). На разных программах более эффективной может оказаться та или другая опция. В большинстве случаев наиболее приемлемой бывает опция -O2, при этом ускорение программы может достигать 2-3 раз. Типичные команды компиляции:

  • gcc -O2 -o prog prog.c — для языка С;
  • gfortran -O2 -o prog prog.f — для языка Фортран.

Помимо этого, на Linux кластерах, являющихся сегодня основным видом высокопроизводительных вычислительных систем, широко используется пакет компиляторов Intel Compiler, наилучшим образом оптимизированный под платформу x86-64, являющуюся основной при построении вычислительных кластеров. Это коммерческй продукты и он приобретен Вычислительным центром СПбГУ.

Пакет компиляторов Intel
  • icc — компилятор языка С;
  • icpc — компилятор языка С++;
  • ifort — компилятор языка f77, f90, f95.

Компиляторы также поддерживают три уровня оптимизации (опции -O1, -O2, -O3, задание опции -O соответствует уровню -O2). Сочетание опций -fast -On, задает режим максимального ускорения программы на соответствующем уровне оптимизации. Для отлаженных программ включение оптимизации обязательно. В большинстве случаев ускорение работы программы может достигать 2-3 раз.

  • icc -O2 -o prog prog.c — для языка С;
  • ifort -O2 -o prog prog.f — для языка Фортран.

Рассмотрим подробнее работу с компилятором gcc.

Создадим файл с именем ex1.c с помощью команды touch. Откроем его в текстовом редакторе и наберем текст программы на языке С.

Программа ex1.c #include int main(int argc, char* argv[])

Далее следует скомпилировать программу, т.е. перевести в исполнимый код. Для этого выполним следующую команду.

Если программа написана без ошибок, то никакой выдачи информации на терминал не будет, а в рабочем каталоге появится файл с именем a.out. Это исполнимый файл, полученный в результате компиляции программы. Его можно запустить на исполнение(поэтому файлы и называются исполнимыми), набрав в командной строке:

На терминал будет напечатана строка «Hello word».

Для того чтобы поменять имя создаваемого файла c a.out на любое другое необходимо использовать опцию -o:

gcc -o ex1 ex1.c

В результате будет создан исполнимый файл с именем ex1.

Приведем несколько важных опций компилятора gcc (они справедливы и для icc)

  • -o файл — Поместить вывод в файл ‘файл‘. Эта опция применяется вне зависимости от вида порождаемого файла, является ли это выполнимый файл, объектный файл, ассемблерный файл или препроцессированный C код. Если ‘-o‘ не указано, по умолчанию выполнимый файл помещается в ‘a.out‘, объектный файл для ‘исходный.суффикс‘ — в ‘исходный.o‘, его ассемблерный код в ‘исходный.s‘ и все препроцессированные C файлы — в стандартный вывод.
  • -c — Компилировать или ассемблировать исходные файлы, но не линковать. Стадия ликовки просто не выполняется. Конечный вывод происходит в форме объектного файла для каждого исходного файла.
  • -g — Порождает отладочную информацию.
  • -O,-O1,-O2,-O3 — Задание уровня оптимизации оптимизации
  • -Iдиректория — Добавляет каталог ‘директория‘ в начало списка каталогов, используемых для поиска заголовочных файлов. Ее можно использовать для подмены системных заголовочных файлов, подставляя ваши собственные версии, поскольку эти директории просматриваются до директорий системных заголовочных файлов. Если используется более чем одна опция ‘-I‘, директории просматриваются в порядке слева на право; стандартные системные директории просматриваются последними.
  • -Lдиректория — Добавляет каталог ‘директория‘ в начало списка каталогов, используемых для поиска библиотек
  • -lбиблиотека — Подключает библиотеку с именем lib’библиотека’.so

Рассмотрим назначение опций более подробно на примерах.

В программах часто используются уже написанные ранее функции. Например, в приведенной выше программе, применялась системная функция вывода информации в стандартный поток printf. Для того чтобы транслятор на этапе создания программы, мог правильно обработать внешнюю функцию необходимо ее предварительно описать, либо внутри программы, либо в специальном заголовочном файле. Такие файлы еще называют include файлами, в языке С они подключаются с помощью специальной директивы #include. На первом этапе трансляции программы, запускается так называемый препроцессор, он находит файл с именем stdio.h, и вставляет его содержимое внутрь программы. Пути поиска задаются с помощью опции

-Iдиректория,
где директория — путь к каталогу, в котором расположен данный файл.

Если используется стандартный заголовочный файл, то опцию -I для его поиска в командной строке компиляции программы указывать необязательно. Существует специальный каталог, где располагаются стандартные заголовочные файлы. Препроцессор автоматически просматривает его при поиске заголовочных файлов. Все сказанное в полной мере относится и к компилятору с языка Фортран. Отличие состоит в синтаксисе подключения include файла:

include ‘файл.h’

Если в команде компиляции не указана опция -c, то компилятор автоматически выполняет операцию компоновки, т.е. изготовление исполнимой программы. В примере для вывода строки «Hello word» применялась стандартная функция printf, следовательно, код этой функции должен быть вставлен в программу. Операцию объедения кода программы и кода внешних функций выполняет компоновщик. Компоновщик (или линковщик — linker) — программа, которая производит компоновку, принимает на вход один или несколько объектных модулей и собирает из них исполняемый модуль. Объектный модуль (или объектный файл — object file) — это файл с промежуточным представлением отдельного модуля программы, полученный в результате обработки исходного кода компилятором. Объектный файл содержит в себе особым образом подготовленный код (часто называемый бинарным), который может быть объединён с другими объектными файлами при помощи редактора связей (линковщика) для получения готового исполняемого модуля либо библиотеки.

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

Программа ex2.c #include #include int main(int argc, char *argv[])

Эта программа вычисляет результат возведения в степень 0.1 числа 2 и присваивает результат переменной res и затем выводит ее значение на стандартный поток вывода. Возведение в степень осуществляет функция pow. Заголовочный файл, в котором описан заголовок для этой функции, подключается директивой #include , являющимся стандартным заголовочным файлом для библиотеки математических подпрограмм.

Попробуем скомпилировать программу командой:

gcc -o ex2 ex2.c

В результате получим следующие сообщение об ошибке:

/tmp/ccgSk9AB.o(.text+0x49): In function `main’:
ex2.c: undefined reference to `pow’
collect2: ld returned 1 exit status

Это сообщение говорит, что в функции main, файла ex2.c вызывается функция pow, для которой не найден машинный код на этапе сборки программы. Для того чтобы программа скомпоновалась, необходимо указать компилятору в какой библиотеке следует искать объектный код функции pow. Правильная строка компиляции будет выглядеть следующим образом.

gcc -o ex2 ex2.c -lm

В результате будет создана программа с именем ex2, которая при запуске напечатает:

Подключение библиотеки было выполнено с помощью опции -lm. Файл этой библиотеки находится в каталоге /usr/lib. Полное его название libm, имена файлов библиотек подпрограмм всегда начинаются с префикса lib, за которым идет название библиотеки. При подключении библиотеки к программе в строке компилятора префикс lib заменяется на -l. Таким образом, подключение библиотеки libm осуществляется опцией -lm. Поскольку библиотека стандартная, находится в специальном каталоге, то нет необходимости указывать путь поиска файла библиотеки математических подпрограмм с помощью опции -L. Компилятор сам найдет его в директории /usr/lib. Работа с библиотеками имеет ряд аспектов, которые нуждаются в более подробном рассмотрении.

В рассмотренном ранее примере было упомянуто, что стандартная математическая библиотека находится в системном каталоге /usr/lib. Однако если перейти в каталог /usr/lib, и попробовать найти там файл с именем libm, то такого файла там нет. Зато есть два файла с именами libm.a и libm.so. Почему два и с разными расширениями? Потому что большинство UNIX-подобных систем поддерживают два типа компоновки — статическую и динамическую.

Динамические библиотеки, называемые также библиотеками общего пользования или разделяемыми библиотеками (shared library), загружаются на этапе выполнения программы. Код вызываемых функций не встраивается внутрь исполняемой программы, а вызывается по мере необходимости при запуске программы на исполнение. Такой подход позволяет создавать программы значительно меньшего объема. Динамические библиотеки хранятся обычно в определенном месте и имеют стандартное расширение. В ОС Windows файлы библиотек общего пользования имеют расширение .dll, а в UNIX-подобных системах .so. Если на этапе загрузки программы система не смогла найти необходимый код, то программа не запустится. Будет выдано сообщение об ошибке:

error while loading shared libraries: libxxx.so: cannot open shared object file: No such file or directory

Статические библиотеки в виде пакетов объектных файлов, присоединяются (линкуются) к исполнимой программе на этапе компиляции (в Windows такие файлы имеют расширение .lib, а в UNIX-подобных .a). В результате этого программа включает в себя все необходимы функции, что делает её автономной, хорошо переносимой, но увеличивает размер.

Статическая библиотека создается специальной командой:

ar rc libимя.a список_объектных_файлов

Объектные файлы создаются компиляцией функций с опцией -c. Рекомендуется каждую функцию (или подпрограмму в Фортране) оформлять в отдельном файле.

Динамическая библиотека создаются компилятором:

gcc -shared -o libимя.so список_объектных_файлов

Для создания объектных файлов компиляция выполняется с опциями -fPIC -c. Опция -fPIC (PIC — Position Independent Code) означает создание позиционно-независимого кода.

Все библиотеки обычно хранятся в каталоге lib. Если с одним и тем же именем имеется две библиотеки и статическая и динамическая, то по умолчанию линковщик будет использовать динамическую библиотеку. Предположим, что в домашнем каталоге пользователя имеется подкаталог lib и в нем находятся два библиотечных файла: libmy.a и libmy.so. Подкаталог includeсодержит заголовочный файл. Тогда команда компиляции
gcc -o prog_shared prog.c -I~/include -L~/lib -lmy
будет использовать динамическую библиотеку.

Для создания исполнимого файла со статической библиотекой потребуется команда:

gcc -static -o prog_static prog.c -I~/include -L~/lib -lmy

Мы создали две версии программы: с использованием динамической и статической библиотек. Во втором случае использовалась опция -static, чтобы компилятор использовал статическую библиотеку libmy.a. Если бы динамической версии библиотеки не было, то эту опцию можно было бы не указывать. Компилятор, не найдя динамической библиотеки автоматически подключает статическую библиотеку. Опция -I~/include заставляет искать заголовочные файлы в пользовательском подкаталоге include. Заметим, что в Фортране использование заголовочных файлов не требуется, и include файлы используются для других целей — определения констант и параметров. Опция -L~/lib указывает компилятору, что при сборке программы, помимо стандартных путей, следует искать библиотеки и в директории lib домашнего каталога пользователя.

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

  • команда
  • ./prog_static — выполнится без проблем;
  • а при запуске
  • ./prog_shared — программа завершится с ошибкой:
  • prog_shared: error while loading shared libraries: libmy.so: cannot open shared object file: No such file or directory

Дело в том, что в момент загрузки программы, система ищет необходимые для запуска программы разделяемые библиотеки, чтобы собрать исполнимую программу. Поиск идет по заранее установленному списку директорий. Имена директорий перечислены в системном файле /etc/ld.so.conf. Очевидно, что в этот файл невозможно занести все индивидуальные каталоги пользователей. В этой ситуации на помощь приходят переменные окружения. Как уже говорилось ранее, в UNIX системах существует специальная переменная LD_LIBRARY_PATH, в которой каждый пользователь может перечислить директории для поиска разделяемых библиотек. Добавим к переменной LD_LIBRARY_PATH путь к директории lib, где находится библиотека libmy.so. Делается это командой

export LD_LIBRARY_PATH=$:~/lib (bash)
setenv LD_LIBRARY_PATH $:~/lib (tcsh)

Данной командой мы к ранее установленному значению добавили путь к персональному каталогу пользователя с библиотечными файлами. Если теперь запустить программу
./prog_shared
то она сработает корректно.

Предпочтительное использование динамических библиотек обусловлено тем, что размеры исполнимых модулей в десятки раз меньше, чем у статических. Все системные утилиты собираются с использованием динамических библиотек. А поскольку в системе их несколько тысяч, то экономятся гигантские объемы дискового пространства. Кроме того, исполнимые файлы с использованием динамических библиотек более мобильны. В качестве примера рассмотрим типичную ситуацию. В организации имеется два кластера с различной коммуникационной средой — Ethernet и Infiniband. Если использовать статические MPI библиотеки, то для каждого кластера нужно иметь свою версию программы, а если использовать динамические библиотеки, то программы становится совместимыми. При запуске программы на каждом кластере будет вызываться своя версия коммуникационной библиотеки. Еще одно преимущество динамических библиотек состоит в том, что при обновлении системной библиотеки не потребуется пересборка всех системных утилит и программ пользователей.

При использовании большого количества библиотек и include файлов команда компиляции может оказаться довольно длинной. Чтобы упростить компиляцию, часто используют командные файлы (скрипты), выступающих в качестве интерфейсов к стандартным компиляторам. Такой подход используется в пакете MPI. При сборке библиотек формируются командные файлы для вызова тех или иных компиляторов. Компиляция параллельных MPI-программ выполняется командами:

  • mpif77 -O -o progname progname.f — на языке Фортран
  • mpicc -O -o progname progname.c — на языке С
  • mpicxx -O -o progname progname.cc — на языке С++

Здесь mpif77, mpicc, mpicxx — командные скрипты, вызывающие стандартные компиляторы с настройкой путей к необходимым include-файлам и подключением всех необходимых коммуникационных библиотек библиотек. Использование таких скриптов, в свою очередь, порождает некоторые проблемы. Дело в том, что практически на любом вычислительном кластере имеется множество версий коммуникационных библиотек. Это, во-первых, связано с необходимостью обновления установленных версий, а, во-вторых, с тем, что поставщики коммуникационного программного обеспечения, как правило, предоставляют множество реализаций коммуникационных библиотек. Например, в состав коммуникационного пакета OFED входят три различных реализации MPI (MVAPICH, MVAPICH2, OpenMPI), которые к тому же собираются всеми имеющимися в системе компиляторами. К сожалению, все эти версии не совместимы друг с другом, и поэтому очень важно при работе с MPI программами соблюсти синхронность в использовании коммуникационных библиотек. Это означает, что если программа откомпилирована с использованием некоторой версии MPI, то нужно быть уверенным, что при запуске программы на выполнение будет использована та же самая версия MPI, т.е. будет использована команда mpirun из этой же версии пакета, и будут подключены нужные версии динамических библиотек. Это достигается соответствующими настройками переменных окружения PATH и LD_LIBRARY_PATH.

Динамический анализ кода

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

Динамический анализ может производиться для программ, написанных на различных языках программирования C, C++, Java, C#, PHP, Python, Erlang и многих других.

Для динамического анализа кода используются специальные утилиты, предназначенные для запуска программы, сбора и анализа полученных данных. Многие современные среды разработки уже содержат в своем составе инструменты для динамического анализа кода, например отладчик и профилировщик в Microsoft Visual Studio 2012.

Программы для динамического анализа различаются по способу взаимодействия с проверяемой программой:

  • инструментирование исходного кода — в исходный текст приложения, до начала компиляции, добавляется специальный код для обнаружения ошибок;
  • инструментирование объектного кода — код добавляется непосредственно в исполняемый файл;
  • инструментирование кода на этапе компиляции — проверочный код добавляется, используя специальные ключи компилятора (например, такой режим поддерживается компилятором GNU C/C++ 4.x);
  • не изменяет исходную программу, используются специализированные библиотеки этапа исполнения — для обнаружения ошибок используются специальные отладочные версии системных библиотек.

Динамический анализ выполняется с помощью набора данных, которые подаются на вход исследуемой программе. Поэтому эффективность анализа напрямую зависит от качества и количества входных данных для тестирования. Именно от них зависит полнота покрытия кода, которая будет получена по результатам тестирования.

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

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

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

Тестирование может производиться по принципу белого или чёрного ящика. Их отличие только в том, что «белый ящик» — имеются данные о программном коде, а «черный ящик» — нет. Так же есть так называемый метод «серого ящика», когда известна структура программы, но в самом тестировании эти данные не используются.

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

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

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

Таким образом, динамический анализ имеет как слабые, так и сильные стороны.

Достоинства динамического анализа кода:

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

Недостатки динамического анализа кода:

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

Имея свои сильные и слабые стороны, динамический анализ наиболее эффективно может быть использован вместе со статическим анализом кода.

Дополнительные материалы

  • Wikipedia. Динамический анализ кода.
  • Андрей Карпов. Мифы о статическом анализе. Миф третий – динамический анализ лучше чем статический.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *