Logo GH

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

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

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

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

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

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

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

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