Цель данной работы — разработка структуры данных для хранения множеств с использованием битовых полей, а также освоение таких инструментов разработки программного обеспечения, как система контроля версий Git и фрэймворк для разработки автоматических тестов Google Test.
Предполагается, что перед выполнением работы студенты получают данный проект-шаблон, содержащий следующее:
- Интерфейсы классов битового поля и множества (h-файлы)
- Готовый набор тестов для каждого из указанных классов
- Пример использования класса битового поля и множества для решения задачи поиска простых чисел с помощью алгоритма "Решето Эратосфена"
Выполнение работы предполагает решение следующих задач:
- Реализация класса битового поля
TBitField
согласно заданному интерфейсу. - Реализация класса множества
TSet
согласно заданному интерфейсу. - Обеспечение работоспособности тестов и примера использования.
- Реализация нескольких простых тестов на базе Google Test.
- Публикация исходных кодов в личном репозитории на GitHub.
- Система контроля версий Git. Рекомендуется использовать один из следующих клиентов на выбор студента:
- Фреймворк для написания автоматических тестов Google Test. Не требует установки, идет вместе с проектом-шаблоном.
- Среда разработки Microsoft Visual Studio (2008 или старше).
- Опционально. Утилита CMake для генерации проектов по сборке исходных кодов. Она может быть использована для генерации решения для среды разработки, отличной от Microsoft Visual Studio 2008 или 2010, предоставленных в данном проекте-шаблоне.
Структура проекта:
docs
— инструкции по выполнению лабораторной работы, полезные документы.gtest
— библиотека Google Test.include
— директория для размещения заголовочных файлов.samples
— директория для размещения демо-приложений.sln
— директория с файлами решений и проектов для VS 2008 и VS 2010, вложенные директорииvc9
иvc10
соответственно.src
— директория с исходными кодами (cpp-файлы).test
— директория с модульными тестами и основным приложением, инициализирующим запуск тестов.README.md
— информация о проекте, которую вы сейчас читаете.- Служебные файлы
.gitignore
— перечень расширений файлов, игнорируемых Git при добавлении файлов в репозиторий.CMakeLists.txt
— корневой файл для сборки проекта с помощью CMake. Может быть использован для генерации проекта в среде разработки, отличной от Microsoft Visual Studio..travis.yml
— конфигурационный файл для системы автоматического тестирования Travis-CI. Тесты, входящие в состав шаблонного проекта, регулярно запускаются на удаленной инфраструктуре.
В решении содержатся следующие модули:
- Модуль
tbitfield
, содержащий реализацию класса битового поля (файлы./include/tbitfield.h
,./src/tbitfield.cpp
). Предполагается, что в ходе выполнения работы реализуются методы класса в файле./src/tbitfield.cpp
, при этом заголовочный файл./include/tbitfield.h
с объявлениями должен оставаться неизменным. - Модуль
tset
, содержащий реализацию класса множества (файлы./include/tset.h
,./src/tset.cpp
). При выполнении работы так же, как и в случае класса битового поля, разрабатывается только реализация методов класса. - Тесты для классов битовое поле и множество (файлы
./test/test_tbitfield.cpp
,./test/test_tset.cpp
). - Пример использования класса битового поля и множества для поиска простых
чисел с использованием алгоритма, называемого "Решетом Эратосфена"
(файл
./samples/sample_prime_numbers.cpp
).
Кроме текстовых инструкций вы также можете обратиться к видеозаписи с демонстрацией основных операций.
- Освоение общих принципов работы с Git и GitHub. Последовательность
действий, которую необходимо выполнить перед началом работы с проектом,
описана в документе, посвященному Git. Вот основные этапы:
- Создание форка центрального репозитория с проектом-шаблоном, размещенного на GitHub
- Клонирование форка из своего личного пространства на GitHub к себе на рабочую машину
- Создание новой ветки, внесение некоторых изменений (например в файл
README.md
) - Публикация изменений в виде pull request на GitHub
- Вливание изменений в ветку
master
через веб-интерфейс GitHub
- Освоение общих принципов работы с Google Test. Инструкции приведены в
разделе, посвященному Google Test. Вот основные шаги:
- Построение проекта с тестами, запуск тестов
- Печать списка имен тестов: опция
--gtest_list_tests
- Запуск подмножества тестов: опция
--gtest_filter
- Реализация нескольких простых тестов, например: проверить что
выражение
1+3+5+7+9 = 5^2
и что1+3+5+7+9+11 = 6^2
- Создание полноценных реализаций классов
TBitField
иTSet
, проходящих все автоматические тесты.- Сперва необходимо добиться успешного прохождения всех тестов для класса
BitField
, далее для классаTSet
- Затем следует убедиться, что сэмпл-приложение (Решето Эратосфена) также успешно работает
- Далее полезно добавить несколько собственных тестов на классы, например:
- Убедиться, что двойная очистка бита оставляет его в нулевом состоянии
- Убедиться, что если взять три битовых поля, и выполнить на них битовую
операцию в одну строку (например
bf1 | bf2 | bf3
), то получается корректный результат - Убедиться, что для класса множества также можно в одну строку выполнять
несколько операций (например
set1 + set2 + set3
)
- Сперва необходимо добиться успешного прохождения всех тестов для класса