Научный журнал
Современные наукоемкие технологии
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,858

АНАЛИЗ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ ТЕСТИРУЮЩЕГО ПРОГРАММНОГО КОМПЛЕКСА ДЛЯ ОБУЧЕНИЯ ПРОГРАММИРОВАНИЮ

Михеев И.В. 1 Кондратов Д.В. 2 Виштак О.В. 1
1 ФГУ «Балаковский инженерно-технологический институт» – филиал ФГАОУ ВПО «Национальный исследовательский ядерный университет «МИФИ»
2 Поволжский институт управления имени П.А. Столыпина – филиал ФГБОУ ВО «Российская академия народного хозяйства и государственной службы при Президенте Российской Федерации»
Процесс образования, который тесно взаимосвязан с информационными технологиями, имеет достаточно широкие специфические особенности, в первую очередь связанные со способом представления информации. В процессе подготовки студентов направлений, связанных с информационными технологиями, особую роль играют вспомогательные инструменты, позволяющие повысить профессиональные навыки обучаемых. В данной статье рассматриваются проблемы, связанные с процессом обучения студентов информационных направлений. Рассматриваются основные вспомогательные инструменты, которые можно использовать при разработке программных продуктов, в том числе реализации и выполнении практических учебных заданий. Приведены основные положительные и отрицательные стороны рассматриваемых инструментов. Исходя из проведённого анализа существующих инструментов сделан вывод о том, что для вузовской сферы образования необходимо создание автоматизированного проверяющего комплекса.
информационные технологии
образование в вузе
инструменты для тестирования программных продуктов
тестирование программных продуктов
структура образования цикла информационных дисциплин
тестирующий комплекс
1. Автоматическое тестирование программ / Хабрахабр [Москва]. – URL: http://habrahabr.ru/post/128503/ (дата обращения: 12.11.2015).
2. Информационные технологии как базовый компонент инноваций в образовании / А.В. Антонова, Н.М. Виштак // Преподаватель XXI век. – 2010. – Т. 1. – № 3. – С. 22–25.
3. Комплексный подход к созданию электронных образовательных ресурсов / О.В. Виштак, Д.В. Кондратов // Universum: психология и образование. – 2014. – № 2 (3). – С. 7.
4. Направления программной реализации электронных образовательных ресурсов / О.В. Виштак // Научные труды SWorld. – 2013. – Т. 5. – № 2. – С. 36–39.
5. Применение компьютерных обучающих систем в учебном процессе высшей школы / И.В. Михеев // Научные труды SWorld. – 2014. – Т. 4. – № 1. – С. 65–68.
6. Программная реализация модуля динамического тестирования учебных программ / И.В. Михеев, Д.В. Кондратов, О.В. Виштак // Вестник Саратовского государственного технического университета. – 2015. – Т. 2. – № 1 (79). – С. 113–117.
7. Проектирование автоматизированной системы проверки олимпиадных заданий по программированию / Д.А. Фролов, А.Д. Балашов // Естественные и математические науки в современном мире. – 2015. – № 31. – С. 50–58.
8. BLAST (статический анализатор) / Википедия [Москва]. – URL: https://ru.wikipedia.org/wiki/BLAST_(статический_анализатор) (дата обращения: 13.11.2015).
9. KLEE LLVM Execution Engine [Британия]. – URL: http://klee.github.io/docs/ (дата обращения: 15.11.2015).
10. ReSharper / Википедия [Москва]. – URL: https://ru.wikipedia.org/wiki/ReSharper (дата обращения: 12.11.2015).

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

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

Это обусловлено в первую очередь тем, что на первых этапах изучения дисциплин информационного цикла студенты получают базовую информацию об устройстве компьютера, особенностях информационных процессов, информационных моделях, принципах построения алгоритмов и реализации программ, а на последующих этапах обучения происходит более углублённое и детальное изучение этих вопросов [4]. Причём из всех дисциплин информационного цикла именно программирование является той основой, на которой выстраивается изучение практической реализации алгоритмов, решение логических задач, разработка программ с учётом требований к оптимальности алгоритма и использования вычислительных ресурсов ЭВМ, создание консольных и оконных приложений, разработка информационных ресурсов и Интернет-приложений.

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

Так, например, изучение объектно-ориентированного программирования основывается на базе технологии программирования, современных сред визуального программирования и языков программирования, а современные технологии Интернет-программирования, в свою очередь, основываются на информационных технологиях, и блоке дисциплин, необходимых для освоения объектно-ориентированного программирования. Следовательно, комплексный подход при изучении дисциплин программирования даёт возможность адаптировать полученные студентами знания к стремительно изменяющимся технологиям в информационной сфере [5, 7].

pic_37.tif

Структура образовательных программ из цикла программирования

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

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

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

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

Рассмотрим некоторые существующие программные продукты:

1. Avalanche – инструмент обнаружения программных дефектов на основе динамического тестирования. Данный программный продукт использует средства сторонней программы для сбора и анализа процесса выполнения тестируемых программ. Таким образом, рассматриваемый программный продукт имеет модульно-компонентный принцип построения. Результатам такого анализа является сформированный набор входных данных, который приводит к возникновению в программе ошибочной ситуации или коллизии. А также может быть сформирован набор новых тестовых входных данных, который позволяет выявить ошибки в местах программного кода, которые до этого не были проверены. В результате работы Avalanche, исходя из одного набора тестовых входных данных, реализуется итеративный динамический анализ, при котором программа многократно выполняется на различных автоматически генерированных тестовых данных, при этом каждый новый запуск увеличивает покрытие кода программы такими тестами. Основная особенность алгоритма рассматриваемой программы заключается в том, что сторонний модуль отслеживает поток заранее помеченных данных в анализируемой программе и собирает условия для обхода ее не пройденных частей и для срабатывания опасных операций [1]. Значительным минусом данного инструмента можно считать использование сторонних функций и модулей, что делает его зависимым. Также использование итеративного динамического анализа не даёт полного покрытия программы.

2. KLEE – инструмент, реализованный также на основе динамического подхода к тестированию программных продуктов, основным принципом функционирования является попытка покрыть как можно больше кода и провести исчерпывающий анализ путей в программе. KLEE также имеет компонентно-модульный принцип построения, что накладывает значительные ограничения. Основным преимуществом рассматриваемой программы является то, что любой анализируемый исходный код рассматривается в формате LLVM-байткоде. Соответственно, это позволяет анализировать программу на любом языке программирования, для которого есть LLVM-бэкэнд [9]. К минусам также можно отнести зависимость от использования сторонних функций и модулей и неполное покрытие программы. Инструмент можно использовать только для операционных систем семейства Unix.

3. Berkeley Lazy Abstraction Software Verification Tool (BLAST) – программа проверки моделей для языка Си. Задача, решаемая инструментом BLAST, – это проверка того, что программа удовлетворяет поведенческим требованиям к ней. BLAST реализует подход абстракции и уточнения по контрпримерам для конструирования абстрактной модели, которая затем проверяется на свойства безопасности. Абстракция строится по ходу анализа и только до требуемой точности, устанавливаемой в ходе анализа [8]. Отрицательной стороной данного инструмента является использование принципа «контрпримера», что накладывает большие ограничения на функционирование. Инструмент можно использовать только для операционных систем семейства Unix.

4. ReSharper (R#) – дополнение (плагин), разработанное компанией JetBrains для повышения продуктивности работы в Microsoft Visual Studio. Проводит статический анализ кода (поиск ошибок в коде до компиляции) в масштабе всего решения, предусматривает дополнительные средства автозаполнения, навигации, поиска, подсветки синтаксиса, форматирования, оптимизации и генерации кода, предоставляет 40 автоматизированных рефакторингов, упрощает юнит-тестирование в средах MSTest и NUnit и др. Поддерживает языки программирования C# и VB.NET, а также предоставляет средства для работы с ASP.NET, ASP.NET MVC, XML, XAML, сценариями сборки NAnt и MSBuild. Является коммерческим (платным) программным продуктом [10]. К минусам данного инструмента можно отнести высокую стоимость лицензии, жёсткую привязку к среде разработки и поддержку ограниченного количества языков программирования.

5. Cppcheck – данный инструмент имеет достаточно спорные моменты с точки зрения реализации алгоритма функционирования и метода анализа, в частности программа анализирует строго определённые категории ошибок. Инструментарий Cppcheck позволяет проверить наличие утечек памяти, нарушений операций allocation-deallocation, различных переполнений буфера, использования устаревших функций и многого другого. Отличительной особенностью программы является минимизация количества ложных срабатываний, поэтому, обнаружение программой ошибки с достаточно большой вероятностью говорит о том, что проблема действительно существует [2]. Основными минусами инструмента является обнаружение только заранее предопределённых ошибочных ситуаций.

Сформулируем систему критериев анализаторов исходных кодов и проведём анализ представленных выше инструментов анализа программных продуктов.

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

Поэтому необходима разработка автоматизированного проверяющего комплекса, который удовлетворяет требованиям, предъявляемым к электронным образовательным ресурсам [3], и реализует следующие функции:

– статический анализ исходного кода, написанного на языке программирования С++;

– выявление тупиковых и ошибочных ситуаций на основе статического подхода к анализу исходного кода;

– динамическое тестирование, реализовывающее исчерпывающее тестирование программных продуктов на всех возможных наборах данных;

– предоставление удобного инструментария для качественной проверки правильности выполнения учебных заданий;

– определение метрики программного обеспечения.

Критерии анализаторов программных средств

Название

Динамическое тестирование

Статическое тестирование

Условия распространения

Использование сторонних компонентов и модулей

Операционная система

Кроссплатформенность

Avalanche

+

Некоммерческое

+

Unix

KLEE

+

Некоммерческое

+

Unix

BLAST

+

Некоммерческое

Unix

ReSharper

+

Коммерческое

Windows

Cppcheck

+

Некоммерческое

Unix, Windows

+

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


Библиографическая ссылка

Михеев И.В., Кондратов Д.В., Виштак О.В. АНАЛИЗ ФУНКЦИОНАЛЬНЫХ ВОЗМОЖНОСТЕЙ ТЕСТИРУЮЩЕГО ПРОГРАММНОГО КОМПЛЕКСА ДЛЯ ОБУЧЕНИЯ ПРОГРАММИРОВАНИЮ // Современные наукоемкие технологии. – 2016. – № 3-1. – С. 65-69;
URL: http://top-technologies.ru/ru/article/view?id=35693 (дата обращения: 10.12.2018).

Предлагаем вашему вниманию журналы, издающиеся в издательстве «Академия Естествознания»
(Высокий импакт-фактор РИНЦ, тематика журналов охватывает все научные направления)

«Фундаментальные исследования» список ВАК ИФ РИНЦ = 1.252