Вы использовали Quickcheck в реальном [закрытом] проекте

Иметь только символы подстановки - это то же самое, что не иметь критериев WHERE вообще. Так что вам не нужно утверждение WHERE.

... ... сказав, что - я бы порекомендовал вам создать запрос, используя представление конструктора запросов, а затем, как только он вернет записи, которые вы считаете правильными, - затем использовать эту опцию, чтобы отобразить их в представлении SQL. Это даст вам синтаксис.

36
задан Antti Haapala 3 February 2015 в 19:16
поделиться

6 ответов

Да, хорошо. На самом деле не, но я учился при человеке, который первоначально разработал QuickCheck, и он - действительно интересный парень.

Обратный в 2004, мы были вынуждены использовать QuickCheck для тестирования наших программ Haskell, и это была комбинация хороших и плохих. Главным образом плохо, потому что Haskell был немного пугающим самостоятельно, но однако замечательным, когда Вы получили его работа.

John с тех пор усовершенствовал это, которое он записал годы обратно и на самом деле помог Ericssion протестировать их сложные телекоммуникационные аппаратные средства, и он нашел ошибки приблизительно в 20 миллионах строк кода, уменьшающего это всего до трех шагов посредством его подхода. Он - великий докладчик, таким образом, это всегда - радость, слушая его подарок, что он так успевает, но в целом, то, что он сделал с QuickCheck, было плохо мне знакомо. Таким образом, я спросил его, что его интерес был в обеспечении этого на рынок. Он был открыт для идеи, но в то время, когда его бизнес (базирующийся вокруг QuickCheck) был относительно новым и таким образом, были другие области, на которых он сфокусируется. Это теперь 2007. Моя точка, Вы могли извлечь уроки из QuickCheck, даже если Вы привычка заканчиваете тем, что использовали его.

, Но что такое QuickCheck? Это - комбинаторная среда тестирования и интересный путь к тестовым программам. Люди в Microsoft Research создали Pex, который является видом подобных. Pex генерирует тесты автоматически путем исследования IL. Однако John записал бы генератор для возможного входа и тестовых свойств функции. Свойство - что-то, что может легко быть протестировано, и это намного более формально. например, инвертирование списка? Ну, при инвертировании списка, то же самое как разделение списка в двух половинах, инвертирование их каждый индивидуально и затем конкатенация двух обратных половин в обратном порядке.

1,2,3,4 // original
1,2 3,4 // split into A and B
2,1 4,3 // reverse A and B
4,3,2,1 // concat B and A

Это - большое свойство для тестирования с QuickCheck, названным спецификацией, и результат довольно удивителен.

Pex является хорошим, но не столь классным как QuickCheck, Pex упрощает вещи, QuickCheck делает к, но прилагает много усилий записать хорошую спецификацию.

питание QuickCheck состоит в том, что, когда он сталкивается с отказом, он уменьшит вход, который заставил Ваш тест перестать работать к самой маленькой форме. Отъезд Вас с подробным описанием того, что прогрессия состояния заставила Ваш тест приводить к сбою. По сравнению с другими средами тестирования, которые просто попытаются взломать Ваш код способом грубой силы.

Это сделано возможным из-за того, как Вы пишете свою спецификацию тестирования. QuickCheck полагается на псевдослучайность для изобретения входа, и это из-за этого, его способного из отслеживания в обратном порядке, и найдите действительно маленький вход, который не проходит тест.

Это - намного больше работы для записи свойств QuickCheck, но конечный результат лучше тестирует. Как сам John сказал, 70% ошибок пойманы поблочным тестированием, но случается так, что другие 30%, который заставляет Вашу программу отказывать. QuickCheck тестирует те последние 30%.

48
ответ дан John Leidegren 27 November 2019 в 05:36
поделиться

Я сделал реальную проблему Haskell, которая включила дискретное моделирование события. Таким образом, я записал библиотеку DES на основе монады продолжения, наряду с эквивалентами MVars и Каналам. Я должен был проверить, что это работало правильно, таким образом, я записал набор свойств QuickCheck, чтобы продемонстрировать, что, например, два потока параллельных данных, записанных в Канал будут правильно объединены, ничего не отбрасывая.

я также использовал QuickCheck, чтобы зарегистрировать и проверить, что свойства в моем Расположились Наборы и библиотеки Decimal .

, По моему опыту, QuickCheck является иногда большим. Если можно суммировать важное свойство кратким способом, хотя алгоритм, который обеспечивает то свойство, является волосатым, то QuickCheck является огромной победой. С другой стороны, я часто нахожу, что алгоритм эквивалентен свойству, которое я хочу проверить. В этом случае я ищу более простые свойства. Например, предположите, что функциональное "нечто", как предполагается, является нестрого монотонным. Затем можно записать

prop_fooMonotonic x y = (x > y) ==> (foo x >= foo y)
8
ответ дан Paul Johnson 27 November 2019 в 05:36
поделиться

Я использую QuickCheck для большого количества персонального материала. В течение прошлых шести месяцев:

  • Выполнил QuickCheck для тестирования преобразований цвета и дискретных косинусных преобразований в компрессоре изображения.

  • Выполнил QuickCheck для тестирования модуля символьного дифференцирования, который я сделал на скорую руку для некоторой числовой оптимизации.

  • Выполнил QuickCheck для тестирования троичного дерева поиска в стиле Бентли и Sedgewick.

QuickCheck редко встречается весь мои потребности поблочного тестирования, но это - отличный способ начать,---и законы QuickCheck делают хорошую документацию.

7
ответ дан Norman Ramsey 27 November 2019 в 05:36
поделиться

Я использовал его довольно много, главным образом простым способом, в основном для тестирования реализации синтаксического анализатора и протокол.

Однако вот меньше тривиального бита от моего личного опыта: http://www.haskell.org/haskellwiki/QuickCheck_as_a_test_set_generator

5
ответ дан ADEpt 27 November 2019 в 05:36
поделиться

ScalaCheck (QuickCheck для Scala) используется для тестирования Функциональный Java, библиотека, которая, среди прочего, реализует QuickCheck для Java.

5
ответ дан Apocalisp 27 November 2019 в 05:36
поделиться

Я использовал Haskell только в производственной среде для разработки небольших вспомогательных инструментов. В основном потому, что я единственный из известных мне разработчиков, кто читает Haskell. Тем не менее, я широко использовал QuickCheck, и меня очень раздражало, что что-то подобное недоступно в C #. Поэтому я решил попробовать написать его сам . Я тоже посмотрел на Pex, но обнаружил, что методы исследования программ, которые используются для поиска минимального ввода, менее интересны, чем способ, которым это делает QuickCheck.

2
ответ дан 27 November 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: