Научная статья на тему 'ТЕСТИРОВАНИЕ ДИНАМИЧЕСКОГО ВЫПОЛНЕНИЯ КОДА PYTHON ПРОГРАММ ПРИ ПРОВЕДЕНИИ ЭТАПА СЕРТИФИКАЦИОННЫХ ИСПЫТАНИЙ (РАЗРАБОТКИ) В СИСТЕМЕ СЕРТИФИКАЦИИ МИНОБОРОНЫ РОССИИ'

ТЕСТИРОВАНИЕ ДИНАМИЧЕСКОГО ВЫПОЛНЕНИЯ КОДА PYTHON ПРОГРАММ ПРИ ПРОВЕДЕНИИ ЭТАПА СЕРТИФИКАЦИОННЫХ ИСПЫТАНИЙ (РАЗРАБОТКИ) В СИСТЕМЕ СЕРТИФИКАЦИИ МИНОБОРОНЫ РОССИИ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
183
46
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
СЕРТИФИКАЦИОННЫЕ ИСПЫТАНИЯ ПРОГРАММНЫХ ИЗДЕЛИЙ / ДИНАМИЧЕСКИЙ АНАЛИЗ КОДА PYTHON ПРОГРАММ / КОНТРОЛЬ ПОЛНОТЫ И ОТСУТСТВИЯ ИЗБЫТОЧНОСТИ НА УРОВНЕ ФАЙЛОВ И ФУНКЦИОНАЛЬНЫХ ОБЪЕКТОВ / ПРОФИЛИРОВАНИЕ КОДА ДЛЯ ДИНАМИЧЕСКОГО АНАЛИЗА

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

Актуальность и цели. Во многих случаях программные изделия, подлежащие проверке в системе обязательной сертификации Минобороны России, разрабатываются с помощью интерпретируемого языка программирования Python. При проведении проверок приложений, разработанных на языке Python на предмет соответствия их кода требованиям руководящего документа «Защита от несанкционированного доступа к информации. Часть 1. Программное обеспечение средств защиты информации. Классификация по уровню контроля отсутствия недекларированных возможностей» (Гостехкомиссия России, М., 1999), далее - РД НДВ, наряду со статическим анализом должен проводиться динамический анализ (для уровней контроля РД НДВ 3 и 2). Материалы и методы. Вместе с тем в настоящее время в системе сертификации Минобороны России отсутствуют сертифицированные средства и рекомендованные методы и алгоритмы, которые могут быть использованы для проведения тестирования динамического выполнения кода Python программ на этапе сертификационных испытаний. Перспективным подходом в исследовании недекларированных возможностей кода Python приложений при проведении динамического тестирования является метод, основанный на использовании статистики генерируемой встроенным профайлером интерпретатора Python. Результаты и выводы. Подробно описана последовательность действий по формированию с помощью статистических данных, полученных посредством системы профилирования Python, отчетности, анализ которой позволяет сделать обоснованные выводы по соответствию/несоответствию исследуемого кода приложения, разработанного на языке программирования Python требованиям РД НДВ, в части динамического анализа.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Самаров Владимир Владимирович

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

TESTING THE DYNAMIC EXECUTION OF PYTHON PROGRAM CODE DURING THE CERTIFICATION TESTING (DEVELOPMENT) STAGE IN THE CERTIFICATION SYSTEM OF THE MINISTRY OF DEFENSE OF RUSSIA

Background. In many cases, software products subject to verification in the mandatory certification system of the Russian Ministry of Defense are developed using the interpreted Python programming language. When checking applications developed in the Python language for compliance of their code with the requirements of the governing document "Protection against unauthorized access to information. Part 1. Information security software. Classification according to the level of control of the absence of undeclared capabilities" (State Technical Commission of Russia, Moscow, 1999) 1, hereinafter - RD NDV, along with static analysis, a dynamic analysis should be carried out (for control levels of RD NDV 3 and 2). Materials and methods. At the same time, at present, the certification system of the Russian Ministry of Defense lacks certified tools and recommended methods and algorithms that can be used to test the dynamic execution of the Python code of programs at the stage of certification tests. A promising approach in the study of undeclared capabilities of the Python code of applications during dynamic testing is a method based on the use of statistics generated by the built-in profiler of the Python interpreter. Results and conclusions. The article describes in detail the sequence of actions for generating, using statistical data obtained through the Python profiling system, reporting, the analysis of which allows drawing reasonable conclusions on the compliance / non-compliance of the studied application code developed in the Python programming language with the requirements of the RD NDV, in terms of dynamic analysis.

Текст научной работы на тему «ТЕСТИРОВАНИЕ ДИНАМИЧЕСКОГО ВЫПОЛНЕНИЯ КОДА PYTHON ПРОГРАММ ПРИ ПРОВЕДЕНИИ ЭТАПА СЕРТИФИКАЦИОННЫХ ИСПЫТАНИЙ (РАЗРАБОТКИ) В СИСТЕМЕ СЕРТИФИКАЦИИ МИНОБОРОНЫ РОССИИ»

ДИАГНОСТИЧЕСКИЕ МЕТОДЫ ОБЕСПЕЧЕНИЯ НАДЕЖНОСТИ И КАЧЕСТВА СЛОЖНЫХ СИСТЕМ

DIAGNOSTIC METHODS FOR ENSURING RELIABILITY AND QUALITY OF COMPLEX SYSTEMS

УДК 004.05

doi:10.21685/2307-4205-2023-2-11

ТЕСТИРОВАНИЕ ДИНАМИЧЕСКОГО ВЫПОЛНЕНИЯ КОДА PYTHON ПРОГРАММ ПРИ ПРОВЕДЕНИИ ЭТАПА СЕРТИФИКАЦИОННЫХ ИСПЫТАНИЙ (РАЗРАБОТКИ) В СИСТЕМЕ СЕРТИФИКАЦИИ МИНОБОРОНЫ РОССИИ

В. В. Самаров

ООО «16 НИИЦ», Мытищи, Московская обл., Россия samarov_vladimir@mail.ru

Аннотация. Актуальность и цели. Во многих случаях программные изделия, подлежащие проверке в системе обязательной сертификации Минобороны России, разрабатываются с помощью интерпретируемого языка программирования Python. При проведении проверок приложений, разработанных на языке Python на предмет соответствия их кода требованиям руководящего документа «Защита от несанкционированного доступа к информации. Часть 1. Программное обеспечение средств защиты информации. Классификация по уровню контроля отсутствия недекларированных возможностей» (Гостехкомиссия России, М., 1999), далее -РД НДВ, наряду со статическим анализом должен проводиться динамический анализ (для уровней контроля РД НДВ 3 и 2). Материалы и методы. Вместе с тем в настоящее время в системе сертификации Минобороны России отсутствуют сертифицированные средства и рекомендованные методы и алгоритмы, которые могут быть использованы для проведения тестирования динамического выполнения кода Python программ на этапе сертификационных испытаний. Перспективным подходом в исследовании недекларированных возможностей кода Python приложений при проведении динамического тестирования является метод, основанный на использовании статистики генерируемой встроенным профайлером интерпретатора Python. Результаты и выводы. Подробно описана последовательность действий по формированию с помощью статистических данных, полученных посредством системы профилирования Python, отчетности, анализ которой позволяет сделать обоснованные выводы по соответствию/несоответствию исследуемого кода приложения, разработанного на языке программирования Python требованиям РД НДВ, в части динамического анализа.

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

Для цитирования: Самаров В. В. Тестирование динамического выполнения кода python программ при проведении этапа сертификационных испытаний (разработки) в системе сертификации Минобороны России // Надежность и качество сложных систем. 2023. № 2. С. 96-103. doi:10.21685/2307-4205-2023-2-11

© Самаров В. В., 2023. Контент доступен по лицензии Creative Commons Attribution 4.0 License / This work is licensed under a Creative Commons Attribution 4.0 License.

TESTING THE DYNAMIC EXECUTION OF PYTHON PROGRAM CODE DURING THE CERTIFICATION TESTING (DEVELOPMENT) STAGE IN THE CERTIFICATION SYSTEM OF THE MINISTRY OF DEFENSE OF RUSSIA

V.V. Samarov

LLC "16 NIITS", Mytishchi, Moscow region, Russia samarov_vladimir@mail.ru

Abstract. Background. In many cases, software products subject to verification in the mandatory certification system of the Russian Ministry of Defense are developed using the interpreted Python programming language. When checking applications developed in the Python language for compliance of their code with the requirements of the governing document "Protection against unauthorized access to information. Part 1. Information security software. Classification according to the level of control of the absence of undeclared capabilities" (State Technical Commission of Russia, Moscow, 1999) 1, hereinafter - RD NDV, along with static analysis, a dynamic analysis should be carried out (for control levels of RD NDV 3 and 2). Materials and methods. At the same time, at present, the certification system of the Russian Ministry of Defense lacks certified tools and recommended methods and algorithms that can be used to test the dynamic execution of the Python code of programs at the stage of certification tests. A promising approach in the study of undeclared capabilities of the Python code of applications during dynamic testing is a method based on the use of statistics generated by the built-in profiler of the Python interpreter. Results and conclusions. The article describes in detail the sequence of actions for generating, using statistical data obtained through the Python profiling system, reporting, the analysis of which allows drawing reasonable conclusions on the compliance / non-compliance of the studied application code developed in the Python programming language with the requirements of the RD NDV, in terms of dynamic analysis.

Keywords: certification tests of software products, dynamic code analysis of Python programs, control of completeness and lack of redundancy at the level of files and functional objects, code profiling for dynamic analysis

For citation: Samarov V.V. Testing the dynamic execution of python program code during the certification testing (development) stage in the certification system of the ministry of defense of Russia. Nadezhnost' i kachestvo slozhnykh sistem = Reliability and quality of complex systems. 2023;(2):96-103. (In Russ.). doi:10.21685/2307-4205-2023-2-11

В системе сертификации Минобороны России динамический анализ исследуемого кода проводится в соответствии с требованиями РД НДВ [1].

В соответствии с этим документом при проведении динамического анализа должны быть осуществлены:

- контроль выполнения функциональных объектов (ФО);

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

Для выполнения перечисленных требований при анализе проектов, разработанных на языке Python, предлагается воспользоваться статистикой, которая может быть получена профилировщиком интерпретатора Python - cProfile [2].

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

Для тестирования динамического выполнения кода Python программ при проведении сертификационных испытаний (этапа разработки) с использованием профилировщика cProfile (системы профилирования Python) предлагается воспользоваться следующим алгоритмом (на примере тестирования кросс-платформенного проекта, разработанного на языке Python, функционирующего в том числе в сертифицированной ОС «Astra Linux Special Edition» 1.6) [4]:

1. С помощью встроенного профилировщика cProfile получить статистику вызовов ФО исследуемого проекта при его выполнении в формате pstats [2], для чего в терминале выполнить команду:

python -m cProfile -o projname.pstats projmainmoduleapp.py, где proj name.pstats - результаты профилирования проекта projname с главным модулем proj main module app.py в потоковом формате pstats.

После чего произвести отработку заявленных функциональных возможностей исследуемого проекта. По окончании отработки функциональных возможностей исследуемого проекта зафиксировать сформированный файл projname.pstats proj.

2. Получить из файла projname.pstats статистическую информацию в текстовом виде, для чего в терминале выполнить команду:

python -c "import pstats; p = pstats.Stats('projname.pstats'); p.sort_stats('time').print_stats()" > proj_name_prof.txt

После чего зафиксировать полученный текстовый файл proj_name_prof.txt

3. С помощью питон-модуля gprof2dot [5] и результатов профилирования, сформированных при выполнении п.1, получить граф (файл projname.png *) с деревом фактических вызовов функций исследуемого проекта, для чего в терминале выполнить следующие команды:

pip3 list II просмотр установленных в системе пакетов

pip3 install gprof2dot II установка питон библиотеки gprof2dot (в случае отсутствия данного пакета в системе)

sudo apt list graphviz *II получение информации о пакете graphviz (установлен/не установлен)

sudo apt install graphviz *II установка пакета graphviz (если не установлен)

gprof2dot -f pstats proj name.pstats | dot -Tpng -o proj name.png

После чего зафиксировать полученный графический файл proj name.png

Примечание: для построения графов, в системе должно быть установлено ПО «Graphviz» [6] (входит в состав ОС «Astra Linux Special Edition» 1.6. В случае проведении испытаний в ОС семейства «Windows» ПО «Graphviz» должно быть установлено дополнительно).

4. Произвести формирование текстового файла FO_proj_name.txt с перечнем функциональных объектов в виде

Path_to_analized_proj+filenamel _py[Num_Str]FO_name[1]+(«.fnc»)

Path_to_analized_proj+file_name1_py[Num_Str]FO_name[2]+(«.fnc»)

Path_to_analized_proj+file_name1_py[Num_Str]FO_name[A]+(«.fnc») Path_to_analized_proj+file_name2_py[Num_Str]FO_name[1]+(«.fnc»)

Path_to_analized_proj+filenameN_py[Num_Str]FO_name[Z]+(«.fnc») (где:

Path_to_analized_proj - абсолютный путь к каталогу с анализируемым проектом; file_name_py - имя файла из каталога с анализируемым проектом;)

file_name_py[Num_Str]FO_name - имя ФО (класса, функции) из файла file_name_py (ФО объявлен в строке [Num_Str] файла);

«.fnc» - технологический маркер, обозначающий класс/функцию как объект, для которого применимы операции, предоставляемые файловой системой.

Примечание: для получения статистических данных, необходимых для дальнейшего получения перечня функциональных объектов в представленном виде, требуется воспользоваться существующими инструментами статического анализа (например: утилитой ctags [7], статическим анализатором исходных текстов - «SCI Understand» [8] и др.) или разработать Python утилиту, осуществляющую построение абстрактного синтаксического дерева (использование стандартного Python-модуль «ast» [9] позволяет сформировать перечень функциональных объектов анализируемого проекта (в том числе с корректной обработкой функций-декораторов, а также асинхронных функций).

5. По исходным тестам исследуемого проекта сформировать граф возможных вызовов ФО, для чего в терминале выполнить следующие действия:

pip3 list // просмотр установленных в системе пакетов

pip3 install code2flow // установка питон библиотеки code2flow code2flow -language = py Path_to_analized_proj -o proj name stat.png *

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

Примечание: для построения графов в системе должно быть установлено ПО «Graphviz» (входит в состав ОС «Astra Linux». В случае проведения испытаний в ОС «Windows» ПО «Graphviz» должно быть установлено дополнительно).

6. Осуществить преобразование данных, полученных на этапе выполнения п. 2 (файл proj_name_prof.txt), к представлению, аналогично описанному в п.4.

7. Произвести сравнение перечня функциональных объектов, сформированного по результатам статического анализа (п. 4), с фактически отработавшими ФО (п. 6), для этого выполнить следующие действия:

1) скопировать в каталог \data «ПИ «ПМАКФИ-16» [10] файлы FO_proj_name.txt и proj_name_prof.txt;

2) запустить ПИ «ПМАКФИ-16» с параметрами:

python app.py --first = data/ FO_proj_name.txt --second = data/proj_name_prof.txt

--dest_path = PROJDIR --reg = 1 --exts = "fnc" где app.py - главный модуль ПИ «ПМАКФИ-16»; --first - параметр с указанием пути к первому файлу FO_proj_name.txt, сформированному на этапе выполнения п. 4; --second- параметр с указанием пути ко второму файлу projname _prof.txt, сформированному на этапе выполнения п. 2; --dest_path = PROJDIR -имя каталога, по которому производится анализ (основной каталог запуска питон проекта).

8. Перейти в каталог \result «ПИ «ПМАКФИ-16». Ознакомиться с файлами отчетов (Rep_equals.txt - перечень ФО, определенных в результате статического анализа и фактически отработавших по результатам динамического анализа; Rep_file1_only.txt - перечень ФО, определенных в результате статического анализа, но отработавших по результатам динамического анализа; Rep_file2_only.txt* - перечень ФО, фактически отработавших по результатам динамического анализа, но отсутствующих в файлах исходных текстов исследуемого проекта по результатам статического анализа (рис. 1); result.html - сводный html отчет с результатами анализа, рис. 2).

^ Rep_equals.txt - Блокнот

Файл Правка Формат Вид Справка

С Rep_file2_only.txt - Блокнот

Файл Правка Формат Вид Справка

1. \row_py[32]generate.fnc <-> /row_py[32]generate.fnc

2. \row_py[2]_init_.fnc <-> /row_py[2]_init_.fnc

3. \row_py[29]_It_.fnc <-> /row_py[29]_It_.fnc

4. \row_py[20]_eq_.fnc <-> /row_py[20]_eq_.fnc

5. \row_py[1]row.fnc <-> /row_py[1]row.fnc

6. \rov/_py[12]_str_.fnc <-> /row_py[12]_str_.fnc

7. \page_py[1]create_page.fnc <-> /page_py[1]create_page.fnc

8. \html_elements_py[7]_init_.fnc <-> /html_elements_py[7]_init_.fnc

9. \html_elements_py[5]head.fnc <-> /html_elements_py[5]head.fnc

10. \html_elements_py[44]_init_.fnc <-> /html_elements_py[44]_init_.fnc

11. \html_elements_py[42]smalltablerov/.fnc <-> /html_elements_pyI42]smaIItabIerow.fnc

12. \html_elements_py[37]_init_.fnc <-> /html_elements_py[37]_init_.fnc

13. \html_elements_py[35]smalltable.fnc <-> /html_elements_py[35]smalltable.fnc

14. \html_elements_py[27]_init_.fnc <-> /html_elements_py[27]_init_.fnc

15. \html_elements_py[25]bigtablerow.fnc <-> /html_elements_py[25]bigtablerow.fnc

16. \html_elements_py[1]element.fnc <-> /html elements_py[1]element.fnc

17. \html_elements_py[19]_init_.fnc <-> /html_elements_py[19]_init_.fnc

18. \html_elements_py[17]bigtable.fnc <-> /html_elements_py[17]bigtable.fnc

19. \html_elements_py[13]_init_.fnc <-> /html_elements_py[13]_init_.fnc

20. \html_elements_py[1 IJinfo.fnc <-> /html_elements_py[11]info.fnc

21. \file_py[4]fileiterator.fnc <-> /file_py[4]fileiterator.fnc

22. \f i I e_py [3 8] rows .fnc <-> /file_py[38]rows.fnc

23. Vfile_py[22]_init_.fnc <-> /file_py[22]_init_.fnc

24. \file_py[20]file.fnc <-> /fîle_py[20]fîle.fnc

25. \app_py[96]main.fnc <-> /app_py[96]main.fnc

26. \app_py[85]write_cornmon_to_file.fnc <-> /app_py[85]write_common_to_fiIe.fnc

27. \app_py[77]wrîte_to_file.fnc <-> /app_py[77jwrîte_to_file.fnc

28. \app_py[62]create small table_rows.fnc <-> /app_py[62]create_small_table_rows.fnc

29. \app_py[33]create_big_table_rows.fnc <-> /app_py[33]create_big_table_rows.fnc

30. \app_py[18]intersection.fnc <-> /app_py[18]intersection.fnc

C, Rep file1_only.txt - Блокш

Файл Правка Формат Вид Справка

1. \app_py[98]edit_file.fnc

2. \file_py[6]_init_.fnc

3. \file_py[10]_next_.fnc

4. \file_py[32|_contains_.fnc

5. \file_py[35]_iter_.fnc

G. \f_proc_py[38]rows.fnc 7. \row_py[26]_ge_.fnc

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

1. /app_py[22]<lambda>.fnc

2. /app_py[21]<lambda>.fnc

3. /rov/_py[39]<listcomp>.fnc

4. /usr/lib/python3.5/codecs_py[31 8] de со de.fnc

5. /usr/lib/python3.5/_bootlocale py[23]getpreferredencoding.fnc

6. fu s г/1 i b/p yt h о n 3. Б / с g d e cspy [3p 8]_in it_.f n с

7. /и s г/1 i b/pyth о n 3.5/co d e cs_py [259]_in it_.f n с

8. /usr/lib/python3.5/gettext_pyI461]find.fnc

9. /usr/lib/python3.5/posixpath_py[71]join.fnc

app_py[1]<module>.fnc usr/lib/python3.5/sre_parse_py[491]_parse.fnc и s r/l i b/p yth о n 3.5/s re_co mpile_py[64]_compile.fnc

usr/lib/python3.5/s re_p a rs e_py [15 7]_g etite m_.f n с

usr/lib/python3.5/s re_p arse_py[167]g etwi d t h .f n с usr/lib/python3.5/g ettext_py [2 0 5|_exp a n d I a n g .f n с usr/lib/python3.5/argparse_py[130B]add_argument.fnc

и s r/l i b/p yth о n 3.5/a rg p a rs e_py [1227]_i n it_.f n с

usr/lib/python3.5/argparse_py[1279]register.fnc

и s r/l i b/p yth о n 3.5/o s_py [72 0]_g etite m_.f n с

usr/lib/python3.5/s re_co m p i I e_py [412]_c о m p i I e_i nf о .f n с usr/lib/python3.5/s re_p arse_py[429]_parse_sub.fnc usr/lib/python3.5/locale_py[375]normalize.fnc usr/lib/python3.5/g e n e ri cp ath _py [1 G] exi sts .f n с

usr/lib/python3.5/encodings/_init_py[42]normalize_encoding.fnc

usr/lib/python3.5/os_py|796|encode.fnc

usr/lib/python3.5/argpars e_py [160]_in it_.f n с

и s r/l i b/p yth о n 3.5/re_py [278]_co m p i I e .f n с usr/lib/python3.5/argparse_py[62]<module>.fnc

и s r/l i b/p yth о n 3.5/s re_p a rs e_py [15 3]_I e n_.f n с

usr/lib/python3.5/argparse_py[1445]_get optional kwargs.fnc

и s r/l i b/p yth о n 3.5/p о s ixp ath_py [3 9]_g et_sep.fnc

usr/lib/python3.5/argparse_py[184',1]consume_optional.fnc

usr/lib/python3.5/sre_compile_py[531]compile.fnc

и s r/l i b/p yth о n 3.5/a rg p a rs e_py [177B]_parse_known_args.fnc

usr/lib/python3.5/sre_parse_py[247]get.fnc

usr/lib/python3.5/_collections_abc_py[594]get.fnc

usr/lib/python3.5/argpars e_py [1534]_i n it_.f n с

usr/lib/python3.5/sre_parse_py[165]append.fnc

и s r/l i b/p yth о n 3.5/s re_p a rs e_py [226]_n ext.f n с

и s r/l i b/p yth о n 3.5/a rg p a rs е ру [182 3]ta ke_a cti о n .f n с

и s r/l i b/p yth о n 3.5/a rg p a rs e_py [128 3]_re g i stry_g et.f n с

и s r/l i b/p yth о n 3.5/s re co m p i I е ру [248] _o pti m i z e_ch a rs et.f n с

и s r/l i b/p yth о n 3.5/a rg p a rs e_py [2235]_g et_va I и e s .f n с

usr/lib/python3.5/argparse_py[1365]_add action.fnc us r/l i b/pyth on3.5/re_py[222]compile.f ne и s r/l i b/p yth о n 3.5/s re_p arse_py[819]parse.fnc usr/lib/python3.5/argparse_py[2353]_get_formatter.fnc

и s r/l i b/p yth о n 3.5/a rg p a rs e_py [1605]_i n it_.f n с

usr/lib/python3.5/argparse_py[2051]_match_argument.fnc

Стр 1, ÎT.Ïïi

Рис. 1. Видеокадр отчетов Rep_equals.txt, Rep_Jile1_only.txt и Rep_file2_only.txt, сформированных по результатам анализа тестового проекта

Рис. 2. Видеокадр сводного отчета result.html, сформированного по результатам анализа тестового проекта

9. По результатам анализа отчетности, сформированной «ПИ «ПМАКФИ-16», сделать заключения:

- о фактической полноте отработки функциональных объектов из состава пакета с исходными текстами исследуемого проекта (файлы Rep_equals.txt и Rep_file1_only.txt) и, как следствие, отсутствие (наличие) функциональной и файловой избыточности;

- по полноте исходных текстов на уровне файлов и на уровне функциональных объектов.

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

- верифицированный, в случае, если данный программный модуль получен из надежного источника (например, из состава интерпретатора Python версии 3.5, входящего в состав сертифицированной ОС «Astra Linux» 1.6);

- неверифицированный, в случае, если источник получения данного программного модуля (библиотеки) не установлен/сомнительный (при идентификации статуса используемых файлов особое внимание уделить Python файлам из каталогов «Site-Packages» и «Dist-packages», а также версии фактически используемого интерпретатора Python).

10. Ознакомиться с файлом proj name.png, представляющим собой граф фактических вызовов функций тестового проекта (сформирован на этапе выполнения действий описанных в п. 3, рис. 3 (справа), сравнить его с графом вызовов функций (файл proj name stat.png, сформирован на этапе выполнения п. 5), построенных в результате анализа исходных текстов проекта, рис. 3 (слева)).

~:0:<built-m method builtins.exec> 100.00% (0.00%)

арр I г ~гЛМ> 100.00* (0.00%)

арр:96тпат

99.01% (0.00%) 1-

/44 20% \ 54.83

1ile:22 'lit арр 18:intersectim

44 20% 54.83%

(0.00%) (17.88%)

2" 1«

/44 20% /э.96% \ г.50%4

zг- / / 3513В4« ^19564*

fe:38:rows 1 app:22:<lambda> app:21:<lambda>

.14 70 Я 3 96% 2 50%

■ (3.96%) (2.50%)

1 354384* Кыш

row:2 ¡nil 2.Ш, rCrwv 2C eq_ 59.75V.

(0.18%) (41.53%)

4908* 1960361»

1 low 32 geoeiate

1 2.21%

1 (0.85%)

1 4В0Э"

0.79%

307«

row:39:<listaomp>

0.79%

(0.42%)

307»

^O.^built-m mettwd bjillins isiostance? 15.19% (18.19%)

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

11. Сделать заключение о соответствии (несоответствии) фактических маршрутов выполнения функциональных объектов, сформированных по результатам выполнения исследуемого проекта, с возможными маршрутами выполнения ФО, сформированными по результатам выполнения статического анализа (при анализе акцентировать внимание на обязательность выполнения критических маршрутов выполнения программы).

Заключение

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

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

1. Защита от несанкционированного доступа к информации Часть 1. Программное обеспечение средств защиты информации. Классификация по уровню контроля отсутствия недекларированных возможностей. URL: https://fstec.ru/tekhnicheskaya-zashchita-informatsii/dokumenty/114-spetsialnye-normativnye-dokumenty/ 3 82-rukovodyashchij -dokument-prikaz-predsedatelya-gostekhkomissii-rossii-ot-4-iyunya-1999-g-n-114 (дата обращения: 20.02.2023).

2. 27.4. The Python Profilers - Python 3.5.9 documentation. URL: https://docs.python.org/3.5/library/profile.html (дата обращения: 20.02.2023).

3. Старостин И. Е. Программная реализация решения потенциально-потоковым методом задач построения моделей систем из результатов испытаний этих систем // Надежность и качество сложных систем. 2020. № 3. С. 128-136. doi:10.21685/2307-4205-2020-3-15

4. Операционная система Astra Linux Special Edition: описание, назначение, применение. URL: https://astralinux.ru/products/astra-linux-special-edition (дата обращения: 20.02.2023).

5. gprof2dot ' PyPi. URL: https://pypi.org/project/gprof2dot (дата обращения: 20.02.2023).

6. Graphviz. URL: https://graphviz.org (дата обращения: 20.02.2023).

7. Universal Ctags. URL: https://ctags.io (дата обращения: 20.02.2023).

8. Understand: An IDE and Static Code analysis Tool by SciTools. URL: https://www.scitools.com (дата обращения: 20.02.2023).

9. 32.2. ast - Abstract Syntax Trees - Python 3.5.9 documentation. URL: https://docs.python.org/3.5/library/ast.html (дата обращения: 20.02.2023).

10. Самаров В. В., Юрков Н. К. Программная реализация контроля файловой избыточности и подтверждения полноты исходных текстов на уровне файлов // Надежность и качество сложных систем. 2021. № 2. С. 104-108. doi:10.21685/2307-4205-2021-2-11

1. Zashchita ot nesanktsionirovannogo dostupa k informatsii Chast' 1. Programmnoe obespechenie sredstv zashchity informatsii. Klassifikatsiya po urovnyu kontrolya otsutstviya nedeklarirovannykh vozmozhnostey = Protection against unauthorized access to information Part 1. Information security software. Classification according to the level of control of the absence of undeclared opportunities. (In Russ.). Available at: https://fstec.ru/tekhnicheskaya-zashchita-informatsii/dokumenty/114-spetsialnye-normativnye-dokumenty/382-rukovodyashchij-dokument-pri-kaz-predsedatelya-gostekhkomissii-rossii-ot-4-iyunya-1999-g-n-114 (accessed 20.02.2023).

2. 27.4. The Python Profilers - Python 3.5.9 documentation. Available at: https://docs.python.org/3.5/library/pro-file.html (accessed 20.02.2023).

3. Starostin I.E. Software implementation of the solution of problems of constructing models of systems from the test results of these systems by a potentially streaming method. Nadezhnost' i kachestvo slozhnykh system = Reliability and quality of complex systems. 2020;(3):128-136. (In Russ.). doi:10.21685/2307-4205-2020-3-15

4. Operatsionnaya sistema Astra Linux Special Edition: opisanie, naznachenie, primenenie = Astra Linux Special Edition operating system: description, purpose, application. (In Russ.). Available at: https://astralinux.ru/prod-ucts/astra-linux-special-edition (accessed 20.02.2023).

5. gprof2dot ' PyPi. Available at: https://pypi.org/project/gprof2dot (accessed 20.02.2023).

6. Graphviz. Available at: https://graphviz.org (accessed 20.02.2023).

7. Universal Ctags. Available at: https://ctags.io (accessed 20.02.2023).

8. Understand: An IDE and Static Code analysis Tool by SciTools. Available at: https://www.scitools.com (accessed 20.02.2023).

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

9. 32.2. ast - Abstract Syntax Trees - Python 3.5.9 documentation. Available at: https://docs.python.org/3.5/li-brary/ast.html (accessed 20.02.2023).

10. Samarov V.V., Yurkov N.K. Software implementation of file redundancy control and confirmation of completeness of source texts at the file level. Nadezhnost' i kachestvo slozhnykh sistem = Reliability and quality of complex systems. 2021;(2):104-108. (In Russ.). doi:10.21685/2307-4205-2021-2-11

References

Информация об авторах / Information about the authors

Владимир Владимирович Самаров

заместитель начальника испытательной лаборатории,

ООО «16 НИИЦ»

(Россия, Московская обл., г. Мытищи,

Олимпийский пр-т, 29)

E-mail: samarov_vladimir@mail.ru

Vladimir V. Samarov

Deputy Head of the testing laboratory,

LLC "16 NIITS"

(29 Olimpiyskiy avenue, Mytishchi, Moscow region, Russia)

Автор заявляет об отсутствии конфликта интересов / The author declares no conflicts of interests.

Поступила в редакцию/Received 20.02.2023 Поступила после рецензирования/Revised 10.03.2023 Принята к публикации/Accepted 25.03.2023

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