Bosh sahifa Wiki Characterization test

Characterization test

Characterization test — hujjati yoki testlari yetarli bo‘lmagan mavjud tizimning hozirgi xatti-harakatini qayd etadigan avtomatik test. Uning dastlabki maqsadi behavior ideal yoki to‘g‘ri ekanini tasdiqlash emas, kodni o‘zgartirishdan oldin amaldagi natijani ko‘rinadigan contractga aylantirishdir. U legacy kodni xavfsiz refactor qilishda ishlatiladi.

Jarayon

Avval o‘zgartiriladigan boundary tanlanadi. Real input bilan tizim bajarilib actual output kuzatiladi. Test shu natijani expected sifatida qayd etadi va mavjud kodda yashil bo‘ladi. Keyin refactor yoki kichik feature davomida kutilmagan farqni ko‘rsatadi.

  1. Muhim use case va boundary aniqlanadi.
  2. Dependency hamda side effect nazoratga olinadi.
  3. Hozirgi output yozib olinadi.
  4. Output tushunilib, maxfiy va nondeterministik qism tozalanadi.
  5. Test regression safety net sifatida ishlatiladi.

Actual natijani ko‘r-ko‘rona snapshot qilish xatoni ham muzlatishi mumkin. Har qayd etilgan xususiyatning biznes ahamiyati ko‘riladi.

Golden va snapshot

Katta parser outputi, HTML yoki report golden file’da saqlanishi mumkin. Keyingi run semantic yoki textual diff bilan solishtiriladi. Timestamp, random ID va absolute path canonical formatga keltiriladi.

Juda katta snapshotdagi kichik muhim farq reviewda yo‘qoladi. Output mantiqiy qismlarga bo‘linadi yoki strukturaviy comparator field pathlarni ko‘rsatadi. Har run’da “update snapshot” qilish testni ma’nosiz qiladi.

Seam yaratish

Legacy function global clock, filesystem va networkga qattiq bog‘langan bo‘lishi mumkin. Seam dependency’ni testda almashtirish mumkin bo‘lgan nuqtadir. Wrapper, dependency injection, link seam yoki subprocess boundary orqali tashqi ta’sir nazorat qilinadi.

Seam yaratishning o‘zi behaviorni o‘zgartirmasligi kerak. Avval eng tashqi characterization test, so‘ng ichki refactor bilan kichikroq unit testlar paydo bo‘ladi.

Qamrov tanlovi

Butun legacy tizimni birdan testlash qimmat. O‘zgartiriladigan modul, yuqori defect tarixi va biznes kritik oqim ustuvor bo‘ladi. Production log va usage telemetry real input sinflarini topishga yordam beradi; maxfiy ma’lumot test fixture’ga nusxalanmaydi.

Test darajasi Foydasi
End-to-end characterization Keng behaviorni tez muzlatadi
API boundary Tashqi contractni qayd etadi
Component Sababni aniqroq ajratadi
Unit Tez va nozik, lekin seam talab qiladi

Keng testdan boshlab refactor bilan ichkariga yaqinlashish mumkin.

Defect behavior

Hozirgi xatti-harakat ma’lum defect bo‘lsa uni “to‘g‘ri” expected sifatida doimiy saqlash kerak emas. Avval test defectni aniq reproduksiya qiladi va hozir qizil bo‘lishi yoki “known behavior” sifatida vaqtincha belgilanishi mumkin. Fix bilan yangi expected requirementga moslanadi.

Ba’zi consumer bugga bog‘langan bo‘lishi mumkin. Behaviorni o‘zgartirish backward compatibility va migrationni talab qiladi. Characterization test ta’sirni ko‘rsatadi, qarorni o‘zi bermaydi.

Nondeterminism

Real vaqt fake clock bilan, random seed fixed generator bilan, tashqi endpoint fake server bilan boshqariladi. Collection tartibi contract bo‘lmasa sort qilinadi. Biroq barcha farqni olib tashlash muhim behaviorni yashirishi mumkin.

Concurrency behaviorini characterization qilish takroriy run va invariantlarni talab qiladi; bitta snapshot timingning tasodifiy namunasini saqlab qolishi mumkin.

Keyingi rivojlanish

Refactoringdan so‘ng keng characterization testlar sekin va redundant bo‘lib qolishi mumkin. Ularning kritik contract qismi saqlanadi, ichki holatlar maqsadli unit va integration testlarga ko‘chiriladi. Test ownership va maqsadi hujjatda aniq qoladi.

Bog‘liq tushunchalar

Legacy code, Golden file, Snapshot testing, Regression testing, Seam, Refactoring, Test oracle