Велике зламане збереження є доказами, не поясненням
Коли збереження не завантажується, квест зникне, або міграція порушує правила гри, перша артефакт може бути величезною: сотні полів, приглушених зібрань, довга історія дій, зміст знімок, і навколишнє середовище, яке не існує. Цей артефакт цінний, тому що він відтворює проблему. Складно, тому що це дає розробнику набагато більше інформації, ніж вони можуть призвести до того, що відразу. Читання його лінії часто виробляє вгадки, а не пояснення.
Дельта відключення зміни об'єктива. Замість того, щоб запитати людину, щоб помітити одне відповідне значення, попросіть детермінувати предикацію, чи кандидат все ще демонструє невдачу. Потім видаліть або спрощує частини держави, поки предикант залишається справжньою. Остаточний результат є мінімальним регресивним випадок: досить мало для огляду, стабільний достатньо для повторення, і явний про варіант, який залишається порушеним.
Мінімал не означає візуально крихітні або універсально найменші. Корисна мета - це матеріально зменшена контрабанду під обмеженою вартістю. Редуктор може зупинитися, коли не може бути видалена ціла група, коли бюджет виконання вичерпається, або коли фіксація досить зрозуміла, щоб стати регресивним тестом. Збережена властивість має більш ніж абстрактне оптимальне.
Створення репродуктивності до зменшення
Скорочення тільки працює, коли відмова повторюється. Спочатку захоплює точний присуд: чи поточний навантажувач кидає позначену помилку, робить незважливе повернення помилковим, робить отриманий стан відрізняється смислово від очікуваного результату, або робить послідовність дії недійсним грантом? Уникайте використання вагового індексу, таких як «гра виглядає неправильно». Призначається, що необхідно повернути те ж саме відповідь для тих же вводів, або редуктор буде гасити шум.
Запис навколишнього середовища поряд з кандидатом: збір додатків або комісія, версія міграції, версія адаптера, зміст і налаштування знімку, детерміналізоване насіння, прилади платформи, і початкова фіксація хеш. Якщо живий годинник, випадковий джерело, дистанційна конфігурація fetch, або фоновий працівник може змінити результат, замінити його детерміналістичною тестовою межею або записувати її як явного обмеження. редуктор не повинен таємно перевірити нове середовище на кожну спробу.
Для збоїв дій, збереження початкового стану і замовлених дій окремо. Остаточний стан може приховати операцію, яка її виготовляла. Послідовна фіксація може виражати «починок з цього профілю, виконувати ці сім запитів, потім варіант не виходить». Що поділ дозволяє редуктору усаджувати поля, колекції, і дії без заплутування одного виду доказів для іншого.
Зменшити поля та колекції в перегородках
Починайте з грубими перегородками. Розділіть верхній рівень збереження в польові групи, видаліть одну групу з робочої копії, і запустіть предикату. Якщо відмова зберігається, зберігайте видалення; якщо вона зникне, відновлює групу і піддається її. Це більш ефективний, ніж видалення одного поля в час від великого об'єкта. Продовжуйте в гніздові записи і колекції один раз визначено відповідну область.
Збірки потребують особливого догляду. Інвентарні елементи, записи квестів, лічильники та історія події можуть звернутися до одного. Видалення одного запису може змінювати індекси списку, правила ємності, або сукупні баланси. Нормалізація замовлення, де замовлення не є значущим, збереження стабільних ідентифікаторів, де посилання вимагають їх, а стан, чи не відсутній елемент повинен бути відсутній, null або представлений явною спадщиною. Редуктор не повинен перетворити реальний дефект міграції в похибку парсера, викликану неправильним тестовим введенням.
Використовуйте значення, усадку після структурного скорочення. Перемістіть цілі до нуля або важливого граничного, скорочених рядків, замініть довгий ідентифікатор з безпечним ідентифікатором тесту, а також зменшити часові запаси до стабільного епоху тільки тоді, коли їх точне значення не є станом під тестом. Кожен спрощування повинен тримати предикувати вірну. Це часто показує, що видимий складний профільний баг дійсно "одний ретиредний елемент ID плюс повний інвентар" або "одний негативний лічильник після пропущеної версії".

Зменшення послідовностей дії без зміни їх значення
Деякі збої виникають тільки після часу: покупка птиця після відключення, збереження після оновлення конфігурації або міграції після переривається підручник. Застосувати ту саму ідею розділення дій. Вилучити стиглу половину послідовності, повторити і зберегти видалення, якщо не варіант все ще не вдається. Потім субдів. Збережіть необхідні дії налаштування, але виклик випадкових навігація, повторне читання і не пов'язані мутації.
Дії повинні мати стабільні параметри і результат очікування. Редуктор, який замінює кожен запит із свіжим випадковим ідентифікатором транзакцій, більше не тестує оригінальну ретривальну семантику. Редуктор, який видаляє початкову функцію-flag навантаження може змінювати контекст конфігурації. Записувати ідентичність дій, відповідні вводи, довірені проти ненадійного джерела, а точка, в якій інваріант перевіряється. Це робить кінцеву послідовність корисним як розробникам, так і QA.
Коли послідовність залежить від опуклості, виберіть детермінований графік. Запис замовлення, в якому працівники або імітовані клієнти досягають критичних меж. Якщо відмова тільки відбувається під забігом, тест може знадобитися керований бар'єр, а не залежних сонних дзвінків. Мета полягає в тому, щоб не претендувати конвагію, це зробити, що спостерігається, достатньо для того, щоб причина.
Збереження порушеного варіанту в кінцевому артефакті
Невелика фіксація без затвердження стає ще одним загадковим файлом. Зберігайте порушену варіантну сторону фіксації в чітких умовах: дублікувати заголовок для одного ідентифікатора транзакцій, невідомий каталог посилання після міграції, негативна валюта, недоступні заповнені квести, або сеймантичні невідповідності після круглої поїздки. Включаючи очікувану класифікацію і спостерігався один. Фіксація повинна бути недійсною з причини, а не просто тому, що функція повертається помилково.
Порівняти до і після того, як держава семантична. Сирий диф може містити повторювані мітки часу, перероблені масиви, генеровані ідентифікатори, або форматування послідовності. Смантичний диф висвітлює значення, які впливають на інваріант. Він може повідомити, що пункт змінений від дійсної спадщини спадаючого до невідомого ID, або що баланс був підсилений двічі для того ж ключа під проводом. Тримайте нормалізатор вузький і документальний; широкий нормалізатор може стирати дуже дефект редуктора, призначений для збереження.
Пишіть релей, що проявляється при фіксуванні шляху, джерело хешу, зниженому хеші, навколишньому вигляді відбитків пальців, детермінативному насінні, послідовність дії, якщо будь-який, попередньо позначений ім'я, і очікуваний результат. Цей проявляється дозволяє іншій людині перебігти справу без доступу до оригінального негабаритного стану. Це також робить світильник придатним для CI, де мінімований чохол повинен бути швидким і чітким, а не залежним від приватної локальної машини.
Знайте при зниженні слід припинити
Кожна предикація часу виконання витрат. Деякі міграції є повільними; деякі сценарії потребують сервісних адаптерів; деякі умови провалу несуть до того, як навколишнє середовище фіксується. Визначте бюджети для спроб, часу стін та кількості артефактів. Стоп, коли фіксація досить мало, щоб пояснити проблему, коли розділ не може бути видалений без втрати несправності, або коли решта робота вимагає прийняття домену, а не механічної усадки.
Редукція має ліміти. Не можна визначити, чи має місце спадщина на карті до заміни, чи потрібна компенсація запиту, або чи є збережена вартість є правовою в редизайнованій економіці. Ці рішення про продукт. Це також не може безпечно зменшити зашифровані або чутливі дані, скопіюючи його в широкий інструмент. У тих випадках створити синтетичний еквівалент, який зберігає структурний стан, або зберігати обмежене розслідування в межах відповідного ліміту доступу.
Не публікувати стан сирого гравця як регресивна фіксація. Прізвища, контактна інформація, дані про надходження, ідентифікатори пристрою, токени доступу та будь-яке поле не потрібно для предикації. Мінімальна фіксація є можливістю поліпшення конфіденційності, а також діагностики. Остаточний артефакт повинен бути безпечним для включення в тестовий корпус проекту і досить корисним для запобігання рецидиву.
Практичний контроль
- Визначте детермінантну відмову перед видаленням будь-якого стану.
- Запис програми, адаптера, вмісту, конфігурації, насіння та фіксування навколишнього середовища.
- Зберігати початковий стан і послідовність дії окремо, коли поведінка розгортається протягом часу.
- Знижувати групи верхнього рівня спочатку, потім в'язувати поля, колекції і значення.
- Збереження посилань та структурної дії при складних сеймантичних релевантах.
- Використовуйте керований графік конваси замість строково-залежних відкладень.
- Зберігайте порушену варіабельність, очікувану класифікацію, семантичний диф, а повторне відтворення проявляється з результатом.
- Стоп на корисному зв'язаному контрексамплі; не оптимізуйте невизначено для теоретичної мінімізації.
- Редакт або синтез чутливих даних перед фіксацією надходить на регулярні тести.
Часті питання
Чи є дельта-дебулінг тільки для аварійних ситуацій?
Немає. Попереднє визначення може бути аварійним, але це також може бути порушена гра варіантних, неправильного підрахунку, не вдалося зберегти навантаження круглої поїздки, відхилений класифікації міграції або невідповідність між очікуваним і спостерігаючим станом. Це найбільш корисно, коли будь-який складний вхід надійно виробляє результат, який не повинен відбуватися.
Що робити, якщо з ладу міжмітента?
Спочатку знижують недетермінізм. Зафіксуйте насіння, захоплюючи конфігурацію, ізолюють час і межі мережі, а також контрольну опуклість. Якщо результат залишається імовірністичним, використовуйте поріговий індекс тільки з обережністю і записом, що обмеження. Стійкий менший сценарій, як правило, більш цінний, ніж велика пластична фіксація.
Чи може знижувати дані про виробництво?
Зменшення маршруту не повинно. Використовуйте синтетичні або червоні світильники та кероване середовище. Обмеженням слідства інциденту може знадобитися захищені докази, але це окремий операційний процес з контролем доступу, правилами збереження та оглядом. Не робіть вихідний пакет копіювання даних гравця.
Що таке Persistium?
Persistium є в розробці як локально-першу сімейство продуктів надійності. Ця замітка представляє в цілому корисний процес скорочення і не стверджує, що публічний продукт автоматично діагностує довільні заощадження, спостерігався про невдачі клієнтів або працює служба аналізу.







