Научная статья на тему 'Автоматизированная система верификации программных приложений'

Автоматизированная система верификации программных приложений Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
445
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВЕРИФИКАЦИЯ / ПРОГРАММА / СЕМАНТИКА / СИНТАКСИС / АЛГОРИТМИЧЕСКИЙ ЯЗЫК / VERIFICATION / PROGRAM / SEMANTICS / SYNTAX / ALGORITHMIC LANGUAGE

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Савин Николай Ильич, Бредихин Егор Игоревич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

AUTOMATED SYSTEM FOR VERIFICATION OF SOFTWARE APPLICATIONS

The principles of construction of the automated software verification system (ASVPP) for programs recorded on the algorithmic programming languages, algorithms and implementation. ASVPP improves the effectiveness of the training program and methodology for study of semantic and syntactic structures of language.

Текст научной работы на тему «Автоматизированная система верификации программных приложений»

CYBER-PHYSICAL TECHNOLOGY OF EMERGENCIES MONITORING V.N. Ruchkin, B. V. Kostrov, A.N. Kolesenkov

The paper presents theoretical and experimental research in the field of development and application of systems challenges cyber-physical emergency monitoring. Designed cyber-physical technology monitoring of natural and man-made disasters. Proposed information and algorithmic support cyber-physical fire monitoring system. Is a block diagram cyber-physical fire monitoring system. The technology is realized through the creation of intelligent telecommunications structures based on neural MB7707.

Key words: cyber-physical technology, emergency, remote sensing, sensors, fire, decision-making, clustering, MW 7707, neuro-processor.

Kostrov Boris Vasilevich, doctor of technical sciences, professor, kostrov. b. vaevm.rsreu.ru, Russia, Ryazan, Ryazan State Radio Engineering University,

Ruchkin Vladimir Nikolaevich, doctor of technical sciences, professor, v. ruchkinarsu. edu. ru, Russia, Ryazan, Ryazan State Radio Engineering University,

Kolesenkov Aleksandr Nikolaevich, candidate of technical sciences, docent, sk62@mail.ru, Russia, Ryazan, Ryazan State Radio Engineering University

УДК 681.3.06

АВТОМАТИЗИРОВАННАЯ СИСТЕМА ВЕРИФИКАЦИИ ПРОГРАММНЫХ ПРИЛОЖЕНИЙ

Н.И. Савин, Е.И. Бредихин

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

Ключевые слова: верификация, программа, семантика, синтаксис, алгоритмический язык.

Данная система (далее АСВПП) создана для решения задачи автоматизации проверки программных реализаций заданий, сформулированных определенным образом. Система размещается на удаленном сервере и предоставляет пользователям web-интерфейс для получения заданий, отправки решений, форум, справку по функциям особенностям оформления решений и возможность авторизации. Решения могут быть записаны на языках Visual C++ 2008/2010, C# и Python 2.7. АСВПП создана на основе принципов, заложенных в таких широко известных проверяющих системах, как Contester, Timus Online Judge, El Judge и др. [1-3].

260

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

Структурная схема системы

Укрупненная схема серверной части системы приведена на рис. 1.

Представление задач в серверной части системы.

Основная единица обработки в системе - это задача. Задача состоит из следующих частей.

Условие задачи.

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

Web-интерфейс

- Регистрация

- Авторизация

- Отображение условий заданий

- Прием заданий

- Отображение результатов

проверки заданий

- Отображение

справки

Î .

Проверяющая

часть

База данных решений

Среда изоляции

База данных заданий

Задание

Папка задания

1

Tests

¡nfo.txt

¡ndex.html

Проверяющая программа

Рис. 1. Структурная схема серверной части системы

Проверяющая программа или набор тестов

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

Элементы в папке с задачей:

info.txt - информация о задаче (сложность, ограничения по времени, по памяти); index.html - страница с условием задачи; /tests - папка с входными и выходными данными к задаче (тесты).

Проверяющая программа (далее ПП) используется в одном из вариантов в виде исполняемого файла или в виде скрипта Python и может читать вывод программы пользователя из файла "out.txt", входные данные из файла "in.txt" и эталонное решение из файла "pattern.txt" (если требуется).

Пример проверяющей программы на языке Python.

pattern = open("pattern.txt","r") userüut = open("out.txt","r")

if int(pattern.readline().split()[0])==int(userüut.readline().split()[0]):

print "yes"

else:

print "no"

Если ни одна проверяющая программа не найдена, производится проверка по тестам.

Дополнительно подключаемые папки и файлы. Папки - содержат подключаемые файлы для языков C++, C#, Python, (подключаются опционально) -/includes_cpp; /includes_csharp; /includes_python.

Файлы main.cpp,main.cs, main.py подключаются опционально. Если файл main создан, то код решения пользователя вставляется системой на место #USERCODE# в этом файле, и решение проверяется в таком виде.Этим необходимо пользоваться, если по условию задания пользователю нужно реализовать конкретную конструкцию языка, например, функцию или класс.

Примеры типовых задач

Примеры приводятся для языка Visual С++ 2010. Алгоритмические задачи проверяются путем компиляции исходного кода пользователя и последующей проверкой результатов исполнения программы на наборе тестов или с помощью ПП. Задачи на владение парадигмой объектно-ориентированного программирования, на знание синтаксиса и семантики языка проверяются путем подстановки сформированного кода пользователя в заготовку( один из файлов main.cpp, main.cs или main.py), спроектированную составителем соответствующего задания, которая затем также компилируется и проверяется системой.

Далее приведены примеры на некоторые методологические и выразительные средства языка.

Пример на применение инкапсуляции

Существует класс Dog, который содержит private переменную std::stringBreed.

Требуется реализовать методы voidSetBreed(std::stringbreed) и std::stringGetBreed(), которые позволят получать и устанавливать значения этой переменной. Для формирования такой задачи разработчику задания потребуется спроектировать файл main.cpp, в котором необходимо будет объявить и частично реализовать данный класс и отметить место, куда должны быть вставлены методы, написанные пользователем. Проверки правильности реализации можно предусмотреть в функции main() и при необходимости добавить файлы тестов.

Файл main.cpp (создается разработчиком задания). #include <iostream> #include <string>

class Dog {

private:

std::string Breed; public: Dog(){} #USERCODE#

// сюда система автоматически подставит методы

//пользователя };

intmain() {

Dog *a = new Dog(); std::stringbr; std::cin>>br; // чтение очередного теста a->SetBreed(br); std::cout<<a->GetBreed()<<std::endl; return 0; }

Пример теста: /tests/1-input.txt: Labrador /tests/1-output.txt:Labrador

Пример решения, отправляемого пользователем: voidSetBreed(std::string breed){ Breed = breed; } std::stringGetBreed(){ return Breed; }

Пример на реализацию метода класса

Задан класс Triangle, который содержит переменные float x1, x2, x3, y1, y2, y3, представляющие координаты вершин треугольника на плоскости. Требуется реализовать метод floatgetPerimeter(), который вычисляет периметр треугольника.

Для создания такой задачи потребуется файл main.cpp, который необходимо будет поместить в папку с задачей и в котором необходимо будет частично реализовать класс Triangle и отметить место, куда будет вставлен метод, написанный пользователем. Кроме того, необходимо добавить заданные проверки в функции main() и добавить тесты в папку tests в папке с задачей.

Файл main.cpp. #include <iostream>

#include <string>

class Triangle {

private:

float x1,x2,x3 ,y1,y2,y3; public:

Triangle(float _x1, float _y1, float _x2, float _y2, float _x3, float _y3) {

x1 = _x1;x2 = _x2;x3 = _x3;

y1 = _y1 ;y2 = _y2;y3 = _y3; };

#USERCODE#

// сюда система автоматически подставит

//метод пользователя };

intmain() {

float x1,y1 ,x2,y2,x3 ,y3;

std::cin>> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

// чтениеочередноготеста

Triangle *tr = new Triangle(x1, y1, x2, y2, x3, y3);

std:: cout<<tr->getPerimeter() <<std:: endl;

return 0;}

Особенности построения основных компонентов системы

Задание на компиляцию программы пользователя

Формат команды компилятору VisualC++ 2010в программе на языке

Python

command = 'call ' + + vcPath + + '&cl ' + '"' + usrCppPath + '"' + \

incl + ' /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib"'+ \ ' /02 /GL /FetmpWusr_prog.exe /Fotmp\\usr_prog.obj /EHsc /link /SUBSYSTEM:WIND0WS /ENTRY:WinMainCRTStartup' res = os.popen(command)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Формат команды компилятору C# в программе на языке Python

command = csPath + '\\csc /target:winexe

/r:mscorlib.dll /main:MainClassNamespace.MainClass /out:"{0}"

{1}'.format(scriptPath+'\\tmp\\usr_prog.exe',

scriptPath+'\\tmp\\usr_prog.cs')

res = os.popen(command)

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

C++ConsoleApp licatioiTl0.exe

Прекращена работа программы "С+ +ConsoleApplication10.ехе"

Windows осуществляет поиск способа устранения зтой ошибки...

Отмена

Рис. 2. Окно сообщения об ошибке

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

#include <windows.h> #include <iostream> usingnamespacestd;

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE

hPrevInstance, LPSTR lpCmdLine, intnCmdShow) {

SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX | SEM_NOGPFAULTERRORBOX); main();

return 0; }

Функция SetErrorMode() отключает появление таких окон из программы пользователя, а функция main() - соответственно из программы пользователя. Аналогичная оболочка реализована и в C#. Для Python и других интерпретируемых языков она не требуется, так как для них все ошибки перехватываются интерпретатором.

Модуль изоляции проверяемой программы

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

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

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

При правильной настройке указанный подход обеспечивает приемлемый уровень защиты. Форум

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

Реализация системы

При реализации АСВПП использована технология объектно-ориентированного программирования на языке Python 2.7.8 [4,5]. Web-интерфейс реализован с использованием свободно-распространяемого web-фреймворка Flask [6,7]. Среда изоляции программ реализована на языке C++ с использованием функций WinAPI [8,9]. Для сервера реализован графический интерфейс на языке C++/CLI. Web-интерфейс.

Web-интерфейс реализован на Python 2.7.8 с использованием Flask микрофреймворка для создания веб-приложений. С помощью Flask можно реализовать практически любой web-интерфейс для приложения. Например, данный код создает web-приложение, которое отображает строку "Hello World!" на странице, доступной по ip-адресу компьютера: from flask import Flask

app = Flask(_name_)

@app.route("/") def hello():

return "<b>Hello World!</b>"

if_name_== "_main_":

app.run(host='0.0.0.0')

Серверная часть системы

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

Рис. 3. Алгоритм работы серверной части системы

Среда изоляции исполнения проверяемой программы

Для запуска скомпилированных программ-решений используется среда изоляции (файл newSandbox.exe в папке tmp). Ограничение прав программ осуществляется на уровне WinAPI и направлено на предотвращение выключения сервера, запуска процессов, получение доступа к файлам, и.т.п. Кроме того, здесь выполняется проверка на превышения ограничений по объему памяти и процессорному времени. Основное приложение устанавливает связь со средой изоляции на основе технологии клиент-сервер.

Разработанная система прошла испытания на кафедре вычислительной техники ТулГУ и показала соответствие поставленным целям и достаточно высокий уровень эффективности.

Список литературы

1. Описание системы Contester. [Электронный ресурс]. URL: http://www.contester.ru/faaTa обращения 08.12.2015).

2. Описание Timus Online Judge. [Электронный ресурс]. URL: http://acm.timus.ru/ (дата обращения 08.12.2015).

3. Описание олимпиад по программированию МФТИ. [Электронный ресурс]. URL: httpéJ¿acm.mipt.ru/ (дата обращения 08.12.2015).

4. Лутц М. Программирование на Python, том II, 4-е издание. Пер. с англ. СПб.: Сим-вол-Плюс, 2011. 992 с.

5. Электронный ресурс Python [Электронный ресурс]. URL: https : //www .python. org/ (дата обращения 08.12.2015).

6. Grinberg M.Flask Web Development: Developing Web Applications with Python. 2014. 258 c.

7. Описание технологии Flask [Электронный ресурс]. URL. http://flask.pocoo.org/ (дата обращения 08.12.2015).

8. Рихтер Дж. Windows для профессионалов: создание эффективных Шт32-приложений с учетом специфики 64-разрядной версии Windows / пер. с англ. 4-е изд. СПб.: Питер. М.: Изд-во «Русская Редакция», 2008. 720 с.

9. Электронный ресурс Microsoft Developer Network [Электронный ресурс]. URL: https://msdn.microsoft.com (дата обращения 08.12.2015).

Савин Николай Ильич, канд. техн. наук, доц, savin949@gmail. com, Россия, Тула, Тульский государственный университет.

Бредихин Егор Игоревич, бакалавр, egorbr1801@mail.ru, Россия, Тула, Тульский государственный университет

A UTOMA TED SYSTEM FOR VERIFICA TION OF SOFTWARE APPLICA TIONS

N.I. Savin, E.I. Bredikhin

The principles of construction of the automated software verification system (ASVPP) for programs recorded on the algorithmic programming languages, algorithms and implementation. ASVPP improves the effectiveness of the training program and methodology for study of semantic and syntactic structures of language.

Key words: verification, program, semantics, syntax, algorithmic language.

Savin Nikolay Ilich, candidate of technical sciences, docent, savin949@gmail. com, Russia, Tula, Tula State University,

Bredikhin Egor Igorevich, bachelor, egorbr1801@mail.ru, Russia, Tula, Tula State University

i Надоели баннеры? Вы всегда можете отключить рекламу.