SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Проблема наблюдаемости
Software Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) NP 2014 110 / 320
Quiz
Марат Ахин (СПбГПУ) NP 2014 111 / 320
Recap
Марат Ахин (СПбГПУ) NP 2014 112 / 320
Проблемы тестирования Проблемы тестирования
Проблемы тестирования
What’s up, Doc? (с)
Проблема тестовых входных данных
Проблема наблюдаемости
Проблема «останова»
Проблема тестового оракула
Марат Ахин (СПбГПУ) NP 2014 113 / 320
Проблема наблюдаемости
Содержание
1 Проблема наблюдаемости
Обеспечение распространения сбоя
Assertions
Журналирование
Марат Ахин (СПбГПУ) NP 2014 114 / 320
Проблема наблюдаемости Обеспечение распространения сбоя
Обеспечение распространения сбоя
Какими способами можно управлять выполнением кода?
Изменением входных данных
Изменением самого исходного кода
Необходимо обнаружить сбой и распространить его, сделав
наблюдаемым снаружи (Propagation)
Марат Ахин (СПбГПУ) NP 2014 115 / 320
Проблема наблюдаемости Обеспечение распространения сбоя
Обеспечение распространения сбоя
Марат Ахин (СПбГПУ) NP 2014 116 / 320
Проблема наблюдаемости Assertions
Assertions
Основной способ обеспечения наблюдаемости – assertions
1 private void checkInvariants () {
2 assert elements[tail] == null;
3 assert head == tail
4 ? elements[head] == null
5 : (elements[head] != null &&
6 elements [( tail - 1) & (elements.length - 1)] != null );
7 assert elements [( head - 1) & (elements.length - 1)] == null;
8 }
Марат Ахин (СПбГПУ) NP 2014 117 / 320
Проблема наблюдаемости Assertions
Assertions
Что такое assertion?
Формула в логике первого порядка
Проверяется на истинность во время выполнения программы
Также может проверяться на истинность статически
Допускает возможность отключения проверки истинности
Марат Ахин (СПбГПУ) NP 2014 118 / 320
Проблема наблюдаемости Assertions
Что дает использование assertions?
Проверка корректности внутреннего состояния
Внутреннее состояние обычно недоступно снаружи (полностью
или частично)
При изменении состояния хочется проверить, что оно остается
корректным
Марат Ахин (СПбГПУ) NP 2014 119 / 320
Проблема наблюдаемости Assertions
Что дает использование assertions?
Неудача происходит ближе к причине ее возникновения
Чем больше задержка перед обнаружением неудачи, тем сложнее
найти ее исходную причину
Assertions позволяют найти неудачу практически в любой точке
программы
Марат Ахин (СПбГПУ) NP 2014 120 / 320
Проблема наблюдаемости Assertions
Что дает использование assertions?
Явное документирование пред- и пост-условий
В общем случае программист ничего не знает о контракте
используемой функции
Использование assertions позволяет в явном виде описать
внешний контракт функции
Марат Ахин (СПбГПУ) NP 2014 121 / 320
Проблема наблюдаемости Assertions
Assertions
Марат Ахин (СПбГПУ) NP 2014 122 / 320
Проблема наблюдаемости Assertions
Какие проблемы связаны с assertions?
Ошибки в assertions
Побочные эффекты в assertions
Неправильное логическое условие срабатывания
Марат Ахин (СПбГПУ) NP 2014 123 / 320
Проблема наблюдаемости Assertions
Какие проблемы связаны с assertions?
Влияние на производительность
Проверка assertions занимает время
Чем сложнее assertion, тем больше он замедляет работу
программы
Марат Ахин (СПбГПУ) NP 2014 124 / 320
Проблема наблюдаемости Assertions
Какие проблемы связаны с assertions?
Эффект «вышибалы»
Сработавший assertion превращает любую ошибку в неудачу
Это полностью останавливает возможность дальнейшего
тестирования
Марат Ахин (СПбГПУ) NP 2014 125 / 320
Проблема наблюдаемости Assertions
Какие проблемы связаны с assertions?
Сложность проверки определенных условий
Некоторые просто формулируемые условия крайне сложно
проверить на практике
Их реализация в виде assertion является крайне затруднительной
Марат Ахин (СПбГПУ) NP 2014 126 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?
Марат Ахин (СПбГПУ) NP 2014 127 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?
1 int* ptr = malloc(sizeof(int) * 10);
2 assert(ptr);
Адекватный assertion в правильном месте
Марат Ахин (СПбГПУ) NP 2014 128 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?
1 int* ptr = malloc(sizeof(int) * 10);
2 assert(ptr);
Замена обработки ошибок на assertion
Марат Ахин (СПбГПУ) NP 2014 129 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?
Марат Ахин (СПбГПУ) NP 2014 130 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?
Microsoft Office ≈ 1%
Proprietary software ≈ 3%
Open source software ≈ 5%
Eiffel software ≈ 7%
Сейчас assertions используются еще более широко
Марат Ахин (СПбГПУ) NP 2014 131 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?1
LLVM
≈ 500,000 SLOC
≈ 7000 assertions
> 400 ошибок, относящихся к assertions
1
http://blog.regehr.org/
Марат Ахин (СПбГПУ) NP 2014 132 / 320
Проблема наблюдаемости Assertions
Работают ли assertions?1
GCC
≈ 1,000,000 SLOC
≈ 9500 assertions
> 200 ошибок, относящихся к assertions
1
http://blog.regehr.org/
Марат Ахин (СПбГПУ) NP 2014 132 / 320
Проблема наблюдаемости Журналирование
Журналирование
Марат Ахин (СПбГПУ) NP 2014 133 / 320
Проблема наблюдаемости Журналирование
Журналирование
Журналирование (logging)
Запись хода выполнения программы в том или ином виде
В зависимости от необходимости журнал может быть более или
менее детализированным
По журналу выполнения при необходимости возможно
восстановить причину возникшей ошибки
Марат Ахин (СПбГПУ) NP 2014 134 / 320
Проблема наблюдаемости Журналирование
Журналирование
Журналирование для
пользователя
Высокоуровневые
сообщения
Как можно меньше
«мусора»
Чем проще и понятнее
формат сообщений, тем
лучше
Журналирование для
программиста
Низкоуровневые
сообщения
Допустим любой шум
Никаких ограничений на
формат сообщений
Марат Ахин (СПбГПУ) NP 2014 135 / 320
Проблема наблюдаемости Журналирование
Как вести журнал?
1 Result :: Ptr processBatchJob (Job :: Ptr job) {
2 // do the heavy lifting ...
3 }
Как записать ход выполнения программы?
Марат Ахин (СПбГПУ) NP 2014 136 / 320
Проблема наблюдаемости Журналирование
Как вести журнал?
1 Result :: Ptr ThreadedProcessor :: processBatchJob (Job:: Ptr job) {
2 log () << "Start of: " << job << endl;
3 // do the heavy lifting ...
4 log () << "End of: " << job << endl;
5 }
Ручная вставка журналирующих вызовов
Марат Ахин (СПбГПУ) NP 2014 137 / 320
Проблема наблюдаемости Журналирование
Как вести журнал?
1 aspect ProcessTracer {
2 advice call("% %Processor :: process %(%)") : before () {
3 log () << "Start of: " << * JoinedPoint ::arg <0 >() << endl;
4 }
5 advice call("% %Processor :: process %(%)") : after () {
6 log () << "End of: " << *JoinedPoint ::arg <0 >() << endl;
7 }
8 };
Журналирующие аспекты / интерсепторы
Марат Ахин (СПбГПУ) NP 2014 138 / 320
Проблема наблюдаемости Журналирование
Как вести журнал?
Logging as a Service
Марат Ахин (СПбГПУ) NP 2014 139 / 320
Проблема наблюдаемости Журналирование
Основная проблема журналирования
INFO [http -thread -pool -8080(5)] Received token: e6749451
TRACE [http -thread -pool -8080(5)] Calling: AuthStorageBean . getAuthData
TRACE [http -thread -pool -8080(5)] Called: AuthStorageBean .getAuthData -> 2.0708E-5
INFO [http -thread -pool -8080(5)] Authentication data found: AuthData { authToken:e6749451
userId :1 firstName: lastName:Admin patrName: role:ru.korus.tmis.core.entity.model.
Role[id=1] spec: }
TRACE [http -thread -pool -8080(5)] Calling: AuthStorageBean . getAuthDateTime
TRACE [http -thread -pool -8080(5)] Called: AuthStorageBean . getAuthDateTime -> 1.9825E-5
INFO [http -thread -pool -8080(5)] Token is valid
TRACE [http -thread -pool -8080(5)] attempting to get session; create = false; session is
null = true; session has id = false
TRACE [http -thread -pool -8080(5)] Authentication attempt received for token [ru.korus.tmis
.core.auth. TmisShiroToken@37bd2b6 ]
DEBUG [http -thread -pool -8080(5)] Performing credentials equality check for
tokenCredentials of type [java.lang.String and accountCredentials of type [java.lang
.String]
DEBUG [http -thread -pool -8080(5)] Both credentials arguments can be easily converted to
byte arrays. Performing array equals comparison
DEBUG [http -thread -pool -8080(5)] Authentication successful for token [ru.korus.tmis.core.
auth. TmisShiroToken@37bd2b6 ]. Returned account [(admin ,ru.korus.tmis.core.entity.
model.Role[id =1])]
DEBUG [http -thread -pool -8080(5)] No SecurityManager available in subject context map.
Falling back to SecurityUtils . getSecurityManager () lookup.
Too much data!
Марат Ахин (СПбГПУ) NP 2014 140 / 320
Проблема наблюдаемости Журналирование
Основная проблема журналирования
Чем больше мы хотим узнать о ходе выполнения программы, тем
больше мы должны журналировать
Чем больше мы журналируем, тем сложнее разобраться в журнале
Чем сложнее разобраться в журнале, тем меньше мы знаем о ходе
выполнения программы
Марат Ахин (СПбГПУ) NP 2014 141 / 320
Проблема наблюдаемости Журналирование
Ограничение размера журнала
Необходимо ограничивать размер записываемых данных
Марат Ахин (СПбГПУ) NP 2014 142 / 320
Проблема наблюдаемости Журналирование
Уровни журналирования
Сообщения пишутся в журнал с определенным уровнем
В дальнейшем возможно фильтровать сообщения по уровням
Error / Warning / Info / Debug / Trace
Марат Ахин (СПбГПУ) NP 2014 143 / 320
Проблема наблюдаемости Журналирование
Домены журналирования
Домены ортогональны уровням журналирования
В зависимости от типа сообщения пишутся в разные домены
Database / Network / UI / Configuration / ...
Марат Ахин (СПбГПУ) NP 2014 144 / 320
Проблема наблюдаемости Журналирование
Стохастическое журналирование
В случае, если какие-то события встречаются очень часто,
достаточно записывать лишь их часть
1 if (_ok == true) {
2 _logger.log( Level.WARNING , "Server seen down: " + _addr , e );
3 } else if (Math.random () < 0.1) {
4 _logger.log( Level.WARNING , "Server seen down: " + _addr );
5 }
Марат Ахин (СПбГПУ) NP 2014 145 / 320
Проблема наблюдаемости Журналирование
Сессионное журналирование
Часто работа ПО разбита на набор слабо связанных сессий
Каждая сессия может журналироваться независимо от других
1 try {
2 // logging ...
3 } catch (Exception ex) {
4 ctx.logging. dumpCurrentSession ();
5 throw;
6 } finally {
7 ctx.logging.reset ();
8 }
Марат Ахин (СПбГПУ) NP 2014 146 / 320
W.I.L.T. What I Learned Today?
W.I.L.T.
Марат Ахин (СПбГПУ) NP 2014 147 / 320

Weitere ähnliche Inhalte

Was ist angesagt?

КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияIosif Itkin
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияSQALab
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019GoQA
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Ontico
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDДмитрий Овечкин
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Vyacheslav Lyalkin
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММITMO University
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...ScrumTrek
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
Дефекты при тестировании ПО
Дефекты при тестировании ПОДефекты при тестировании ПО
Дефекты при тестировании ПОSergey Chuburov
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Javametaform
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQAFest
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиZheka Kozlov
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 

Was ist angesagt? (20)

КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
Сложности performance-тестирования / Андрей Акиньшин (JetBrains)
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDD
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
быстрое тестирование
быстрое тестированиебыстрое тестирование
быстрое тестирование
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
Дефекты при тестировании ПО
Дефекты при тестировании ПОДефекты при тестировании ПО
Дефекты при тестировании ПО
 
обработка исключений в Java
обработка исключений в Javaобработка исключений в Java
обработка исключений в Java
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненавистиQA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 

Ähnlich wie Проблема наблюдаемости

ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)Ontico
 
ITSF 2014 ICS Security
ITSF 2014 ICS SecurityITSF 2014 ICS Security
ITSF 2014 ICS SecurityIlya Karpov
 
Методы обхода Web Application Firewall
Методы обхода Web Application FirewallМетоды обхода Web Application Firewall
Методы обхода Web Application FirewallDmitry Evteev
 
Лекция 1 введение в тестирование ПО, основные понятия и принципы
Лекция 1 введение в тестирование ПО, основные понятия и принципыЛекция 1 введение в тестирование ПО, основные понятия и принципы
Лекция 1 введение в тестирование ПО, основные понятия и принципыSergey Chuburov
 
Безопаность SAP-систем
Безопаность SAP-системБезопаность SAP-систем
Безопаность SAP-системAlexey Kachalin
 
Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Yandex
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОSQALab
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Ontico
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыSQALab
 
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"Андрей Кравец Тема: "Пришло время быть реактивным, или..?"
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"Ciklum Minsk
 
Time to be reactive or not
Time to be reactive or notTime to be reactive or not
Time to be reactive or notAndrii Kravets
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...SQALab
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел СташевскийDevDay
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахIgor Khrol
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоSQALab
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricae-Legion
 
OpenSource инструменты. Тестируем Web-приложения
OpenSource инструменты. Тестируем Web-приложенияOpenSource инструменты. Тестируем Web-приложения
OpenSource инструменты. Тестируем Web-приложенияlugnsk
 
Внедрение тестирования в Scrum
Внедрение тестирования в ScrumВнедрение тестирования в Scrum
Внедрение тестирования в ScrumDenis Petelin
 
Внедрение тестирования в Scrum
Внедрение тестирования в ScrumВнедрение тестирования в Scrum
Внедрение тестирования в ScrumDenis Petelin
 

Ähnlich wie Проблема наблюдаемости (20)

ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам / Андрей Половов (Флант)
 
ITSF 2014 ICS Security
ITSF 2014 ICS SecurityITSF 2014 ICS Security
ITSF 2014 ICS Security
 
Методы обхода Web Application Firewall
Методы обхода Web Application FirewallМетоды обхода Web Application Firewall
Методы обхода Web Application Firewall
 
Лекция 1 введение в тестирование ПО, основные понятия и принципы
Лекция 1 введение в тестирование ПО, основные понятия и принципыЛекция 1 введение в тестирование ПО, основные понятия и принципы
Лекция 1 введение в тестирование ПО, основные понятия и принципы
 
Безопаность SAP-систем
Безопаность SAP-системБезопаность SAP-систем
Безопаность SAP-систем
 
Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?
 
Qt tool evaluation
Qt tool evaluationQt tool evaluation
Qt tool evaluation
 
Автоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПОАвтоматизация тестирования встроенного ПО
Автоматизация тестирования встроенного ПО
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
 
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"Андрей Кравец Тема: "Пришло время быть реактивным, или..?"
Андрей Кравец Тема: "Пришло время быть реактивным, или..?"
 
Time to be reactive or not
Time to be reactive or notTime to be reactive or not
Time to be reactive or not
 
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
Threads & LinkedClone. Как сократить время на развертывание продукта и подгот...
 
«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский«Тестируем веб приложения», Павел Сташевский
«Тестируем веб приложения», Павел Сташевский
 
Автоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектахАвтоматизация тестирования на крупных проектах
Автоматизация тестирования на крупных проектах
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
 
MBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetricaMBLT16: Alexander Lukin, AppMetrica
MBLT16: Alexander Lukin, AppMetrica
 
OpenSource инструменты. Тестируем Web-приложения
OpenSource инструменты. Тестируем Web-приложенияOpenSource инструменты. Тестируем Web-приложения
OpenSource инструменты. Тестируем Web-приложения
 
Внедрение тестирования в Scrum
Внедрение тестирования в ScrumВнедрение тестирования в Scrum
Внедрение тестирования в Scrum
 
Внедрение тестирования в Scrum
Внедрение тестирования в ScrumВнедрение тестирования в Scrum
Внедрение тестирования в Scrum
 

Проблема наблюдаемости

  • 1. Проблема наблюдаемости Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) NP 2014 110 / 320
  • 4. Проблемы тестирования Проблемы тестирования Проблемы тестирования What’s up, Doc? (с) Проблема тестовых входных данных Проблема наблюдаемости Проблема «останова» Проблема тестового оракула Марат Ахин (СПбГПУ) NP 2014 113 / 320
  • 5. Проблема наблюдаемости Содержание 1 Проблема наблюдаемости Обеспечение распространения сбоя Assertions Журналирование Марат Ахин (СПбГПУ) NP 2014 114 / 320
  • 6. Проблема наблюдаемости Обеспечение распространения сбоя Обеспечение распространения сбоя Какими способами можно управлять выполнением кода? Изменением входных данных Изменением самого исходного кода Необходимо обнаружить сбой и распространить его, сделав наблюдаемым снаружи (Propagation) Марат Ахин (СПбГПУ) NP 2014 115 / 320
  • 7. Проблема наблюдаемости Обеспечение распространения сбоя Обеспечение распространения сбоя Марат Ахин (СПбГПУ) NP 2014 116 / 320
  • 8. Проблема наблюдаемости Assertions Assertions Основной способ обеспечения наблюдаемости – assertions 1 private void checkInvariants () { 2 assert elements[tail] == null; 3 assert head == tail 4 ? elements[head] == null 5 : (elements[head] != null && 6 elements [( tail - 1) & (elements.length - 1)] != null ); 7 assert elements [( head - 1) & (elements.length - 1)] == null; 8 } Марат Ахин (СПбГПУ) NP 2014 117 / 320
  • 9. Проблема наблюдаемости Assertions Assertions Что такое assertion? Формула в логике первого порядка Проверяется на истинность во время выполнения программы Также может проверяться на истинность статически Допускает возможность отключения проверки истинности Марат Ахин (СПбГПУ) NP 2014 118 / 320
  • 10. Проблема наблюдаемости Assertions Что дает использование assertions? Проверка корректности внутреннего состояния Внутреннее состояние обычно недоступно снаружи (полностью или частично) При изменении состояния хочется проверить, что оно остается корректным Марат Ахин (СПбГПУ) NP 2014 119 / 320
  • 11. Проблема наблюдаемости Assertions Что дает использование assertions? Неудача происходит ближе к причине ее возникновения Чем больше задержка перед обнаружением неудачи, тем сложнее найти ее исходную причину Assertions позволяют найти неудачу практически в любой точке программы Марат Ахин (СПбГПУ) NP 2014 120 / 320
  • 12. Проблема наблюдаемости Assertions Что дает использование assertions? Явное документирование пред- и пост-условий В общем случае программист ничего не знает о контракте используемой функции Использование assertions позволяет в явном виде описать внешний контракт функции Марат Ахин (СПбГПУ) NP 2014 121 / 320
  • 14. Проблема наблюдаемости Assertions Какие проблемы связаны с assertions? Ошибки в assertions Побочные эффекты в assertions Неправильное логическое условие срабатывания Марат Ахин (СПбГПУ) NP 2014 123 / 320
  • 15. Проблема наблюдаемости Assertions Какие проблемы связаны с assertions? Влияние на производительность Проверка assertions занимает время Чем сложнее assertion, тем больше он замедляет работу программы Марат Ахин (СПбГПУ) NP 2014 124 / 320
  • 16. Проблема наблюдаемости Assertions Какие проблемы связаны с assertions? Эффект «вышибалы» Сработавший assertion превращает любую ошибку в неудачу Это полностью останавливает возможность дальнейшего тестирования Марат Ахин (СПбГПУ) NP 2014 125 / 320
  • 17. Проблема наблюдаемости Assertions Какие проблемы связаны с assertions? Сложность проверки определенных условий Некоторые просто формулируемые условия крайне сложно проверить на практике Их реализация в виде assertion является крайне затруднительной Марат Ахин (СПбГПУ) NP 2014 126 / 320
  • 18. Проблема наблюдаемости Assertions Работают ли assertions? Марат Ахин (СПбГПУ) NP 2014 127 / 320
  • 19. Проблема наблюдаемости Assertions Работают ли assertions? 1 int* ptr = malloc(sizeof(int) * 10); 2 assert(ptr); Адекватный assertion в правильном месте Марат Ахин (СПбГПУ) NP 2014 128 / 320
  • 20. Проблема наблюдаемости Assertions Работают ли assertions? 1 int* ptr = malloc(sizeof(int) * 10); 2 assert(ptr); Замена обработки ошибок на assertion Марат Ахин (СПбГПУ) NP 2014 129 / 320
  • 21. Проблема наблюдаемости Assertions Работают ли assertions? Марат Ахин (СПбГПУ) NP 2014 130 / 320
  • 22. Проблема наблюдаемости Assertions Работают ли assertions? Microsoft Office ≈ 1% Proprietary software ≈ 3% Open source software ≈ 5% Eiffel software ≈ 7% Сейчас assertions используются еще более широко Марат Ахин (СПбГПУ) NP 2014 131 / 320
  • 23. Проблема наблюдаемости Assertions Работают ли assertions?1 LLVM ≈ 500,000 SLOC ≈ 7000 assertions > 400 ошибок, относящихся к assertions 1 http://blog.regehr.org/ Марат Ахин (СПбГПУ) NP 2014 132 / 320
  • 24. Проблема наблюдаемости Assertions Работают ли assertions?1 GCC ≈ 1,000,000 SLOC ≈ 9500 assertions > 200 ошибок, относящихся к assertions 1 http://blog.regehr.org/ Марат Ахин (СПбГПУ) NP 2014 132 / 320
  • 26. Проблема наблюдаемости Журналирование Журналирование Журналирование (logging) Запись хода выполнения программы в том или ином виде В зависимости от необходимости журнал может быть более или менее детализированным По журналу выполнения при необходимости возможно восстановить причину возникшей ошибки Марат Ахин (СПбГПУ) NP 2014 134 / 320
  • 27. Проблема наблюдаемости Журналирование Журналирование Журналирование для пользователя Высокоуровневые сообщения Как можно меньше «мусора» Чем проще и понятнее формат сообщений, тем лучше Журналирование для программиста Низкоуровневые сообщения Допустим любой шум Никаких ограничений на формат сообщений Марат Ахин (СПбГПУ) NP 2014 135 / 320
  • 28. Проблема наблюдаемости Журналирование Как вести журнал? 1 Result :: Ptr processBatchJob (Job :: Ptr job) { 2 // do the heavy lifting ... 3 } Как записать ход выполнения программы? Марат Ахин (СПбГПУ) NP 2014 136 / 320
  • 29. Проблема наблюдаемости Журналирование Как вести журнал? 1 Result :: Ptr ThreadedProcessor :: processBatchJob (Job:: Ptr job) { 2 log () << "Start of: " << job << endl; 3 // do the heavy lifting ... 4 log () << "End of: " << job << endl; 5 } Ручная вставка журналирующих вызовов Марат Ахин (СПбГПУ) NP 2014 137 / 320
  • 30. Проблема наблюдаемости Журналирование Как вести журнал? 1 aspect ProcessTracer { 2 advice call("% %Processor :: process %(%)") : before () { 3 log () << "Start of: " << * JoinedPoint ::arg <0 >() << endl; 4 } 5 advice call("% %Processor :: process %(%)") : after () { 6 log () << "End of: " << *JoinedPoint ::arg <0 >() << endl; 7 } 8 }; Журналирующие аспекты / интерсепторы Марат Ахин (СПбГПУ) NP 2014 138 / 320
  • 31. Проблема наблюдаемости Журналирование Как вести журнал? Logging as a Service Марат Ахин (СПбГПУ) NP 2014 139 / 320
  • 32. Проблема наблюдаемости Журналирование Основная проблема журналирования INFO [http -thread -pool -8080(5)] Received token: e6749451 TRACE [http -thread -pool -8080(5)] Calling: AuthStorageBean . getAuthData TRACE [http -thread -pool -8080(5)] Called: AuthStorageBean .getAuthData -> 2.0708E-5 INFO [http -thread -pool -8080(5)] Authentication data found: AuthData { authToken:e6749451 userId :1 firstName: lastName:Admin patrName: role:ru.korus.tmis.core.entity.model. Role[id=1] spec: } TRACE [http -thread -pool -8080(5)] Calling: AuthStorageBean . getAuthDateTime TRACE [http -thread -pool -8080(5)] Called: AuthStorageBean . getAuthDateTime -> 1.9825E-5 INFO [http -thread -pool -8080(5)] Token is valid TRACE [http -thread -pool -8080(5)] attempting to get session; create = false; session is null = true; session has id = false TRACE [http -thread -pool -8080(5)] Authentication attempt received for token [ru.korus.tmis .core.auth. TmisShiroToken@37bd2b6 ] DEBUG [http -thread -pool -8080(5)] Performing credentials equality check for tokenCredentials of type [java.lang.String and accountCredentials of type [java.lang .String] DEBUG [http -thread -pool -8080(5)] Both credentials arguments can be easily converted to byte arrays. Performing array equals comparison DEBUG [http -thread -pool -8080(5)] Authentication successful for token [ru.korus.tmis.core. auth. TmisShiroToken@37bd2b6 ]. Returned account [(admin ,ru.korus.tmis.core.entity. model.Role[id =1])] DEBUG [http -thread -pool -8080(5)] No SecurityManager available in subject context map. Falling back to SecurityUtils . getSecurityManager () lookup. Too much data! Марат Ахин (СПбГПУ) NP 2014 140 / 320
  • 33. Проблема наблюдаемости Журналирование Основная проблема журналирования Чем больше мы хотим узнать о ходе выполнения программы, тем больше мы должны журналировать Чем больше мы журналируем, тем сложнее разобраться в журнале Чем сложнее разобраться в журнале, тем меньше мы знаем о ходе выполнения программы Марат Ахин (СПбГПУ) NP 2014 141 / 320
  • 34. Проблема наблюдаемости Журналирование Ограничение размера журнала Необходимо ограничивать размер записываемых данных Марат Ахин (СПбГПУ) NP 2014 142 / 320
  • 35. Проблема наблюдаемости Журналирование Уровни журналирования Сообщения пишутся в журнал с определенным уровнем В дальнейшем возможно фильтровать сообщения по уровням Error / Warning / Info / Debug / Trace Марат Ахин (СПбГПУ) NP 2014 143 / 320
  • 36. Проблема наблюдаемости Журналирование Домены журналирования Домены ортогональны уровням журналирования В зависимости от типа сообщения пишутся в разные домены Database / Network / UI / Configuration / ... Марат Ахин (СПбГПУ) NP 2014 144 / 320
  • 37. Проблема наблюдаемости Журналирование Стохастическое журналирование В случае, если какие-то события встречаются очень часто, достаточно записывать лишь их часть 1 if (_ok == true) { 2 _logger.log( Level.WARNING , "Server seen down: " + _addr , e ); 3 } else if (Math.random () < 0.1) { 4 _logger.log( Level.WARNING , "Server seen down: " + _addr ); 5 } Марат Ахин (СПбГПУ) NP 2014 145 / 320
  • 38. Проблема наблюдаемости Журналирование Сессионное журналирование Часто работа ПО разбита на набор слабо связанных сессий Каждая сессия может журналироваться независимо от других 1 try { 2 // logging ... 3 } catch (Exception ex) { 4 ctx.logging. dumpCurrentSession (); 5 throw; 6 } finally { 7 ctx.logging.reset (); 8 } Марат Ахин (СПбГПУ) NP 2014 146 / 320
  • 39. W.I.L.T. What I Learned Today? W.I.L.T. Марат Ахин (СПбГПУ) NP 2014 147 / 320