DOI: 10.17586/2226-1494-2020-20-2-243-248


УДК004.052.42

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

Доронин О.В., Дергун К.И., Дергачев А.М., Ильина А.Г., Горлач С.П.


Читать статью полностью 
Язык статьи - русский

Ссылка для цитирования:
Доронин О.В., Дергун К.И., Дергачев А.М., Ильина А.Г., Горлач С.П. Тестирование многопоточных приложений с блокировками на неатомарных переменных // Научно-технический вестник информационных технологий, механики и оптики. 2020. Т. 20. № 2. С. 243–248. doi: 10.17586/2226-1494-2020-20-2-243-248


Аннотация
Предмет исследования. Исследован существующий алгоритм фаззинг-тестирования для поиска ошибок типа гонки данных в многопоточных программных приложениях, реализованный в инструменте Google TSan. Недостатком исследованного алгоритма является отсутствие возможности тестирования программных приложений, использующих неатомарные переменные. Это исключает возможность применения подобного инструмента для тестирования современных приложений, реализующих совместный доступ программных потоков к данным. Предложен новый алгоритм фаззинг-тестирования многопоточных приложений и способ внедрения его в модуль фаззинг-тестирования инструмента Google TSan. Метод. При фаззинг-тестировании многопоточных приложений входными данными являются различные комбинации исполнения программных потоков. Предложенный метод фаззинг-тестирования многопоточных программных приложений строится на предположении, что ошибки в многопоточных приложениях проявляются только в точках переключения потоков — точках синхронизации. Планировщик потоков реализован максимально просто. Каждому потоку назначается маркер состояния, позволяющий отслеживать его активность в процессе работы программы. Поток может находиться в неизвестном состоянии (до первой точки синхронизации), в состоянии исполнения, в ожидании — в очереди на исполнение, а также в состоянии, когда поток исчерпал свой квант исполнения, но не достиг точки синхронизации. Подобное состояние потока при достижении точки синхронизации автоматически меняется на состояние ожидания. Управление потоками осуществляется с помощью отдельного программного потока, следящего за состояниями всех потоков и выставляющего потокам, исчерпавшим квант исполнения, соответствующий маркер. Механизм поиска ошибок внедряется в программный продукт на этапе компиляции при указании соответствующих опций. Основные результаты. В инструмент Google TSan внедрен новый модуль фаззинг-тестирования, который позволяет находить ошибки типа гонки данных в любых многопоточных приложениях как с синхронизацией доступа к разделяемым данным, так и при совместном доступе программных потоков к данным. Практическая значимость. Верификация многопоточных приложений с совместным доступом к данным, в частности использующих неатомарные переменные, особенно актуальна для высоконагруженных масштабируемых программных систем.

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

Список литературы
  1. Гедич А.А., Зыков А.Г., Лаздин А.В., Поляков В.И. Поиск процедур по графу переходов функциональной программы при верификации вычислительных процессов // Известия высших учебных заведений. Приборостроение. 2014. Т. 57. № 4. С. 64–68.
  2. Dechev D., Pirkelbauer P., Stroustrup B. Understanding and effectively preventing the ABA problem in descriptor-based lock-free designs // Proc. 13th IEEE International Symposium on Object/Component/Service-Oriented Real-Time Distributed Computing (ISORC 2010). 2010. V. 1. P. 185–192. doi: 10.1109/ISORC.2010.10
  3. Multi-Threaded Programming Terminology – 2018 [Электронный ресурс]. URL: https://www.bogotobogo.com/cplusplus/multithreaded.php, свободный. Яз. англ. (дата обращения:18.01.2020).
  4. Трудности многопоточного программирования [Электронный ресурс]. URL: https://poznayka.org/s9887t1.html, свободный. Яз. рус. (дата обращения:18.01.2020).
  5. Race Condition vs. Data Race 2018 [Электронный ресурс]. URL: https://blog.regehr.org/archives/490, свободный. Яз. англ. (дата обращения: 18.01.2020).
  6. Serebryany K., Iskhodzhanov T. ThreadSanitizer - Data race detection in practice // ACM International Conference Proceeding Series. 2009. P. 62–71. doi: 10.1145/1791194.1791203
  7. Лукин М.А. Верификация параллельных автоматных программ // Научно-технический вестник информационных технологий, механики и оптики. 2014. T. 14. № 1(89). С. 60–66.
  8. Никифоров В.В. Протокол предотвращения взаимного блокирования задач в системах реального времени // Известия высших учебных заведений. Приборостроение. 2014. Т. 57. № 12. С. 21–27.
  9. Никифоров В.В., Тюгашев А.А. Доступ к разделяемым ресурсам в системах реального времени с переменными приоритетами задач // Известия высших учебных заведений. Приборостроение. 2016. Т. 59. № 11. С. 964–970. doi: 10.17586/0021-3454-2016-59-11-964-970
  10. Triantafillou P. An approach to deadlock detection in multidatabases // Information Systems. 1997. V. 22. N 1. P. 39–55. doi: 10.1016/S0306-4379(97)00003-3
  11. Дергун К.И., Доронин О.В. Фаззинг тестирование fine-grainedалгоритмов // Сборник тезисов докладов Конгресса молодых ученых [Электронный ресурс]. URL: https://kmu.itmo.ru/digests/article/1224, свободный. (дата обращения: 18.01.2020).
  12. Doronin O., Dergun K., Dergachev A. Automatic fuzzy-scheduling of threads in Google Thread Sanitizer to detect errors in multithreaded code // CEUR Workshop Proceedings. 2019. V. 2344. P. 1–12.
  13. ThreadSanitizer project: documentation, source code, dynamic annotations, unit tests [Электронный ресурс]. URL: http://code.google.com/p/data-race-test, свободный. Яз. англ. (дата обращения: 18.01.2020).
  14. Саттон М., Грин А., Амини П. Fuzzing: исследование уязвимостей методом грубой силы. Москва: Символ-Плюс, 2009. 555 с.
  15. Vallen A., Johansson V. Random testing with sanitizers to detect concurrency bugs in embedded avionics software [Электронный ресурс]. URL: http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A1269941&dswid=8217, свободный. Яз. англ. (дата обращения: 18.01.2020).


Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License
Информация 2001-2020 ©
Научно-технический вестник информационных технологий, механики и оптики.
Все права защищены.

Яндекс.Метрика