12. Writing Effective Defect Reports
• Condense - Say it clearly but briefly
• Accurate - Is it a defect or could it be user error, misunderstanding, etc.?
• Neutralize - Just the facts. No zingers. No humor. No emotion.
Writing Effective Defect Reports, Kelly Whitmill, IBM Printing Systems Division
https://www.stickyminds.com/sites/default/files/article/file/2012/XDD3655filelistfilename1_0.pdf
12
13. Writing Effective Defect Reports
• Condense - Say it clearly but briefly
• Accurate - Is it a defect or could it be user error, misunderstanding, etc.?
• Neutralize - Just the facts. No zingers. No humor. No emotion.
• Precise - Explicitly, what is the problem?
• Isolate - What has been done to isolate the problem?
• Generalize - What has been done to understand how general the problem is?
13
14. Writing Effective Defect Reports
• Condense - Say it clearly but briefly
• Accurate - Is it a defect or could it be user error, misunderstanding, etc.?
• Neutralize - Just the facts. No zingers. No humor. No emotion.
• Precise - Explicitly, what is the problem?
• Isolate - What has been done to isolate the problem?
• Generalize - What has been done to understand how general the problem is?
• Re-create - What are the essentials in triggering/re-creating this problem? (environment, steps, conditions)
• Impact - What is the impact to the customer? What is the impact to test? Sell the defect.
• Debug - What does development need to make it easier to debug? (traces, dumps, logs, immediate access, etc.)
• Evidence - What documentation will prove the existence of the error?
14
15. Пословицы
1. Краткость – сестра таланта: Говорим и пишем понятно и покороче.
2. «Давайте не будем нервничать и неспеша во всем разберемся»: Это правда дефект
или неверно интерпретированное нами требование из документа, или «просто» сами
забыли что-то подключить, и т.д.?
3. Смех без причины – признак известно чего: Только факты. Не надо сарказма, юмора и
эмоций.
4. Берём быка за рога: Без ненужных предисловий – в чем именно проблема?
5. Вот где собака зарыта: Что было сделано, чтобы понять что проблема именно здесь?
6. За деревьями леса не увидели: Может быть наша проблема гораздо шире?
7. Спрятал концы в воду: Что необходимо сделать, чтобы вызвать проблему и
воспроизвести её (среда, шаги, условия)?
8. Гроша ломаного не стоит: Почему плохо от этого будет конечному пользователю? Как
это сказывается на тестировании? «Продайте» найденный вами дефект.
9. Лучше один раз увидеть, чем сто раз услышать: Что разработчику нужно, чтобы понять
причину проблемы (логи, картинки, видео-файл, доступ, и т.д.)
10. Доверяй, но проверяй: Документация есть, где написано, как должно работать?
Процитируйте её и дайте на неё ссылку.
15
16. Patriot Software Bug
25 февраля 1991 года, Дахран, Саудовская Аравия
Батарея Патриот не стала сбивать ракету Scud
Попадание в казарму привело к гибели 28 человек
Около 97 человек получили ранения
Расследование обнаружило ошибку в ПО
16
17. Patriot Software Bug
Для хранения времени использовалось 24 бита
Значение 0.1 секунд в бинарном виде:
0.0001100110011001100110011001100....
(1/24+1/25+1/28+1/29+1/212+1/213+...)
Ошибка округления
0.0001100110011001100110011001100....
или 0.000000095
Предполагалось, что комплекс будет работать короткое время
Систему не перегружали 100 часов
0.000000095 100 60 60 10=0.34 секунды
Скорость Scud 1,673 метра в секунду -> ошибка 568 метров
17
21. Patriot Software Bug
25 февраля 1991 года, Дахран, Саудовская Аравия
Сообщение об ошибке 11 февраля
Ответ – это не баг а фича
Workaround рестартовать каждые 8 часов
Рестарт 60 – 90 секунд
Исправление готово 16 февраля
Доставка обновлений в Дахран
26 февраля
21
24. Mizuho Securities
• 12 October 2005
• Attempts to sell a single J-Com stock for 610,000 Yen ($5,041)
• Mistakenly price and quantity were swapped
• Risk systems failure:
– Mizuho Securities
– Tokyo Stock Exchange
• Estimated loss $225 millions
• This type of errors is called
Fat Finger
24
25. Fat Finger Order on NASDAQ from ABN AMRO Client
• 18 September 2012, Stockholm. A trader had the intention of
posting a sell order for 5,000 SKF B shares. Due to an input
error with the Client, the order volume field was populated
with a negative value (-5,000)
• Instead of returning an error, the system converted the value
into a random 9-digit figure - 294,962,296
• The Sell Order corresponded to approximately 71 % of the
total outstanding volume in the SKF B share. The Sell Order
resulted in execution of 813,442 shares
25
26. Flash Crash
• 6 May 2010, Waddell & Reed hedges exposure in equities
• Algo to sell 75,000 E-mini contracts (~$4.1b) with 9% participation target
• No price or time constraints in the algo, only volume traded during the
previous minute
• Initial selling was absorbed by HFT and arbitrageurs - buy E-mini, sell SPY or
basket of equities. Lack of liquidity and hot-potato exchange between HFT
increased volumes and selling pressure from the algo
• Sharp decline in prices within 5 minutes. Trigger of across the board
volatility interruptions
• Participants are leaving the market, causing liquidity
crisis in equities and execution against stub quotes
• Market recovers within minutes
26
40. Facebook IPO
• 18 May 2012, NASDAQ, One of the largest IPOs in history
• Secondary trading is preceded by a designate Display Only Period (DOP)
• Multi-component architecture that included Matching Engine, IPO Cross
Application and Execution Application
• At the end of the DOP, NASDAQ’s “IPO Cross Application” analyzes all of
the buy and sell orders to determine the price at which the largest
number of shares will trade and then NASDAQ’s matching engine matches
buy and sell orders at that price. Usually takes 1-2 ms
• NASDAQ allowed orders to be cancelled at any time up until the end of the
DOP – including the very brief interval during which the IPO cross price is
calculated. After calculation is completed the system performed orders
validation check between ME and “IPO Cross Application”. If any of the
orders were cancelled after the start of the cross, the system will have to
repeat the calculation
40
41. Facebook IPO
• Over 496k orders participated in the cross and its duration exceeded 20ms
• Order cancellation arrived during this period and application had to repeat
the calculation. Two more cancellations arrived during the second
iteration and four more during the third
• IPO Cross Application went into infinite loop at 11:05
• NASDAQ team switched off validation check on the secondary system and
performed failover 25 minutes after the start of the loop
• Unknown at that moment 38k orders submitted between 11:11 and 11:30
were stuck and had not participated in the uncross. It created another
discrepancy, this time with Execution App and Members who were not
able to receive confirmation for orders executed in the cross until 13:50
41
42. Принципы тестирования
• Нельзя обнять необъятное
• Раньше сядешь, раньше выйдешь
• Все что нас не убивает делает нас сильнее
• Примерами ничего ни доказать, ни опровергнуть нельзя
• Беда не приходит одна
• У кого щи жидки, а у кого бриллианты мелки
• Дала не кайся, легла не ворочайся
• Ничто не бывает без причины
• Плохо танцующему - всегда брюки широки
• Порядок бьет класс
• Практика - критерий истины
42
44. Knight Capital Events
• 1 August 2012, USA
• Knight Capital – one of the most successful HFT firms
• Implemented changes related to Retail Liquidity Program в
NYSE
• SMARS – ultra-fast order router
• Source code responsible for the legacy functionality PowerPeg
• 212 parent orders, millions child orders
• Accumulated loss – $460m or $170k/sec
• Incorrectly configured risk systems
• Deployment on 7 servers instead of 8…
44