Property-based testing
-
Upload
peter-gromov -
Category
Software
-
view
226 -
download
0
Transcript of Property-based testing
http://rules.ssw.com.au/Management/RulesToSuccessfulProjects/Pages/BugDefinition.aspx
FileIndex
FileIndex ≠
Text on disk
Text in memory
AST in memory
Text on disk
Text in memory
AST in memory
Any thread
GC
Encoding settings
Language levelsettings
Property-Based TestingQuickCheck (Haskell): Claessen & Hughes, 2000
ScalaCheck, ClojureCheck, test.check, Hypothesis (Python), FsCheck, rubycheck, QCheck/ML...
ДействияLoad text/ASTModify file/text/ASTSaveForce reindexForce GCChange settingsи другие
Запускать в случайном порядке
Но есть проблема...
picture source
source
Свойства из тестовassertEquals("Masha loves Vasya", translate("Маша любит Васю"))
forAll(accNouns) { noun: String => translate("Маша любит " + noun) == "Masha loves " + translate(noun)}
Свойства из списка
1. Идемпотентность2. Инкрементальность3. Обратимость4. Эквивалентность5. Потокобезопасность6. Устойчивость
4. Эквивалентность
Differential testingf(x)=g(x)
data structures, compilers (Yang et al, 2011)
5. Потокобезопасность
ScalaCheck Commands API
Dropbox (Pierce et al, 2014)
6. Устойчивость
f(x) ≠ ⊥
индексы, Riak (Hughes, 2014)
Мои предложения
1. google “QuickCheck language”2. Придумать и написать свойство3. Придумать и написать генератор
a. Подумать о минимизации4. Запустить5. Если упало, добавить тест, починить и
goto 46. Добавить в continuous integration