Библиотеки и тестирование

Сборка библиотек

libtool — инструмент для кроссплатформенной сборки и тестирования библиотек.

Пример:

А теперь с Libtool:

Особенности:

Версионирование библиотек

Базовая статья

SONAME: version.minor.subminor

Семантическое версионирование Версия: MAJOR.MINOR.PATCH:

  1. Обратно несовместимые изменения ABI (удаление / изменение сигнатур) — MAJOR++.MINOR=0.PATCH=0

  2. Обратно совместимые изменения ABI 9добавление) — MAJOR.MINOR++.PATCH=0

  3. Обратно совместимые багфиксы ABI и изменения, не затрагивающие ABI — MAJOR.MINOR.PATCH++

В работе:

Тестирование

Целесообразно начать с преобразования исходного текста — это шаг №0 репозитория с примером

TODO возможно, в этот раз нужен пример попроще. Да хоть этот самый libinc?

Коротко о видах тестирования

Check

Check:

Check + autotools

Репозиторий с примером

Этапы разработки:

  1. Предварительные шаги
  2. Простой тест. Здесь и далее раннером работает shell-perl-… начинка ./test-driver, поставляемая с autotools.

  3. Тест переписан на libcheck.

  4. Тест ещё раз переписан на использование checkmk

  5. Авторские тесты удалены из основной прогарммы и переписаны на checkmk

    • Поскольку runner-ом у нас всё ещё работает ./test-driver, с его точки зрения это один тест, все подробности про внутренние suite и cases libcheck-а ему неизвестны.

    • TODO Возможно, стоит прикрутить к этому Test_Anything_Protocol, поддержка есть и в autotools, и в check

  6. Небольшая плюшка — просмотр журнала тестирования

    • Как минимум, CK_VERBOSITY=verbose make check и  grep "" *.log

TODO добавить фикстуру

Тестовое покрытие

Покрытие кода

Опять-таки тысячи их, посмотрим GCov

В тестовом репозитории:

  1. Поддержка gcov

    • в частности, просто make check; cd src; gcov -o .libs libnamegen (

    • libnamegen — это название базы, собранной при make check.

CMake / CTest / …

(Не успеем)

Meson / Gcovr

(Не успеем)

Д/З

  1. Изучить выбранный вами фреймворк тестов для Си
    • Например, check, autotools и пример из лекции

      • В ALT Linux понадобятся:
        • make, automake, autoconf

        • libtool

        • libcheck-devel, check

        • (кажется, всё?)
  2. Взять за основу Growable Memory Buffers for C99

    • Превратить в библиотеку
      • (!) Функция в ней всего одна, остальное макросы, и переделывать это не надо

      • Все макросы уезжают в .h-файл

    • Приложение-пример можно не писать

    • Тесты взять из авторского файла tests.c

      • Тесты на память с setjmp() можно выкинуть.

    • Оформить их сообразно правилам фреймворка в несколько отдельных тестов
      • <!> (необязательно) попробовать добиться как можно более полного покрытия (предельные тексты, например, с помощью prlimit)

    • Сделать примитивную поддержку проверки покрытия (чтобы проценты показывало)
  3. В репозитории с домашними заданиями создать подкаталог 10_Testing и положить решение туда

LecturesCMC/LinuxApplicationDevelopment2023/10_Testing (последним исправлял пользователь Veniamin 2023-11-26 04:43:08)