|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
Привет котики! Вот что придумал ваш кот. В продолжение 22195620 , 21099367 . Мне надо было протестить библиотечку поддержки графовых структур. По сути проверить что вершины-ребра соответсвуют тому что было заказано для каждого объекта-графа. Количество штук - совпадает. Мне не хотелось перечислять все вариации графов и писать по модульному тесту на каждый. Пустой. Полно-связный. И прочее. Главное из курса дискретной математики я запомнил утверждение. Сумма степеней вершин равна удвоенному числу ребер Это свойство. Проперти. Я вспомнил PBT https://jqwik.net/property-based-testing.html и заюзал библиотечку net.jqwik:jqwik:LATEST и вот что у меня получилось. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
Возможно сам граф-генератор не очень удачен. Не покрывает все вариации. Вопросы. 1) Сделайте code-review. 2) Кто из вас использовал property-based testing в продуктовых задачах? 3) Насколько было полезно? 4) Отключали-ли вы PBT для пред-релизных сборок? 5) Была-ли проблема комбинаторного взрыва для тех тестов которые многомерные? 6) Как вы сочетали обычные тесты и PBT? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 13:37 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
Код: java 1.
что за магическая константа 20? Это тоже самое что и parameter? непонятно, что делает вообще этот метод. Существуют ои вершины без ребер? Сколько их по дефолту? По идее это валидный кейс для темстирования. В целом генератор смотрится нормально. Немного смущает вероятность того что не будет протестирован пустой граф при определенных условиях, если за 300 попыток ни разу не выпадет 0. 2) Кто из вас использовал property-based testing в продуктовых задачах? 3) Насколько было полезно? Используем, но у него достаточно ограниченная область применения, в целом при ООП оно не приносит много пользы. На проектах с чистым ФП, где сначала определяются алгебры операций - там процент полезности выше. 4) Отключали-ли вы PBT для пред-релизных сборок? Нет, зачем? В чем смысл тогда? Если боишься что будет работать медленно - то значит надо переписать, тут не должно быть внешних зависимостей и работать должно шустро. Если боишься неповторяемости результатов - так в том и смысл, пусть упадет при сборке чем на проде 5) Была-ли проблема комбинаторного взрыва для тех тестов которые многомерные? О чем ты вообще? Проперти обычно простые и тестируются по отдельности 6) Как вы сочетали обычные тесты и PBT? А в чем проблема? Это даже проще чем сочетать интеграционные с юнитами. Потому что время выполнения небольшое [/SRC] ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 15:10 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
забыл ник Код: java 1.
что за магическая константа 20? Это тоже самое что и parameter? непонятно, что делает вообще этот метод. Существуют ои вершины без ребер? Сколько их по дефолту? По идее это валидный кейс для темстирования. В целом генератор смотрится нормально. Немного смущает вероятность того что не будет протестирован пустой граф при определенных условиях, если за 300 попыток ни разу не выпадет 0. Предлагайте ваши пул-реквесты. Но я еще хотел детально почитать по более сложным кейсам когда мы тестируем 2 измерения а не одно как в моем случае. Константа 20 это просто моя небрежность. Торопился. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 16:19 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
забыл ник Используем, но у него достаточно ограниченная область применения, в целом при ООП оно не приносит много пользы. На проектах с чистым ФП, где сначала определяются алгебры операций - там процент полезности выше. Да. Если читать историю происхождения этих фреймворков то все дороги ведут к Haskell и его некой эталонной реализации PBT-тестирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 17:09 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
забыл ник В целом генератор смотрится нормально. Немного смущает вероятность того что не будет протестирован пустой граф при определенных условиях, если за 300 попыток ни разу не выпадет 0. Я не про медлительность. Я про детерминизм. Допустим при одном случайном состоянии Random::seed мы зашли в fail(), и при следующем запуске - все снова в зеленом статусе а мы уже информацию об этом утеряли. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 17:34 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
mayton забыл ник В целом генератор смотрится нормально. Немного смущает вероятность того что не будет протестирован пустой граф при определенных условиях, если за 300 попыток ни разу не выпадет 0. Я не про медлительность. Я про детерминизм. Допустим при одном случайном состоянии Random::seed мы зашли в fail(), и при следующем запуске - все снова в зеленом статусе а мы уже информацию об этом утеряли. Так зачем запускать билд после фейла опять? Это раз. А во-вторых логи то остаются ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 18:03 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
забыл ник mayton пропущено... Я не про медлительность. Я про детерминизм. Допустим при одном случайном состоянии Random::seed мы зашли в fail(), и при следующем запуске - все снова в зеленом статусе а мы уже информацию об этом утеряли. Так зачем запускать билд после фейла опять? Это раз. А во-вторых логи то остаются Да я какраз щас читаю про jqwik. Похоже у него есть файловое хранилище для результатов тестов. И политика реакции на fail. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 18:04 |
|
Тяпничный property-based testing (PBT)
|
|||
---|---|---|---|
#18+
Ага. Вот опция. Код: java 1.
Искусственно сломал формулу. Теперь она на любой результат дает fail. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Теперь после первого сбоя seed фиксируется до тех пор пока не будет исправлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2020, 19:21 |
|
|
start [/forum/topic.php?fid=59&gotonew=1&tid=2120575]: |
0ms |
get settings: |
8ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
27ms |
get topic data: |
2ms |
get first new msg: |
3ms |
get forum data: |
1ms |
get page messages: |
144ms |
get tp. blocked users: |
0ms |
others: | 286ms |
total: | 479ms |
0 / 0 |