Белый ящик
Пандоры
Ти кто ?
2
Увага!
спікер трохи розуміє мову
3
1| Теория
4
Черный ящик
Черный ящик
На слайде черный ящик




5
Черный ящик
Черный ящик
На слайде черный ящик
Но вы его не видите потому что он черный
6
Черный ящик
Черный ящик
На слайде черный ящик
Но вы его не видите, потому что он черный
Но он есть
7
Белый ящик
8
Myers, The Art of Software Testing
The Economics of Testing
To combat the challenges associated with testing
economics, you should establish some strategies before
beginning. Two of the most prevalent strategies include
black-box testing and white-box testing…
Источник: G. Myers, The Art of Software Testing , 2 ed.
9
Myers, The Art of Software Testing
Определение
White-box testing — A type of testing in which you
examine the internal structure of a program.
Источник: G. Myers, The Art of Software Testing , 2 ed.
10
Myers, The Art of Software Testing
Практика
• Statement coverage — покрытие операторов
• Decision coverage — покрытие решение
• Condition coverage — покрытие условий
• Decision-condition coverage — покрытие условий и решений
• Multiple-condition coverage — комбинаторное покрытие условий и решений
Источник: G. Myers, The Art of Software Testing , 2 ed.
11
Myers, The Art of Software Testing
Практика
• Statement coverage — покрытие операторов
• Decision coverage — покрытие решение
• Condition coverage — покрытие условий
• Decision-condition coverage — покрытие условий и решений
• Multiple-condition coverage — комбинаторное покрытие условий и решений
Источник: G. Myers, The Art of Software Testing , 2 ed.
12
Исторический контекст
Myers
1982
13
Исторический контекст
Myers
1982
C++
1983
C
1979
14
Исторический контекст
Myers
1982
C++
1983
C
1979
Browser
1990
HTTP
1992
IPhone
2007
15
Теория
Как надо
Смотрим в код
Понимаем структуру и зависимости
Делаем выводы, задаем вопросы, проектируем тесты
….
PROFIT!
16
Зачем ???
17
Real Life
18
Real Life
Web-сервер
19
Real Life
Security Framework
Web-сервер
20
Real Life
Security Framework
Web-сервер
Web Framework
21
Real Life
Security Framework
Web-сервер
Web Framework
Еще один 

Web Framework
22
Real Life
Security Framework
Web-сервер
Web Framework
Еще один 

Web Framework
ORM Framework
База данных
23
2| Практика
24
Практика
Intro
Готовых рецептов не будет




25
Практика
Intro
Готовых рецептов не будет
Многое зависит от контекста


26
Практика
Intro
Готовых рецептов не будет
Многое зависит от контекста
Влияние на команду - must have
27
3| Easy level
28
Easy level
Инструменты
• code formatting
• style checks
• static code analysis
• unit tests
• mutation testing
29
4| Medium level
30
Medium level
Инструменты
•правильное расположение кода
•правильное оформление кода
•правильные зависимости в коде
31
Что не так ?
32
ArchUnit - Demo
33
Fault Injection Testing
34
35
36
Netflix Chaos Monkey
Simian Army
Gareth Bowles , GTAC 2014
Molly
Peter Alvaro & co. , QCon London
2017
Gremlin
Kolton Andrus, SRECON, 2017
37
Fault Injection Testing
38
Fault Injection Testing
39
Fault Injection Testing
40
Fault Injection Testing
Агенты
• CPU Burn

• Disk Burn

• RAM Burn 

• Latency

• Packet Loss 

• Network
failures

41
Fault Injection Testing with Groovy -
Demo
42
4| Nightmare level
43
Code Coverage & Co.
44
Code Coverage
Инструменты
• Jacoco, Cobertura - Java

• OpenCover - .NET

• Coverage - Python

• SimpleCov - Ruby 

• OpenCppCoverage - C++

• cover , gcov - Go

45
Покрытый код
46
Мертвый код
47
Coverage - Demo
48
KOVЁR (ex. Cover)
49
50
51
Автотесты
Пользователи
Что делать?
AT «+»
AT «-»
Люди «+» Люди «-»
сравнить подумать
писать
автотесты удалять код
52
Code Coverage
Что можно сделать с покрытием ?
• интроспекция для ручного тестирования 

• мерило качества для автотестов

• мертвый код и мертвые фичи

53
Метаинформация
54
Задача о рюкзаке
1
2
3
6
7
8
4
5
9
10
55
Задача о рюкзаке
1
2
3
6
7
8
4
5
9
10
56
Задача о рюкзаке
Ресурс для запуска тестов № 1
Ресурс для запуска тестов № 2
57
Задача о рюкзаке
1 2 3
6 7 8
4 5
9 10
58
Задача о рюкзаке
1
2
3 6
7 84
59
10
59
Задача о рюкзаке
1
2
3 6
7 84
59
10
20%
60
- Ты хочешь запустить 

тесты в 200 потоков…
61
… но ты делаешь это
без уважения …
62
- и тестов у тебя 

… всего 50
63
Парсинг кода
64
Все IDE делают это!
65
Все IDE делают это!
66
Парсинга кода, Abstract Syntax Tree - WAT?
67
Источник: http://bit.ly/2j8gype
BERRIMOR
68
BERRIMOR
Что умеет делать ?
• выкачивать код из репозиториев

• парсить код

• выделяет метаинформацию

• считать тесты 

• получать метаинформацию из тестов (тэги, отключенные тесты)

• знает владельцев тестов 

69
Social Code Analysis
70
Коллективная ментальная модель - С. Архипенков
Данные: Сергей Архипенков, Лекции по управлению
программными проектами, 2009
…реальность, которая заключена в особой специфике
производства программ, по сравнению с любой другой
производственной деятельностью, потому что то, что производят
программисты – нематериально, это коллективные ментальные
модели, записанные на языке программирования.
71
Социальный анализ кода?
Что можно сделать ?
• Mining Repository Data to Debug Software Development Teams , Elmar
Juergens

• Seven Secrets of Maintainable Codebases , Adam Tornhill

• How Flaky Tests in Continuous Integration: Current Practice at Google and
Future Directions, John Micco, Atif Memon

72
Социальный анализ кода
Что можно узнать ?
• кто чинит и кто ломает
• неявные связи в коде
• кому отдать код на ревью
• где чаще всего фиксят
• мертвый код и мертвые фичи
• технический долг
73
Слабая гипотеза о техническом долге
Где у нас закопан технический долг ?
• в баг-трекере есть баги и у них есть ID
• в Git есть коммиты и в комментариях пишут ID таски
• файлы в Git в которых часто чинят - это технический долг
74
Дисциплина - это хорошо!
75
Kafka
Источники
• https://issues.apache.org/jira/projects/KAFKA

• https://github.com/apache/kafka

• Прекрасное в репозитории http://bit.ly/2yfc7lA и http://bit.ly/2wO5ByG

76
5| Итоги
77
Белый ящик - это стратегия!
78
Читай код!
79
Читай код, Карл!!!
80
nikita.makarov@odnoklassniki.ru
@PapaMinos
http://test-failed.blogspot.com/
81
82
Презентация уже выложена
83
https://goo.gl/5KfHfW
Примеры
Medium Level
• ArchUnit Demo - https://goo.gl/kGKF9T 

• Annotation Processing Demo 

• Library - https://goo.gl/GcuLC3

• Test Project - https://goo.gl/eynhCr 

• Fault Injection Testing with Groovy Demo - https://goo.gl/SN4ooJ 

84
Примеры
Nightmare Level
• Code Coverage Demo - https://goo.gl/YJfQQB 

• Social Coding Analysis - https://goo.gl/jd1WPD 

85

Pandoras white box