GH GambleHub

ბირთვის ტესტირების სტრატეგია

1) პრინციპები

პირამიდული-დატყვევებული ბალანსი. ბაზა - სწრაფი მოდულარული და საკონტრაქტო ტესტები; ზემოთ - კომპონენტი და ინტეგრაცია; თავზე - მინიმალური, მაგრამ ღირებული ფენა e2e.
Shift-left. რაც უფრო ადრე ვიღებთ დეფექტს (ლინტერი, სტატიკური ანალიზი, პროპერტირება), მით უფრო იაფია.
Deterministic by design. ჩვენ ვმართავთ დროს, ქსელს, რანდომს და გარე დამოკიდებულებას.
ხარისხის ეკონომიკა. ნებისმიერი ტესტი არის „დაზღვევა“: მიზანია შეამციროს მთლიანი ხარჯები (დეფექტები + ტესტების თანმხლები).
რისკზე ორიენტაცია. საფარი კონცენტრირებულია ბიზნეს ინვარიანტებსა და ოქმებზე (კონტრაქტები, იდემპოტენტობა, თანმიმდევრულობა).

2) ტესტირების დონე და პასუხისმგებლობის სფეროები

2. 1 ერთეული (მოდულარული)

ისინი ამოწმებენ სუფთა ლოგიკას I/O- ს გარეშე.
ჩვენ მხოლოდ საზღვრებს ვიყენებთ (პორტი/ადაპტერი), ვიყენებთ ქარხნებს მონაცემებისთვის.
სწრაფი (50-100 ms/ტესტი) პარალელურად.

2. 2 Contract (მიმწოდებელი - მომხმარებელი)

ჩაწერეთ API კონტრაქტები (HTTP/gRPC/Event) სერვისებს შორის.
ჩვენ ვიყენებთ consumer-driven მიდგომას: კონტრაქტები ინახება VCS- ში, შემოწმებულია მიმწოდებლის CI- ში.
შეამცირეთ ინტეგრაციის e2e სისქე.

2. 3 კომპონენტი (მოდული, რეალური საცავით)

ჩვენ ვიწყებთ სერვისის ნაწილს ნამდვილი BD/ქეშით კონტეინერში (Testcontainers).
ჩვენ ვხარჯავთ სქემების, ინდექსების, გარიგებების, ბლოკირების მიგრაციას.

2. 4 ინტეგრაცია/სისტემა (მომსახურების გავლა)

ჩვენ ვაყენებთ სერვისების ერთობლიობას იზოლირებულ გარემოში.
ჩვენ ვამოწმებთ ინვარიანტებს: გარიგება, ჭიდაობა, იდემპოტენტობა, შეცდომების დამუშავება.

2. 5 E2E (მინიმალური „ღირებული“ ფენა)

რეალური ოქმები და გარემო „როგორც გაყიდვაში“, მაგრამ შეზღუდული სცენარის ნაკრები: გადახდა - დადასტურება გაყვანილობა; რეგისტრაცია - გადამოწმება - შეყვანა.
ჩვენ ვიყენებთ მაღალი რისკის ფიგურების გამოშვებას და რეგრესიას.

3) საცდელი არქიტექტურა

პორტები/გადამყვანები (Hexagonal). ბიზნეს ბირთვი არ იცის HTTP/SQL- ის შესახებ; დამოკიდებულებები ხორციელდება ინტერფეისების საშუალებით.
დროის/რანდომის ინექცია. 'Clock', 'Random' - დამოკიდებულება; ტესტებში აღვნიშნავთ.
კონფიგურირებული I/O აბსტრაქცია. რიგები, DD, KMS - ინტერფეისების საშუალებით ტესტის განხორციელებით.
ფუნქციური ინვარიანტები. ჩვენ აშკარად ვქმნით პოსტებს და პრედიკატებს - მათი ტესტირება და მონიტორინგი უფრო ადვილია.

4) მონაცემები ტესტებისთვის

ქარხნები/ბილდერები სტატიკური JSON ფიქსატორების ნაცვლად: ნაკლები მყიფეობა.
Idempotent siles და reset huk BD ტესტის წინ (migrations - truncate - seed).
შემთხვევების კატალოგები: „ნორმები“, „კიდეები“, „შეცდომები“, „ქაოსი“.
სინთეზური რეალური ძრავის ნაცვლად: გენერატორები, შენიღბვა, კონფიდენციალურობის პროფილები.

5) კონკურენცია და იდემპოტენტობა

ტესტები რბოლაზე: კონკურენტული ჩანაწერები/რეზერვები/დაბლოკვა.
Idempotent გასაღებების შემოწმება (მაგალითად, '(ოპერაცია, external _ id)'): განმეორებითი ზარები არ ცვლის მდგომარეობას.
Retrai და Taimauts: ჩვენ გარანტიას ვაძლევთ სისწორეს დროებითი შეცდომების შემთხვევაში.

ფსევდო კოდი (იდემპოტენტობა):

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 შემთხვევებს (დუბლები/საათის გამოტოვება), „ადგილობრივი დღის“ ფანჯრები.
Taymauts შეამოწმეთ მონოტონური საათი; NTP ტრეფიკის სიმულაცია.

7) სტაბილურობა და ქაოსი

Fault-injection: ქსელის შეცდომები, 5xx, შეფერხებები, ნაწილობრივი დეგრადაცია (ქეში მიუწვდომელია).
Chaos ტესტები pre-pert- ს შორის: კვანძების გამორთვა, ხაზების გადატვირთვა, BGP/Anycast- ის რღვევები (ემულაცია).
Fallback პოლიტიკა და UX დეგრადაცია: ტესტებმა უნდა დაადასტუროს სწორი „graceful degradation“.

8) პროდუქტიულობა

მიკრო ბენეფიციარები კრიტიკული ალგორითმებისთვის (CPU/alloc ფიქსაციით).
დატვირთვის პროფილები: baseline (p50/p95), სტრესი (მწვერვალი), გახანგრძლივებული (soak) მეხსიერების გაჟონვისთვის.
რეგრესული კარიბჭეები: build ვერ ხერხდება, თუ p95 ლატენტობა უარესია, ვიდრე baseline> X%.

9) უსაფრთხოება და შესაბამისობა

SAST/Lint: დაუცველების/ანტიპათიების ძებნა.
DAST/IAST: საბაზო სკრიპტები სტენდზე (XSS/SQLi/SSRF ტესტები).
Secrets scan: კოდისა და არტეფაქტების გასაღებების/პაროლების არარსებობა.
პირადი ტესტები: საგზაო მოძრაობის წესების არარსებობა ლოგოებში/ტრეკებში, „თანხმობის კონტროლის“ დაცვა, ანონიმიზაციის პროფილები გადმოტვირთვისთვის.

10) ხარისხის მეტრიკა და SLO

Test pass rate და flaky index (არასტაბილური ტესტების/კვირის განმავლობაში).

სამიზნე:
  • 90-100% კრიტიკული ბირთვის მოდულისთვის,
  • პერიფერიისთვის 70-80% (ინვარიანტებზე ფოკუსირება).
  • Release risk score: ნაკრები: ცვლილებები კრიტიკულ ფაილებში × renchmarks- ის ვარდნა × ახალი flaky.
  • არასწორი ბიუჯეტი: prod-SLO კავშირი (აფთიაქი/შეცდომები) ექსპერიმენტებით და გამოშვების სიხშირით.

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

კარიბჭეები: გაჩერება ხელშეკრულებების ვარდნის, ლატარიის ზრდის, ახალი კრიტიკული დაუცველების შესახებ.

კეში და შარდინგი: ჩვენ აჩქარებს მილს პარალელიზმისა და არაპირდაპირი პროგონების გამო (შეცვლილი მოდულების მიხედვით).

12) Flaky ტესტები: აღმოჩენა და მკურნალობა

ავტოპროტორი + კვორუმი (2/3 პროგონი).
ფლაკონის შაბლონების დეტექტორი: დამოკიდებულება დროულ/რანდომზე/აშკარა მოლოდინებზე.
კარანტინი SLA- სთან: ტესტი არ ბლოკავს გამოშვებებს, მაგრამ უნდა გამოსწორდეს/გადაწერილი N- ში.
ფლაკის ნულოვანი ტოლერანტობა კრიტიკული ბილიკის „ბირთვში“.

13) Property-based, მუტაცია და ფაზის ტესტირება

Property-based: ფორმულირება თვისებები (კომუტატურობა, იდემპოტენტობა, ერთფეროვნება), სასაზღვრო მონაცემების გენერატორები.
Mutation testing: ჩვენ ვზომავთ ტესტების „ძალას“ (ისინი კლავს მუტაციას).
Fuzzing: ოქმები/პარსერები/ფორმატები (JSON, Protobuf, CSV), განსაკუთრებით უსაფრთხოების საზღვრებში.

თვისებების მაგალითი (ფსევდო კოდი):

prop "serialize/deserialize roundtrip":
forAll(randomModel()):
decode(encode(model)) == model

14) დაკვირვება და ტესტებთან კავშირი

ტესტის კვალი (trace-id ლოგოებში): მოსახერხებელია pre-marsh- ში დაჭერა.
Snapshots metrix სპექტაკლის პერსპექტივაში - დაცულია როგორც არტეფაქტი.
ლოგოების კონტროლი: მგრძნობიარე ველების არარსებობა, ლოგოების ზომა SLO- ში.

15) დოკუმენტაცია და პროცედურები

Test Handbook: სად უნდა დაიწყოს რომელი ტესტები, როგორ დავწეროთ ქარხნები, როგორ განვახორციელოთ კონტრაქტები.
Runbooks: ინციდენტის რეპლიკა, სწრაფი დიაგნოზი, გათავისუფლების დაბრუნება.
ინვარიანტების კატალოგი: სისტემური გარანტიების სია და შესაბამისი ტესტების/ალერტების ბმულები.

16) არქიტექტორის ჩეკის სია

1. აღწერილია ბირთვის ინვარიანტები და კრიტიკული გზები?
2. არსებობს ტესტის დონის მატრიცა და მათი SLO (დრო, სტაბილურობა)?
3. კონტრაქტების ვერსია და ვალუტა ხდება CI- ში მიმწოდებლისა და მომხმარებლისთვის?
4. დრო/ადგილი/ქსელი კონტროლდება ტესტებში (FixedClock, Fault-injector)?
5. შემოწმებულია თუ არა Testcontainers/იზოლირებული DAC, მიგრაცია?
6. არსებობს სპექტაკლები ბაზლაინები და კარიბჭე რეგრესიისთვის?
7. შედის SAST/Secrets-scan და კერძო ლოგოების შემოწმება?
8. დაფრინავს და არის თუ არა SLA გამოსწორება?
9. ტესტის კავშირი პროდ-SLO- სთან და მცდარი ბიუჯეტით არის გამჭვირვალე?
10. დოკუმენტირებულია runbook 'და ინვარიანტების კატალოგი?

დასკვნა

ბირთვის ტესტირების სტრატეგია არ არის ინსტრუმენტების სია, არამედ არქიტექტურული უნარი: საცდელი დიზაინი, დონის მკაცრი იერარქია, კონტროლირებადი მონაცემები, უკმარისობა და CI/CD- ში ჩაშენებული მეტრიკა. აღწერილი პრაქტიკის შემდეგ, გუნდი იღებს სწრაფ და საიმედო გამოხმაურებას, ხოლო გამოშვებები პროგნოზირებადი და უსაფრთხო ხდება.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.