Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Николай Молчанов «Мутационное тестирование в .NET»

Николай Молчанов «Мутационное тестирование в .NET»

Хорошо ли вы пишете код и тесты для него? Николай расскажет:

- про мутационное тестирование на .NET Core;
- про то, как впасть в депрессию и как из нее выйти;
- как проверить себя как разработчика.

Ceecdee9ee77b63d81100be62b7e1090?s=128

DotNetRu

March 14, 2019
Tweet

Transcript

  1. 1

  2. 2 Молчанов Николай Руководитель ЦК .NET Альфа-Банк http://github.com/kroniak email: me@kroniak.net

  3. 3 FLURL https :// flurl.i o /

  4. 4 FLURL https :// flurl.i o /

  5. 5 FLURL https :// flurl.i o /

  6. 6 Test library https://flurl.io/

  7. 7 Test library https://flurl.io/

  8. 8 Ecwid client library

  9. 9 Ecwid client library

  10. 10

  11. 11 Мутационное тестирование

  12. 12 Мутационное тестирование

  13. 13 Му^ационное тестиро.а#ие

  14. 14 План  тестирование и парадигмы тестирования

  15. 15 План  тестирование и парадигмы тестирования  про принцип

    мутационного тестирования
  16. 16 План  тестирование и парадигмы тестирования  про принцип

    мутационного тестирования  виды мутантов
  17. 17 План  тестирование и парадигмы тестирования  про принцип

    мутационного тестирования  виды мутантов  как применить в .NET
  18. 18 План  тестирование и парадигмы тестирования  про принцип

    мутационного тестирования  виды мутантов  как применить в .NET  когда использовать мутационное тестирование
  19. 19 тестирование

  20. 20 тестирование

  21. 21 тестирование

  22. 22 тестирование

  23. 23 Тестирование это Проверка соответствия требованиям

  24. 24 Тестирование это Проверка соответствия требованиям

  25. 25 Покрытие > 70%

  26. 26 Oracle > 40 000 tests > 5 hour testing

  27. 27 Oracle

  28. 28 Oracle

  29. 29 Как протестировать тесты?

  30. 30 Как протестировать тесты  code-review кода тестов

  31. 31 Как протестировать тесты  code-review кода тестов  code-coverage

  32. 32 Как протестировать тесты  code-review кода тестов  code-coverage

     test after each build
  33. 33 Как протестировать тесты  code-review кода тестов  code-coverage

     test after each build  внешний аудит
  34. 34 Как протестировать тесты  code-review кода тестов  code-coverage

     test after each build  внешний аудит  рандомный набор данных
  35. 35 Как протестировать тесты  code-review кода тестов  code-coverage

     test after each build  внешний аудит  рандомный набор данных
  36. 36 Как протестировать тесты

  37. 37 Как протестировать тесты =>

  38. 38 Парадигмы и виды тестирования

  39. 39 ВИды тестирования  функциональное тестирование

  40. 40 виды тестирования  функциональное тестирование  unit-тестирование

  41. 41 виды тестирования  функциональное тестирование  unit-тестирование  автотестирование

    интеграционное
  42. 42 виды тестирования  функциональное тестирование  unit-тестирование  автотестирование

    интеграционное  автотестирование UI и e2e
  43. 43 Парадигмы тестирования

  44. 44 Парадигмы тестирования

  45. 45 Парадигмы тестирования MDD

  46. 46 Парадигмы тестирования MDD

  47. 47 ” MDD (majordepressive disorder) – основное депрессивное расстройство личности

    ” — Mental and behavioral disorders (F00–F99 & 290–319)
  48. 48

  49. 49 ” Мутационное тестирование - это преднамеренное внесение в код

    специальных изменений - мутаций с целью проверки программного обеспечения ”
  50. 50 Сопротивление 2 способа

  51. 51 Сопротивление 2 способа  система типов

  52. 52 Сопротивление 2 способа  система типов  система тестирования

  53. 53 JavaScript?

  54. 54 выживание

  55. 55 выживание

  56. 56 выживание

  57. 57 выживание выживший мутант +1

  58. 58 выживание

  59. 59 выживание

  60. 60 выживание

  61. 61 выживание мертвый мутант +1

  62. 62 Пример 1

  63. 63 Пример 1

  64. 64 Пример 1

  65. 65 Пример 1 3 условия: 1. Покрытие мутанта тестом

  66. 66 Пример 1 3 условия: 1. Покрытие мутанта тестом 2.

    Полные входные данные
  67. 67 Пример 1 3 условия: 1. Покрытие мутанта тестом 2.

    Полные входные данные 3. Выходные параметры проверены
  68. 68 Пример 1 3 условия: 1. Покрытие мутанта тестом 2.

    Полные входные данные 3. Выходные параметры проверены
  69. 69 виды мутаций

  70. 70 виды мутаций ОПП мутации

  71. 71 виды мутаций ОПП мутации 1. Мутации модификаторов доступа

  72. 72 виды мутаций ОПП мутации 1. Мутации модификаторов доступа 2.

    Мутации наследования
  73. 73 виды мутаций ОПП мутации 1. Мутации модификаторов доступа 2.

    Мутации наследования 3. Полиморфные мутации
  74. 74 виды мутаций ОПП мутации 1. Мутации модификаторов доступа 2.

    Мутации наследования 3. Полиморфные мутации 4. Мутации перегрузки методов и их аргументов
  75. 75 виды мутаций ОПП мутации 1. Мутации модификаторов доступа 2.

    Мутации наследования 3. Полиморфные мутации 4. Мутации перегрузки методов и их аргументов 5. Общие мутации
  76. 76 виды мутаций Общие мутации 1. Арифметические операции -_____+

  77. 77 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения >_____=> >_____<
  78. 78 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения 3. Мутации логических операторов &&_____||
  79. 79 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения 3. Мутации логических операторов 4. Мутации bool типа true_____false
  80. 80 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения 3. Мутации логических операторов 4. Мутации bool типа 5. Унарные операции ++i _____ i++ ++i ____ --i
  81. 81 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения 3. Мутации логических операторов 4. Мутации bool типа 5. Унарные операции 6. Строковые мутации “”_____“asd” “asd”___
  82. 82 виды мутаций Общие мутации 1. Арифметические операции 2. Мутации

    сравнения 3. Мутации логических операторов 4. Мутации bool типа 5. Унарные операции 6. Строковые мутации 7. Мутации массивов и списков [0,1,2]_____[0,0,2]
  83. 83 виды мутаций LINQ мутации Last_____Fisrt Any_____All First_____Single FirstOrDefault_____SingleOrDefault

  84. 84 Статистика Flurl 9000 строк 85% 300 тестов 43 сек

    363 мутанта 30 минут 2 критичных бага Ecwid 5000 строк 90% 200 тестов 16 сек 300 мутантов 15 минут 4 критичных бага
  85. 85 с т а т и с т и к

    а в ы ж и в ш и х м у т а ц и й эквивалентные тесты мертвый код 40% 50% 10%
  86. 86 примеры мутаций

  87. 87 строковые мутации

  88. 88 Пример 2

  89. 89 Пример 2

  90. 90 Пример 2

  91. 91 Пример 2 Что забыли?

  92. 92 Пример 2

  93. 93 Пример 2 мутирует в “”

  94. 94 Пример 2

  95. 95 Пример 3

  96. 96 мутации сравнения

  97. 97 Пример 4

  98. 98 Пример 5 Входные данные для теста были [-1, 101]

  99. 99 Пример 5 limit < 100 limit < 0 Входные

    данные для теста были [-1, 101]
  100. 100 Пример 5 limit < 100 limit < 0 Входные

    данные для теста были [-1, 101] + 0 + 12
  101. 101 Пример 5 Входные данные для теста были [-1, 0,

    12, 101]
  102. 102 Пример 5 limit >= 100 Входные данные для теста

    были [-1, 0, 12, 101]
  103. 103 Пример 5 limit >= 100 Входные данные для теста

    были [-1, 0, 12, 101] + 99
  104. 104 Пример 5 Входные данные для теста были [-1, 0,

    12, 99, 101]
  105. 105 Пример 6

  106. 106 Пример 6 >= 0

  107. 107 Пример 6

  108. 108 Пример 7

  109. 109 Пример 7

  110. 110 Пример 7 LastOrDefault()

  111. 111 Пример 7

  112. 112 эквивалентная мутация

  113. 113 Пример 8

  114. 114 Пример 9

  115. 115 Пример 9 мутирует в ==

  116. 116 Пример 9

  117. 117 Пример 9

  118. 118 Пример 9

  119. 119 Пример 9 мутирует в SingleOrDefault

  120. 120 Пример 9

  121. 121 эквивалентная мутация >> рефакторинг

  122. 122

  123. 123

  124. 124 stryker Особенности 1. Покрыт тестами, в том числе мутационными

  125. 125 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore
  126. 126 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore 3. Только общие мутации и LINQ мутации
  127. 127 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore 3. Только общие мутации и LINQ мутации 4. Поддержка конфигурации
  128. 128 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore 3. Только общие мутации и LINQ мутации 4. Поддержка конфигурации 5. Отключение части мутаторов
  129. 129 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore 3. Только общие мутации и LINQ мутации 4. Поддержка конфигурации 5. Отключение части мутаторов 6. Ограничение на проекты или на файлы
  130. 130 stryker Особенности 1. Покрыт тестами, в том числе мутационными

    2. Работает сейчас только для .NET Сore 3. Только общие мутации и LINQ мутации 4. Поддержка конфигурации 5. Отключение части мутаторов 6. Ограничение на проекты или на файлы 7. Флаг красного билда
  131. 131 stryker 1.

  132. 132 stryker 1. 2.

  133. 133 stryker 1. 2. 3. Microsoft.CodeAnalysis.Csharp.SharpSyntaxTree

  134. 134 stryker 1. 2. 3. Microsoft.CodeAnalysis.Csharp.SharpSyntaxTree 4.

  135. 135 stryker 1. 2. 3. 4. 5. Mutate recursion

  136. 136 stryker 1. 2. 3. 4. 5. 6. CSharpCompilation

  137. 137 stryker 1. 2. 3. 4. 5. 6. 7. Инъекция

    в код
  138. 138 stryker 1. 2. 3. 4. 5. 6. 7. 8.

    TPL n-threads
  139. 139 stryker 1. 2. 3. 4. 5. 6. 7. 8.

    9. Долгожданная награда
  140. 140 demo

  141. 141 критерии применимости

  142. 142 критерии применимости 1. Покрытие кода тестами >70%

  143. 143 критерии применимости 1. Покрытие кода тестами >70% 2. Скорость

    работы тестов
  144. 144 критерии применимости 1. Покрытие кода тестами >70% 2. Скорость

    работы тестов 3. Чистые маленькие методы
  145. 145 критерии применимости 1. Покрытие кода тестами >70% 2. Скорость

    работы тестов 3. Чистые маленькие методы 4. .NET Core
  146. 146 критерии применимости 1. Покрытие кода тестами >70% 2. Скорость

    работы тестов 3. Чистые маленькие методы 4. .NET Core 5. Сила духа и авантюризм
  147. 147 Pipeline?

  148. 148 Выводы

  149. 149 Выводы MDD классно подходит при работе с парадигмой TDD

    при написании новых тестов и однократного аудита текущей системы
  150. 150 Выводы для поиска неочевидных проблемных мест и оптимизации юнит

    тестов.
  151. 151 Выводы MDD подходит для аудита кода внешних разработчиков

  152. 152 Выводы MDD подходит для проверки себя и внутренних разработчиков

  153. 153 Выводы MDD подходит для погружения новичков в проект

  154. 154 кто готов применить?

  155. 155

  156. 156