Size: a a a

2020 September 25

SP

Sergey Prokhorov in ErlangRus
Alex Bubnov
я правильно улавливаю, что в тестах описывается референсная модель, потом в нее и в реальный инстанс идет флуд командами с сравнением итогового стейта, а потом это всё как-то сводится к минимальной последовательности команд для воспроизведения?
Да!
источник

SP

Sergey Prokhorov in ErlangRus
Lev Walkin
Мы делали модел-чекинг на SPIN/Promela. Пишешь модель на подмножестве Си (Promela), затем спинчекер елозит по state space и проверяет все углы. Выявило как минимум одну проблему.
Ну model checking не то же самое что property based тесты. В proper как правило подразумевается что модель уже без багов. Просто проверяется что реальная система ей соответствует
источник

ИИ

Иванов Иванов... in ErlangRus
PsyDebug
Для неё есть ещё условия помимо детерменированности
для тестирования достаточно детерминированности
источник

LW

Lev Walkin in ErlangRus
Sergey Prokhorov
Ну model checking не то же самое что property based тесты. В proper как правило подразумевается что модель уже без багов. Просто проверяется что реальная система ей соответствует
Не спорю.
источник

ML

Maksim Lapshin in ErlangRus
Alex Bubnov
я правильно улавливаю, что в тестах описывается референсная модель, потом в нее и в реальный инстанс идет флуд командами с сравнением итогового стейта, а потом это всё как-то сводится к минимальной последовательности команд для воспроизведения?
если я правильно понимаю, то примерно так, но: ты не можешь повторно написать сложную систему, поэтому ты строишь массу простых срезов, проверяющих непротиворечивость и целостность данных
источник

AB

Alex Bubnov in ErlangRus
Maksim Lapshin
если я правильно понимаю, то примерно так, но: ты не можешь повторно написать сложную систему, поэтому ты строишь массу простых срезов, проверяющих непротиворечивость и целостность данных
ну да, понятно, что модель описывает только подмножество инвариантов большей системы, иначе эти тесты будут писаться столько же времени, как сама система.
источник

PK

Petr Kozorezov in ErlangRus
Sergey Prokhorov
хочу поделиться впечатлением: у нас есть система, у неё есть некий стейт в базе данных и есть набор операций, которые этот стейт меняют (порядка 20 различных операций). В проде уже с год, более-менее работает.
Решили для неё сделать полный statefull property-based тест… выловили уже штук 8 багов / corner case / неконсистентностей. Часть из них требуют цепочек из 5-6 различных операций. В проде не проявлялось потому что пока что такая комбинация операций не использовалась в текущем продукте. Но очень довольны теперь что решили потратить на это время
А не сталкивались с нечитаемыми ошибками от пропера? Или тем, что он падает с тем, что не может сгенерить тесткейс? Меня уже это немного подбешивать начинает. Поправил тест, он упал и чтобы понять почему, начинаешь пляски с бубнами и рассматривание кода на предмет ошибок.
источник

PK

Petr Kozorezov in ErlangRus
У нас уже почти год проперные тесты как основные в сервисе и в целом очень удобно. Нашёл уже достаточно интересных багов. Особенно классные, которые связаны с фрагментированием пакетов в сети, и проявляются один раз на несколько тысяч. А так, времени своего точно стоят.
источник

DZ

Danil Zagoskin in ErlangRus
Petr Kozorezov
У нас уже почти год проперные тесты как основные в сервисе и в целом очень удобно. Нашёл уже достаточно интересных багов. Особенно классные, которые связаны с фрагментированием пакетов в сети, и проявляются один раз на несколько тысяч. А так, времени своего точно стоят.
О, с фрагментированием баги отличные. Я уже как минимум два доморощенных фуззера написал для тех мест.
источник

PK

Petr Kozorezov in ErlangRus
Danil Zagoskin
О, с фрагментированием баги отличные. Я уже как минимум два доморощенных фуззера написал для тех мест.
Да, я тоже раньше сам писал, потом на пропер переехал.
источник

DZ

Danil Zagoskin in ErlangRus
Petr Kozorezov
Да, я тоже раньше сам писал, потом на пропер переехал.
Ему на вход нужен какой-то кусок данных, на которых что-то сломалось?
Или он сам вглядывается и генерирует хрень?
источник

SP

Sergey Prokhorov in ErlangRus
Petr Kozorezov
А не сталкивались с нечитаемыми ошибками от пропера? Или тем, что он падает с тем, что не может сгенерить тесткейс? Меня уже это немного подбешивать начинает. Поправил тест, он упал и чтобы понять почему, начинаешь пляски с бубнами и рассматривание кода на предмет ошибок.
Нечитаемыми? Да вроде нет. Бывает что вывалит весь стейт модели в лог, а это несколько сотен строк. Но мы там как-то этот терм теперь обрабатываем чтоб оно конкретнее показывало где ошибка.
Еще потратили время чтоб shrinking полноценно заработал - выглядит как магия. Сперва показывает цепочку из 50 команд, потом попыхтит и выдает реально минимальный тесткейс. Но это дисциплины требует, чтоб его не сломать
источник

PK

Petr Kozorezov in ErlangRus
Danil Zagoskin
Ему на вход нужен какой-то кусок данных, на которых что-то сломалось?
Или он сам вглядывается и генерирует хрень?
Ты по сути пишешь правила генерации хрени, а он уже в рамках этих правил рандомизирует и пытается сломать твой код, а потом ещё, как сказал выше Серёга, ужать тест кейс до минимума и найти где именно твой код падает.
источник

SP

Sergey Prokhorov in ErlangRus
Petr Kozorezov
А не сталкивались с нечитаемыми ошибками от пропера? Или тем, что он падает с тем, что не может сгенерить тесткейс? Меня уже это немного подбешивать начинает. Поправил тест, он упал и чтобы понять почему, начинаешь пляски с бубнами и рассматривание кода на предмет ошибок.
Сгенерировать не может... ну у нас генератор умный и он от стейта генерирует команды возможные. И потом мы в precondition уже дополнительно перепроверяем.
источник

SP

Sergey Prokhorov in ErlangRus
ща занят, чуть позже распишу
источник

PK

Petr Kozorezov in ErlangRus
Sergey Prokhorov
Сгенерировать не может... ну у нас генератор умный и он от стейта генерирует команды возможные. И потом мы в precondition уже дополнительно перепроверяем.
Ну у меня просто есть ?SUCHTHAT и вот с ним такое бывает.
источник

PK

Petr Kozorezov in ErlangRus
А если хочешь "красивых" ошибок, можешь попробовать просто заменить LET на SUCHTHAT (не меняя того что в теле) и должно классно упасть.
источник

DZ

Danil Zagoskin in ErlangRus
Petr Kozorezov
Ты по сути пишешь правила генерации хрени, а он уже в рамках этих правил рандомизирует и пытается сломать твой код, а потом ещё, как сказал выше Серёга, ужать тест кейс до минимума и найти где именно твой код падает.
Чем правила отличаются от написания фуззера вручную? (Если входной поток один)
источник

PK

Petr Kozorezov in ErlangRus
Не нужно писать логику генерации. Просто говоришь, что у тебя, допустим на входе integer и binary и дальше он уже сам самые разные варианты перебирает.
источник

DZ

Danil Zagoskin in ErlangRus
Petr Kozorezov
Не нужно писать логику генерации. Просто говоришь, что у тебя, допустим на входе integer и binary и дальше он уже сам самые разные варианты перебирает.
Кажется, в тех местах, которые я фуззил руками, слишком высокоорганизованный бинарь, чтобы такое просто сработало.
источник