#1
single player
-
- Members
-
- 11 сообщений
Новый участник
Отправлено 21 сентября 2006 — 17:34
найти ошибку недостаточно. нужно ее качественно локализовать. делимся опытом:)
я себе представляю процесс поиска возможных причин примерно так:
Рассматривается классическая схема:
на входе есть некий набор данных, некая последовательность шагов, скрытый от Вас черный ящик, в котором происходит, что-то неизвестное и набор выходных данных.
В процессе тестирования Вы получаете не тот результат, который ожидали увидеть. После того как Вы убедитесь, что в таком
нехорошем положении вещей виновата именно тестируемая программа, можно считать, что в программе найдена очередная ошибка.
Следующий шаг — добиться четкого повторения ошибки. Обычно это удается сделать по памяти. Если память Вас подводит, то
полезно иметь тетрадку по записям из которой можно воспроизвести багу еще раз. Многие программы записывают логи.
Исследование логов также может позволить Вам воспроизвести ошибку.
Отступление:
сложнее обстоит дело с «плавающими ошибками»…(не будем здесь про них).
Вы добились четкого повторения ошибки. Настало время заняться анализом набора входных данных и имеющейся
последовательности шагов.
Здесь основной принцип — чем проще, тем лучше. Т. е. наша задача повторить эту же ошибку за минимальное кол-во шагов и на
наиболее простом наборе входных данных(под наиболее простым понимается тот набор, на котором программа должна работать с
высокой степенью вероятности).
Следующий шаг — анализ выходных данных. Сравнивая разницу между наблюдаемым и ожидаемым выходом, нужно постараться понять
из-за чего эта разница могла возникнуть.
После этого нужно попытаться найти наиболее простой путь(несколько путей), с помощью которого можно обойти найденную
ошибку и получить требуемый результат. Возможно, это поможет программисту в исправлении ошибки, ну а в крайнем случае у Вас
будут рекомендации для отдела тех. поддержки:)
Далее обобщаем результаты исследований, оставляем нужное, отсекаем лишнее и заносим новый баг в базу данных ошибок.
Тоже самое коротко:
-действительно ошибка?
-анализ и упрощение входа.
-анализ выхода
-поиск обходных путей
-оформление в базу данных ошибок.
-
0
- Наверх
#2
serega
Отправлено 22 сентября 2006 — 06:13
Слов много, а по сути….
найти ошибку недостаточно. нужно ее качественно локализовать. делимся опытом:)
Тоже самое коротко:
-действительно ошибка?
Попробуйте занести программисту несколько раз минимую ошибку баг трекинг -моментально научитесь проверять
-анализ и упрощение входа.
Никто с вами и разговаривать не будет, если вы будете описывать баги нечетко — баг будет возвращаться на уточнение, пока не научитесь
-анализ выхода
-поиск обходных путей
У Вас всегда есть на это время?
Если вы знаете внутреннюю логику программы, то можно потратить 5 мин, иначе какой смысл
-оформление в базу данных ошибок.
А какой еще результат нужен от тестирования?
С моей точки зрения локализация ошибки — это способ сузить облась её поиска раработчиком, т.е. постараться максимально отсечь все лишнее в описании.
Для этого надо обладать достаточными знаниями о внутренней логике программы и уметь анализировать код. Даже в этом случае Вы не всегда сможете точно указать проблемное место, тока рекомендации.
-
0
- Наверх
#3
Rost
Rost
- ФИО:Rostyslav Boruk
- Город:Украина, Киев
Отправлено 22 сентября 2006 — 07:03
Тоже самое коротко:
-действительно ошибка?
-анализ и упрощение входа.
-анализ выхода
-поиск обходных путей
-оформление в базу данных ошибок.
Я согласен с serega в том, что на
«-анализ и упрощение входа.
-анализ выхода
-поиск обходных путей»
чаще всего нет времени. На самом деле это довольно редко надо делать. Вы нашли ошибку, воспроизвели ее и подробно описали. Можете двигаться дальше.
С моей точки зрения локализация ошибки — это способ сузить облась её поиска раработчиком, т.е. постараться максимально отсечь все лишнее в описании.
Для этого надо обладать достаточными знаниями о внутренней логике программы и уметь анализировать код. Даже в этом случае Вы не всегда сможете точно указать проблемное место, тока рекомендации.
Согласен с максимальным отсечением. Не согласен, в данном контексте, с анализом кода. Предлагался черный ящик.
Рассматривается классическая схема:
на входе есть некий набор данных, некая последовательность шагов, скрытый от Вас черный ящик, в котором происходит, что-то неизвестное и набор выходных данных.
Так что грамотного детального описания (в разумных пределах) достаточно.
-
0
Ростислав Борук,
Консультант по процессам тестирования
- Наверх
#4
Clauster
Clauster
- ФИО:Худобородов Валерий
- Город:Espoo
Отправлено 22 сентября 2006 — 08:14
Это краткий пересказ какой-то книжки по тестированию или что?
-
0
- Наверх
#5
Rost
Rost
- ФИО:Rostyslav Boruk
- Город:Украина, Киев
Отправлено 22 сентября 2006 — 08:18
Это краткий пересказ какой-то книжки по тестированию или что?
Очень похоже на обсуждение содержания краткого пересказа основной идеи локализации и описания ошибки.
-
0
Ростислав Борук,
Консультант по процессам тестирования
- Наверх
#6
single player
single player
-
- Members
-
- 11 сообщений
Новый участник
Отправлено 22 сентября 2006 — 15:13
«Это краткий пересказ какой-то книжки по тестированию или что?»
— я же написал, что основано на своем опыте, получилось книжно, потому что хотелось рассказать самое основное.
(статья была написана по просьбе руководства для начинающих тестировщиков. после каждого пункта запланирован небольшой пример непосредственно из тестирования боевых программ).
«Слов много, а по сути….»
поэтому и хотелось что бы народ поделился своим опытом.
«Попробуйте занести программисту несколько раз минимую ошибку баг трекинг -моментально научитесь проверять»
— а зачем пробовать? не лучше ли сразу научиться проверять?
«Никто с вами и разговаривать не будет, если вы будете описывать баги нечетко — баг будет возвращаться на уточнение, пока не научитесь»
— про четкое описание бага нужно говорить отдельно (если коротко, то в описании должны быть 3 вещи: последовательность шагов, наблюдаемое поведение, ожидаемое поведение). описание ошибкилокализация ошибки — это разные понятия, ИМХО.
«А какой еще результат нужен от тестирования?»
— Вы считаете, что единственным результатом тестирования, является запись об ошибке в базе?
-
0
- Наверх
#7
serega
Отправлено 25 сентября 2006 — 12:05
«Попробуйте занести программисту несколько раз минимую ошибку баг трекинг -моментально научитесь проверять»
— а зачем пробовать? не лучше ли сразу научиться проверять?
меня смущает словосочетание «научиться проверять» — мне кажется, невелика наука делать все адекватно
«Никто с вами и разговаривать не будет, если вы будете описывать баги нечетко — баг будет возвращаться на уточнение, пока не научитесь»
— про четкое описание бага нужно говорить отдельно (если коротко, то в описании должны быть 3 вещи: последовательность шагов, наблюдаемое поведение, ожидаемое поведение). описание ошибкилокализация ошибки — это разные понятия, ИМХО.
Вы забыли: название, версия, в которой найден, требования, ответсвенного, важность….и т.д.
Тоже будем учить? или заведем баг-трекинг?
«А какой еще результат нужен от тестирования?»
— Вы считаете, что единственным результатом тестирования, является запись об ошибке в базе?
Не стоит выдергивать вопрос из контекста.
Найти и зафиксировать ошибку в базу — основная задача тестирования. Кому то надо доказывать, что найденную ошбику необходимо зарегистрировать?
-
0
- Наверх
#8
Imbecile
Отправлено 25 сентября 2006 — 12:26
Следующий шаг — анализ выходных данных. Сравнивая разницу между наблюдаемым и ожидаемым выходом, нужно постараться понять
из-за чего эта разница могла возникнуть.
Так недолго и до того, что: «Открыл исходники и пофиксил». Понять из-за чего возникла ошибка может (в первую очередь) только программист.
-
0
In Test we trust.
- Наверх
#9
Imbecile
Отправлено 25 сентября 2006 — 12:32
Не стоит выдергивать вопрос из контекста.
Найти и зафиксировать ошибку в базу — основная задача тестирования. Кому то надо доказывать, что найденную ошбику необходимо зарегистрировать?
По поводу основной задачи тестирования:
ИМХО: Процесс тестирования является неотъемлемой частью процесса обеспечения качества (в данном случае программного продукта). Никому не нужно тестирование, если в результате этого процесса качество не изменится (улучшится). Следовательно, при процессе тестирование важно не нахождение ошибки, как таковой, а нахождение ошибок, нахождение (простите за тавтологию) которых, повлечёт изменение качества продукта (в лучшую сторону).
-
0
In Test we trust.
- Наверх
#10
ea_rx
ea_rx
-
- Members
-
- 10 сообщений
Новый участник
- ФИО:Evgeny Bartashevich
Отправлено 25 сентября 2006 — 14:16
найти ошибку недостаточно. нужно ее качественно локализовать. делимся опытом:)
я себе представляю процесс поиска возможных причин примерно так:
[..]
Следующий шаг — добиться четкого повторения ошибки. Обычно это удается сделать по памяти. Если память Вас подводит, то
полезно иметь тетрадку по записям из которой можно воспроизвести багу еще раз. Многие программы записывают логи.
Исследование логов также может позволить Вам воспроизвести ошибку.
для того, чтобы не воспроизводить по памяти (а если ошибка из-за данных, введенных 20 шагов назад?), можно записывать видео с производимыми действиями.
-
0
- Наверх
#11
single player
single player
-
- Members
-
- 11 сообщений
Новый участник
Отправлено 25 сентября 2006 — 14:45
«Так недолго и до того, что: «Открыл исходники и пофиксил». Понять из-за чего возникла ошибка может (в первую очередь) только программист.»
понять может только программист. мы можем только высказать свои предположения.
собственно что имелось в виду: допустим есть конечное состояние «A»(успешное выполнение) и конечное состояние «B»(ошибка). Далее представим себе, что «A» является успешным при выполнении более простых a1, a2, a3. А «B» является ошибкой, т.к. например вместо a2 мы получили х. Непосредственно проверить функцию, влиюящую на a2, мы не можем (у нас есть только доступ к функции, которая результатом которой является все «A» ), но предположить, что сбой произошел из-за того, что некорректно отработала функция, ответственная за a2, мы можем.
«ИМХО: … а нахождение ошибок, нахождение (простите за тавтологию) которых, повлечёт изменение качества продукта (в лучшую сторону).»
угу. тоже ИМХО: более качественным продукт делает нахождение ошибок и их исправление. соответственно быстрому исправлению ошибки должна помочь хорошо выполненная локализация.
2serega:
не хочется спорить и ругаться . мне не интересно как заносить ошибки в базу — интересно как их локализовывать.
-
0
- Наверх
#12
Rost
Rost
- ФИО:Rostyslav Boruk
- Город:Украина, Киев
Отправлено 25 сентября 2006 — 15:53
угу. тоже ИМХО: более качественным продукт делает нахождение ошибок и их исправление. соответственно быстрому исправлению ошибки должна помочь хорошо выполненная локализация.
Все правильно если Вы не тратите на локализацию пол дня.
Если Вы тратите на локализацию больше времени чем можно просто, подробно описать ошибку, это совсем не БЫСТРОЕ исправление. Исправление в себе содержит нахождение и изменение, а не только изменение.
-
0
Ростислав Борук,
Консультант по процессам тестирования
- Наверх
#13
single player
single player
-
- Members
-
- 11 сообщений
Новый участник
Отправлено 25 сентября 2006 — 16:04
«Все правильно если Вы не тратите на локализацию пол дня.»
угу во всем нужно чувство меры.
offtopic:
для меня в работе всегда было интересно сначала поломать что-нить, а потом уже разобраться из-за чего же оно сломалось. если же тупо тестировать по сценариям, то и самому отупеть не долго
-
0
- Наверх
#14
Imbecile
Отправлено 26 сентября 2006 — 07:48
«ИМХО: … а нахождение ошибок, нахождение (простите за тавтологию) которых, повлечёт изменение качества продукта (в лучшую сторону).»
угу. тоже ИМХО: более качественным продукт делает нахождение ошибок и их исправление. соответственно быстрому исправлению ошибки должна помочь хорошо выполненная локализация.
А это уже зависит от специфики продукта. Я не спорю, что выявление дефектов и их справление — это важный процесс в достижении качества продукта, но далеко не единственный.
-
0
In Test we trust.
- Наверх
#15
Imbecile
Отправлено 26 сентября 2006 — 07:51
offtopic:
для меня в работе всегда было интересно сначала поломать что-нить, а потом уже разобраться из-за чего же оно сломалось. если же тупо тестировать по сценариям, то и самому отупеть не долго
Открою страшную тайну, т-с-с-с, никому не говорите: чтобы люди не сидели и тупо не тестировали по тестовым сценариям и, следовательно, не тупели, придумали автоматизацию тестирования. Во как.
-
0
In Test we trust.
- Наверх
#16
Clauster
Clauster
- ФИО:Худобородов Валерий
- Город:Espoo
Отправлено 26 сентября 2006 — 08:14
offtopic:
для меня в работе всегда было интересно сначала поломать что-нить, а потом уже разобраться из-за чего же оно сломалось. если же тупо тестировать по сценариям, то и самому отупеть не долгоОткрою страшную тайну, т-с-с-с, никому не говорите: чтобы люди не сидели и тупо не тестировали по тестовым сценариям и, следовательно, не тупели, придумали автоматизацию тестирования. Во как.
В ответ открываю ещё более страшную тайну: далеко не во все проекты имеет смысл внедрять автоматизацию.
-
0
- Наверх
#17
serega
Отправлено 26 сентября 2006 — 08:40
По поводу основной задачи тестирования:
ИМХО: Процесс тестирования является неотъемлемой частью процесса обеспечения качества (в данном случае программного продукта). Никому не нужно тестирование, если в результате этого процесса качество не изменится (улучшится). Следовательно, при процессе тестирование важно не нахождение ошибки, как таковой, а нахождение ошибок, нахождение (простите за тавтологию) которых, повлечёт изменение качества продукта (в лучшую сторону).
Очень толково. Только обясните мне, чем отличаются ошибки, которые влекут изменение качества продукта, от остальных ошибок?
Вы правильно заметили, что тестирование — неотъемлимая часть процесса управления качеством, в который помимо тестирования входят еще куча дисциплин.
Поэтому я считаю ошибочным вывод «Никому не нужно тестирование, если в результате этого процесса качество не изменится (улучшится).»
Тестирование может обеспечивать выполнение своих задач, но при этом хромать остальные дисциплины, начиная от управления проектов и заканчивая Help Desk
-
0
- Наверх
#18
serega
Отправлено 26 сентября 2006 — 08:46
2serega:
не хочется спорить и ругаться. мне не интересно как заносить ошибки в базу — интересно как их локализовывать.
Как локализовавать ошибки — слишком общий вопрос.
Учите преметную область и овладевайте широкими познаниями в области IT.
Пример из личного опыта. Разрабатывалась система электронной передачи документов с локальных мест в общую базу при помощи почтового сервиса.
Система состояла из 4-х модулей: локальный клиент, почтовый клиент, дешифратор со стороны сервера, парсер на центральном сервере.
Появляется ошибка — письмо не приходит, вот и локализуешь на каком сегменте произошел сбой, без знания логики всех сегментов никуда:(
-
0
- Наверх
#19
Rost
Rost
- ФИО:Rostyslav Boruk
- Город:Украина, Киев
Отправлено 26 сентября 2006 — 09:09
Поэтому я считаю ошибочным вывод «Никому не нужно тестирование, если в результате этого процесса качество не изменится (улучшится).»
Тестирование может обеспечивать выполнение своих задач, но при этом хромать остальные дисциплины, начиная от управления проектов и заканчивая Help Desk
А зачем тратить ресурсы на то, что не приносит никаких изменений? Просто потому что в цепочке разработки ПО обязано быть тестирование?
-
0
Ростислав Борук,
Консультант по процессам тестирования
- Наверх
#20
serega
Отправлено 26 сентября 2006 — 10:37
Поэтому я считаю ошибочным вывод «Никому не нужно тестирование, если в результате этого процесса качество не изменится (улучшится).»
Тестирование может обеспечивать выполнение своих задач, но при этом хромать остальные дисциплины, начиная от управления проектов и заканчивая Help DeskА зачем тратить ресурсы на то, что не приносит никаких изменений? Просто потому что в цепочке разработки ПО обязано быть тестирование?
ага, и виновато тестирование.. под нож
будем строить дом, монтажные чертежи опустим — так дешевле
-
0
- Наверх
В этой статье мы расскажем о том, что делает QA-специалист, когда он находит тот или иной баг. Также рассмотрим, какие бывают дефекты и с чем их «едят».
Основные термины:
Дефект (или баг) — изъян в компоненте или системе, который может привести компонент или систему к невозможности выполнить требуемую функцию. Дефект, обнаруженный во время выполнения, может привести к отказам компонента или системы. Например: невозможно сохранить данные после заполнения анкеты.
Ошибка — действие человека, которое может привести к неправильному результату. Например: ввод букв в поле для ввода даты (должны приниматься только цифры) с последующим сохранением данных.
Отказ (failure) — отклонение компонента или системы от ожидаемого результата, выполнения, эксплуатации. Например: при переходе на следующую страницу анкеты данные предыдущей страницы затираются.
Классификация багов
- Функциональные дефекты — в этом случае приложение функционально работает не так, как задумано. Например:
— не сохраняются изменения данных в профиле;
— не работает добавление комментария;
— не работает удаление товара из корзины;
— не работает поиск.
- Визуальные дефекты — в этом случае приложение выглядит не так, как задумано.
— текст вылезает за границы поля;
— элемент управления сайтом наслаивается на нижестоящий элемент;
— не отображается картинка.
- Логические дефекты — в этом случае приложение работает неправильно с точки зрения логики.
— можно поставить дату рождения «из будущего», а также несуществующие даты — 31 февраля, 32 декабря и т.п.;
— можно сделать заказ, не указав адрес доставки;
— логика поиска работает неправильно.
- Дефекты контента
— орфографические и пунктуационные ошибки;
— картинка товара не соответствует карточке товара;
— конвертация валют идет по неправильному курсу (калькулятор считает правильно, но при программировании указан неверный курс).
- Дефекты удобства использования — в этом случае приложение неудобно в использовании.
— отсутствие подсветки или уведомления об ошибке при некорректно заполненных полях формы;
— сброс всех данных при ошибке заполнения регистрационной формы;
— перегруженный интерфейс.
- Дефекты безопасности — в этом случае могут быть затронуты пользовательские данные, есть риск падения системы и т.п.
— можно получить логин, пароль в результате использования SQL-инъекций;
— неограниченное время жизни сессии после авторизации.
Итак, мы рассмотрели типы и виды дефектов. Теперь расскажем о том, как их документировать.
Документирование ошибок
Отчет об ошибке (Bug Report) — это документ, описывающий ситуацию или последовательность действий, приведшую к некорректной работе объекта тестирования, с указанием причин и ожидаемого результата.
«Следующий этап заключается в документировании ошибок», — могли бы подумать вы, но оказались бы неправы.
Нельзя просто взять и задокументировать найденный дефект. Прежде всего, важно выполнить локализацию.
Например, если дефект может затрагивать другие части системы, то это обязательно нужно отобразить в баг-репорте, предварительно проверив эту гипотезу. Также необходимо очень подробно описать все условия и шаги, чтобы разработчик смог этот баг проверить и в него поверить.
Как же искать ошибки в системе таким образом, чтобы разработчикам было предельно понятно, откуда эти дефекты взялись и как их исправлять? Следует придерживаться определенного плана действий, который мы опишем далее.
Перепроверка дефекта
Нужно проверить себя еще раз: воспроизвести баг снова при тех же условиях. Если ошибка не повторилась при очередном тестировании, то нужно разобраться, точно ли были соблюдены все действия и шаги воспроизведения, приведшие к этому результату. Возможно, дефект появляется только при первоначальной загрузке системы (при первом использовании). Для того, чтобы более точно определить условия воспроизведения ошибки, необходимо эту ошибку локализовать.
Локализация дефекта
Чтобы локализовать баг, необходимо собрать максимальное количество информации о его воспроизведении:
- Выявить причины возникновения дефекта
Например, не проходит восстановление пароля. Необходимо выявить, откуда приходит запрос на сервер в неверном формате — от backend либо frontend.
- Проанализировать возможность влияния найденного дефекта на другие области
Например, в одной из форм, которую редко используют, возникает ошибка при нажатии на кнопку «Редактировать». Если в качестве временного варианта решения проблемы скрыть кнопку, это может повлиять на аналогичную форму в другом окне/вкладке, к которой пользователи обращаются чаще. Для качественного анализа необходимо знать, как работает приложение и какие зависимости могут быть между его частями.
- Отклонение от ожидаемого результата
Нужно проверить, соответствует ли результат тестирования ожидаемому результату. Справиться с этой задачей помогает техническое задание (в частности, требования к продукту), где должна быть задокументирована информация о тестируемом ПО и его функционировании. Пропускать этот шаг при тестировании не следует: если специалист недостаточно опытен, не зная требований, он может ошибаться и неправильно понимать, что относится к багам, а что нет. Внимательное изучение документации позволяет избежать таких ошибок.
- Исследовать окружение
Необходимо воспроизвести баг в разных операционных системах (iOS, Android, Windows и т.д.) и браузерах (Google Chrome, Mozilla, Internet Explorer и др.). При этом нужно проверить требования к продукту, чтобы выяснить, какие системы должны поддерживаться. Некоторые приложения работают только в определенных ОС или браузерах, поэтому проверять другие варианты не нужно.
- Проверить на разных устройствах
Например, desktop-приложение предназначено для использования на компьютерах, поэтому зачастую нет необходимости тестировать его на мобильных устройствах. Для смартфонов в идеале должна быть разработана отдельная мобильная версия, которую, в свою очередь, нет смысла тестировать на компьютерах. Кроме того, есть web-приложения, которые могут работать и на компьютерах, и на мобильных устройствах, а тестировать их нужно на всех типах устройств. Для тестирования можно использовать эмулятор той или иной среды, но в рамках статьи мы не будем затрагивать этот вопрос.
Мобильную версию приложения нужно тестировать на нескольких устройствах с разной диагональю экрана. При этом можно руководствоваться требованиями к ПО, в которых должно быть указано, с какими устройствами это ПО совместимо.
- Проверить в разных версиях ПО
Для того, чтобы не запутаться в реализованных задачах, в разработке используют версионность ПО. Иногда тот или иной баг воспроизводится в одной версии продукта, но не воспроизводится в другой. Этот атрибут обязательно необходимо указывать в баг-репорте, чтобы программист понимал, в какой ветке нужно искать проблему.
- Проанализировать ресурсы системы
Возможно, дефект был найден при нехватке внутренней или оперативной памяти устройства. В таком случае баг может воспроизводиться на идентичных устройствах по-разному.
Для того, чтобы оптимизировать сроки тестирования, мы рекомендуем использовать техники тест-дизайна.
Фиксирование доказательств
Доказательства воспроизведения бага нужно фиксировать при помощи логов, скринов или записи экрана.
- Логи (лог-файлы или журнал) — это файлы, содержащие системную информацию работы сервера или компьютера, в них хранят информацию об определенных действиях пользователя или программы. Опытному разработчику бывает достаточно посмотреть в логи, чтобы понять, в чем заключается ошибка. Обычно логи прикрепляют к баг-репорту в виде .txt-файла.
Live-логирование – это снятие системных логов в режиме реального времени. Для этого можно использовать следующие программы: Fiddler, Visual Studio для Windows, iTools, Xcode для iOS, Android Debug Monitor, Android Studio для Android и др.
- Скрин (снимок) экрана. При ошибках в интерфейсе снимок помогает быстрее разобраться в проблеме. Программ для снятия скриншотов очень много, каждый QA-специалист может использовать те, которые ему наиболее удобны: Jing, ShareX, Lightshot и др.
- Скринкаст (англ. screen – экран, broadcasting – трансляция) – это запись видеоизображения с экрана компьютера или другого цифрового устройства. Это один из самых эффективных способов поделиться тем, что происходит на экране монитора. Таким способом QA-специалисту легко наглядно показать ошибки в работе любого программного продукта. Сделать запись с экрана помогут незаменимые инструменты любого QA-специалиста: Snagit, Monosnap, Movavi Screen Capture, Jing, Reflector, ADB Shell Screenrecord, AZ Screen Recorder и др.
- Рекордер действий. Программные средства дают возможность воспроизвести все записанные движения мышки и действия, производимые на клавиатуре компьютера. Примеры программ – Advanced Key and Mouse Recorder для desktop-платформ.
Оформление баг-репорта
Все найденные дефекты обязательно нужно документировать, чтобы каждый задействованный на проекте специалист мог получить инструкции по воспроизведению обнаруженного дефекта и понять, насколько это критично. Если в команде принято устно передавать разработчику информацию о найденных дефектах, есть риск упустить что-то из вида.
Дефект, который не задокументирован – не найден!
Когда вся необходимая информация собрана, а баг локализован, можно приступать к оформлению баг-репорта в таск-трекере. Чем точнее описание бага, тем меньше времени нужно для его исправления. Список атрибутов для каждого проекта индивидуален, но некоторые из них – например, шаги воспроизведения, ожидаемый результат, фактический результат – присутствуют практически всегда.
Атрибуты баг-репорта:
1. Название
Баг должен быть описан кратко и ёмко, иметь понятное название. Это поможет разработчику разобраться в сути ошибки и в том, может ли он взять этот случай в работу, если занимается соответствующим разделом системы. Также это позволяет упростить подключение новых специалистов на проект, особенно если разработка ведется много лет подряд, а запоминать баги и отслеживать их в таск-трекере становится все сложнее. Название проекта можно составлять по принципу «Где? Что? Когда?» или «Что? Где? Когда?», в зависимости от внутренних правил команды.
Например:
Где происходит? — В карточке клиента (в каком разделе системы).
Что именно происходит? — Не сохраняются данные.
Когда происходит? — При сохранении изменений.
2. Проект (название проекта)
3. Компонент приложения
В какой части функциональности тестируемого продукта найден баг.
4. Номер версии
Версия продукта, ветка разработки, в которой воспроизводится ошибка.
5. Критичность
Этот атрибут показывает влияние дефекта на функциональность системы, например:
· Blocker — дефект, блокирующий использование системы.
· Critical — ошибка, которая нарушает основную бизнес-логику работы системы.
· Major — ошибка, которая нарушает работу определенной функции, но не всей системы.
· Minor — незначительная ошибка, не нарушающая бизнес-логику приложения, например, ошибка пользовательского интерфейса.
· Trivial — малозаметная, неочевидная ошибка. Это может быть опечатка, неправильная иконка и т.п.
6. Приоритет
Приоритет определяет, насколько срочно нужно исправить ошибку. Обычно выделяют следующие виды приоритетов:
High — ошибка должна быть исправлена как можно скорее, является критичной для проекта.
Medium — ошибка должна быть исправлена, но её наличие не является критичным для проекта.
Low — ошибка должна быть исправлена, но не требует срочного решения.
7. Статус
Статус указывает стадию жизненного цикла бага, взят он в работу или уже решен. Примеры: to do, in progress, in testing (on QA), done. В зависимости от особенностей проекта возможны дополнительные статусы (например, аналитика).
8. Автор баг-репорта
9. На кого назначен
Баг-репорт отправляют тимлиду проекта или разработчику, который будет заниматься исправлением дефекта, в зависимости от принятых в команде договоренностей.
10. Окружение
Где найден баг: операционная система, наименование и версия браузера.
11. Предусловие (если необходимо)
Необходимо для описания действий, которые предшествовали воспроизведению бага. Например, клиент авторизован в системе, создана заявка с параметрами ABC и т.д. Баг-репорт может не содержать предусловие, но иногда оно бывает необходимо для того, чтобы проще описать шаги воспроизведения.
12. Шаги воспроизведения
Один из самых важных атрибутов — описание шагов, которые привели к нахождению бага. Оптимально использовать 5-7 понятных и кратких шагов для описания бага, например:
1. Открыть (…)
2. Кликнуть (…)
3. Ввести в поле А значение N1
4. Ввести в поле B значение N2
5. Кликнуть кнопку «Calculate»
13. Фактический результат
Что произошло после воспроизведения указанных выше шагов.
14. Ожидаемый результат
Что должно произойти после воспроизведения шагов тестирования, согласно требованиям.
15. Прикрепленный файл
Логи, скриншоты, видеозапись экрана — всё, что поможет разработчику понять суть ошибки и исправить ее.
После составления баг-репорта обязательно нужно проверить его, чтобы избежать ошибок или опечаток.
Локализация и оформление багов — необходимые составляющие работы QA-специалиста с программным продуктом. Приглашаем подробнее ознакомиться с услугами тестирования и обеспечения качества в SimbirSoft.
Регистрация на курс
Плавающий баг?
Ох уж эти мистические «плавающие ошибки». Сколько вокруг них мифов! Но, когда причина найдена, всегда оказывается, что нет плавающих багов, а есть недолокализованные.
Поэтому мы будем учиться локализовывать баги, которые «не воспроизводятся». Учиться искать причину проблемы без помощи разработчика. Учиться смотреть в код и искать причину снаружи. Делить бисекционно и читать логи. В общем, всё, что нужно для воспроизведения!
Воспроизведение ошибки
Если вы не можете вопроизвести ошибку, то:
- Прочитайте логи — если есть доступ к логам, всегда в первую очередь смотрим туда! Если у нас веб-приложение, проверьте, что ушло с клиента на сервер.
- Проверьте граничные значения — баги часто тусят на границах.
- Попробуйте пойти «от обратного» — подумать, как получить саму проблему. Этот метод хорошо работает для багов с кэшом
- Составьте таблицу отличий — у вас то все работает. Что отличает ваш кейс от падающего?
Что записывать в таблицу отличий:
- Состояние объекта.
- Действия, которые с ним выполняли.
- Устройство, на котором воспроизводится.
- Время выполнения действия (какой релиз?).
- Способ воспроизведения (GUI, API).
- Количество открытых вкладок в браузере.
В отлове багов помогает понимание того, где копятся баги и какого рода: как влияет на работу системы concurrency, миграция данных, перетипизация переменной внутри кода… Зная последствия, вы будете понимать, что именно записать в таблицу отличий.
Локализация ошибки
Если вы можете воспроизвести баг, но не можете локализовать (слишком много шагов воспроизведения / слишком большой файл, внутри которого есть ошибка), то:
- Посмотрите код — возможно, это будет самым быстрым решением.
- Используйте бисекционное деление.
- Придумайте теорию (на баг влияет то и то) — подтвердите ее, а потом попробуйте опровергнуть.
- Выкиньте лишнее из шагов — возможно, именно это сбивает вас с толку
На курсе мы будем рассматривать каждую из техник. Вы сможете сразу применить ее на практике на специально подобранных домашних заданиях, которые показывают именно данную технику или конкретную проблему (миграции данных, стыка интеграции и т.д.)
О курсе
Это практический курс: теории минимум. Типичная лекция — на 10-15 минут. Короткая лекция «как это применять» и тут же практика! Конечно, есть и сложные лекции (на 30 минут). Есть и короткие, на 7 минут. Нет жесткой привязки ко времени лекции. Сколько надо дать теории, столько и говорю, а дальше уже практикуйтесь.
Для локализации багов мы будем применять техники:
- Черного ящика — как понять, что происходит, если нет доступа в код.
- Белого ящика — куда можно посмотреть в коде? Смотреть будем на примере приложения folks с открытым исходным java-кодом. Разумеется, у вас на проекте код будет выглядеть по-другому, но зато вы получите представление, где там могут вылезти баги. Баги, которые мы будем рассматривать на курсе, не были внесены в приложение нарочно — так что все приближено к реальности.
Лекции идут в моем фирменном стиле, с картинками. Посмотрите примеры видео на моем youtube-канале, чтобы понять, подходит ли вам такой стиль изложения.
Если вы переживаете, что не сможете что-то сделать (например, задания на просмотр кода), вот вам задача для самопроверки — соберите проект folks и запустите тесты. Инструкция есть, есть даже видео-инструкция по установке java, maven на Windows, Если справитесь, то и все остальное будет вам по плечу!
Программа курса
0. Введение
Что такое локализация и зачем она вообще нужна тестировщику.
Как умение локализовывать задачи экономит время команды и убирает панику.
Как знание о типовых проблемах помогает воспроизводить баги, которые «не воспроизводятся».
1. Уточнение устройств, на которых есть баг
На что обращать внимание при багах «поехала верстка», «текст вылезает за пределы экрана».
Как понять, в какой момент едет верстка? Какие инструменты использовать:
— как замерить размер окна;
— какие есть линейки;
— как посмотреть размер окна в консоли.
2. Исследование состояний
Изучим разные состояния объекта. Если проблема при сохранении — а кого мы вообще сохраняем?
— свежесозданную карточку
— отредактированную
— удаленную
…
Если у нас есть пользователь, то какой он? А как регистрировался? Как это может повлиять на воспроизведение бага?
3. Использование классов эквивалентности и граничных значений
Что такое классы эквивалентности.
Почему на границах встречаются баги.
Зачем тестировать ноль и как его найти, если у нас не строка ввода?
4. Опровержение своих теорий
Как опровергать свои теории и зачем это нужно.
— таблица отличий;
— метод «найди 5 отличий»;
— принцип минимализма (отсеивание лишнего).
5. Метод бисекционного деления
Что такое бисекционное деление.
Как его использовать тестировщику для локализации бага.
Как оно используется в разработке и к каким проблемам может привести.
6. Чтение логов
Что такое логи. Что в них записывается?
Как читать логи. Как читать стектрейс ошибки.
Логи на сервере и на клиенте.
7. Просмотр запросов с клиента на сервер
На клиенте помимо JS-логов можно смотреть, что вообще ушло на сервер.
Это помогает понять, где произошла ошибка и кто виноват: клиент или сервер. Учимся это делать.
8. Воспроизведение «от обратного»
Техника расследования закрытой комнаты. Наиболее актуальна для багов с кэшом.
Вот есть баг, из кэша достаются неправильные данные. Как воспроизвести? Идем от обратного, пытаемся получить “плохие данные” разными путями.
9. Проверка по коду
Как читать код, при условии, что разработчики идут вам на встречу и разделяют потроха логики и описание объектов.
Читаем java-объект и схему создания БД. Выверяем их на соответствие друг другу.
Внимание: у вас на проекте может быть не java, но принцип все тот же. На примере домашнего задания вы увидите, как можно найти баг, исследуя код
10. Проверка соответствия типов данных
Если поле встречается в коде несколько раз:
— в объектной модели;
— в схеме создания БД;
— где-то еще
Важно проверять соответствие типов. Смотрим, какие встречаются баги на несоответствие типов.
11. Проверка стыка интеграции
Какая бывает интеграция между системами.
Какие бывают баги на стыке интеграции.
Куда смотреть в первую очередь.
12. Проверка данных после миграции
Зачем тестировщику нужна как чистая база, так и база, живущая веками?
Примеры ошибок, вылезающих после миграции и почему они не ловятся на свежей тестовой БД.
13. Проверка concurrency
Типичная ошибка — выполнение CRUD над одним пользователем. Тестировщик может найти баги, переключаясь между вкладками интерфейса. Но это про поиск багов, а не про локализацию, казалось бы, да?
Но о concurrency важно знать, так как параллельная работа может быть и на другом уровне:
- Идет забор данных из базы по 1000 записей за раз. Что, если в этой 1000 встретились 2 одинаковых клиента? Строка базы заблокирована первым изменением — второе разваливается.
- Интеграция по SOAP REST. Если запросов много, там тоже можно влететь на изменение одного и того же клиента.
И в этом случае к вам придут “у меня тут ошибка”, а вы понять не можете, откуда она взялась, так как текст невразумительный. Надо помнить про параллельную работу, чтобы локализовать причину.
14. Заключение
Подводим итоги.
Вопросы и ответы
1. Можно ли проходить курс на Linux или Mac?
Да, он не зависит от вашей OS
2. Какие знания нужны для курса?
Общие знания о тестировании — что это вообще такое, как составлять тесты, что такое классы эквивалентности.
Если будете делать ДЗ с просмотром кода (необязательные), то:
- Базовое понимание языка программирования (любого) — вы не должны падать в обморок от слов string или «тип данных». Но все, что будет нужно для ДЗ, я объясню.
- Умение устанавливать новые программы — мы будем смотреть в код, а для этого нужно будет установить java, mercurial, maven. Вот инструкция, соберите проект перед записью на курс.
3. Будет ли мне интересно, если я проходил другие ваши курсы?
Если вы прошли «Школу для начинающих тестировщиков» в группе, то встречались с багами в коде folks — но эти задания на курсе необязательные! Так что сильно не влияют на интерес.
Если вы прошли «Логи как инструмент тестировщика», то уже сделали пару обязательных заданий. Но всё равно будет много нового и полезного
4. А скидку то дадут мне за эти ДЗ?
Да, покажите ваш сертификат и получите скидку:
- Логи как инструмент тестировщика → 20%
- Школа для начинающих, пройденная в группе → 10%
Как записаться
Регистрация и дата ближайшего запуска
Способы оплаты
7.1. Способы локализации
После
того, как с помощью контрольных тестов
(или каким либо другим путем) установлено,
что в программе или в конкретном ее
блоке имеется ошибка, возникает задача
ее локализации, то есть установления
точного места в программе, где находится
ошибка.
Процесс
локализации ошибок состоит из следующих
трех компонент:
1.
Получение на машине тестовых результатов.
2.
Анализ тестовых результатов и сверка
их с эталонными.
3.
Выявление ошибки или формулировка
предположения о характере и месте ошибки
в программе.
По
принципам работы средства локализации
разделяются на 4 типа :
1.
Аварийная печать.
2.
Печать в узлах.
3.
Слежение.
4.
Прокрутка.
АВАРИЙНАЯ
ПЕЧАТЬ
осуществляется один раз при работе
отлаживаемой программы, в момент
возникновения аварийной ситуации в
программе, препятствующей ее нормальному
выполнению. Тем самым, конкретное место
включения в работу аварийной печати
определяется автоматически без
использования информации от программиста,
который должен только определить список
выдаваемых на печать переменных.
ПЕЧАТЬ
В УЗЛАХ
включается в работу в выбранных
программистом местах программы; после
осуществления печати значений данных
переменных продолжается выполнение
отлаживаемой программы.
СЛЕЖЕНИЕ
производится или по всей программе, или
на заданном программистом участке.
Причем слежение может осуществляться
как за переменными (арифметическое
слежение), так и за операторами (логическое
слежение). Если обнаруживается, что
происходит присваивание заданной
переменной или выполнение оператора с
заданной меткой, то производится печать
имени переменной или метки и выполнение
программы продолжается. Отличием от
печати в узлах является то, что место
печати может точно и не определяться
программистом (для арифметического
слежения); отличается также и содержание
печати.
ПРОКРУТКА
производится на заданных участках
программы, и после выполнения каждого
оператора заданного типа (например,
присваивания или помеченного) происходит
отладочная печать.
По
типам печатаемых значений (числовые и
текстовые или меточные) средства
разделяются на арифметические и
логические.
7.2. Классификация средств локализации ошибок
Ниже
дана классификация средств локализации.
ТИПЫ
СРЕДСТВ ЛОКАЛИЗАЦИИ ОШИБОК :
1.
Языковые.
1.1.
Обычные.
1.2.
Специальные.
2.
Системные.
(3.
Пакетные)
СРЕДСТВА
ЛОКАЛИЗАЦИИ:
1.
Аварийная печать (арифметическая).
1.1.
Специальные средства языка.
1.2.
Системные средства.
2.
Печать в узлах (арифметическая).
2.1.
Обычные средства языка.
2.2.
Специальные средства языка.
3.
Слежение (специальные средства).
3.1.
Арифметическое.
3.2.
Логическое.
4.
Прокрутка (специальные средства).
4.1.
Арифметическая.
4.2.
Логическая.
8. Технология отладки программы автоматизации учета движения товаров на складе малого предприятия
При
отладке программы использовались
следующие методы контроля и локализации
ошибок (обзор методов см. в теоретической
части раздела) :
1.
Просмотр текста программы и прокрутка
с целью обнаружения явных синтаксических
и логических ошибок.
2.
Трансляция программы (транслятор выдает
сообщения об обнаруженных им ошибках
в тексте программы).
3.
Тестирование.
Тестирование
проводилось посредством ввода исходных
данных, с дальнейшей их обработкой,
выводом результатов на печать и экран.
Результаты работы программы сравнивались
заданными в техническом задании.
4.
При локализации ошибок преимущественно
использовалась печать в узлах, которыми
являлись в основном глобальные переменные,
переменные, используемые при обмене
данными основной программы с подпрограммами.
Отладка
программы производилась по следующему
алгоритму :
1.
Прогонка программы с набором тестовых
входных данных и выявление наличия
ошибок.
2.
Выделение области программы, в которой
может находиться ошибка. Просмотр
листинга программы с целью возможного
визуального обнаружения ошибок. В
противном случае — установка контрольной
точки примерно в середине выделенной
области.
3.
Новая прогонка программы. Если работа
программы прервалась до обработки
контрольной точки, значит, ошибка
произошла раньше. Контрольная точка
переносится, и процесс отладки возвращается
к шагу 2.
4.
Если контрольная точка программы была
обработана, то далее следует изучение
значений регистров, переменных и
параметров программы с тем, чтобы
убедиться в их правильности. При появлении
ошибки — новый перенос контрольной точки
и возврат к шагу 2.
5.
В случае не обнаружения ошибки продолжение
выполнения программы покомандно, с
контролем правильности выполнения
переходов и содержимого регистров и
памяти в контрольных точках. При
локализации ошибки она исправляется и
процесс возвращается к шагу 1.
В
качестве тестовых входных данных
использовалась последовательность
частотных выборок, генерируемых
имитатором в режиме 1. (Каждому интервалу
соответствует фиксированное значение
выборок.)
Соседние файлы в папке 4Diplom
- #
16.04.201332.77 Кб9A4.vsd
- #
- #
- #
- #
- #
Integrated Fault and Security Management
Ehab Al-Shaer, Yan Chen, in Information Assurance, 2008
16.2.1 Background
Fault localization is a basic component in fault management systems, because it identifies the reason for the fault that can best explain the observed network disorders (namely, symptoms). Examples of fault symptoms include unreachable hosts or networks, slow response, high utilization, and so on. Most fault reasoning algorithms use a bipartite directed acylic graph to describe the symptom-fault correlation, which represents the causal relationship between each fault fi and a set of its observed symptoms Sfi. [1]. Symptom-fault causality graphs provide a vector of correlation likelihood measures p(si|fi) to bind a fault fi to a set of its symptoms Sfi. Similarly, symptom-intrusion causality graphs can be constructed based on attack graphs [2] (see also Chapter 9) to describe the alarm-intrusion correlation. For simplicity, in the rest of this section, we will focus on fault reasoning and diagnosis. However, similar techniques are applicable to identification of security attacks/intrusions.
Two approaches are commonly used in fault reasoning and localization: passive diagnosis [1, 3–5] and active probing [6–9]. In the passive approach, all symptoms are passively collected and then processed to infer the root faults. In the active approach, faults are detected by conducting a set of probing actions. The passive approach causes less intrusiveness in management networks. However, it may take a long time to discover the root faults, particularly if the symptom loss ratio is high. On the other hand, although an active probing approach is more efficient to quickly identify faults, probing might cause significant overhead, particularly in large-scale networks. In this section, we will show a novel fault localization technique that integrates the advantage of both passive and active monitoring into one framework, called active integrated fault reasoning (AIR). In our approach, if the passive reasoning is not sufficient to explain the problem, AIR selects optimal probing actions to discover the most critical symptoms that are important to explain the problem. But such symptoms may have been lost or corrupted during passive fault reasoning. Our approach significantly improves the performance of fault localization while minimizing the intrusiveness of active fault reasoning.
AIR consists of three modules: fault reasoning (FR), fidelity evaluation (FE), and action selection(AS). The fault reasoning module passively analyzes observed symptoms and generates a fault hypothesis. The fault hypothesis is then sent to a fidelity evaluation module to verify whether the fidelity value of the reasoning result is satisfactory. If the correlated symptoms necessary to explain the fault hypothesis are observed (i.e., there is high fidelity), then the fault reasoning process terminates. Otherwise, a list of most likely unobserved symptoms that can contribute to the fault hypothesis fidelity is sent to the action selection module. The AS module then performs selected actions to determine which symptoms have occurred but are not observed (i.e., lost) and accordingly adjusts the hypothesis fidelity value. If the new fidelity value is satisfactory, then the reasoning process terminates; otherwise, the new symptom evidence is fed into the FR module to create a new hypothesis. This process is recursively invoked until a highly credible hypothesis is found.
The section is organized as follows. In Section 16.2.2, related work is discussed. In Section 16.2.3, we discuss our research motivation and the problem formalization. In Section 16.2.4, we describe the components and algorithms of AIR. In Section 16.2.5, we present a simulation study to evaluate AIR performance and accuracy.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123735669500185
Automated Fault Localization
Wes Masri, in Advances in Computers, 2015
5.1 Program Slicing: Early Work
The first attempt to automate fault localization is static slicing [47,48], which is a technique that uses static dependence analysis to identify the set of program statements (slice), that could be responsible for an erroneous program state that occurred at a particular location in a program, termed slicing criterion. Dynamic slicing [7,8,49,50], a test-driven technique that extracts a slice from an execution trace, is potentially much more precise and, therefore, more beneficial for fault localization than static slicing, as it could be seen when contrasting Figs. 1 and 2 in Section 2.1. Despite this fact, dynamic slicing is still considered too imprecise, as dynamic slices are typically unmanageably large, which requires the developer to exert considerable effort to locate the faulty statements.
Depending on the problem at hand, two main types of slices could be computed, backward and forward. Backward slices include the statements that influence a given slicing criterion, whereas forward slices include the statements that get influenced by a given slicing criterion. Note that if the type of a slice is not specified, a backward slice is usually meant.
There are practically hundreds of early articles written on program slicing and dozens of proposed slicing techniques, but we opt not to further our discussion of earlier work since slicing, just by itself, has shown limited success in fault localization. One example of an early work that attempted to improve the fault localization capabilities of slicing is the technique presented by Agrawal et al. [51]. That technique is based on dicing, a dice being the set difference of two slices. It conjectures that the fault resides in the execution slice (trace) of a failing run but does not reside in the execution slice of a passing run, an assumption that does not generally hold.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245815000339
Don’t forget the developers! (and be careful with your assumptions)
A. Orso, in Perspectives on Data Science for Software Engineering, 2016
Background
Spectra-based (or statistical) fault localization is a family of debugging techniques whose goal is to identify potentially faulty code by mining both passing and failing executions of a faulty program, inferring their statistical properties, and presenting developers with a ranked list of potentially faulty statements to inspect. Fig. 1 shows the typical scenario of usage for these techniques: given a faulty program and a set of test cases for the program, an automated debugging tool based on SBFL would produce a ranked list of potentially faulty statements. The developers would then inspect these statements one at a time until they find the bug. It is worth noting that, in this context, being able to look at only about 5–10% of the code in a majority of cases is typically considered a good result.
Fig. 1. An abstract view of the typical SBFL usage scenario.
The first instances of these techniques (eg, [1,2]) were clever, disruptive, and promising. Case in point, the work by Jones and colleagues [1] was awarded an ACM SIGSOFT Outstanding Research Award, and Liblit’s dissertation, which was based on [2], received an ACM Doctoral Dissertation Award. Unfortunately, however, SBFL somehow became too popular for its own good; a few years after these first and a few other innovative techniques were presented, researchers started to propose all sorts of variations on the initial idea. In most cases, these variations simply consisted of using a different formula for the ranking and showing slight improvements in the effectiveness of the approach. This trend is still in effect today, to some extent.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780128042069000490
Fault Localization Using Hybrid Static/Dynamic Analysis
E. Elsaka, in Advances in Computers, 2017
5 Conclusion
In this chapter, Disqover, a new fault localization technique, was presented. This technique exploits automated test case generation tools to generate a large number of test cases and implements a novel algorithm to find commonalities between the failing test cases by automatically replaying them, and extracting their sequence covers, i.e., execution traces. As debugging costs continue to be more expensive, the benefits of automated debugging and fault localization techniques will become more tangible. Nowadays, static analysis methods are so advanced and integrated in pretty much all of software development IDEs. Also, software instrumentation techniques are prevalent, and it is not uncommon to have instrumented versions of software in a production setting for various dynamic analysis purposes. However, either technique, static or dynamic, is not sufficient by itself to accurately identify software faults. Hybrid approaches can make static and dynamic approaches complement each other to achieve the best of the two worlds. In this chapter, we presented one such approach, and we hope it attracts the research community attention to the value of hybrid approaches. Such approaches are not limited to improve fault localization only, but also performance testing, memory profiling, and software structure and quality in general.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245816300778
Advances in Combinatorial Testing
Rachel Tzoref-Brill, in Advances in Computers, 2019
7.3 Fault Localization
Once test cases that origin from CT are executed, their unique structure consisting of parameter value combinations allows systematic fault localization. This is achieved by locating failure-triggering parameter value combinations in failing tests, known as identifying failure-inducing combinations. Since accurately identifying minimal failure-inducing combinations is a hard problem, most existing techniques come up with candidates for failure-inducing combinations, i.e., combinations that are likely to trigger failures but are not guaranteed to do so.
There are two major approaches for identifying failure-inducing combinations. The first approach takes a single failing test case as input, and isolates a minimal value combination that triggers the observed failure. Zhang and Zhang propose a fault characterization method called Faulty Interaction Characterization (FIC) and its binary search alternative FIC_BS [10]. The method uses the failing test case as a seed for the generation of additional test cases that assist in locating a failure-inducing combination that occurs in the original test case. By executing the additional test cases and observing their results, one can eliminate combinations that no longer induce the failure and narrow down on the failure-inducing ones. Complexity-wise, FIC is very efficient. Its complexity is only O(k) (where k is the number of parameters), while there are 2K potential failure-inducing combinations in a failing test case. However, there are two important assumptions that reduce its applicability in practice: (1) there are no constraints in the model, and (2) no new failures are introduced when the failing test case is modified to produce new test cases. A different technique that eliminates these assumptions was proposed by Niu et al. [120]. By building a tuple relation tree (TRT) for a failing test case, they allow a clear view of its interactions and can also handle multiple, possibly overlapping, failure-inducing combinations.
The second approach takes a set of test cases as input and their execution results (pass/fail), and identifies failure-inducing combinations that may occur in them. Yilmaz et al. describe a fault localization technique based on machine learning [121]. It takes a covering array and its execution results as inputs and builds a classification tree that models the failing test cases. The model is evaluated by using it to predict the results of new test cases. Since the model encodes the information that will predict a failure, it assists developers in understanding the root cause of the failure.
Shi et al. propose a different fault localization technique, in which given a set of test cases and their execution results, candidates for failure-inducing combinations are identified [122]. These are combinations that appear only in failing test cases and not in passing ones. Next, for each failing test case, n additional test cases are generated to isolate its failure-inducing combination, where n is the number of model parameters. The initial candidate set is reduced based on the execution results of the additional test cases. More recently, another technique was suggested along with a tool called BEN [123–125]. In this technique, combinations are first ranked based on how suspicious they are in inducing failures. Next, additional test cases are created to refine the ranking, and the process repeats iteratively until either failure-inducing combinations are detected, or the set of suspicious combinations is empty.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245817300542
Time-Frequency Diagnosis, Condition Monitoring, and Fault Detection
In Time-Frequency Signal Analysis and Processing (Second Edition), 2016
15.1.3 Application of Instantaneous Frequency for Disturbance Propagation
The time of arrival of disturbance signals on high-voltage transmission lines is of great interest for relay and fault localization. Traditional fault localization in a transmission line network is based on a fault-study using voltage and current measurements. The traditional methodology is subject to inaccurate results, because the calculation depends on the rough assumption of the fault impedance and the type of fault. Power system monitoring systems employ GPS (global positioning systems) receivers to provide time synchronized data. GPS synchronized data enables one to solve the fault location problem based on time-of-arrival of the disturbance waveforms. The propagation properties of high voltage transmission lines have been carefully treated and shown to be dispersive [7]. To treat the time synchronized disturbance data, an accurate estimation of the arrival time is critical. In this section, an application example is provided to show how the instantaneous frequency can be utilized for the arrival time estimation.
In Fig. 15.1.3 a simulation circuit diagram is provided. For a long transmission line (345 kV), there occurs a typical line-to-ground fault which is 84.6 km away from “SEND” and 394.3 km away from “RECV” as indicated in Fig. 15.1.3. For this transmission line configuration, EMTP (Electro-Magnetic Transient Program) simulates the voltage and current disturbances. The corresponding voltage waveforms at individual buses (X0005, SEND, X0041, RECV) are provided in Fig. 15.1.4.
Figure 15.1.3. EMTP simulation circuit configuration.
From Ref. [7], © 2000 IEEE.
Figure 15.1.4. Disturbance voltage waveforms recorded at individual buses.
From Ref. [7], © 2000 IEEE.
As the transmission line is characterized by frequency-dependent attenuation and dispersion, different frequencies suffer different amounts of attenuation and also propagate with different phase and group velocities; consequently, the waveforms observed at different buses appear “distorted” or “dispersed” from the original waveform. Therefore, it is difficult to assign time-of-arrival for “distorted” signals. There are perhaps many ways to determine time-of-arrival; however, in this section we focus on one, namely instantaneous frequency.
The corresponding zero sequence mode disturbance voltage is provided in Fig. 15.1.5. The zero sequence mode is a summation of the individual three-phase waveforms and is ideally zero for a balanced three-phase system. Thus it is very sensitive to a fault on any of the three phases as shown in Fig. 15.1.5. The reduced interference distribution has been calculated for the disturbance waveforms in zero sequence mode in order to generate the instantaneous frequency of the zero sequence disturbance signals. The instantaneous frequency, its peak value, and time of arrival of the disturbance at various observation points are provided in Fig. 15.1.6. Note that the time axis in Fig. 15.1.6 is zoomed to within a 20-40 ms interval as indicated in Fig. 15.1.5. The time of arrival tarrival has been assigned as follows:
Figure 15.1.5. Zero sequence disturbance voltage waveforms recorded at individual buses.
From Ref. [7], © 2000 IEEE.
Figure 15.1.6. Instantaneous frequency estimation of the disturbance voltage waveforms in zero sequence.
From Ref. [7], © 2000 IEEE.
(15.1.3)tarrival=arg{maxt[fi(t)]}.
As the frequency bandwidth of the disturbance is broad since the disturbance is transient, the assignment of the arrival time via the peak instantaneous frequency is a reasonable approximation.
The arrival times and peak values of the instantaneous frequency are presented in Table 15.1.1. To convert times to distance we utilize the results of the analysis presented in Ref. [7], where it was shown that for a range of peak frequencies appearing in Table 15.1.1, the corresponding zero-sequence group velocity is vg = (2.6 ± 0.2) × 108 m/s. The corresponding estimates of distance are compared to the true distance in Table 15.1.1. Note the range of estimated distance agrees quite well with the known true distance. Note, also, that the peak instantaneous frequency is lower for the larger propagation distance. This is due to the fact that higher frequencies associated with the disturbance suffer greater attenuation than lower frequencies. Ongoing work in voltage-only distance localization involves refinement of the instantaneous frequency approach and consideration of the use of group delay.
Table 15.1.1. Summary of the Zero Sequence Disturbance via RID
Bus Name (unit) | Arrival Time (ms) | Peak IF (km) | True Distance (kHz) | Estimated Distance (km) |
---|---|---|---|---|
X0005 | 28.60 | 159.60 | 0.0 | N/A |
SEND | 28.90 | 100.36 | 84.6 | 72–84 |
X0041 | 29.25 | 51.22 | 162.7 | 156–182 |
RECV | 30.20 | 50.80 | 394.3 | 384–448 |
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123984999000157
Optical Wavelength-Division Multiplexing for Data Communication Networks
Klaus Grobe, in Handbook of Fiber Optic Data Communication (Fourth Edition), 2013
5.3.2 OTN monitoring
In OTN, per-layer monitoring has been defined. OAM is supported by path-trace and loop installations. Fault localization is possible with electrical and optical supervisory signals. It is possible to detect signal degradations and switch upon these conditions. Several protection and restoration mechanisms have been, or are still being, defined for OTN. Linear (point-to-point) subnetwork connection (SNC) protection mechanisms are defined in ITU-T Recommendation G.873.1 for the ODUk level. 1+1 and 1:N linear protection are supported. Further mechanisms include trail (OCh, OMS) 1+1 protection as defined in ITU-T Recommendation G.872. Shared-ring protection for the ODUk level is defined in Recommendation G.873.2. OTN restoration is standardized in ITU-T ASON.
An important feature of the OTN, and an improvement over SONET/SDH, is tandem connection monitoring (TCM). OTN TCM allows end-to-end monitoring across different administrative domains (i.e., network, operator, or vendor domains). Six independent TCM levels have been defined, allowing monitoring for nested and cascaded domains. A scenario using three TCM layers for E2E monitoring is shown in Figure 5.34.
Figure 5.34. OTN tandem connection monitoring.
In Figure 5.34, three cascaded carrier and two nested vendor domains are shown. Since one TCM layer can be reused for the metro carrier domains X and Y and the vendor domain B, three TCM layers are required in total.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780124016736000052
Submarine system powering
Koji Takehira, in Undersea Fiber Communication Systems (Second Edition), 2016
10.6.1 Capacitance measurement
When the center conductor of a cable is not exposed to seawater (open fault), a capacitance measurement may be used for the fault localization. The capacitance between the center conductor (copper tube) and the outside conductor (seawater) is measured, and the fault location is estimated from the test results. The cable and/or repeater parameters, which were obtained during the factory tests or commissioning and acceptance tests, are used to calculate the distance of the fault from the shore station.
The length (L) between the terminal station and the open fault point is calculated as:
(10.8)L(km)=Cx−n·CrCc
where L [km] is length of cable section between station and open fault point; Cx [μF] is measured capacitance; Cc [μF/km] is capacitance of cable; Cr [μF/pc] is capacitance of repeater; n is number of repeaters, where n (Cs+Cr)≤Cx<(n+1) Cs+nCr; Cs (μF) is theoretical capacitance of one cable span=Cc*Lspan, where Lspan [km] is nominal cable span between repeaters.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780128042694000106
Advances in Testing JavaScript-Based Web Applications
Ali Mesbah, in Advances in Computers, 2015
6 Handling Failures
Although testing of modern web applications has received increasing attention in the recent past, there has been limited work on what happens after a test reveals an error. After a test fails, the fault localization process much be undertaken by developers in order to identify the fault responsible for the failure. However, when a web application test assertion fails, determining the faulty program code responsible for the failure can be a challenging endeavor.
AutoFlox [62] is an automated technique for localizing code-terminating DOM-related JavaScript errors—a DOM access function returns a null, undefined, or incorrect value, which then propagates into several variables and eventually causes an exception in JavaScript code execution. AutoFlox takes a code-terminating line of JavaScript code as input and performs dynamic analysis and backward slicing of the web application to localize the cause of these JavaScript faults.
When a DOM-based test assertion fails, it is particularly challenging to locate the fault in the JavaScript code. Here, the main challenge is related to the implicit link between three different entities, namely, the test assertion, the DOM elements on which the assertion fails (checked elements), and the faulty JavaScript code responsible for modifying those DOM elements. To understand the root cause of the assertion failure, the developer needs to manually infer a mental model of these hidden links, which can be tedious. Further, unlike in traditional (e.g., Java) applications, there is no useful stack trace produced when a web test case fails as the failure is on the DOM, and not on the application’s JavaScript code. This further hinders debugging as the fault usually lies within the application’s code, and not in its surfacing DOM. Camellia [63] is a tool that helps to uncover these implicit links. First, it automatically links a test assertion failure to the checked DOM elements and subsequently to the related statements in the JavaScript code. Second, it incorporates a dynamic slicing method for JavaScript that reduces the amount of noise encountered by developers when debugging. The slicing method is based on a selective instrumentation algorithm to reduce the performance overhead and trace size. Finally, once a test failure is connected to the relevant slice, Camellia visualizes the output to abstract away details and relate the test failure to the corresponding computed JavaScript slice. Figure 15 depicts an example of the visualization output of Camellia for a test assertion.
Figure 15. Camellia: connecting DOM-based test assertion failures to related JavaScript code.
When a fault is localized, the next natural step would be to repair the fault. Vejovis [64] is a technique that tries to automatically find a fix for a JavaScript fault. First, the authors try to understand common fixes applied by programmers to JavaScript faults. Based on these findings, they propose an automated technique for providing repair suggestions for DOM-related JavaScript faults.
Related to program repair are prevention techniques. For instance, Jensen et al. [65] and Meawad et al. [66] introduce techniques that transform unsafe eval calls in JavaScript code to functionally equivalent without the use of eval.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245814000114
MPLS Transport Profile
Vinod Joseph, Srinivas Mulugu, in Network Convergence, 2014
MPLS-TP OAM Procedures
MPLS-TP provides mechanisms to support in-band OAM functions such as continuity check, connectivity verification, loss measurement, delay measurement, remote defect indication, and alarm indication signal. Like legacy transport networks, these mechanisms allow for fault localization, performance monitoring, remote indications, and alarm suppression. Rather than define new OAM protocols, the MPLS-TP IETF drafts specify mechanisms (via G-Al/G-Ach) to reuse traditional MPLS and carrier Ethernet OAM procedures such as BFD and Y.1731.
The BFD and Y.1731 procedures can be used to monitor LSPs, sections, or PWs. In addition, recent IETF drafts also define Fault OAMs (AIS, RDI, and LKR) for signal failure detection, for propagation of the signal fail condition across layers, and for alarm suppression. MPLS-TP provides mechanisms to support in-band OAM functions such as continuity check, connectivity verification, loss measurement, delay measurement, remote defect indication, and alarm indication signal.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123978776000072
Integrated Fault and Security Management
Ehab Al-Shaer, Yan Chen, in Information Assurance, 2008
16.2.1 Background
Fault localization is a basic component in fault management systems, because it identifies the reason for the fault that can best explain the observed network disorders (namely, symptoms). Examples of fault symptoms include unreachable hosts or networks, slow response, high utilization, and so on. Most fault reasoning algorithms use a bipartite directed acylic graph to describe the symptom-fault correlation, which represents the causal relationship between each fault fi and a set of its observed symptoms Sfi. [1]. Symptom-fault causality graphs provide a vector of correlation likelihood measures p(si|fi) to bind a fault fi to a set of its symptoms Sfi. Similarly, symptom-intrusion causality graphs can be constructed based on attack graphs [2] (see also Chapter 9) to describe the alarm-intrusion correlation. For simplicity, in the rest of this section, we will focus on fault reasoning and diagnosis. However, similar techniques are applicable to identification of security attacks/intrusions.
Two approaches are commonly used in fault reasoning and localization: passive diagnosis [1, 3–5] and active probing [6–9]. In the passive approach, all symptoms are passively collected and then processed to infer the root faults. In the active approach, faults are detected by conducting a set of probing actions. The passive approach causes less intrusiveness in management networks. However, it may take a long time to discover the root faults, particularly if the symptom loss ratio is high. On the other hand, although an active probing approach is more efficient to quickly identify faults, probing might cause significant overhead, particularly in large-scale networks. In this section, we will show a novel fault localization technique that integrates the advantage of both passive and active monitoring into one framework, called active integrated fault reasoning (AIR). In our approach, if the passive reasoning is not sufficient to explain the problem, AIR selects optimal probing actions to discover the most critical symptoms that are important to explain the problem. But such symptoms may have been lost or corrupted during passive fault reasoning. Our approach significantly improves the performance of fault localization while minimizing the intrusiveness of active fault reasoning.
AIR consists of three modules: fault reasoning (FR), fidelity evaluation (FE), and action selection(AS). The fault reasoning module passively analyzes observed symptoms and generates a fault hypothesis. The fault hypothesis is then sent to a fidelity evaluation module to verify whether the fidelity value of the reasoning result is satisfactory. If the correlated symptoms necessary to explain the fault hypothesis are observed (i.e., there is high fidelity), then the fault reasoning process terminates. Otherwise, a list of most likely unobserved symptoms that can contribute to the fault hypothesis fidelity is sent to the action selection module. The AS module then performs selected actions to determine which symptoms have occurred but are not observed (i.e., lost) and accordingly adjusts the hypothesis fidelity value. If the new fidelity value is satisfactory, then the reasoning process terminates; otherwise, the new symptom evidence is fed into the FR module to create a new hypothesis. This process is recursively invoked until a highly credible hypothesis is found.
The section is organized as follows. In Section 16.2.2, related work is discussed. In Section 16.2.3, we discuss our research motivation and the problem formalization. In Section 16.2.4, we describe the components and algorithms of AIR. In Section 16.2.5, we present a simulation study to evaluate AIR performance and accuracy.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123735669500185
Automated Fault Localization
Wes Masri, in Advances in Computers, 2015
5.1 Program Slicing: Early Work
The first attempt to automate fault localization is static slicing [47,48], which is a technique that uses static dependence analysis to identify the set of program statements (slice), that could be responsible for an erroneous program state that occurred at a particular location in a program, termed slicing criterion. Dynamic slicing [7,8,49,50], a test-driven technique that extracts a slice from an execution trace, is potentially much more precise and, therefore, more beneficial for fault localization than static slicing, as it could be seen when contrasting Figs. 1 and 2 in Section 2.1. Despite this fact, dynamic slicing is still considered too imprecise, as dynamic slices are typically unmanageably large, which requires the developer to exert considerable effort to locate the faulty statements.
Depending on the problem at hand, two main types of slices could be computed, backward and forward. Backward slices include the statements that influence a given slicing criterion, whereas forward slices include the statements that get influenced by a given slicing criterion. Note that if the type of a slice is not specified, a backward slice is usually meant.
There are practically hundreds of early articles written on program slicing and dozens of proposed slicing techniques, but we opt not to further our discussion of earlier work since slicing, just by itself, has shown limited success in fault localization. One example of an early work that attempted to improve the fault localization capabilities of slicing is the technique presented by Agrawal et al. [51]. That technique is based on dicing, a dice being the set difference of two slices. It conjectures that the fault resides in the execution slice (trace) of a failing run but does not reside in the execution slice of a passing run, an assumption that does not generally hold.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245815000339
Don’t forget the developers! (and be careful with your assumptions)
A. Orso, in Perspectives on Data Science for Software Engineering, 2016
Background
Spectra-based (or statistical) fault localization is a family of debugging techniques whose goal is to identify potentially faulty code by mining both passing and failing executions of a faulty program, inferring their statistical properties, and presenting developers with a ranked list of potentially faulty statements to inspect. Fig. 1 shows the typical scenario of usage for these techniques: given a faulty program and a set of test cases for the program, an automated debugging tool based on SBFL would produce a ranked list of potentially faulty statements. The developers would then inspect these statements one at a time until they find the bug. It is worth noting that, in this context, being able to look at only about 5–10% of the code in a majority of cases is typically considered a good result.
Fig. 1. An abstract view of the typical SBFL usage scenario.
The first instances of these techniques (eg, [1,2]) were clever, disruptive, and promising. Case in point, the work by Jones and colleagues [1] was awarded an ACM SIGSOFT Outstanding Research Award, and Liblit’s dissertation, which was based on [2], received an ACM Doctoral Dissertation Award. Unfortunately, however, SBFL somehow became too popular for its own good; a few years after these first and a few other innovative techniques were presented, researchers started to propose all sorts of variations on the initial idea. In most cases, these variations simply consisted of using a different formula for the ranking and showing slight improvements in the effectiveness of the approach. This trend is still in effect today, to some extent.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780128042069000490
Fault Localization Using Hybrid Static/Dynamic Analysis
E. Elsaka, in Advances in Computers, 2017
5 Conclusion
In this chapter, Disqover, a new fault localization technique, was presented. This technique exploits automated test case generation tools to generate a large number of test cases and implements a novel algorithm to find commonalities between the failing test cases by automatically replaying them, and extracting their sequence covers, i.e., execution traces. As debugging costs continue to be more expensive, the benefits of automated debugging and fault localization techniques will become more tangible. Nowadays, static analysis methods are so advanced and integrated in pretty much all of software development IDEs. Also, software instrumentation techniques are prevalent, and it is not uncommon to have instrumented versions of software in a production setting for various dynamic analysis purposes. However, either technique, static or dynamic, is not sufficient by itself to accurately identify software faults. Hybrid approaches can make static and dynamic approaches complement each other to achieve the best of the two worlds. In this chapter, we presented one such approach, and we hope it attracts the research community attention to the value of hybrid approaches. Such approaches are not limited to improve fault localization only, but also performance testing, memory profiling, and software structure and quality in general.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245816300778
Advances in Combinatorial Testing
Rachel Tzoref-Brill, in Advances in Computers, 2019
7.3 Fault Localization
Once test cases that origin from CT are executed, their unique structure consisting of parameter value combinations allows systematic fault localization. This is achieved by locating failure-triggering parameter value combinations in failing tests, known as identifying failure-inducing combinations. Since accurately identifying minimal failure-inducing combinations is a hard problem, most existing techniques come up with candidates for failure-inducing combinations, i.e., combinations that are likely to trigger failures but are not guaranteed to do so.
There are two major approaches for identifying failure-inducing combinations. The first approach takes a single failing test case as input, and isolates a minimal value combination that triggers the observed failure. Zhang and Zhang propose a fault characterization method called Faulty Interaction Characterization (FIC) and its binary search alternative FIC_BS [10]. The method uses the failing test case as a seed for the generation of additional test cases that assist in locating a failure-inducing combination that occurs in the original test case. By executing the additional test cases and observing their results, one can eliminate combinations that no longer induce the failure and narrow down on the failure-inducing ones. Complexity-wise, FIC is very efficient. Its complexity is only O(k) (where k is the number of parameters), while there are 2K potential failure-inducing combinations in a failing test case. However, there are two important assumptions that reduce its applicability in practice: (1) there are no constraints in the model, and (2) no new failures are introduced when the failing test case is modified to produce new test cases. A different technique that eliminates these assumptions was proposed by Niu et al. [120]. By building a tuple relation tree (TRT) for a failing test case, they allow a clear view of its interactions and can also handle multiple, possibly overlapping, failure-inducing combinations.
The second approach takes a set of test cases as input and their execution results (pass/fail), and identifies failure-inducing combinations that may occur in them. Yilmaz et al. describe a fault localization technique based on machine learning [121]. It takes a covering array and its execution results as inputs and builds a classification tree that models the failing test cases. The model is evaluated by using it to predict the results of new test cases. Since the model encodes the information that will predict a failure, it assists developers in understanding the root cause of the failure.
Shi et al. propose a different fault localization technique, in which given a set of test cases and their execution results, candidates for failure-inducing combinations are identified [122]. These are combinations that appear only in failing test cases and not in passing ones. Next, for each failing test case, n additional test cases are generated to isolate its failure-inducing combination, where n is the number of model parameters. The initial candidate set is reduced based on the execution results of the additional test cases. More recently, another technique was suggested along with a tool called BEN [123–125]. In this technique, combinations are first ranked based on how suspicious they are in inducing failures. Next, additional test cases are created to refine the ranking, and the process repeats iteratively until either failure-inducing combinations are detected, or the set of suspicious combinations is empty.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245817300542
Time-Frequency Diagnosis, Condition Monitoring, and Fault Detection
In Time-Frequency Signal Analysis and Processing (Second Edition), 2016
15.1.3 Application of Instantaneous Frequency for Disturbance Propagation
The time of arrival of disturbance signals on high-voltage transmission lines is of great interest for relay and fault localization. Traditional fault localization in a transmission line network is based on a fault-study using voltage and current measurements. The traditional methodology is subject to inaccurate results, because the calculation depends on the rough assumption of the fault impedance and the type of fault. Power system monitoring systems employ GPS (global positioning systems) receivers to provide time synchronized data. GPS synchronized data enables one to solve the fault location problem based on time-of-arrival of the disturbance waveforms. The propagation properties of high voltage transmission lines have been carefully treated and shown to be dispersive [7]. To treat the time synchronized disturbance data, an accurate estimation of the arrival time is critical. In this section, an application example is provided to show how the instantaneous frequency can be utilized for the arrival time estimation.
In Fig. 15.1.3 a simulation circuit diagram is provided. For a long transmission line (345 kV), there occurs a typical line-to-ground fault which is 84.6 km away from “SEND” and 394.3 km away from “RECV” as indicated in Fig. 15.1.3. For this transmission line configuration, EMTP (Electro-Magnetic Transient Program) simulates the voltage and current disturbances. The corresponding voltage waveforms at individual buses (X0005, SEND, X0041, RECV) are provided in Fig. 15.1.4.
Figure 15.1.3. EMTP simulation circuit configuration.
From Ref. [7], © 2000 IEEE.
Figure 15.1.4. Disturbance voltage waveforms recorded at individual buses.
From Ref. [7], © 2000 IEEE.
As the transmission line is characterized by frequency-dependent attenuation and dispersion, different frequencies suffer different amounts of attenuation and also propagate with different phase and group velocities; consequently, the waveforms observed at different buses appear “distorted” or “dispersed” from the original waveform. Therefore, it is difficult to assign time-of-arrival for “distorted” signals. There are perhaps many ways to determine time-of-arrival; however, in this section we focus on one, namely instantaneous frequency.
The corresponding zero sequence mode disturbance voltage is provided in Fig. 15.1.5. The zero sequence mode is a summation of the individual three-phase waveforms and is ideally zero for a balanced three-phase system. Thus it is very sensitive to a fault on any of the three phases as shown in Fig. 15.1.5. The reduced interference distribution has been calculated for the disturbance waveforms in zero sequence mode in order to generate the instantaneous frequency of the zero sequence disturbance signals. The instantaneous frequency, its peak value, and time of arrival of the disturbance at various observation points are provided in Fig. 15.1.6. Note that the time axis in Fig. 15.1.6 is zoomed to within a 20-40 ms interval as indicated in Fig. 15.1.5. The time of arrival tarrival has been assigned as follows:
Figure 15.1.5. Zero sequence disturbance voltage waveforms recorded at individual buses.
From Ref. [7], © 2000 IEEE.
Figure 15.1.6. Instantaneous frequency estimation of the disturbance voltage waveforms in zero sequence.
From Ref. [7], © 2000 IEEE.
(15.1.3)tarrival=arg{maxt[fi(t)]}.
As the frequency bandwidth of the disturbance is broad since the disturbance is transient, the assignment of the arrival time via the peak instantaneous frequency is a reasonable approximation.
The arrival times and peak values of the instantaneous frequency are presented in Table 15.1.1. To convert times to distance we utilize the results of the analysis presented in Ref. [7], where it was shown that for a range of peak frequencies appearing in Table 15.1.1, the corresponding zero-sequence group velocity is vg = (2.6 ± 0.2) × 108 m/s. The corresponding estimates of distance are compared to the true distance in Table 15.1.1. Note the range of estimated distance agrees quite well with the known true distance. Note, also, that the peak instantaneous frequency is lower for the larger propagation distance. This is due to the fact that higher frequencies associated with the disturbance suffer greater attenuation than lower frequencies. Ongoing work in voltage-only distance localization involves refinement of the instantaneous frequency approach and consideration of the use of group delay.
Table 15.1.1. Summary of the Zero Sequence Disturbance via RID
Bus Name (unit) | Arrival Time (ms) | Peak IF (km) | True Distance (kHz) | Estimated Distance (km) |
---|---|---|---|---|
X0005 | 28.60 | 159.60 | 0.0 | N/A |
SEND | 28.90 | 100.36 | 84.6 | 72–84 |
X0041 | 29.25 | 51.22 | 162.7 | 156–182 |
RECV | 30.20 | 50.80 | 394.3 | 384–448 |
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123984999000157
Optical Wavelength-Division Multiplexing for Data Communication Networks
Klaus Grobe, in Handbook of Fiber Optic Data Communication (Fourth Edition), 2013
5.3.2 OTN monitoring
In OTN, per-layer monitoring has been defined. OAM is supported by path-trace and loop installations. Fault localization is possible with electrical and optical supervisory signals. It is possible to detect signal degradations and switch upon these conditions. Several protection and restoration mechanisms have been, or are still being, defined for OTN. Linear (point-to-point) subnetwork connection (SNC) protection mechanisms are defined in ITU-T Recommendation G.873.1 for the ODUk level. 1+1 and 1:N linear protection are supported. Further mechanisms include trail (OCh, OMS) 1+1 protection as defined in ITU-T Recommendation G.872. Shared-ring protection for the ODUk level is defined in Recommendation G.873.2. OTN restoration is standardized in ITU-T ASON.
An important feature of the OTN, and an improvement over SONET/SDH, is tandem connection monitoring (TCM). OTN TCM allows end-to-end monitoring across different administrative domains (i.e., network, operator, or vendor domains). Six independent TCM levels have been defined, allowing monitoring for nested and cascaded domains. A scenario using three TCM layers for E2E monitoring is shown in Figure 5.34.
Figure 5.34. OTN tandem connection monitoring.
In Figure 5.34, three cascaded carrier and two nested vendor domains are shown. Since one TCM layer can be reused for the metro carrier domains X and Y and the vendor domain B, three TCM layers are required in total.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780124016736000052
Submarine system powering
Koji Takehira, in Undersea Fiber Communication Systems (Second Edition), 2016
10.6.1 Capacitance measurement
When the center conductor of a cable is not exposed to seawater (open fault), a capacitance measurement may be used for the fault localization. The capacitance between the center conductor (copper tube) and the outside conductor (seawater) is measured, and the fault location is estimated from the test results. The cable and/or repeater parameters, which were obtained during the factory tests or commissioning and acceptance tests, are used to calculate the distance of the fault from the shore station.
The length (L) between the terminal station and the open fault point is calculated as:
(10.8)L(km)=Cx−n·CrCc
where L [km] is length of cable section between station and open fault point; Cx [μF] is measured capacitance; Cc [μF/km] is capacitance of cable; Cr [μF/pc] is capacitance of repeater; n is number of repeaters, where n (Cs+Cr)≤Cx<(n+1) Cs+nCr; Cs (μF) is theoretical capacitance of one cable span=Cc*Lspan, where Lspan [km] is nominal cable span between repeaters.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780128042694000106
Advances in Testing JavaScript-Based Web Applications
Ali Mesbah, in Advances in Computers, 2015
6 Handling Failures
Although testing of modern web applications has received increasing attention in the recent past, there has been limited work on what happens after a test reveals an error. After a test fails, the fault localization process much be undertaken by developers in order to identify the fault responsible for the failure. However, when a web application test assertion fails, determining the faulty program code responsible for the failure can be a challenging endeavor.
AutoFlox [62] is an automated technique for localizing code-terminating DOM-related JavaScript errors—a DOM access function returns a null, undefined, or incorrect value, which then propagates into several variables and eventually causes an exception in JavaScript code execution. AutoFlox takes a code-terminating line of JavaScript code as input and performs dynamic analysis and backward slicing of the web application to localize the cause of these JavaScript faults.
When a DOM-based test assertion fails, it is particularly challenging to locate the fault in the JavaScript code. Here, the main challenge is related to the implicit link between three different entities, namely, the test assertion, the DOM elements on which the assertion fails (checked elements), and the faulty JavaScript code responsible for modifying those DOM elements. To understand the root cause of the assertion failure, the developer needs to manually infer a mental model of these hidden links, which can be tedious. Further, unlike in traditional (e.g., Java) applications, there is no useful stack trace produced when a web test case fails as the failure is on the DOM, and not on the application’s JavaScript code. This further hinders debugging as the fault usually lies within the application’s code, and not in its surfacing DOM. Camellia [63] is a tool that helps to uncover these implicit links. First, it automatically links a test assertion failure to the checked DOM elements and subsequently to the related statements in the JavaScript code. Second, it incorporates a dynamic slicing method for JavaScript that reduces the amount of noise encountered by developers when debugging. The slicing method is based on a selective instrumentation algorithm to reduce the performance overhead and trace size. Finally, once a test failure is connected to the relevant slice, Camellia visualizes the output to abstract away details and relate the test failure to the corresponding computed JavaScript slice. Figure 15 depicts an example of the visualization output of Camellia for a test assertion.
Figure 15. Camellia: connecting DOM-based test assertion failures to related JavaScript code.
When a fault is localized, the next natural step would be to repair the fault. Vejovis [64] is a technique that tries to automatically find a fix for a JavaScript fault. First, the authors try to understand common fixes applied by programmers to JavaScript faults. Based on these findings, they propose an automated technique for providing repair suggestions for DOM-related JavaScript faults.
Related to program repair are prevention techniques. For instance, Jensen et al. [65] and Meawad et al. [66] introduce techniques that transform unsafe eval calls in JavaScript code to functionally equivalent without the use of eval.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/S0065245814000114
MPLS Transport Profile
Vinod Joseph, Srinivas Mulugu, in Network Convergence, 2014
MPLS-TP OAM Procedures
MPLS-TP provides mechanisms to support in-band OAM functions such as continuity check, connectivity verification, loss measurement, delay measurement, remote defect indication, and alarm indication signal. Like legacy transport networks, these mechanisms allow for fault localization, performance monitoring, remote indications, and alarm suppression. Rather than define new OAM protocols, the MPLS-TP IETF drafts specify mechanisms (via G-Al/G-Ach) to reuse traditional MPLS and carrier Ethernet OAM procedures such as BFD and Y.1731.
The BFD and Y.1731 procedures can be used to monitor LSPs, sections, or PWs. In addition, recent IETF drafts also define Fault OAMs (AIS, RDI, and LKR) for signal failure detection, for propagation of the signal fail condition across layers, and for alarm suppression. MPLS-TP provides mechanisms to support in-band OAM functions such as continuity check, connectivity verification, loss measurement, delay measurement, remote defect indication, and alarm indication signal.
Read full chapter
URL:
https://www.sciencedirect.com/science/article/pii/B9780123978776000072
Качественно локализованный продукт чем-то напоминает хамелеона. Перевод настолько сливается с оригиналом, что, погружаясь в атмосферу игры, геймер не чувствует разницы. Он в родной языковой стихии. Ему доступна вся гамма эмоций и смыслов, которая была заложена в геймплей. Сам факт того, что это перевод, может даже не прийти ему в голову. Это в идеале. Но, к сожалению, так бывает не всегда. Нередко во время игры геймеру приоткрывается изнанка рабочего процесса.
И даже если игру много раз перепроверяли на всех этапах локализации, это еще не гарантия того, что где-нибудь в маленьком окошке интерфейса не спрячется инопланетный символ. Или пара опечаток в техническом описании патча. Ошибки обнаруживаются в самых неожиданных местах. Хуже — когда уже самими игроками. Но, к счастью, можно избежать таких казусов, протестировав локализацию. О чем идет речь и как это работает?
Что такое тестирование локализации?
Локализационное тестирование — это комплексная проверка локализованной версии продукта на соответствие культурным, лингвистическим, правовым и другим особенностям целевой страны. Проверяются:
- отображение локализованных текстовых, графических материалов и элементов интерфейса;
- перевод текстовых материалов: основного контента, системных сообщений, элементов интерфейса пользователя и т. д.
Тестирование локализации — это своеобразная «уборка» после работы переводчиков, актеров озвучивания, звукооператоров и звукорежиссеров. Но стоит ли это потраченных средств и времени? Или можно понадеяться на работу локализаторов — что они «наведут порядок» сами? Эти вопросы встают перед каждым разработчиком мультиязычных игр. И прежде, чем на них ответить, стоит взглянуть на процесс изнутри.
Представим, что решение принято — нужно тестировать. Что происходит дальше?
Подготовка к тестированию
Первым делом тестировщикам высылаются материалы, позволяющие быстро сориентироваться в новой игре:
- руководство по игре или дизайн-документ, описывающий уровни, квесты, миссии и основные игровые механики;
- глоссарий и база текста;
- скриншоты и видеоролики;
- тест-кейсы и подробные инструкции по запуску игры и активации чит-кодов.
Когда дело касается больших проектов, могут выслать даже специальное оборудование для тестирования. В некоторых случаях — поскольку это ранняя версия игры и вся информация конфиденциальна — разработчики предоставляют доступ по закрытой сети. Или подключают и настраивают специальные программы.
Безусловно, чем больше у тестировщиков материалов, тем проще им вникнуть в происходящее и обнаружить ошибки. Но нередко приходится оценивать игру методом «черного ящика» — без подсказок и наводок, с позиции обычного игрока.
Хотя, если тестируется только озвучка, можно обойтись и без игры. Достаточно аудиофайлов и видеороликов, чтобы проверить качество звука, синхронность реплик и артикуляции персонажей и обнаружить возможные шумы и неудачно склеенные фразы.
С мобильными продуктами, программным обеспечением и сайтами все еще проще. Здесь проверить перевод можно по скриншотам элементов интерфейса.
Инструментарий тестировщика локализации
Задача тестировщика — обнаружить баги в локализованной версии. Его основной инструмент — баг-трекер, или система отслеживания ошибок. Это программа для занесения отчетов о найденных багах. Составленные отчеты, или баг-репорты, направляются напрямую разработчикам и должны четко отвечать на три вопроса:
- Что идет не так?
- Где обнаружен баг?
- Когда или при каких условиях он воспроизводится?
Может быть указана дополнительная информация:
- Версия тестируемого продукта, платформы или устройства, на которых этот баг был замечен.
- Приоритет — low, medium, high, highest — низкий, средний, высокий, максимальный. Степень зависит от того, насколько критичен дефект. Highest — необходимо срочно исправить.
Баг-трекеры от разных компаний немного отличаются друг от друга, но суть одна: нужно максимально сжато и четко передать шаги воспроизведения ошибки. И зафиксировать спорный момент на скриншоте или видео. «Жизненный цикл» бага — от его нахождения и до устранения — отражается в статусе задачи.
Как происходит тестирование локализации
Поиск багов локализации — особый вид проверки. Условно она бывает двух типов.
Во-первых, это косметическая оценка переведенных текстов. Они должны находиться на своем месте, корректно отображаться, быть читабельными и соответствовать глоссарию игры.
В русской локализации — слово на испанском? Баг. Вместо «Закрыть» написано «Закры»? Баг. Вместо текста — набор непонятных символов? Баг. Шрифт настольно мелкий, что хочется достать лупу? Печальная история: не совсем баг, но занести в отчет надо. А дальше либо дизайнеры поменяют шрифт, либо редакторы сократят перевод.
А ведь есть еще и мобильные игры, где в маленьких окошках должны умещаться длинные русские слова. И любое обновление дизайна может привести к неожиданным последствиям.
Во-вторых, игра оценивается с лингвистической точки зрения: вычитывается весь текст, который в ней встречается. Тестировщики обращают внимание на опечатки, пропущенные знаки препинания и пробелы, отсутствие или искажение перевода, некорректные сокращения и капитализацию букв, пунктуационные ошибки и несоответствие стилю.
Также нужно делать скидку на то, что у переводчиков не всегда есть доступ к контексту. В этом случае оценить результат может только тестировщик. Например, миловидный женский персонаж вдруг говорит: «Я тогда был еще очень молод…». В теории, можно определить пол по имени. Но на практике… Говорит ли вам о чем-нибудь имя Малиналли?
И подобные баги не редкость. Вот, пожалуй, самые типичные из них:
- Untranslated text. Непереведенный текст. Тут все просто. Внезапно появляется кусок английского текста в русской версии. Или испанского — в арабской.
- Overlap. Наложение. Один блок текста накладывается на другой.
- Truncation. Усечение. Слово или предложение обрезается элементом интерфейса, иконкой, границей экрана.
- Misalignment. Неправильное расположение. Блок текста смещен, затрудняет восприятие, мешает игре.
- Missing text. Пропущенный текст. Нет текста — там, где он должен быть.
Если у тестировщика есть доступ к базе текста или к звуковому редактору, он может вносить исправления сам. Например, если замечает грамматические, пунктуационные ошибки, неточности перевода или посторонние звуки в аудиофайлах. Но все это должно быть согласовано с редакторами и звукорежиссерами.
Предложения и пожелания более общего характера направляются менеджеру проекта — связующему звену между всеми участниками тестирования. Слаженная командная работа важна на всех уровнях.
Три, два, один… Пуск!
Казалось бы, тестирование локализации — однозначно полезный этап. Но иногда разработчики пропускают его из-за нехватки денег, времени и иных причин. И тогда локализованный продукт «тестируют» уже сами игроки.
Но, увы, далеко не все пользователи готовы прощать ошибки. Даже пара, казалось бы, незначительных помарок может вызвать у них раздражение и отбить желание играть.
Бывает, над переводом трудится команда настоящих профессионалов с большим опытом. Но из-за того, что локализация не была протестирована, в релизную версию просачивается парочка, скажем так, не очень приятных моментов. Да-да, всего пара мелочей — а форумы уже пестрят комментариями в духе «За что я деньги плачу?!» или «Локализаторы как всегда…».
Тестирование локализации как осмотр ракеты перед запуском. Над ней трудились лучшие из лучших, но никто не сомневается в необходимости финальной проверки всех систем. Ответственность слишком велика.
Видеоигра — тоже не бумажный самолетик. Запуская ее в международное пространство, вы хотите быть уверены, что ни один шуруп не отвалится на взлете и все ваши усилия окупятся в будущем.
Именно для этого и существует локализационное тестирование — чтобы подстраховать вас в самую ответственную минуту.