Scientific journal
Modern high technologies
ISSN 1812-7320
"Перечень" ВАК
ИФ РИНЦ = 0,940

ANALYSIS OF FUNCTIONALITY TESTED SOFTWARE SUITE DESIGNED TO TEACH PROGRAMMING

Mikheev I.V. 1 Kondratov D.V. 2 Vishtak O.V. 1
1 FGU «Balakovo Institute of Engineering and Technology» of the National Research Nuclear University MEPhI (Moscow Engineering Physics Institute)
2 Volga Management Institute named after P. Stolypin – a branch of Federal State Budgetary Educational Institution of Higher Education «Russian Presidential Academy of National Economy and Public Administration»
The process of formation, which is closely related to information technology, has a wide enough specifics, primarily related to the process of reporting. In preparing students areas related to information technology, the special role played by support tools to enhance the professional skills of the trainees. This article discusses the problems associated with the process of teaching students the information areas. The main support tools that can be used in the development of software products, including the implementation and execution of practical training tasks. The main positive and negative aspects of the tool. Based on the conducted analysis of existing instruments, concluded that the scope of university education, the creation of automated inspection of the complex.
information technology
education at the university
tools for software testing
testing software
education structure information disciplines cycle
the testing complex

Процесс подготовки студентов высшей школы по направлениям, связанным с информационными системами и технологиями, предоставляет большие возможности в развитии профессиональных компетенций и обеспечивает формирование высокого уровня мышления. Приобретение навыков использования средств вычислительной техники и информационных технологий, приобретение опыта в создании различного рода программных продуктов и в решении нетривиальных задач, требующих особого подхода, продуктивно влияет на развитие творческих способностей и интеллектуального мышления студентов, а также на развитие их мотивации к самообразованию, что является обязательным для будущего профессионального роста в области стремительно развивающихся информационных систем и технологий [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

+

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