diff --git a/README.md b/README.md index a026e69fb..75f6adf1e 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,45 @@ # Методы программирования 2: Множества на основе битовых полей -[![Build Status](https://travis-ci.org/UNN-VMK-Software/mp2-lab1-set.svg)](https://travis-ci.org/UNN-VMK-Software/mp2-lab1-set) +[![Build Status](https://travis-ci.org/UNN-VMK-Software/mp2-lab1-set.svg)][travis] ## Используемые инструменты - - Система контроля версий [Git](https://git-scm.com/book/en/v2). - Рекомендуется использовать один из следующих клиентов на выбор студента: + - Система контроля версий [Git](https://git-scm.com/book/en/v2). Рекомендуется + использовать один из следующих клиентов на выбор студента: [git-scm](https://git-scm.com/downloads), [GitHub Desktop](https://desktop.github.com). - Библиотека автоматического тестирования - [Google Test Framework](https://code.google.com/p/googletest). - Не требует установки, идет вместе с шаблонным проектом. - - Среда разработки Microsoft Visual Studio (> 2008). - - Утилита [CMake](http://www.cmake.org) для сборки исходных кодов. - Наличие данной утилиты опционально. Она может быть использована - для генерации решения для среды разработки, отличной от Microsoft - Visual Studio. + [Google Test](https://code.google.com/p/googletest). Не требует установки, + идет вместе с шаблонным проектом. + - Среда разработки Microsoft Visual Studio (2008 или старше). + - Утилита [CMake](http://www.cmake.org) для генерации проектов по сборке + исходных кодов. Наличие данной утилиты опционально. Она может быть + использована для генерации решения для среды разработки, отличной от + Microsoft Visual Studio. + +## Цели и задачи + +__Цель данной работы__ — разработка структуры данных для хранения множеств +с использованием битовых полей, а также освоение таких инструментов разработки +программного обеспечения, как система контроля версий +[Git](https://git-scm.com/book/en/v2) и фрэймворк для разработки автоматических +тестов [Google Test](https://code.google.com/p/googletest). + +Предполагается, что перед выполнением работы студент получает данный +проект-шаблон, содержащий интерфейсы классов битового поля и множества (h-файлы), +готовый набор тестов для каждого из указанных классов, пример использования +класса битового поля и множества для решения задачи поиска простых чисел +с помощью алгоритма "Решето Эратосфена". + +Выполнение работы предполагает решение следующих задач: + + 1. Реализация класса битового поля `TBitField` согласно заданному интерфейсу. + 1. Реализация класса множества `TSet` согласну заданному интерфейсу. + 1. Обеспечение работоспособности тестов и примера использования. ## Общая структура проекта @@ -34,21 +49,23 @@ - `include` - директория для размещения заголовочных файлов. - `samples` - директория для размещения демо-приложений. - `sln` - директория с файлами решений и проектов для VS 2008 и VS2010, - вложенные директории vc9 и vc10 соответственно. - - `src` - директория с исходными кодами. - - `test` - директория с тестами и основным приложением, инициализирующим - запуск тестов. - - `.gitignore` - перечень расширений файлов, игнорируемых Git при - добавлении файлов в репозиторий. + вложенные директории `vc9` и `vc10` соответственно. + - `src` - директория с исходными кодами (cpp-файлы). + - `test` - директория с модульными тестами и основным приложением, + инициализирующим запуск тестов. - `README.md` - информация о проекте, которую вы сейчас читаете. - - `CMakeLists.txt` - корневой файл для сборки проекта с помощью CMake. - Может быть использован для генерации проекта в среде разработки, - отличной от Microsoft Visual Studio. - - `.travis.yml` - конфигурационный файл для системы автоматического - тестирования Travis-CI. Тесты, входящие в состав шаблонного проекта, - регулярно проверяются на удаленной инфраструктуре. + - Служебные файлы + - `.gitignore` - перечень расширений файлов, игнорируемых Git при добавлении + файлов в репозиторий. + - `CMakeLists.txt` - корневой файл для сборки проекта с помощью CMake. Может + быть использован для генерации проекта в среде разработки, отличной от + Microsoft Visual Studio. + - `.travis.yml` - конфигурационный файл для системы автоматического + тестирования Travis-CI. Тесты, входящие в состав шаблонного проекта, + регулярно запускаются на удаленной [инфраструктуре][travis]. В решении содержатся следующие модули: + - Модуль `tbitfield` (`./include/tbitfield.h`, `./src/tbitfield.cpp`), содержащий реализацию класса битового поля. Предполагается, что в ходе выполнения работы реализуются методы класса (в файле @@ -64,171 +81,19 @@ ["Решетом Эратосфена"](http://habrahabr.ru/post/91112) (`./samples/sample_prime_numbers.cpp`). -## Цели и задачи - -__Цель данной работы__ -- разработка структуры данных для хранения множеств -с использованием битовых полей, а также освоение таких инструментов разработки -программного обеспечения, как система контроля версий -[Git](https://git-scm.com/book/en/v2) и фрэймворк для разработки -тестов [Google Test Framework](https://code.google.com/p/googletest). - -Предполагается, что перед выполнением работы студент получает данный -шаблон проекта, содержащий интерфесы классов битового поля и множества, -набор тестов для каждого из указанных классов, пример использования -класса битового поля и множества для решения задачи поиска простых чисел -с помощью алгоритма "Решето Эратосфена". - -Выполнение работы предполагает решение следующих задач: - 1. Реализация заданного интерфейса класса битового поля `TBitField`. - 1. Реализация заданного интерфейса класса множества `TSet`. - 1. Обеспечение работоспособности тестов и примера использования. - ## Инструкция по выполнению работы - 1. Создайте локальную копию репозитория. Последовательность действий, - которую необходимо выполнить описана перед началом работы с проектом, - описана в разделе - [Общие инструкции по работе с Git][git-instructions]. - 1. Откройте решение `bitfield.sln` из директории `sln`: - - Если установлена Visual Studio 2008, то решение находится - во вложенной директории `vc9`. - - Если установлена Visual Studio 2010, то решение находится - во вложенной директории `vc10`. - - Если установлена более высокая версия Visual Studio, то выберите - любую из указанных директорий. При открытии решения будет выполнена - автоматическая конвертация решения и проектов. - В открытом решении имеются следующие проекты: - - `gtest` -- статическая библиотека Google Test Framework. В ходе выполнения - работы не требует редактирования. - - `sample_prime_numbers` -- пример реализации алгоритма поиска простых чисел - "Решето Эратосфена". Обратите внимание, что файл содержит две реализации - алгоритма, первая использует класс битового поля, вторая -- класс множества. - Текущая компилируемая версия основной функции зависит, объявлена ли - переменная `USE_SET` или нет (строка кода `#define USE_SET`). Реализация - алгоритма также не требует модификации. - - `bitfield` -- статическая библиотека, содержащая модули `tbitfield` и `tset`. - - `test_bitfield` -- тестовое приложение. В ходе выполнения работы не требует - редактирования. - 1. Разработайте начальную реализацию методов классов `TBitField` и `TSet` - (файлы `./src/tbitfield.cpp` и `./src/tset.cpp`). На первом этапе - в качестве реализации предлагается поместить "заглушки", - чтобы обеспечить успешную компиляцию решения. При этом тесты могут - не проходить, а пример использования не работать. - 1. Скомпилируйте решение и запустите тестовое приложение. - 1. Для сборки решения воспользуйтесь командой `Rebuild Solution` - контекстного меню, которое появляется при нажатии правой кнопки мыши - на решении в `Solution Explorer`. - 1. Запустите командную строку `cmd.exe` из директории, в которую попали - бинарные файлы. - 1. Вызовите в командной строке тестовое приложение `test_bitfield.exe`. - 1. Последовательно реализуйте конструкторы, операции вставки/удаления, - перегруженные операции класса `TBitField`. - - После реализации каждого метода пересобирайте решение и запускайте тесты, - чтобы отслежить корректность исполнения тестов для реализуемого метода. - - Когда вы убедились, что метод работает корректно необходимо зафиксировать - изменения в локальном репозитории (команды `git add` и `git commit`, - подробнее в разделе [Общие инструкции по работе с Git][git-instructions]). - 1. После того, как вы убедились, что ВСЕ тесты для класса битового поля - отрабатывают корректно, запустите приложение `sample_prime_numbers.exe` - и проверьте его работоспособность для битовых полей (директива - `#define USE_SET` должна быть закомментирована). - 1. Последовательно реализуйте конструкторы, операции вставки/удаления, - перегруженные операции класса `TSet`. - - После реализации каждого метода пересобирайте решение и запускайте тесты, - чтобы отслежить корректность исполнения тестов для реализуемого метода. - - Когда вы убедились, что метод работает корректно необходимо зафиксировать - изменения в локальном репозитории (команды `git add` и `git commit`, - подробнее в разделе [Общие инструкции по работе с Git][git-instructions]). - 1. После того, как вы убедились, что ВСЕ тесты для класса битового поля - отрабатывают корректно, запустите приложение `sample_prime_numbers.exe` - и проверьте его работоспособность для битовых полей (директива - `#define USE_SET` должна быть раскомментирована). - 1. Чтобы обеспечить возможность удаленной проверки работы (включая - автоматический запуск и проверку корректности тестов), необходимо - создать Pull Request в upstream-репозиторий. Подробнее, как создать - Pull Request, в разделе [Общие инструкции по работе с Git][git-instructions]. - -## Общие инструкции по работе с Git - -В данном разделе описана типичная последовательность действий, которую -необходимо выполнить перед тем, как начать работать с проектом. Далее -для определенности используется репозиторий `mp2-lab1-bitfield`. - - 1. Создать аккаунт на [github.com](https://github.com), если такой - отсутствует. Для определенности обозначим аккаунт `github-account`. - - 1. Сделать fork репозитория - (в - терминологии Git upstream-репозиторий) к себе в личный профиль с названием - github-account. В результате будет создана копия репозитория с названием - - (origin-репозиторий). - - 1. Клонировать [origin][origin] репозиторий к себе на локальный компьютер, - воспользовавшись следующей командой: - - ``` - $ git clone https://github.com/github-account/mp2-lab1-bitfield - ``` - - 1. Перейти в директорию mp2-lab1-bitfield: - - ``` - $ cd ./mp2-lab1-bitfield - ``` - - 1. Настроить имя пользователя, из под которого будут выполняться все операции - с репозиторием Git: - - ``` - $ git config --local user.name "github-account" - ``` - -Чтобы обеспечить возможность удаленной проверки работы (включая автоматический -запуск и проверку корректности тестов), необходимо создать Pull Request -в upstream-репозиторий: - 1. Открыть в браузере . - 2. Нажать кнопку Pull Request в строке над исходными кодами, содержащей - информацию о последних коммитах. - -При работе с файлами в ветке необходимо управлять изменениями. Далее приведен -перечень основных команд в предположении, что текущей рабочей веткой -является `master`. - - 1. Получить список текущих изменений: - - ``` - $ git status - ``` - - 1. Пометить файл как добавленный в текущую ветку репозитория (файл будет - добавлен после выполнения команды `commit`): - - ``` - $ git add [] - # - название файла для добавления в commit - если вместо имени указан символ *, то будут добавлены все новые файлы, - расширение которых не указано в .gitignore - ``` - - 1. Добавить изменения в текущую ветку локального репозитория: - - ``` - $ git commit [-m ""] [-a] - # [-a] - автоматически добавляет изменения для существующих на сервере файлов - без выполнения команды git add - # [--amend] - перезаписывает последний коммит (используется, если не забыты - изменения) - ``` - - 1. Разместить изменения, которые были добавлены в локальный репозиторий - с помощью команды `push`: - - ``` - $ git push origin/master - ``` +Предполагается выполнение лабораторной работы в несколько шагов: + + 1. Освоение общих принципов работы с Git и GitHub. Последовательность действий, + которую необходимо выполнить, описана перед началом работы с проектом, + описана в документе, посвященному [Git][git-instructions]. + 1. Освоение общих принципов работы с Google Test. + 1. Создание полноценной реализации классов `TBitField` и `TSet`, + проходящих все автоматические тесты. -[origin]: https://github.com/github-account/mp2-lab1-bitfield -[git-instructions]: https://github.com/UNN-VMK-Software/mp2-lab1-bitfield#Общие-инструкции-по-работе-с-git +[travis]: https://travis-ci.org/UNN-VMK-Software/mp2-lab1-set +[origin]: https://github.com/github-account/mp2-lab1-set +[git-instructions]: https://github.com/UNN-VMK-Software/mp2-lab1-set#Общие-инструкции-по-работе-с-git diff --git a/docs/git-cheatsheet/1-git-cheat-sheet-v2.pdf b/docs/git-cheatsheet/1-git-cheat-sheet-v2.pdf new file mode 100644 index 000000000..1576411ff Binary files /dev/null and b/docs/git-cheatsheet/1-git-cheat-sheet-v2.pdf differ diff --git a/docs/git-cheatsheet/2-github-git-cheat-sheet.pdf b/docs/git-cheatsheet/2-github-git-cheat-sheet.pdf new file mode 100644 index 000000000..64ddc4196 Binary files /dev/null and b/docs/git-cheatsheet/2-github-git-cheat-sheet.pdf differ diff --git a/docs/git-cheatsheet/3-git-cheatsheet-EN-white.pdf b/docs/git-cheatsheet/3-git-cheatsheet-EN-white.pdf new file mode 100644 index 000000000..6742385ea Binary files /dev/null and b/docs/git-cheatsheet/3-git-cheatsheet-EN-white.pdf differ diff --git a/docs/git-cheatsheet/4-atlassian_git_cheatsheet.pdf b/docs/git-cheatsheet/4-atlassian_git_cheatsheet.pdf new file mode 100644 index 000000000..0aaddd957 Binary files /dev/null and b/docs/git-cheatsheet/4-atlassian_git_cheatsheet.pdf differ diff --git a/docs/git-cheatsheet/git-pretty.png b/docs/git-cheatsheet/git-pretty.png new file mode 100644 index 000000000..35f289864 Binary files /dev/null and b/docs/git-cheatsheet/git-pretty.png differ diff --git a/docs/part1-git.md b/docs/part1-git.md new file mode 100644 index 000000000..1d5edefce --- /dev/null +++ b/docs/part1-git.md @@ -0,0 +1,79 @@ +## Инструкции по работе с Git + +В данном разделе описана типичная последовательность действий, которую +необходимо выполнить перед тем, как начать работать с проектом. Далее +для определенности используется репозиторий `mp2-lab1-bitfield`. + + 1. Создать аккаунт на [github.com](https://github.com), если такой + отсутствует. Для определенности обозначим аккаунт `github-account`. + + 1. Сделать fork репозитория + (в + терминологии Git upstream-репозиторий) к себе в личный профиль с названием + github-account. В результате будет создана копия репозитория с названием + + (origin-репозиторий). + + 1. Клонировать [origin][origin] репозиторий к себе на локальный компьютер, + воспользовавшись следующей командой: + + ``` + $ git clone https://github.com/github-account/mp2-lab1-bitfield + ``` + + 1. Перейти в директорию mp2-lab1-bitfield: + + ``` + $ cd ./mp2-lab1-bitfield + ``` + + 1. Настроить имя пользователя, из под которого будут выполняться все операции + с репозиторием Git: + + ``` + $ git config --local user.name "github-account" + ``` + +Чтобы обеспечить возможность удаленной проверки работы (включая автоматический +запуск и проверку корректности тестов), необходимо создать Pull Request +в upstream-репозиторий: + 1. Открыть в браузере . + 2. Нажать кнопку Pull Request в строке над исходными кодами, содержащей + информацию о последних коммитах. + +При работе с файлами в ветке необходимо управлять изменениями. Далее приведен +перечень основных команд в предположении, что текущей рабочей веткой +является `master`. + + 1. Получить список текущих изменений: + + ``` + $ git status + ``` + + 1. Пометить файл как добавленный в текущую ветку репозитория (файл будет + добавлен после выполнения команды `commit`): + + ``` + $ git add [] + # - название файла для добавления в commit + если вместо имени указан символ *, то будут добавлены все новые файлы, + расширение которых не указано в .gitignore + ``` + + 1. Добавить изменения в текущую ветку локального репозитория: + + ``` + $ git commit [-m ""] [-a] + # [-a] - автоматически добавляет изменения для существующих на сервере файлов + без выполнения команды git add + # [--amend] - перезаписывает последний коммит (используется, если не забыты + изменения) + ``` + + 1. Разместить изменения, которые были добавлены в локальный репозиторий + с помощью команды `push`: + + ``` + $ git push origin/master + ``` diff --git a/docs/part2-google-test.md b/docs/part2-google-test.md new file mode 100644 index 000000000..fdc61145b --- /dev/null +++ b/docs/part2-google-test.md @@ -0,0 +1,60 @@ +## Инструкции по работе с Google Test + + 1. Откройте решение `bitfield.sln` из директории `sln`: + - Если установлена Visual Studio 2008, то решение находится + во вложенной директории `vc9`. + - Если установлена Visual Studio 2010, то решение находится + во вложенной директории `vc10`. + - Если установлена более высокая версия Visual Studio, то выберите + любую из указанных директорий. При открытии решения будет выполнена + автоматическая конвертация решения и проектов. + В открытом решении имеются следующие проекты: + - `gtest` -- статическая библиотека Google Test Framework. В ходе выполнения + работы не требует редактирования. + - `sample_prime_numbers` -- пример реализации алгоритма поиска простых чисел + "Решето Эратосфена". Обратите внимание, что файл содержит две реализации + алгоритма, первая использует класс битового поля, вторая -- класс множества. + Текущая компилируемая версия основной функции зависит, объявлена ли + переменная `USE_SET` или нет (строка кода `#define USE_SET`). Реализация + алгоритма также не требует модификации. + - `bitfield` -- статическая библиотека, содержащая модули `tbitfield` и `tset`. + - `test_bitfield` -- тестовое приложение. В ходе выполнения работы не требует + редактирования. + 1. Разработайте начальную реализацию методов классов `TBitField` и `TSet` + (файлы `./src/tbitfield.cpp` и `./src/tset.cpp`). На первом этапе + в качестве реализации предлагается поместить "заглушки", + чтобы обеспечить успешную компиляцию решения. При этом тесты могут + не проходить, а пример использования не работать. + 1. Скомпилируйте решение и запустите тестовое приложение. + 1. Для сборки решения воспользуйтесь командой `Rebuild Solution` + контекстного меню, которое появляется при нажатии правой кнопки мыши + на решении в `Solution Explorer`. + 1. Запустите командную строку `cmd.exe` из директории, в которую попали + бинарные файлы. + 1. Вызовите в командной строке тестовое приложение `test_bitfield.exe`. + 1. Последовательно реализуйте конструкторы, операции вставки/удаления, + перегруженные операции класса `TBitField`. + - После реализации каждого метода пересобирайте решение и запускайте тесты, + чтобы отслежить корректность исполнения тестов для реализуемого метода. + - Когда вы убедились, что метод работает корректно необходимо зафиксировать + изменения в локальном репозитории (команды `git add` и `git commit`, + подробнее в разделе [Общие инструкции по работе с Git][git-instructions]). + 1. После того, как вы убедились, что ВСЕ тесты для класса битового поля + отрабатывают корректно, запустите приложение `sample_prime_numbers.exe` + и проверьте его работоспособность для битовых полей (директива + `#define USE_SET` должна быть закомментирована). + 1. Последовательно реализуйте конструкторы, операции вставки/удаления, + перегруженные операции класса `TSet`. + - После реализации каждого метода пересобирайте решение и запускайте тесты, + чтобы отслежить корректность исполнения тестов для реализуемого метода. + - Когда вы убедились, что метод работает корректно необходимо зафиксировать + изменения в локальном репозитории (команды `git add` и `git commit`, + подробнее в разделе [Общие инструкции по работе с Git][git-instructions]). + 1. После того, как вы убедились, что ВСЕ тесты для класса битового поля + отрабатывают корректно, запустите приложение `sample_prime_numbers.exe` + и проверьте его работоспособность для битовых полей (директива + `#define USE_SET` должна быть раскомментирована). + 1. Чтобы обеспечить возможность удаленной проверки работы (включая + автоматический запуск и проверку корректности тестов), необходимо + создать Pull Request в upstream-репозиторий. Подробнее, как создать + Pull Request, в разделе [Общие инструкции по работе с Git][git-instructions].