Միջուկի փորձարկման ռազմավարություն
1) Սկզբունքներ
Բուրգի-տրոֆեյի հավասարակշռությունը։ Բազան արագ մոդուլային և պայմանագրային թեստեր է։ վերևում 'բաղադրիչ և ինտեգրալ; գագաթին նվազագույն է, բայց արժեքավոր շերտը e2e է։
Shift-left. Որքան շուտ բռնում ենք դեֆեկտը (լինտեր, ստատիկ վերլուծություն, property-based), այնքան ավելի էժան է։
Deterministic by design. Մենք կառավարում ենք ժամանակը, ցանցը, ռանդոմը և արտաքին կախվածությունը։
Որակի տնտեսությունը։ Ցանկացած թեստ «ապահովագրություն» է, նպատակը նվազագույնի հասցնելն է ընդհանուր ծախսերը (թերությունները + թեստերի ուղեկցությունը)։
Ռիսկի կողմնորոշումը։ Ծածկույթը կենտրոնանում է բիզնեսի ինվարանտների և արձանագրությունների վրա (պայմանագրեր, գաղափարախոսություն, կոնսիստենտություն)։
2) Փորձարկման և պատասխանատվության գոտիների մակարդակները
2. 1 Unit (մոդուլային)
Ստուգում են մաքուր տրամաբանությունը առանց I/O.
Մոկայը միայն սահմաններ է (պորտ/ադապտեր), մենք օգտագործում ենք տվյալների գործարաններ։
Արագ (50-100 մզ/թեստ), զուգահեռ։
2. 2 Medract (ռուսական սպառողի մատակարարը)
Նրանք արձանագրում են API պայմանագրերը (HTTP/gRPC/event) ծառայությունների միջև։
Մենք օգտագործում ենք consumer-driven մոտեցում. Պայմանագրերը պահպանվում են VCS-ում, ստուգվում են CI-ում։
Նվազեցնում են ինտեգրացիոն e2e-ի փխրունությունը։
2. 3 Component (խողովակի վերևում, իրական պահեստավորման հետ)
Եկեք սկսենք իրական BD/cash-ից (Testcontainers)։
Մենք պահպանում ենք համապատասխան սխեմաները, ինդեքսները, գործարքները, արգելափակումները։
2. 4 Integration/Express (ծառայությունների միջև)
Մենք բարձրացնում ենք ծառայությունների մի շարք մեկուսացված միջավայրում։
Մենք ստուգում ենք invariants 'գործարքը, retray, idempotenty, սխալների վերամշակում։
2. 5 E2E (նվազագույն «արժեքավոր» շերտ)
Իրական արձանագրությունները և շրջապատը «ինչպես վաճառքում», բայց սահմանափակ սցենարի հավաքածու 'վճարումը հաստատվում է վերջնական լարման վրա։ 111. Հավատարմագրում։
Մենք օգտագործում ենք բարձրորակ ֆիգուրների թողարկման և ռեգրեսիայի համար։
3) Թեսթոպրեգային ճարտարապետություն
Մոսկվա/ադապտերներ (Hexagonal)։ Բիզնես միջուկը չգիտի HTTP/SQL-ի մասին։ կախվածությունը ներդրվում է ինտերֆեյսերի միջոցով։
Ժամանակի արտահայտումը/ռանդոմը '«Clock», «Random» - կախվածությունը; փորձարկումներում մենք արձանագրում ենք։
Հայտարարված I/O աբստրակցիան։ Գծերը, BD, KFC-ը թեստ իրողությունների միջերեսների միջոցով։
Ֆունկցիոնալ ինվարանտներ։ Մենք հստակ ձևավորում ենք հետմահու նախատիպեր, որոնք ավելի հեշտ են ստուգել և վերահսկել դրանք։
4) Թեստերի տվյալները
Գործարաններ/բիլդերներ ստատիկ JSON-ֆիքսթուրի փոխարեն 'ավելի քիչ փխրունություն։
Idempotent նստատեղերը և reset-huk BD-ը թեստի առջև (migrance truncate seed)։
Մոսկվան և քեյսները ՝ «նորմեր», «եզրեր», «սխալներ», «քաոս»։
Սինթեզիկան իրական PD-ի փոխարեն 'գեներատորներ, դիմակներ, մասնագիտության պրոֆիլներ։
5) Մրցակցություն և գաղափարախոսություն
Մրցույթների թեստերը (race) 'մրցակցային ձայնագրություններ/պահեստներ/արգելափակումներ։
Idempotent-ի ստուգումը (օրինակ '(operation, external _ id), կրկնվող մարտահրավերները չեն փոխում վիճակը։
Retrai և timauts: Մենք երաշխավորում ենք ճիշտ սխալ սխալների դեպքում։
Կեղծ (idempocode)
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-ն են։ թեստերում մենք օգտագործում ենք «FixedClock»։
Մենք թեստավորում ենք DST-քեյսները (դուբլներ/ժամացույցներ), պատուհանը «112 օր»։
Թայմաուտները ստուգում ենք մոնոտոնիկ ժամացույցները։ սիմուլյացիա NTP խմորիչ։
7) Կայունություն և քաոս
Fox-inj.ru: Ցանցային սխալները, 5xx, ուշացումները, մասնակի քայքայումը (քեշը անհասանելի է)։
Chaos-թեստերը pre-2019 միջավայրում 'հանգույցների անջատումը, հերթափոխի ծանրաբեռնվածությունը, BGP/Anycript (էմուլյացիա)։
Fallback քաղաքականությունը և UX-ի քայքայումը. Թեստերը պետք է ապացուցեն ճիշտ «graceful degradation»։
8) Արտադրողականությունը
Միկրո-բենչմարկները կրիտիկական ալգորիթմների համար (CPU/alloc)։
Բեռի պրոֆիլները 'baseline (p50/p95), սթրեսը (pik), երկարաձգված (soak) հիշողության արտահոսքի համար։
Report-gates: build ձախողվում է, եթե p95 լատենտ ավելի վատ է, քան baseline> X տոկոսը։
9) Անվտանգությունն ու համապատասխանությունը
SFC/Lint 'խոցելիության/հակատիպերի որոնում։
DFC/IFC: հիմնական սցենարները պատի վրա (XIV/XXI/SSRF փորձարկումներ)։
Secrets-scan 'կոդում/գաղտնաբառերի բացակայություն և արտեֆակտներում։
Privacy-թեստեր 'PD-ի բացակայությունը լոգարաններում/հետքերով, «համաձայնությունների կառավարման» պահպանումը, բեռնման համար անանունիզացիայի պրոֆիլները։
10) Հատկության և SLO-ի մետրերը
Test pass rate և flaky index (col-ը անկայուն թեստերի/շաբաթ)։
Coverage-նպատակային
90-100 տոկոսը կրիտիկական միջուկի մոդուլների համար,
ծայրամասային 70-80 տոկոսը (ինվարանտների կենտրոնով)։
Releensrisk score: Ընդհանուր ՝ կրիտիկական ֆայլերում փոփոխությունները բացատրում են բենչմարների անկումը նոր flaky։
Սխալ բյուջեն 'prod-SLO (aptaim/սխալներ) փորձարկումների և օրինագծերի հետ։
11) CI/CD և խաղերը
Բեմի մատրիցը
1. Lint/Format/TypeCheck
2. Unit + Property-based
3. Contract provider/consumer
4. Component (Testcontainers)
5. Integration + Perf smoke
6. Security (SAST/Secrets)
7. Build/Package + SBOM
8. Deploy to pre-prod + e2e + chaos smoke
Գեյթսը 'ստոպը նվազելու համար, լատենտության աճը, նոր կրիտիկական խոցելիությունները։
Քեշը և շարդինգը 'արագացնել pipeline-ը զուգահեռականության և ռեմենտալ պրոգոնների միջոցով (փոփոխված մոդուլներով)։
12) Flaky-թեստեր 'հայտնաբերում և բուժում
Ավտոպովատորը + kvorum (2/3 նոսր)։
Ֆլակի-պաթոգենների դետեկտորը 'ժամանակից/ռանդոմից/ակնհայտ սպասումներից կախվածությունը։
Կարանտինը SLA-ից 'թեստը չի արգելափակում օրինագծերը, բայց պարտավոր է շտկել/վերաշարադրել N օրվա ընթացքում։
Զրոյական հանդուրժողականությունը ֆլակի հետ կրիտիկական ճանապարհի «միջուկում»։
13) Property-based, մուտացիոն և medes-թեստավորում
Property-based: Մենք ձևակերպում ենք հատկություններ (բաղադրիչներ, գաղափարախոսություն, մոնոտոնիզմ), սահմանային տվյալների գեներատորներ։
Mutation testing: չափում ենք թեստերի «ուժը» (արդյո՞ ք նրանք սպանում են մուտացիաները)։
Fuzzing : /parsers/2019 (JSON, Delobuf, CSV), հատկապես անվտանգության սահմաններում։
Հատկությունների օրինակ (կեղծ)
prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model
14) Դիտողությունն ու կապը թեստերի հետ
Թեստերի հետքերը (trace-id լոգարանում) 'հարմար է pre-2019-ում։
Պարկուճները փոխաբերական են պերֆորմանսային պրոթոնով, որը պահվում է որպես արտեֆակտ։
Լոգարանների վերահսկումը 'զգայուն դաշտերի բացակայություն, SLO-ի սահմաններում լոգարանների չափը։
15) Մոսկվան և ընթացակարգերը
Test Handbook: Որտե՞ ղ սկսել, ինչպես գրել գործարաններ, ինչպես նորարարել պայմանագրերը։
Runbooks: Repley, արագ ախտորոշում, հետադարձում։
Ինվարանտների կատալոգը 'համապատասխան երաշխիքների և հղումների ցանկը համապատասխան թեստերի/ալտերտերի վրա։
16) Ճարտարապետի չեկի թերթիկը
1. Նկարագրված են միջուկի ինվարանտները և կրիտիկական ճանապարհները։
2. Թեստերի մակարդակների մատրիցա կա և դրանց SLO (ժամանակ, հաճախորդ)։
3. Պայմանագրերը տարբերակվում և վալիդացվում են CI-ում ռուսական և սպառողի մոտ։
4. Ժամանակը/վաղ/ցանցը վերահսկվում է թեստերում (FixedClock, Fox-injector)։
5. Արդյո՞ ք Testcontainers/մեկուսացված BD-ը ստուգվում է։
6. Կան պերֆորանսային բազլիններ և ռեգրեսիայի գեյթ։
7. Ներառե՞ լ են SBS/Secrets-scan և privacy-ստուգումները։
8. Կատարվում է flaky և կա SLA ուղղման համար։
9. Թեստերի կապը prod-SLO-ի և սխալ բյուջեի հետ պարզ է։
10. Փաստաթղթավորված է runbook "և ինվարանտների կատալոգը։
Եզրակացություն
Միջուկի փորձարկման ռազմավարությունը ոչ թե գործիքների ցուցակն է, այլ ճարտարապետական ունակությունը 'տեստոպրիդային դիզայնը, մակարդակների խիստ հիերարխիան, կառավարվող տվյալները, ձախողումը և չափումները, որոնք տեղադրված են CI/CD-ում։ Նկարագրված պրակտիկային հետևելով ՝ թիմը ստանում է արագ և հուսալի հետադարձ կապ, իսկ ալգորիթմները դառնում են կանխատեսելի և անվտանգ։