Объект тестирования OLVER Core


Рис. 1. Структура объекта тестирования OLVER Core.

От приложения к аппаратуре

Каждая конкретная Linux система создается для работы одного или нескольких приложений. Однако, кода самого приложения недостаточно, чтобы извлечь необходимый пользователям сервис из аппаратуры. Большинство приложений использует в своей работе обращения к функциям библиотек. Стандарт LSB Core 3.1 определяет следующие системные библиотеки: libc, libcrypt, libdl, libm, libpthread, librt, libutil, libpam, libz, libncurses. В современных Linux системах интерфейсы этих системных библиотек реализуются реальными библиотеками glibc, Linux-PAM, zlib и ncurses, которые на самом деле предоставляют большее число интерфейсов, чем 1532 функции, определенные в LSB Core (т.е. LSB Core специфицирует некоторое подмножество интерфейсов реальных библиотек).

Функции системных библиотек можно классифицировать следующим образом по степени взаимодействия с ядром Linux.

  • Реализация функции полностью содержится в библиотеке и ядро не используется (например strcpy, tsearch).
  • В библиотеке реализуется тривиальная “обертка” (wrapper) для вызова соответствующего интерфейса ядра (например read, write).
  • Реализация функции содержит как вызовы системных интерфейсов ядра (причем возможно нескольких разных), так и часть кода в самой библиотеке (например pthread_create, pthread_cancel).

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

Многообразие конфигураций Linux систем

Может показаться, что для надежности системы на уровне поведения интерфейсов системных библиотек все Linux системы одинаковы и достаточно, если тестирование будет проводиться разработчиками ядра и библиотек. Однако это не совсем верно. Уже на уровне интерфейсов системных библиотек существует масса измерений, которые делают практически каждую Linux систему уникальной с точки зрения проверки качества. Как показано на рисунке 1, поведение интерфейсов для приложений определяется комбинацией из библиотеки, ядра и аппаратуры. В свою очередь ядро и библиотеки определяются своей версией (включая официальные или неофициальные патчи и модификации) и, что немало важно, конфигурацией сборки. Дело в том, что при сборке одной и той же версии ядра или библиотеки можно задавать массу параметров, которые делают понятие версии расплывчатым. Одна и та же версия ядра или библиотеки, собранные при разных значениях конфигурационных параметров, могут работать по-разному. Таким образом, для обеспечения надежности каждой специфической конфигурации Linux системы необходимо ее отдельное тестирование.

В Центре верификации Linux под конфигурацией понимается комбинация версии ядра (включая отдельные патчи), версий системных библиотек, параметров их сборки и собственно конфигурации аппаратуры, на которой это все работает.

Объект тестирования поректа OLVER Core

В рамках проекта OLVER разрабатывается тестовый набор для проверки корректности поведения интерфейсов системных библиотек, определенных в стандарте LSB Core 3.1 (всего 1532 функции). В качестве критериев корректности выступают требования указанного стандарта и стандартов, на которые он ссылается (в частности POSIX).

Основным объектом тестирования являются системные библиотеки, однако при этом тестируется вся конфигурация Linux системы в целом, то есть совместная работа базовых библиотек, ядра и аппаратуры. Тестовый набор выступает фактически в качестве тестового приложения, которое вызывает интерфейсы Linux в различных комбинациях и с различными наборами параметров. Отличие тестов от приложений заключается в том, что тесты «знают» как должны работать вызываемые функции (что задается спецификациями) и поэтому могут проверять правильность возвращаемых значений, достигнутых состояний, корректность последовательности реакций и т.п.

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