Как разработчики ядра Linux тестируют свой код локально и после того, как у них будет фиксировавший? Они используют некоторое поблочное тестирование, автоматизацию сборки? планы тестирования?
Как разработчики ядра Linux тестируют свой код локально и после его фиксации?
Используют ли они какое-то модульное тестирование, автоматизацию сборки?
В классическом смысле слова - нет.
Э. грамм. Инго Мольнар выполняет следующую рабочую нагрузку: 1. построить новое ядро со случайным набором параметров конфигурации 2. загрузитесь в него 3. goto 1
Каждый сбой сборки, сбой загрузки, ОШИБКА или предупреждение во время выполнения обрабатываются. 24/7. Умножив их на несколько ящиков, можно обнаружить довольно много проблем.
планы испытаний?
Нет.
Может возникнуть недоразумение, что есть центральный испытательный центр, а его нет. Каждый делает то, что хочет.
В ядре linux большое внимание уделяется тестированию сообществом.
Как правило, любой разработчик тестирует свой собственный код перед отправкой, и довольно часто он использует версию ядра от Linus или одну из других нестабильных/разрабатываемых версий для проекта, имеющего отношение к его работе. Это означает, что они часто тестируют как свои изменения, так и изменения других людей.
Формальных планов тестирования, как правило, не так много, но может потребоваться дополнительное тестирование перед тем, как функции будут слиты в вышестоящие деревья.
Как отметил Дин, существует также некоторое автоматизированное тестирование, проект linux test project и kernel autotest (хороший обзор).
Разработчики часто также пишут автоматизированные тесты, нацеленные на проверку их изменений, но я не уверен, что существует (часто используемый) механизм для централизованного сбора этих специальных тестов.
Конечно, это сильно зависит от того, какая область ядра подвергается изменениям - тестирование, которое вы проводите для нового сетевого драйвера, сильно отличается от тестирования, которое вы проводите при замене основного алгоритма планирования.
Я полагаю, они используют виртуализацию для выполнения быстрых тестов, например QEMU, VirtualBox или Xen, а также некоторые сценарии для выполнения конфигураций и автоматических тестов.
Автоматическое тестирование, вероятно, выполняется путем пробования множества случайных конфигураций или нескольких конкретных (если они работают с определенной проблемой). В Linux есть множество низкоуровневых инструментов (таких как dmesg) для мониторинга и регистрации данных отладки из ядра, так что я полагаю, что они тоже используются.
Нелегко автоматизировать тестирование ядра. Большинство разработчиков Linux проводят тестирование самостоятельно, как упоминал Адобриян.
Однако есть несколько вещей, которые помогают с отладкой ядра Linux:
Затем разработчики обычно поручают другим проверять свои исправления.После того, как исправления проверяются локально и не мешают чему-либо еще, и исправления проверены на совместимость с последним ядром от Linus, ничего не нарушая, исправления отправляются вверх по течению.
Редактировать: Вот хорошее видео , в котором подробно описывается процесс, через который проходит патч, прежде чем он будет интегрирован в ядро.