Стратегияи санҷиши ядро
1) Принсипҳо
Тавозуни пирамида-трофей. База - озмоишҳои босуръати модулӣ ва шартномавӣ; дар боло - компонент ва ҳамгироӣ; дар апекс қабати ҳадди аққал, вале арзишманди e2e аст.
Shift-чап. Ҳар қадаре ки мо камбудиҳоро (линтер, таҳлили статикӣ, моликият) ба даст орем, арзонтар аст.
Аз рӯи тарроҳӣ детерминистӣ. Мо вобастагии вақт, шабака, тасодуфӣ ва берунаро идора мекунем.
Иқтисодиёти сифат. Ҳама гуна санҷиш "суғурта" аст: ҳадаф кам кардани хароҷоти умумӣ (камбудиҳо + нигоҳдории санҷиш) мебошад.
Самти хатар. Фарогирӣ ба инвариантҳои корӣ ва протоколҳо (шартномаҳо, аблаҳӣ, пайдарҳамӣ) тамаркуз мекунад.
2) Сатҳи санҷиш ва соҳаҳои масъулият
2. 1 воҳид (модулӣ)
Мантиқи покро бе I/O. санҷед.
Мо танҳо сарҳадҳоро тар мекунем (порт/адаптер), мо барои маълумот заводҳоро истифода мебарем.
Тез (≤ 50 -100 мс/тест), параллел.
2. 2 Шартнома (таъминкунанда ↔ истеъмолкунанда)
Шартномаҳои API-ро (HTTP/GRPC/event) байни хидматҳо ислоҳ кунед.
Мо равиши истеъмолкунандаро истифода мебарем: шартномаҳо дар VCS нигоҳ дошта мешаванд, ки дар CI таъминкунанда тафтиш карда мешаванд.
Ноустувории ҳамгироии e2e-ро коҳиш диҳед.
2. 3 Компонент (дар болои модул, бо нигаҳдории воқеӣ)
Мо як қисми хидматро бо пойгоҳи воқеӣ/кэш дар контейнер (Testcontainers) оғоз мекунем.
Мо муҳоҷирати схема, индексатсияҳо, амалиётҳо, қуфлҳоро тасдиқ мекунем.
2. 4 Интегратсия/Система (роҳҳои ниҳоӣ байни хидматҳо)
Мо як қатор хидматҳоро дар муҳити ҷудогона баланд мебардорем.
Мо инвариантҳои ниҳоӣ-ниҳоиро месанҷем: транзаксия, ретрай, аблаҳӣ, коркарди хатогӣ.
2. 5 E2E (қабати ҳадди ақали "арзишманд")
Протоколҳои воқеӣ ва муҳити зист "ба монанди фурӯш", аммо сенарияи маҳдуд муқаррар карда шудааст: пардохт → тасдиқи → ҷойгиркунӣ; бақайдгирӣ → санҷиш → вуруд.
Мо барои озод кардан ва регрессия хусусиятҳои дорои хавфи баландро истифода мебарем.
3) Меъмории санҷишӣ
Бандарҳо/адаптерҳо (шашкунҷа). Ядрои тиҷорат дар бораи HTTP/SQL намедонад; вобастагӣ тавассути интерфейсҳо амалӣ карда мешаванд.
Тазриқи вақт/тасодуфӣ. 'Соат', 'Тасодуфӣ' - вобастагӣ; дар озмоишҳо мо ислоҳ мекунем.
Абстраксияи танзимшавандаи I/O. Навбатҳо, DB, KMS - тавассути интерфейс бо татбиқи санҷиш.
Инвариантҳои функсионалӣ. Мо postconditions ва predicates-ро ба таври возеҳ таҳия мекунем - озмоиш ва назорат осонтар аст.
4) Маълумот барои санҷишҳо
Ба ҷои дастгоҳҳои статикӣ JSON заводҳо/бинокорон: камтар осебпазир.
Тухмиҳои Idempotent ва барқарор кардани қалмоқе DB пеш аз санҷиш (муҳоҷират → тухми → тухмӣ).
Каталогҳои парванда: "меъёрҳо", "кунҷҳо", "хатогиҳо", "бетартибӣ".
Синтетика ба ҷои PD воқеӣ: генераторҳо, ниқобҳо, профилҳои махфият.
5) Рақобат ва аблаҳӣ
Санҷишҳои мусобиқа: Вурудоти рақобатӣ/захираҳо/қуфлҳо.
Санҷиши калидҳои idempotent (масалан, '(амалиёт, external_id)'): зангҳои такрорӣ ҳолати худро тағир намедиҳанд.
Ретрай ва танаффус: мо дар сурати хатогиҳои муваққатӣ дурустиро кафолат медиҳем.
dedupe_key = hash(op + external_id)
if exists(executions, dedupe_key): return previous_result else:
reserve(dedupe_key)
result = do_operation()
store(executions, dedupe_key, result)
return result
6) Вақт, вақт, минтақаҳои вақт
Ҳама вақтҳои захирашуда UTC мебошанд; дар озмоишҳо мо 'Fixed' Clock '-ро истифода мебарем.
Мо ҳолатҳои DST (нусхабардорӣ/пазмонҳои соат), тирезаҳои "рӯзи маҳаллӣ" -ро месанҷем.
Мо вақтро бо соатҳои якхела тафтиш мекунем; simulate jitter NTP.
7) Устуворӣ ва бетартибӣ
Сӯзандоруи хато: хатогиҳои шабака, 5xx, таъхирҳо, таназзули қисман (кэш дастнорас).
Озмоишҳои бетартибӣ дар муҳити пеш аз prod: ҷудо кардани гиреҳҳо, навбатҳои изофабор, шикастани BGP/Anycast (тақлид).
Сиёсати бозгашт ва таназзули UX: санҷишҳо бояд "таназзули зебо" -ро тасдиқ кунанд.
8) Иҷро
Нишондиҳандаҳои хурд барои алгоритмҳои интиқодӣ (бо ислоҳи CPU/alloc).
Профилҳои сарборӣ: ибтидоӣ (p50/p95), стресс (қулла), дароз (шустан) барои ихроҷи хотира.
Дарвозаҳои регресс: сохтан ноком аст, агар таъхири p95 аз ҳолати аввала бадтар бошад> X%.
9) Бехатарӣ ва риояи
SAST/Lint: ҷустуҷӯи осебпазирӣ/антипаттернҳо.
DAST/IAST: сенарияҳои асосӣ дар стенд (намунаҳои XSS/SQL/SSRF).
Асрори скан: ягон калид/парол дар рамз ва артефактҳо нест.
Санҷишҳои махфият: набудани PD дар гузоришҳо/пайгирӣ, риояи "идоракунии ризоият", профилҳои беном барои боргузорӣ.
10) Нишондиҳандаҳои сифат ва SLO
Сатҳи гузариши санҷиш ва шохиси заиф.
Ҳадафи фарогирӣ:- 90-100% барои модулҳои муҳими ядро,
- 70-80% барои периферия (бо таваҷҷӯҳ ба инвариантҳо).
- Холҳои хавф: маҷмӯъ: тағирот дар файлҳои интиқодӣ × паст шудани нишондиҳандаҳо × камбудиҳои нав.
- Буҷаи хато: маҷмӯи prod-SLO (вақти/хатогиҳо) бо таҷрибаҳо ва басомади озод.
11) CI/CD ва дарвозаҳо
Матритсаи марҳила:1. Линт/Формат/Намуди Санҷиш
2. Воҳиди + Дар асоси амвол
3. Таъминкунандаи шартнома/истеъмолкунанда
4. Компонент (Тестконтейнерҳо)
5. Интегратсия + дуди Перф
6. Амният (SAST/Асрҳо)
7. Сохтан/Баста + SBOM
8. Ҷойгир кардани дуди пеш аз prod + e2e + бетартибӣ
Дарвозаҳо: ҳангоми бастани шартномаҳо, зиёд шудани таъхир, осебпазирии нав.
Кэш ва sharding: суръатбахшии қубур аз сабаби параллелизм ва давишҳои афзоянда (барои модулҳои тағирёфта).
12) Санҷишҳои нопок: ташхис ва табобат
Ауторун + Кворум (2/3 давр).
Детектори намунаҳои Flaki: вобастагӣ аз интизориҳои вақт/тасодуфӣ/номуайян.
Карантин бо SLA: санҷиш релизҳоро манъ намекунад, аммо бояд дар рӯзҳои N ислоҳ/аз нав навишта шавад.
Таҳаммулпазирии сифр ба flucks дар "аслӣ" -и роҳи интиқодӣ.
13) Санҷиши амвол, мутация ва фаза
Ба амвол асос ёфтааст: мо хосиятҳо (коммутатсия, номутаносибӣ, якрангӣ), генераторҳои сарҳадиро таҳия мекунем.
Озмоиши мутатсия: мо "қувват" -и санҷишҳоро чен мекунем (оё онҳо мутацияҳои пешниҳодшударо мекушанд).
Fuzzing: протоколҳо/парсерҳо/форматҳо (JSON, Protobuf, CSV), хусусан дар ҳудуди амният.
prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model
14) Мушоҳида ва муошират бо санҷишҳо
Пайҳои санҷишӣ (пайгирӣ дар гузоришҳо): такрори пешакӣ қулай аст.
Аксҳои ченакҳо ҳангоми иҷрои иҷро ҳамчун артефакт нигоҳ дошта мешаванд.
Назорати журнал: майдонҳои ҳассос нестанд, андозаи журнал дар дохили SLO.
15) Ҳуҷҷатгузорӣ ва тартибот
Дастури санҷишӣ: дар куҷо санҷиш гузаронидан, навиштани корхонаҳо, чӣ гуна нав кардани шартномаҳо.
Китобчаҳо: ҳодисаи такрорӣ, ташхиси зуд, бозгашти озод.
Феҳристи ғайривариантӣ: рӯйхати кафолатҳои система ва истинод ба санҷишҳо/огоҳиҳои дахлдор.
16) Рӯйхати назорати меъморон
1. Инвариантҳои ядро ва роҳҳои интиқодӣ тавсиф карда шудаанд?
2. Оё матритсаи сатҳи санҷишҳо ва SLO (вақт, субот) мавҷуданд?
3. Шартномаҳо дар CI дар таъминкунанда ва истеъмолкунанда санҷида ва тасдиқ карда мешаванд?
4. Вақт/тасодуфӣ/шабака, ки дар санҷишҳо назорат карда мешавад (Fixed: Clock, Fault-injector)?
5. Танзимоти Testcontainers/пойгоҳи додаҳои ҷудошуда, оё муҳоҷират тафтиш карда мешавад?
6. Оё пойгоҳҳои иҷро ва дарвозаҳои регрессия мавҷуданд?
7. Оё санҷиши SAST/Secrets-scan ва сабти махфият фаъол аст?
8. Flaky сабт шуда истодааст ва оё SLA барои ислоҳ вуҷуд дорад?
9. Оё алоқаи байни санҷишҳо ва prod-SLO ва буҷаи хато шаффоф аст?
10. Оё каталоги runbook ва invariant ҳуҷҷатгузорӣ шудааст?
Хулоса
Стратегияи санҷиши ядро рӯйхати асбобҳо нест, балки қобилияти меъморӣ: тарҳи санҷидашуда, зинанизоми сатҳи қатъӣ, маълумоти идорашаванда, таҳаммулпазирии хато ва ченакҳое, ки дар CI/CD сохта шудаанд. Пас аз таҷрибаҳои тавсифшуда, даста фикру мулоҳизаҳои зуд ва боэътимод мегирад ва релизҳо пешгӯишаванда ва бехатар мебошанд.