Аннотация:
В статье рассматриваются методы тестирования компонентов ядра ОС Linux с использованием симуляции сбоев. Основная цель таких методов – проверка поведения модуля при возникновении нештатных ситуаций, таких как сбои в аппаратуре или нехватка ресурсов.
Эти ситуации на практике встречаются достаточно редко и непредсказуемо, что существенно затрудняет их обнаружение и локализацию.
Единственным распространённым подходом к поиску таких проблем является случайное внесение сбоев в ходе выполнения обычных тестов.
Но из-за недетерминированной природы такой способ тестирования не обеспечивает достаточной воспроизводимости тестовых сценариев, что не позволяет давать никаких гарантий корректности поведения драйвера даже в случае успешного выполнения всех тестов.
В статье предлагаются новые методы систематического тестирования устойчивости к сбоям, решающие проблему воспроизводимости тестирования.
В основе этих методов лежит систематический перебор точек для симуляции сбоев с отбрасыванием потенциально "неинтересных" тестов, которые не проверяют ничего нового по сравнению с другими тестами. Применимость и эффективность конкретного систематического метода зависит от способа определения "неинтересных" тестов: это может быть как ручное выделение уникальных участков базовых тестов, ограничивающих множество точек для симуляции сбоев, так и автоматическое определение дублирующих точек по стеку вызовов функций тестируемого модуля. Была проведена апробация предложенных систематических методов на одном из драйверов Linux и двух тестовых наборах. Результаты апробации показывают, что систематические методы не уступают по эффективности методу со случайным внесением сбоев, а в чем-то и превосходят его.
Ключевые слова:Linux, компоненты ядра Linux, драйвер, тестирование, симуляция сбоев.