Вверх
Сайт ДонНТУ Портал магистров ДонНТУ

Реферат по теме выпускной работы

Содержание

Введение

Системы тестирования программного кода представляют собой набор методов и процессов, направленных на выявление дефектов и проверку функциональности программного обеспечения. Тестирование является важной частью разработки ПО, так как оно помогает обеспечить качество и надежность конечного продукта [1].

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

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

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

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

Цель работы. Целью исследования является повышение эффективности систем для тестирования программного кода и решения задач спортивного программирования.

Задачи исследования:

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

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

1. Исследование существующих систем и библиотек для тестирования программного кода и решения задач спортивного программирования

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

1.1 Системы для тестирования программного кода

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

Сначала рассмотрим библиотеки для модульного тестирования (unit-тестирование).

Unit-тестирование или модульное тестирование — это метод тестирования, при котором отдельные модули или компоненты программного обеспечения проверяются на корректность работы. Этот подход позволяет разработчикам выявлять ошибки на ранних этапах разработки, что значительно упрощает процесс отладки [2].

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

Библиотеки для unit-тестирования можно использовать и для проверки правильности решения задачи, при этом тесты уже должны быть написаны, а код метода необходимо реализовать — это и будет решение задачи.

Существует много разнообразных библиотек для Unit-тестирования. А именно: Google Test, Junit, unittest, NUnit и другие. Они похожи по функциональным возможностям, рассмотрим некоторые из них.

1.1.1 Google Test

Google C++ Testing Framework (Google Test) — библиотека для модульного тестирования (англ. unit testing) на языке C++ [3].

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

В библиотеку включён специальный скрипт, который упаковывает исходные файлы в два файла: gtest-all.cc и gtest.h. Эти файлы можно легко интегрировать в проект без дополнительных шагов по предварительной сборке библиотеки. Рассмотрим пример работы библиотеки. Создадим файл с кодом на C++, который будем тестировать. Этот файл также будет содержать тесты для проверки правильности реализованного кода (рисунок 1.1).

Код с тестами на C++
Рисунок 1.1 – Код с тестами на C++

Выполняем компиляцию кода с учётом написанных тестов и библиотеки Google Test. Для этого необходимо ввести команду в терминале: g++ -o example_test example_test.cpp -lgtest -lpthread. example_test.cpp — это файл с кодом.

После успешной компиляции можно запустить тесты, используя команду в терминале: ./example_test. example_test — это файл с кодом. При запуске Google Test выведет результаты выполнения тестов, показывая, какие тесты прошли, а какие провалились.

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

Достоинства:

  • быстрая работа библиотеки.

Недостатки:

  • сложность запуска тестов, используя терминал (нужно знать команду);
  • необходимо уметь составлять код тестов;
  • поддержка только одного языка программирования (C++).

1.1.2 NUnit

NUnit — открытая среда юнит-тестирования приложений для .NET (C#, VisualBasic, F# и другие) [4].

Рассмотрим пример работы библиотеки.

Создадим класс C# под названием CalcHelper, который будет выполнять две математические операции: сложение и умножение. Этот класс будет содержать методы Add для сложения двух чисел и Multiplication для умножения. Пример на рисунке 1.2.

Код класса CalcHelper
Рисунок 1.2 – Код класса CalcHelper

Класс содержит два метода: Add для сложения и Mult для умножения. Каждый метод принимает по два параметра: a — первое число и b — второе число. Метод Add возвращает сумму чисел a и b, метод Mult возвращает произведение чисел a и b.

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

Создаём класс с тестами под названием TestingClass. Чтобы программа понимала, что этот класс для тестирования, необходимо установить атрибут [TestFixture]. Код такого класса отображён на рисунке 1.3.

Класс содержит 1 поле helper (объект класса CalcHelper) и 3 метода: Setup, AddTwoNumbers, MultTwoNumbers.

Метод Setup позволяет выполнить определённые действия до проверки всех тестов. В нашем случае в методе Setup инициализируется объект класса CalcHelper. Чтобы код смог определить, что Setup это метод инициализации, необходимо установить атрибут [SetUp] для метода.

Код класса TestingClass
Рисунок 1.3 – Код класса TestingClass

Метод AddTwoNumbers позволяет проверить правильность выполнения сложения в методе Add объекта helper. Для этого создаются две переменные для двух чисел: a и b, которым присваиваются определённые значения. Затем выполняется получение ответа из метода Add(a, b) в переменную result. После этого осуществляется проверка соответствия значения переменной result и ожидаемого ответа с помощью Assert.Equals. Если result совпадает с ожидаемым ответом, тест считается пройденным; в противном случае возникает ошибка работы метода Add, и программу необходимо доработать.

Чтобы программа понимала, что метод AddTwoNumbers является методом для тестирования, необходимо установить атрибут [Test] перед ним. Аналогично работает и метод MultTwoNumbers, но в этом случае проверяется не метод Add объекта helper, а метод Mult.

Для запуска unit-тестов необходимо воспользоваться встроенной утилитой для запуска тестов или запустить эту же утилиту, используя IDE — среду для написания и запуска кода.

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

1.2 Системы для тестирования программного кода и решения задач спортивного программирования

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

1.2.1 Stepik

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

В процессе обучения студенты могут общаться друг с другом и задавать вопросы преподавателям на форумах. Основные дисциплины, охватываемые курсами, включают программирование, математику, биоинформатику, биологию и экономику. [5].

Пример интерфейса Stepik представлен на рисунке 1.4.

Интерфейс системы Stepik
Рисунок 1.4 – Интерфейс системы Stepik

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

Рассмотрим этапы работы с системой Stepik.

Создание курса. Авторы могут разрабатывать курсы по различным темам, используя удобный интерфейс.

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

Инструменты и ресурсы. Stepik предлагает различные инструменты для обучения, включая мобильные приложения для iOS и Android, а также интеграции с популярными IDE, такими как IntelliJ IDEA и PyCharm. Это делает процесс обучения более доступным и удобным.

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

Программная система Stepik отлично подходит для решения задач спортивного программирования и обладает определёнными достоинствами, но также имеет и недостатки. Среди достоинств можно выделить возможность создавать свои онлайн-курсы и уроки с задачами, изучать материал и решать задачи без преподавателя благодаря автоматическому тестированию, а также то, что система является веб-сайтом, что исключает необходимость скачивания и установки программы. Кроме того, пользователи могут оставлять комментарии, получать баллы за решённые задачи и видеть свой рейтинг.

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

1.2.2 Hacker Earth

Hacker Earth — это система для тестирования решений разнообразных задач, а также платформа для поиска работы. Она предоставляет разработчикам возможность участвовать в различных конкурсах, тестировать свои навыки и находить работу через проекты и задания, предлагаемые работодателями [6].

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

Однако у Hacker Earth есть и недостатки. К ним относится отсутствие возможности обучаться на платформе, поскольку она ориентирована только на решение задач.

Логотип Hacker Earth представлен на рисунке 1.5.

Логотип Hacker Earth
Рисунок 1.5 – Логотип Hacker Earth

1.2.3 Selenium

Selenium — это среда тестирования, предназначенная для тестирования веб-приложений в различных браузерах и на платформах, таких как Windows, Mac и Linux. Она помогает тестировщикам писать тесты на разных языках программирования, включая Java, PHP, C#, Python, Groovy, Ruby и Perl. Selenium предлагает функции записи и воспроизведения, что позволяет создавать тесты без необходимости глубокого изучения Selenium IDE.

Selenium поддерживается некоторыми из крупнейших производителей браузеров, которые уверены, что этот инструмент является неотъемлемой частью их браузеров. Кроме того, Selenium служит основой для большинства других инструментов тестирования программного обеспечения в целом [7].

Логотип Selenium представлен на рисунке 1.6.

Логотип Selenium
Рисунок 1.6 – Логотип Selenium

Selenium обладает рядом достоинств, которые делают его популярным инструментом для тестирования веб-приложений. Во-первых, он поддерживает кроссбраузерное тестирование, что позволяет разработчикам проверять свои приложения в различных браузерах, таких как Chrome, Firefox, Safari и Internet Explorer. Это обеспечивает уверенность в том, что приложение будет работать корректно на разных платформах и устройствах.

Во-вторых, Selenium поддерживает множество языков программирования, включая Java, C#, Python, Ruby и JavaScript. Это делает его доступным для широкого круга разработчиков, независимо от их предпочтений в языке программирования.

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

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

1.2.4 TestingWhiz

TestingWhiz — это инструмент автоматизации тестирования без кода, разработанный компанией Cygnet Infotech, которая является поставщиком ИТ-решений третьего уровня CMMi. Версия Enterprise этого инструмента предлагает широкий спектр решений для автоматизированного тестирования, включая веб-тестирование, тестирование программного обеспечения, тестирование баз данных, тестирование API, тестирование мобильных приложений, а также обслуживание набора регрессионных тестов и межбраузерное тестирование.

Инструмент предлагает множество функций, таких как тестирование на основе ключевых слов и распределенное тестирование, а также возможность тестирования расширений браузера. В TestingWhiz имеется внутренний рекордер Object Eye, интеграция с SMTP, а также возможность интеграции с инструментами отслеживания ошибок, такими как Jira, Mantis, TFS и FogBugz. Кроме того, платформа предоставляет централизованное хранилище объектов и интеграцию с системами контроля версий, а также возможность создания индивидуальных правил записи [8].

Интерфейс системы представлен на рисунке 1.7.

Интерфейс системы TestingWhiz
Рисунок 1.7 – Интерфейс системы TestingWhiz

TestingWhiz предлагает ряд преимуществ, которые делают его привлекательным инструментом для автоматизации тестирования. Во-первых, он обеспечивает безкодовую автоматизацию, что позволяет пользователям без глубоких знаний программирования создавать и выполнять тесты. Это делает инструмент доступным для более широкой аудитории, включая тестировщиков и бизнес-аналитиков. Во-вторых, TestingWhiz поддерживает тестирование различных платформ, включая веб-приложения, мобильные приложения на Android и iOS, а также API (REST, SOAP и GraphQL), что делает его универсальным решением для разных типов приложений.

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

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

1.2.5 TestComplete

TestComplete — это функциональная платформа для автоматизации тестирования, разработанная компанией SmartBear Software, которая предлагает решения для тестирования настольных и мобильных приложений. Платформа предоставляет широкий спектр возможностей, включая тестирование графического интерфейса пользователя (GUI), поддержку различных языков сценариев, таких как JavaScript, Python, VBScript, JScript, DelphiScript, C++ Script и C# Script, а также функции тестового визуализатора, скриптового тестирования и записи/воспроизведения тестов [9]. Пример интерфейса на рисунке 1.8.

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

Функция записи и воспроизведения действий пользователя значительно упрощает процесс создания тестов, позволяя пользователям записывать свои действия и затем воспроизводить их для автоматического тестирования. Также TestComplete хорошо интегрируется с различными системами управления тестированием и инструментами CI/CD, что позволяет легко включать его в существующие процессы разработки и тестирования.

Интерфейс системы TestComplete
Рисунок 1.8 – Интерфейс системы TestComplete

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

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

1.2.6 Ranorex Studio

Ranorex Studio предлагает инструменты для автоматизации тестирования, охватывающие все десктопные и мобильные приложения. Платформа включает в себя такие функции, как распознавание графического интерфейса пользователя, многоразовые тестовые коды, обнаружение ошибок, интеграция с различными инструментами, а также запись и воспроизведение действий [10]. Пример интерфейса на рисунке 1.9.

Среди достоинств Ranorex можно выделить его всеобъемлющую автоматизацию, которая предоставляет решение «всё в одном» для тестирования настольных, веб- и мобильных приложений. Это позволяет командам использовать один инструмент для различных типов тестирования, что упрощает процесс и снижает затраты на обучение. Кроме того, Ranorex поддерживает безкодовое тестирование, что позволяет пользователям без глубоких знаний программирования создавать и выполнять тесты. Это делает инструмент доступным для более широкой аудитории, включая тестировщиков и бизнес-аналитиков. Интуитивно понятный интерфейс Ranorex облегчает создание и управление тестами, что особенно полезно для новичков в автоматизации тестирования.

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

Интерфейс системы Ranorex
Рисунок 1.9 – Интерфейс системы Ranorex

1.3 Обзор международных источников

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

В статье «Способы повышение эффективности ручного тестирования программного обеспечения» (автор: Выскварко Н.С.) [11] были определены проблемы тестирования, выявлены способы повышения эффективности тестирования.

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

В статье «Automated solutions: improving the efficiency of software testing» (автор: Zhenyu Huang) [13] рассмотрены методы автоматизации, которые обеспечивают преимущество на разных этапах тестирования.

В статье «A Survey of Effective and Efficient Software Testing» (автор: Akalanka Mailewa) [14] рассмотрены проблемы, которые возникают при тестировании программного обеспечения, было выполнено сравнение ручного и автоматизированного тестирования, выявлены их преимущества и недостатки, представлены методы, уровни и типы тестирования.

1.4 Обзор национальных источников

В процессе исследования материалов по теме диплома, были проверены также национальные источники, найдены и рассмотрены работы.

В курсовой работе «Разработка методики тестирования ПО» (автор: Иванов Е.С.) [15] были рассмотрены некоторые дефекты в ПО, причины возникновения и способы их отслеживания, с помощью систем отслеживания ошибок. Также изучены способы создания и применения тест кейсов для черного ящика. Во второй части работы рассмотрены программы для нагрузочного тестирования. C помощью программы JMeter проведено нагрузочное тестирование веб-сервиса «Эксперт», в котором было обнаружено слабое звено в системе. Описаны разработанные проекты по автоматизированному функциональному тестированию. Первый проект учебный и несет ознакомительный характер. Он нацелен на пользу начинающему тестировщику — автоматизатору, помочь быстро создать первый авто-тест и продолжить автоматизировать. Второй — проект по авто-тестам для веб-сервиса «Эксперт».

В статье «Использование искусственного интеллекта для автоматизации тестирования» (автор: Часовских В. П.) [16] проведено исследование эффективности применения методов искусственного интеллекта для автоматизации тестирования программного обеспечения.

В статье «Практическое применение формализованного подхода для оптимизации процесса тестирования программного обеспечения в автоматизированных системах управления технологическими процессами (АСУ ТП)» (автор: Букарев А. В.) [17] рассмотрена разработка формализованного представления процесса тестирования программной составляющей программно-аппаратных платформ. Цель исследования заключалась в разработке подхода, который позволит оптимизировать процесс тестирования, сократить время, затрачиваемое на него, и улучшить качество программного обеспечения. Для достижения этой цели были использованы множественное представление, графы, теория массового обслуживания и имитационная модель методом Монте-Карло. Результаты исследования показали, что создание формализованного представления процесса тестирования программного обеспечения в АСУ ТП с помощью графов и использование имитационной модели Монте-Карло может значительно ускорить и оптимизировать процесс тестирования, а также повысить качество продукта [18, 19, 20].

В магистерской диссертации «Разработка технологии автоматизированного тестирования программного обеспечения семейства информационных систем» (автор: Борисова А. В.) [21] было проведено внедрение технологии автоматизированного тестирования и применено на реальных продуктах в компании ООО «ТомскАСУпроект». Были проанализированы существующие методы и средства для автоматизированного тестирования web- и desktop-приложений.

В статье «Оценка целесообразности внедрения автоматизированного тестирования» (автор: Гребенюк В. М.) [22, 23] рассмотрены методы для тестирования, которые могут помочь избавиться от неправильных ожиданий ответа и составить более точное представление о результатах автоматизации.

В магистерской диссертации «Автоматизация тестирования при проектировании мобильных приложений по технологии Agile» (автор: Нестерова О. А.) [24, 25, 26] были проведены исследование и разработка методики автоматизации тестирования мобильных приложений, которые проектируются по технологии Agile.

1.5 Обзор локальных источников

В процессе исследования также были изучены локальные источники (похожие работы студентов из университета).

В магистерской диссертации «Система тестирования прикладного программного обеспечения для образовательного проекта «Электронный учебник Lang-book» (автор: Шевелёв И. А.) были рассмотрены основные проблемы тестирования, подходы к эффективному автоматизированному тестированию пользовательских интерфейсов, как подготовить базу данных для покрытия тестовых случаев автоматизированными тестами. Были рассмотрены BDD и TDD, а также применён один из самых современных инструментов для автоматизации тестирования — Selenium Webdriver.

В магистерской диссертации «Автоматизация формирования заданий для тестирования знаний студента» (автор: Цурган В. А.) рассмотрен из способов реализации системы для тестирования знания студентов (можно применить для решения задач спортивного программирования).

1.6 Общие выводы о библиотеках и системах для тестирования программного кода и решения задач спортивного программирования

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

В тоже время все рассмотренные библиотеки и системы содержат ряд недостатков, которые уменьшают эффективность тестирования и обучения.

Самые важные недостатки:

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

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

2 Анализ рассмотренных библиотек для тестирования программного кода и систем для решения задач спортивного программирования

2.1 Недостатки библиотек для тестирования программного кода

Недостатки библиотек, основанных на Unit-тестировании и Google Test, включают несколько важных аспектов. Во-первых, значительные затраты времени на написание тестов могут стать проблемой для команд с ограниченными ресурсами. Создание и поддержка тестов требуют значительных временных и трудозатрат, что может привести к тому, что разработчики не смогут уделять достаточное внимание тестированию из-за нехватки времени.

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

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

2.2 Недостатки систем для решения и тестирования задач спортивного программирования

Недостатки систем для решения задач спортивного программирования, таких как Stepik, LeetCode, HackerRank и CodeForces, можно выделить несколько ключевых аспектов. Во-первых, не все системы являются веб-сайтами, что требует установки программного обеспечения на компьютер. Во-вторых, некоторые платформы являются платными и требуют приобретения лицензии для использования.

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

2.3 Предложения по возможной модификации системы для тестирования программного кода и задач спортивного программирования

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

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

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

2.4 Формирование общих требований к модифицируемой системе тестирования программного кода и задач спортивного программирования

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

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

2.5 Возможный алгоритм работы модифицируемой системы

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

Предлагаемый принцип работы модифицируемой системы с автоматизированной проверкой задач
Рисунок 2.1 – Предлагаемый принцип работы модифицируемой системы с автоматизированной проверкой задач (анимация, обрезка краёв, 9 кадров, 1 кадр в 2 секунды, бесконечное количество повторений, 72.1 КБ)

2.6 Общие выводы по анализу рассмотренных библиотек для тестирования программного кода и систем для решения задач спортивного программирования

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

Заключение

В данном отчете были рассмотрены основные библиотеки для тестирования программного кода и системы, предназначенные для решения задач спортивного программирования. Проанализированы их преимущества и недостатки, а также выявлены общие проблемы, присущие этим библиотекам и системам. На основе проведенного анализа сделаны определенные выводы.

Изучены международные, национальные и локальные источники (статьи и магистерские диссертации), выявлены проблемы тестирования, сложность систем тестирования, сделаны определённые выводы.

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

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

Перечень ссылок

  1. 1. Системы тестирования программного кода [Электронный ресурс]: статья / Habr. – Режим доступа: https://habr.com/ru/articles/549054. – Загл. с экрана. – Дата обращения: 20.05.2025.
  2. 2. Что такое спортивное программирование [Электронный ресурс]: статья / Forbes. – Режим доступа: https://www.forbes.ru/mneniya/508585-delat-po-kodu-kak-sportivnoe-programmirovanie-stimuliruet-razvitie-tehnologij. – Загл. с экрана. – Дата обращения: 20.05.2025.
  3. 3. Google Testing Blog: Announcing: New Google C++ Testing Framework. Дата обращения: 16 июля 2009. Архивировано 5 апреля 2009 года.
  4. 4. Библиотека NUnit [Электронный ресурс]: официальный сайт / NUnit. – Режим доступа: https://nunit.org. – Загл. с экрана. – Дата обращения: 05.11.2024.
  5. 5. Общая информация о Stepik — Справочный центр Stepik. Дата обращения: 29 августа 2019. Архивировано 29 августа 2019 года.
  6. 6. «Инновационная платформа от разработчиков: HackerEarth». Code-brew. Архивировано с оригинала 15 сентября 2018 года. Проверено 15 сентября 2018 года.
  7. 7. Среда тестирования Selenium [Электронный ресурс]: официальный сайт / Selenium. – Режим доступа: https://www.selenium.dev. – Загл. с экрана. – Дата обращения: 15.12.2024.
  8. 8. Инструмент автоматизации тестирования TestingWhiz [Электронный ресурс]: официальный сайт / TestingWhiz. – Режим доступа: https://www.testing-whiz.com. – Загл. с экрана. – Дата обращения: 15.12.2024.
  9. 9. Функциональная платформа тестирования TestComplete [Электронный ресурс]: статья / Wikipedia. – Режим доступа: https://en.wikipedia.org/wiki/TestComplete. – Загл. с экрана. – Дата обращения: 15.12.2024.
  10. 10. Система автоматизации тестирования Ranorex Studio [Электронный ресурс]: официальный сайт / Ranorex. – Режим доступа: https://www.ranorex.com. – Загл. с экрана. – Дата обращения: 15.12.2024.
  11. 11. Способы повышения эффективности ручного тестирования программного обеспечения [Электронный ресурс]: статья / Репозиторий БНТУ. – Режим доступа: https://rep.bntu.by/bitstream/handle/data/85012/203-206.pdf?sequence=1&isAllowed=y. – Загл. с экрана. – Дата обращения: 06.07.2025.
  12. 12. Повышение эффективности работы тестировщиков [Электронный ресурс]: статья / БГУИР. – Режим доступа: https://libeldoc.bsuir.by/bitstream/123456789/12385/2/Savenok_Povishenie.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  13. 13. Automated solutions: improving the efficiency of software testing [Электронный ресурс]: статья / ResearchGate. – Режим доступа: https://www.researchgate.net/publication/229021702_AUTOMATED_SOLUTIONS_IMPROVING_THE_EFFICIENCY_OF_SOFTWARE_TESTING. – Загл. с экрана. – Дата обращения: 06.07.2025.
  14. 14. A Survey of Effective and Efficient Software Testing [Электронный ресурс]: статья / MICS Symposium. – Режим доступа: https://www.micsymposium.org/mics2015/ProceedingsMICS_2015/Mailewa_2D1_41.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  15. 15. Разработка методики тестирования ПО [Электронный ресурс]: диссертация / УрФУ. – Режим доступа: https://elar.urfu.ru/bitstream/10995/28187/1/m_th_e.s.ivanov_2014.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  16. 16. Использование искусственного интеллекта для автоматизации тестирования [Электронный ресурс]: статья / ResearchGate. – Режим доступа: https://www.researchgate.net/publication/387778582_Ispolzovanie_iskusstvennogo_intellekta_dla_avtomatizacii_testirovania_Using_artificial_intelligence_to_automate_testing. – Загл. с экрана. – Дата обращения: 06.07.2025.
  17. 17. Практическое применение формализованного подхода для оптимизации процесса тестирования программного обеспечения в автоматизированных системах управления технологическими процессами (АСУ ТП) [Электронный ресурс]: статья / Top-Technologies. – Режим доступа: https://s.top-technologies.ru/pdf/2023/5/39609.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  18. 18. Таран В.Н., Щербина И.О. Технологии автоматизации тестирования и их внедрения в процесс создания игровых приложений // Вестник Адыгейского государственного университета. Серия 4: Естественно-математические и технические науки. 2020. № 4 (271). С. 75–86.
  19. 19. Фролов Е.Б., Паршина И.С., Зайцев А.С., Климов А.С.Индустрия 4.0: «Цифровой двойник» как средство повышения эффективности производственной системы // Наукоемкие технологии в машиностроении. 2019. № 2 (92). С. 42–48.
  20. 20. Паршина И.С., Фролов Е.Б. Разработка цифрового двойника производственной системы на базе современных цифровых технологий // Экономика промышленности. 2020. Т. 13, № 1. С. 29–34. DOI: 10.17073/2072-1633-2020-1-29-34.
  21. 21. Разработка технологии автоматизированного тестирования программного обеспечения семейства информационных систем [Электронный ресурс]: диссертация / ТПУ. – Режим доступа: https://earchive.tpu.ru/bitstream/11683/40076/1/TPU401588.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  22. 22. Оценка целесообразности внедрения автоматизированного тестирования [Электронный ресурс]: статья / Науковедение. – Режим доступа: https://naukovedenie.ru/PDF/13tvn113.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  23. 23. KANER C., Improving the Maintainability of Automated Test Suites // [Электронный ресурс]: статья / Науковедение. – Режим доступа: https://www.kaner.com/pdfs/autosqa.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  24. 24. Автоматизация тестирования при проектировании мобильных приложений по технологии Agile [Электронный ресурс]: диссертация / ТЛТ. – Режим доступа: https://dspace.tltsu.ru/bitstream/123456789/12894/1/Нестерова%20О.А._ПИмд-1702а.pdf. – Загл. с экрана. – Дата обращения: 06.07.2025.
  25. 25. Абдулназаров, Ф.М. Тестирование мобильных приложений, функционирующих на Android / Ф.М. Абдулназаров, О.А. Анарбеков // Современные технологии поддержки принятия решений в экономике: Сборник трудов III Всероссийской научно-практической конференции студентов, аспирантов и молодых ученых. Национальный исследовательский Томский политехнический университет, Юргинский технологический институт; под ред. А.А. Захаровой. – 2016. – С. 196–198.
  26. 26. Атисков, А.Ю. Тестирование эргономики пользовательского интерфейса мобильных приложений / А.Ю. Атисков, И.И. Давидович // Научный вестник НГТУ, том 57. – 2014. – № 4. – С. 119–130.