یک Data Pack شامل یک‌میلیون رکورد است، ۱۰۰٪ با Schema سازگارند و اسکن PII هیچ موردی پیدا نکرده؛ آیا داده برای تست آماده و امن است؟ نه لزوماً. ممکن است همهٔ رکوردها یک Happy path تکراری باشند، روابط و Stateها نامعتبر باشند، دادهٔ زمانی/فارسی/Concurrency وجود نداشته باشد، Pack از Snapshot نامعلوم آمده باشد، Quasi-identifierها امکان Linkage بدهند یا Run داده‌ای غیر از Artifact تأییدشده را مصرف کند.

مدیریت داده تست در سطح اجرا یعنی ثابت کنیم یک Data Pack برای یک Data Request، Risk، Build و Run مشخص Fit for Purpose است و از Source/Generator تا Provision، مصرف، Mutation و Cleanup قابل ردیابی می‌ماند. این راهنما یک Test Data Fitness & Provisioning Contract می‌سازد: Request/Obligation → Source/Generation lineage → Privacy/Utility → Validation → signed Pack → Lease/Namespace → Run consumption → Reset/Cleanup → Correction/Revoke/Retire.

راهنمای مدیریت داده تست یا TDM مالک Strategy، انتخاب Synthetic/Masking/Subsetting و معماری کلی است. واحد تحلیل این صفحه یک Request و یک Pack واقعی در جریان Provisioning است: چه داده‌ای خواسته شد، چه داده‌ای تحویل شد و آیا همان داده در Run مصرف شد؟

پاسخ کوتاه: Data Pack مناسب تست چیست؟

Pack مناسب فقط Schema-valid یا شبیه Production نیست. باید Obligationهای Test Basis را با رکوردهای یکتا و قابل نگاشت برآورده کند؛ Constraint، رابطه، State، زمان، Locale و Concurrency را اعتبارسنجی کند؛ Lineage و Transformation آن معلوم باشد؛ Privacy risk و Utility trade-off سنجیده شود؛ با digest و Lease به Namespace مشخص Provision شود؛ و Run دقیقاً همان digest را مصرف کند.

  • بیشتر الزاماً Coverage بیشتر نیست.
  • واقع‌گرایانه الزاماً Representative برای Risk نیست.
  • Schema-valid الزاماً Domain-valid یا State-valid نیست.
  • PII scan صفر الزاماً Anonymous یا کم‌ریسک نیست.
  • Generated with a seed الزاماً قابل بازتولید نیست اگر Recipe/Tool/Source/Schema تغییر کرده باشند.

مرز این صفحه با TDM، Data Generation و Privacy

پرسشمالک محتواییمرز این صفحه
Synthetic، Masked، Subset یا Production-like؟داده تست واقعی یا مصنوعیمقایسه و انتخاب Source family
Faker، Property-based و Generator چگونه کار کنند؟تولید داده تستتکنیک و ابزار Generation
Privacy Requirement چگونه آزموده شود؟تست حریم خصوصی دادهRequirement-specific privacy testing
Data و Environment چگونه هم‌نسخه شوند؟مدیریت محیط تستEnvironment Manifest/Drift/Lease
یک Request و Pack چگونه Fit، تحویل و مصرف شوند؟همین راهنماFitness/Lineage/Provisioning/Use/Correction

Test Data Fitness & Provisioning Contract چیست؟

این Contract زنجیرهٔ قابل ممیزی از سؤال تست تا Artifact مصرف‌شده را ثبت می‌کند. Pack بدون Request ممکن است زیبا و بزرگ باشد ولی هیچ Decision را پشتیبانی نکند. Request بدون Pack digest نیز در زمان Failure قابل بازسازی نیست.

TestDataFitnessProvisioningContract
  TDMProgram / product / goal / risk / strategy / dataPolicy
  basis / schema / generator / sourceSnapshot / environment / build / run
  DataRequest:
    id / version / status / decision / question / consumer / due
    population / obligations / boundaries / negative / state
    relationships / temporal / locale / concurrency / volumeShape
    nonGoals / acceptance / owner
  DataPack:
    id / version / supersedes / purpose / classification
    sourceEntity / generationActivity / responsibleAgent / derivedFrom
    transformPlan / toolVersion / seed / recipe
    schema / constraints / relations / state / time / currency / locale
    privacyAssessment / utilityImpact / validation / fitnessDecision
    artifact / digest / lease / namespace / accessWindow / expiry
    freshness / reset / cleanup / quota / collision / rollback
    consumingActor / build / run / mutations / useManifest
    owner / SLA / review / correction / revoke / retire

Data Request را پیش از ساخت داده بنویسید

«برای Regression داده می‌خواهیم» Request قابل اجرا نیست. Decision، Question، Consumer، Due، Build/Environment و Risk را پین کنید. سپس Obligation registry بسازید: هر Rule، Boundary، Invalid class، State transition، Relationship، Time case، Locale و Concurrency case شناسه داشته باشد. Pack باید به این Registry Map شود.

DataRequest: DATA-REQ-IDEMP-23@3
decision: آیا BUILD-R23 برای Checkهای idempotency دادهٔ fit دارد؟
question: duplicate/late/reordered Callback با identity معتبر ساخته می‌شود؟
obligations:
  - unique Tenant/Order/Attempt/Event identities
  - one intentional exact duplicate pair
  - PENDING→COMMITTED once
  - invalid unknown Attempt
  - before/after fake commit and late/reordered windows
nonGoals:
  - no production distribution or customer realism
  - no performance, privacy-compliance or release proof

Coverage obligation با Row count فرق دارد

یک‌میلیون Row ممکن است یک Partition را تکرار کند. Coverage به Registry مستقل و نگاشت یکتا نیاز دارد. برای هر Obligation، eligibility، expected valid/invalid، required relation/state و Evidence را ثبت کنید. Duplicate، foreign، unknown و N/A را از covered جدا نگه دارید.

ObligationData memberValidationClaim limit
BND-AMOUNT-0ROW-01 amountIRR=0expected rejectedفقط این Boundary
REL-ORDER-ATTEMPTROW-03/041:n relation resolvesنه همهٔ relationshipها
STATE-DUPLICATEEV-05/EV-05 duplicateone effect after two eventsنه event-loss
TIME-LATEEV-08after window label + expected handlingنه Clock correctness کل سامانه
LOC-FA-DIGITSROW-11digit normalization expectedنه همهٔ Localeها

Schema validity فقط اولین Gate است

Schema نوع و حضور فیلد را می‌سنجد. ممکن است status="PAID" از نظر نوع String درست باشد ولی برای Order بدون PaymentAttempt از نظر Domain نامعتبر باشد. Validatorها را لایه‌بندی کنید: structural، domain constraint، uniqueness، referential integrity، state transition، temporal، distribution/shape، privacy و purpose-specific fitness.

Gateپرسشخطای عبوری از Schema
Domainمقدار طبق Rule مجاز است؟amount منفی با type عدد
Relationshipکلیدها و Cardinality معتبرند؟Attempt بدون Order
StateState/transition ممکن است؟CANCELLED→PAID بدون event
TemporalOrdering/window/expiry معتبر است؟Callback قبل از Attempt
PurposeObligationهای Request را برآورده می‌کند؟همه Rowها Happy path

Lineage: Pack از کجا و چگونه ساخته شد؟

برای بازتولید و مسئولیت‌پذیری، Source entity، Generation/Transformation activity، Software/Person/Team agent، input snapshot، recipe، tool version، seed، started/ended time و output digest را ثبت کنید. Generated بودن، Lineage را حذف نمی‌کند؛ Generator نیز می‌تواند bug یا bias داشته باشد.

W3C PROV-O یک مدل عمومی برای Entity، Activity و Agent و روابطی مانند used، wasGeneratedBy و wasDerivedFrom ارائه می‌دهد. این استاندارد Test-data fitness یا Privacy را اثبات نمی‌کند؛ از واژگان آن برای زنجیرهٔ منشأ قابل تبادل استفاده کنید.

Source family را صریح Label کنید

Source typeمزیت محتملریسک/محدودیت
Fully syntheticکنترل Boundary/Invalid و بدون record-level mappingrealism/distribution gap؛ generator bug
Masked/transformed copystructure/relationship نزدیک‌ترlinkage، residual identifier، utility distortion
Subsetحجم کمتر و relationship واقعی‌ترselection bias، rare cases حذف
Hand-crafted fixtureIntent خوانا و دقیقscale/change maintenance
Captured interactionFailure reproductionconsent/secret/PII/freshness
Generated model/propertyspace explorationoracle/shrink/seed/model gap

نام «Production-like» Classification نیست. مشخص کنید کدام characteristic شبیه است: schema، relationship، distribution، volume، temporal pattern یا format؛ و کدام نیست.

Synthetic با Safe یا Representative برابر نیست

دادهٔ Synthetic می‌تواند نام یا شناسه‌ای تصادفاً شبیه شخص واقعی بسازد، Bias داشته باشد، Constraint را نقض کند یا distribution غیرواقعی بدهد. Conspicuous labeling، reserved domain/range، forbidden-pattern scan، uniqueness namespace و privacy/utility assessment لازم‌اند. Synthetic برای Purpose مشخص ساخته می‌شود، نه تقلید مبهم همهٔ Production.

اگر مدل روی دادهٔ واقعی آموزش دیده یا generator نمونه‌ها را حفظ کرده باشد، «Synthetic» به‌تنهایی عدم افشا را ثابت نمی‌کند. Training/source lineage و memorization/linkage risk را جدا بررسی کنید.

Masking و De-identification تضمین ناشناس‌بودن نیست

حذف نام و موبایل ممکن است Quasi-identifierهایی مانند تاریخ، منطقه، مبلغ، الگوی رخداد یا ترکیب نادر را باقی بگذارد. Linkage با Dataset دیگر می‌تواند Subject را بازشناسایی کند. Method، attacker model، auxiliary data، residual risk و approval را ثبت کنید. Hash ثابت نیز ممکن است قابل Dictionary یا cross-dataset linkage باشد.

NIST SP 800-188 تأکید می‌کند De-identification باید در Risk analysis سنجیده شود و ممکن است Bias، inaccuracy یا utility loss ایجاد کند؛ گاهی هدف Accuracy و identifiability هم‌زمان دست‌یافتنی نیست. این راهنما مشاورهٔ حقوقی ایران/اروپا/آمریکا یا تضمین عدم بازشناسایی نیست.

Direct identifier، Quasi-identifier و Sensitive attribute را جدا کنید

نوعنمونهٔ عمومیکنترل
Direct identifierنام، شماره/شناسهٔ مستقیمremove/replace/tokenize با governance
Quasi-identifierترکیب زمان/مکان/سن/رفتارlinkage assessment، generalization/suppression
Sensitive attributeرفتار/وضعیت خصوصیpurpose/minimization/access
Secrettoken/key/cookienever copy؛ revoke/rotate if exposed
Operational confidentialfraud rule/internal topologyclassification و least privilege

Scanner صفر فقط Rule/Patternهای همان Scanner را گزارش می‌کند. Metadata، attachment، free text، image، log، backup و relationshipها را فراموش نکنید.

Privacy و Utility را با هم اعتبارسنجی کنید

Masking قوی ممکن است رابطه‌ها یا distribution لازم برای Test را خراب کند؛ Utility بالا ممکن است Privacy risk را زیاد کند. برای Purpose تعریف‌شده Measure کنید: obligation satisfaction، domain validity، relationship preservation، distribution distance، rare-case retention و false-result rate؛ در کنار linkage risk، identifier finding و access/retention exposure.

PrivacyUtilityDecision
  purpose / dataClassification / attackerModel / auxiliarySources
  deidentificationOrSyntheticMethod / parameters / version
  directIdentifierScan / quasiIdentifierAndLinkageAssessment
  residualPrivacyRisk / approval / access / retention
  utilityObligations / distortion / bias / limitations
  decision: USE | ADAPT | RESTRICT | REJECT
  no claim: anonymous forever or fit for every purpose

Relationship و Referential Integrity را آزمون کنید

Foreign key pass فقط وجود Parent را می‌سنجد؛ Cardinality، ownership، tenant boundary و semantic relation جدا هستند. Order یک Customer/Tenant دارد، چند Attempt ممکن است و Event باید به Attempt درست وصل شود. Negative dataset نیز باید invalid relation را عمدی و Label‌شده بسازد، نه تصادفی.

  • Orphan، cross-tenant reference و duplicate natural key را Check کنید.
  • Cardinality min/max و conditional relationship را نسخه‌دار کنید.
  • Soft delete، historical version و slowly changing entity را مدل کنید.
  • Generator و Validator یک Library/Rule implementation مشترک نداشته باشند که یک bug را تکرار کند.

Stateful data را به Snapshot تخت تقلیل ندهید

بسیاری از Failureها در Transition و event ordering رخ می‌دهند، نه در Row مستقل. Initial state، Event sequence، guard، resulting state، invariant و invalid transition را در State Model نگه دارید. Setup مستقیم State نهایی ممکن است Side effect و invariantهایی را دور بزند که از مسیر واقعی ساخته می‌شوند.

برای Reproduction، Snapshot plus event log یا deterministic recipe مفید است. «یک Order PAID بساز» کافی نیست؛ باید معلوم باشد با کدام Attempt/Event/Ledger و چه ترتیب زمانی ساخته شده است.

Time، Expiry و Ordering بخشی از Data Contract هستند

Created-at قدیمی، token expired، timezone mismatch یا event reordered می‌تواند Verdict را عوض کند. Instant canonical را از نمایش محلی جدا کنید؛ Clock/Timezone، relative offset، validity window و ordering tie-breaker را ثبت کنید. «امروز» در Fixture reproducible نیست.

CaseContractFailure mode
Expiry boundaryT-1ms/T/T+1ms با fake clockoff-by-one/timezone
Late eventeventAt و receivedAt جداingestion delay
Reordered eventssequence/event ID + ordering rulewrong final state
Duplicate retrysame idempotency identitydouble effect
Jalali displayUTC instant + Asia/Tehran viewpresentation/storage conflation

دادهٔ فارسی، RTL و پول را دقیق مدل کنید

ارقام فارسی/عربی/لاتین، نیم‌فاصله، شکل‌های ی/ک، NFC/NFKC، bidi marks، فاصله، Emoji و طول grapheme Failure modeهای متفاوت‌اند. Stable technical ID را از display string جدا کنید. Currency unit باید در فیلد و نام Measure روشن باشد؛ ریال و تومان را با Label و conversion rule مخلوط نکنید.

Random Persian string بدون Oracle ممکن است فقط Parser را confuse کند. هر Variant به Obligation و expected normalization/rejection وصل شود. Dataset این صفحه ادعای پوشش کامل زبان فارسی یا همهٔ قواعد مالی ایران ندارد.

Concurrency به Namespace و Lease نیاز دارد

Parallel test وقتی ایمن است که Identity و mutation scope جدا باشند. Worker ID، Run ID، Tenant/namespace، quota و collision policy تعریف کنید. استفاده از «اولین Order آماده در DB» دو Worker را به یک Subject وصل می‌کند. Lease باید owner، TTL، access window و revoke داشته باشد.

ProvisionLease
  leaseId: LEASE-R23-01
  pack: DATA-PACK-R23-IDEMP@4 / digest
  destination: ENV-DATA-R23
  namespace: TEN-SYN-R23 / RUN-R23 / WORKER-{1,2}
  consumer / actor / accessWindow / expiresAt
  quota / collisionPolicy / freshness
  reset / cleanup / deletionVerification / rollback
  prohibited: shared mutable customer/order pool

Provisioning فقط Copy کردن فایل نیست

Artifact باید signed/digestable باشد و Destination readiness، schema compatibility، access، seed/load order و validation پس از load داشته باشد. Ready time، request-to-ready latency و Failure vocabulary ثبت شود: REQUEST_INVALID، PACK_INVALID، PRIVACY_HOLD، ENV_NOT_READY، LOAD_ERROR، READY، EXPIRED، REVOKED.

Provision success با Test fitness برابر نیست. Load ممکن است کامل شود ولی Pack برای Risk غلط باشد. Fitness Decision پیش از Provision و consumption digest پس از آن هر دو لازم‌اند.

Freshness را از Realism جدا کنید

Pack تازه یعنی با Basis/Schema/Generator/Policy/Build مورد نیاز سازگار است؛ نه اینکه جدیدترین Production copy باشد. هر تغییر Schema، Constraint، Risk، Generator یا De-identification method می‌تواند Pack را Stale کند. Freshness SLA باید dependency-aware باشد.

Pack immutable را بی‌صدا patch نکنید. نسخهٔ جدید با supersedes، impact analysis و affected Runها منتشر شود. Run تاریخی باید به digest مصرف‌شدهٔ قبلی اشاره کند.

Reset، Cleanup و Deletion Evidence متفاوت‌اند

عملهدفEvidence
Resetبازگرداندن Namespace به initial statestate/digest comparison
Cleanupحذف mutationهای Runresource list before/after
Revokeقطع دسترسی/مصرف Packlease/access denial
Deleteحذف Artifact و copyهای scoped طبق Policydeletion manifest + backup caveat
Retireخروج Pack/Recipe از مصرف آیندهreason/supersession/archive

اجرای command Cleanup به‌تنهایی deletion proof نیست. Backup، cache، attachment، log و downstream copy را در Scope ثبت کنید. حذف گسترده و target مبهم خطرناک است؛ فقط Lease/Run identity معتبر را هدف بگیرید.

Run باید مصرف همان Pack را ثابت کند

Test Report باید Build/Run/Actor/Test IDs، Pack ID/version/digest، Lease/Namespace، start/end، mutation log، outcome، Unknown و use manifest داشته باشد. «داده آماده بود» کافی نیست. اگر Data در حین Run mutate شد، Delta و ownership را ثبت کنید.

DataUseManifest
  actor / build / run / tests
  packId / version / consumedDigest
  lease / namespace / environment
  startedAt / finishedAt / mutations
  outcomes / unknowns / evidenceRefs
  resetOrCleanupRef / privacyIncidentRef
  claimLimit: consumed pack, not test correctness or release proof

Validator را از Generator مستقل نگه دارید

اگر Generator و Validator همان Rule code را مصرف کنند، یک bug مشترک می‌تواند دادهٔ غلط را تولید و صحیح اعلام کند. Validator identity/version/digest را ثبت کنید؛ independent constraints، metamorphic checks، manually reviewed golden cases و injected faults به کشف هم‌خطایی کمک می‌کنند.

Fault injection نمونه: یک relationship را حذف، Tenant را duplicate، State نامعتبر یا date ordering را برعکس کنید. Validator باید هر Fault مورد انتظار را بگیرد. این آزمایش Validator quality را محدود می‌سنجد، نه کفایت کل Data.

Fitness Decision را نسخه‌دار و محدود کنید

Statusمعنامحدودیت
FIT_FOR_REQUESTObligation/Privacy/Validation لازم برای Request نام‌دار پذیرفته شدفقط همان Purpose/Build/Window
FIT_WITH_LIMITATIONBlind spot/exception پذیرفته‌شده داردDecision authority و guardrail
HOLDEvidence یا Gate ناقص/نامعتبر استنه Product failure
REJECTPack برای Request مناسب نیستممکن است برای Purpose دیگر معتبر باشد
REVOKEDپس از Finding privacy/integrity/access مصرف متوقف شدAffected runs باید پیدا شوند

از «Data quality score» واحد برای جمع‌کردن Privacy، Utility، Coverage و Freshness استفاده نکنید. شکست Hard gate با حجم زیاد یا realistic-looking rows جبران نمی‌شود.

Correction، Revoke و Affected-run analysis

اگر بعداً معلوم شد Pack حاوی identifier، رابطهٔ غلط یا Source ناشناخته بوده، Artifact را بی‌صدا جایگزین نکنید. Revoke Lease، جلوگیری از مصرف آینده، یافتن همهٔ Runهای مصرف‌کننده با digest، ارزیابی Outcomeهای متاثر، Notification، Correction و superseding Pack لازم‌اند.

DataPackCorrection
  correctionId / packId / badDigest / finding
  detectedAt / source / privacyOrFitnessImpact
  activeLeasesRevoked / affectedRuns / affectedDecisions
  containment / deletionOrAccessAction
  correctedPack / newDigest / revalidation
  notification / owner / closureEvidence

آزمایش بازتولیدپذیر: یک‌میلیون Row در برابر ۱۴۸ Finding

Fixture آفلاین و کاملاً مصنوعی SYN-TEST-DATA-FITNESS-PROVISIONING-01 با Node.js v24.۱۸.۰ ساخته شد. Dashboard سطحی یک‌میلیون Row، ۱۰۰٪ Schema-valid و صفر یافتهٔ PII scanner را دید و PASS داد. Audit دارای ۱۵۲ Rule بود.

{
  "ruleCount": 152,
  "superficial": {
    "status": "PASS",
    "message": "1,000,000 rows; 100% schema-valid; zero PII scanner findings"
  },
  "contractAudit": {
    "status": "HOLD",
    "findingCount": 148
  }
}

چهار واقعیت سطحی عمداً در Audit نیز PASS ماندند: Size مثبت بود، Schema field PASS بود، direct-identifier scanner نتیجهٔ عددی صفر داشت و Pack ID ساختاری موجود بود. اما ۱۴۸ Failure دیگر نشان دادند این چهار واقعیت برای Fitness/Privacy کافی نیستند: ۱۳ Identity کهنه/متحرک؛ Request تکراری و بدون Decision/Question/Obligation/Owner؛ Pack بدون Purpose/Lineage/Recipe/Constraint/State/Time/Locale؛ Privacy بدون Purpose/Linkage/Residual risk/Utility/Access/Retention؛ Validation بدون Domain/Relationship/Boundary/State/Temporal/Concurrency/independent Oracle/Fault injection؛ Provisioning بدون digest/Lease/Namespace/Expiry/Reset/Cleanup؛ Run بدون Actor/consumed digest/mutation/evidence؛ Lifecycle/economics ناقص؛ و ۲۸ ادعای مطلق.

دو اصلاح آزمایش و دلیل آن‌ها

اجرای اول نشان داد ۱۴۴ Finding واقعی است نه ۱۴۸ مورد انتظار، زیرا چهار کنترل سطحی واقعاً معتبر بودند. به‌جای دستکاری Counter، چهار کنترل substantive جاافتاده اضافه شد: Request lifecycle status، Validator identity، Pack expiry و consuming actor. اجرای دوم به‌درستی نشان داد Rule count اکنون ۱۵۲ و Finding count برابر ۱۴۸ است؛ چهار واقعیت اولیه همچنان PASS می‌مانند. انتظار نهایی بر ۱۴۸ Finding واقعی تثبیت و کل Fixture دوباره اجرا شد.

نسخهٔ اصلاح‌شدهٔ Data Pack

نسخهٔ اصلاح‌شده TDM-۲۳/SYN-CHECKOUT/PG-۱۶/RISK-v12/TEST-STRAT-v7/DATA-POL-v5/BASIS-v10/SCHEMA-v23/GEN-v8/SRC-SYN-v23/ENV-DATA-R23/BUILD-R23/RUN-R23 را پین کرد. Request نسخهٔ ۳، Obligation registry دقیق و Non-goal ساخت؛ Pack کاملاً Synthetic نسخهٔ ۴ با PROV-style lineage، Recipe/Seed/Validator مستقل، Constraint/Relationship/State/Time/Locale، Privacy/Utility assessment و injected fault validation ساخته شد.

Artifact signed با Lease/Namespace/Access/Expiry/Reset/Cleanup Provision شد؛ Run actor همان digest را مصرف و mutation/use manifest را ثبت کرد؛ Correction/Revoke/Retire و measures کامل شدند. Validator با صفر Finding وضعیت READY_FOR_DATA_PACK_REVIEW داد؛ نه حقیقت/کفایت Source/Validation/Evidence، عدم بازشناسایی، نمایندگی Production، Coverage، نبود باگ، Product quality یا Release را تضمین کرد.

آزمایشگاه Checkout فارسی و ایرانی

Lab یک Checkout جدا از شبکه با Order، PaymentAttempt، PSP Stub جعلی، Callback، Ledger Stub و Reconciliation مصنوعی است. Pack دقیقاً ۱۲ Row obligation-shaped برای duplicate/late/reordered event، timeout قبل/بعد از fake commit، invalid attempt، State transition، relation و parallel namespace دارد؛ هیچ ادعای شباهت توزیعی به Production ندارد.

بعدقرارداد Fixtureمحدودیت
پولمقادیر ساختگی canonical بر حسب IRR؛ تومان فقط view برچسب‌دارنه ادعای مالی/بانکی ایران
متن/رقمارقام فارسی/عربی/لاتین، Unicode NFC، RTL/LTR و stable Latin IDsنه پوشش کامل Locale
زمانISO instant/UTC؛ Asia/Tehran view؛ جلالی فقط presentationنه قاعدهٔ حقوقی/تسویه
PrivacySYN label، reserved IDs، no real-subject relationنه تضمین Privacy جهان واقعی
هویتTenant/Order/Attempt/Event/Ledger/Run/Build/Pack/Evidence جدانه مشتری یا تراکنش واقعی

هیچ Network، Production، شرکت، کاربر، پرداخت، بانک، PSP، نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، Screenshot یا Log واقعی وجود ندارد. این Lab توصیهٔ بانکی، مالی، حقوقی، مالیاتی، امنیتی، حریم خصوصی، GDPR/HIPAA/CCPA یا Compliance ایران نیست.

Role و Decision right در TDM

تصمیمCapability پاسخ‌گوEvidence
Obligation/fitnessTest design + domainRequest/Registry/validation
Source/TransformationData engineeringLineage/recipe/digest
Privacy risk/approvalPrivacy/security/legal authority طبق Contextassessment/approval/limitation
Provision/LeasePlatform/environmentnamespace/access/expiry/health
Use/Mutation/CleanupRun consumer + pack owneruse/deletion manifest
Revoke/Correctionincident authorityaffected-run/containment evidence

مرکز متمرکز TDM تنها یک Operating model ممکن است. Platform self-service با guardrail، federated ownership یا embedded capability نیز ممکن‌اند. «یک تیم مرکزی لازم است» را بدون بررسی Flow/Scale/Policy تجویز نکنید.

Automation و AI در تولید داده

Automation می‌تواند Request validation، generation، scanning، packaging، Provision و Cleanup را تکرارپذیر کند. AI می‌تواند Candidate row، rare combination یا masking transformation پیشنهاد کند. اما Prompt/model/version، Source permission، Generated output، Validator و Reviewer باید ثبت شوند.

AI-generated data ممکن است PII را حفظ/تقلید، Constraint را نقض، rare group را stereotype یا Secret را از Context بازتاب دهد. مدل نباید Privacy approval، Fitness Decision، Cleanup target یا Release را مستقل تأیید کند. Validator deterministic و human gate متناسب باقی می‌ماند.

متریک‌های Data Pack با Countermetric

Measureتعریف لازمCountermetric
Request-to-ready latencyدرخواست معتبر تا Pack provisioned/validatedFitness/Privacy failure
Consumer waitblocked minutes منتسب به Dataoverprovision/cost
Obligation satisfactionunique valid members بر Registryduplicate/unknown/stale
False-result contributionOutcome غلط تأییدشده ناشی از Dataverification opportunity
Reproduction ratesame recipe/digest/state outcome بازسازی شدProduct/environment drift
Collision ratenamespace/lease conflict در eligible runssetup/compute cost
Privacy findingdirect/quasi/linkage/access/retention findingutility distortion
Cleanup/deletion closurescoped resources verified removed/revokedbackup/log/downstream caveat
Pack costbuild/storage/provision/support minutes/costvalue of signal/coverage

Row count، GB، تعداد Synthetic record، Scanner score یا Provision speed را برای رتبه‌بندی افراد استفاده نکنید. این Incentive به تولید حجم بی‌مصرف، مخفی‌کردن Unknown و حذف Validation دشوار منجر می‌شود.

Pilot سی‌روزهٔ یک Data Pack

بازهکارخروجی/گیت
روز ۱–۵یک Risk/Run، wait baseline و Obligation registry را انتخاب کنیدData Request پذیرفته‌شده
روز ۶–۱۰Source family/Lineage/Recipe/Privacy/Utility را طراحی کنیدSource decision و non-goals
روز ۱۱–۱۵Pack تولید و Schema/Domain/Relation/State/Time/Locale validate شودFault-injected validator report
روز ۱۶–۲۰Artifact/digest/Lease/Namespace/Provision/Parallel/Expiry آزمون شودProvision game day
روز ۲۱–۲۵Run consumption/mutation/reset/cleanup/correction/revoke تمرین شودUse + deletion/correction manifests
روز ۲۶–۳۰Fitness/privacy/latency/cost/false-result Review شودKeep/Adapt/Restrict/Reject/Scale decision

Pilot موفق با یک‌میلیون Row یا Zero scanner finding تعریف نمی‌شود؛ باید یک Run مشخص همان Pack معتبر را به‌موقع مصرف کند، Faultهای تزریق‌شده کشف شوند و Cleanup/Correction قابل اثبات باشد.

۳۴ ضدالگوی مدیریت Data Pack

  • Row count=Coverage؛ Schema PASS=Fit؛ realistic=representative؛ Production distribution=test need.
  • Full Production copy پیش‌فرض؛ Production copy بهترین؛ Subset همیشه ارزان؛ Synthetic همیشه safe/realistic.
  • Masking=anonymous؛ zero PII scanner=no sensitive data؛ hash=irreversible؛ direct ID تنها Risk.
  • Request بدون Decision/Risk/Consumer؛ Pack بدون Obligation؛ Happy path تکراری؛ Invalid row بی‌Label.
  • latest schema/current data؛ Source نامعلوم؛ Generator بدون version؛ seed بدون recipe/tool/source.
  • Generator=Validator؛ no fault injection؛ relationship فقط FK؛ State فقط status field؛ «امروز» در Fixture.
  • ریال/تومان بی‌Unit؛ Persian digits بی‌Oracle؛ Unicode normalization مخفی؛ Jalali در storage canonical.
  • Shared mutable pool؛ first available order؛ parallel بدون namespace؛ Lease بی‌TTL؛ cleanup target مبهم.
  • Provisioned=Fit؛ load success=Ready؛ Run بدون consumed digest؛ mutation بی‌Log؛ reset=deletion.
  • Tool=Governance؛ central team اجباری؛ TDM=Quality/Security/Speed guarantee؛ Data prevents defects.
  • آمار ثابت ۵۰٪ اتلاف/۱۰۰× هزینه؛ GDPR به‌عنوان قانون جهانی؛ Test env همیشه ناامن‌تر.
  • AI output=approved؛ scanner score=Privacy decision؛ Silent pack replacement؛ Revoke بدون affected-run analysis.

چک‌لیست ۲۸ نقطه‌ای ممیزی Data Pack

  • Program/Product/Goal/Risk/Strategy/Policy/Basis نسخه‌دارند.
  • Schema/Generator/Source/Environment/Build/Run تغییرناپذیرند.
  • Request ID/version/status/Decision/Question/Consumer/Due روشن‌اند.
  • Population و Obligation registry مستقل وجود دارد.
  • Boundary/Negative/State/Relation/Time/Locale/Concurrency مشخص‌اند.
  • Volume/shape requirement و Non-goal نوشته شده‌اند.
  • Pack ID/version/supersedes/Purpose/Classification معلوم‌اند.
  • Source Entity/Activity/Agent/Derivation/Transformation ثبت شده‌اند.
  • Tool/version/seed/recipe و input snapshot پین شده‌اند.
  • Schema/Constraint/Relation/State/Time model نسخه‌دارند.
  • Currency/Locale/Encoding/Normalization صریح‌اند.
  • Membership digest و Artifact digest ثبت شده‌اند.
  • Privacy purpose/approval/minimization/access/retention معلوم‌اند.
  • Direct identifier و Quasi/linkage جدا ارزیابی شده‌اند.
  • Method/Residual risk/Utility impact و limitation ثبت شده‌اند.
  • Validator identity مستقل از Generator است.
  • Domain/Uniqueness/Referential/Distribution validation انجام شده است.
  • Boundary/Negative/State/Temporal/Locale/Concurrency validation انجام شده است.
  • Injected fault و Oracle independence آزموده شده‌اند.
  • Fitness Decision فقط به Request نام‌دار محدود است.
  • Destination/Lease/Namespace/Consumer/Access/Ready/Expiry معلوم‌اند.
  • Freshness/Reset/Cleanup/Quota/Collision/Rollback تعریف شده‌اند.
  • Consuming actor/Build/Run/Test/digest/time ثبت شده‌اند.
  • Mutation/Outcome/Unknown/Use manifest موجود است.
  • Owner/SLA/Review/Correction/Revoke/Retire مشخص‌اند.
  • Provision latency/Wait/Utility/Privacy/Cost guardrail سنجیده می‌شوند.
  • Deletion به‌جای صرف اجرای Cleanup با Evidence تأیید می‌شود.
  • هیچ تضمین Privacy، Coverage، Quality، Security، Speed یا Release نتیجه نشده است.

جمع‌بندی: دادهٔ تست یک Artifact تصمیم‌ساز است

مشکل مدیریت داده با خرید ابزار، کپی Database یا تولید Row بیشتر حل نمی‌شود. Data Request باید از Risk و Decision بیاید؛ Pack باید Obligationها را برآورده و Lineage/Privacy/Utility معتبر داشته باشد؛ Provisioning باید Artifact را با digest/Lease به Run وصل کند؛ و Mutation/Cleanup/Correction باید قابل ممیزی بماند.

از یک Pack کوچک و Purpose-specific شروع کنید. اگر نمی‌توانید بگویید هر Row کدام Obligation را پوشش می‌دهد، از کجا آمده، چه کسی ساخت/تأیید کرد، کدام Run همان digest را مصرف کرد و چه زمانی حذف شد، یک‌میلیون Row فقط ابهام بزرگ‌تری است.

سوالات متداول مدیریت داده‌های تست

Data Pack چه تفاوتی با Database تست دارد؟

Data Pack یک Artifact نسخه‌دار با Purpose، members، Lineage، validation و digest است؛ Database/Environment مقصدی است که Pack در Namespace و Lease مشخص Provision می‌شود و ممکن است چند Pack/Run را میزبانی کند. نام Database به‌تنهایی دادهٔ مصرف‌شده را مشخص نمی‌کند.

آیا دادهٔ Synthetic همیشه از دادهٔ Production امن‌تر است؟

نه به‌صورت مطلق. Fully synthetic بدون record-level mapping می‌تواند Privacy risk را کم کند، اما Generator/Training source ممکن است افشا یا شباهت واقعی بسازد و Artifact همچنان Confidential باشد. Source lineage، reserved identifiers، scanner/linkage assessment، access و retention لازم‌اند.

آیا Masking یا حذف PII داده را Anonymous می‌کند؟

تضمینی نیست. Quasi-identifier، relationship، free text، metadata و auxiliary datasets می‌توانند Linkage/Re-identification را ممکن کنند. Method و attacker model، residual risk، utility impact و Context حقوقی باید ارزیابی شوند؛ اسکن صفر فقط Rule set همان Scanner را نشان می‌دهد.

برای اجرای Parallel تست چگونه Data collision را کم کنیم؟

برای هر Run/Worker Namespace و identity مستقل، Seed/Pack مشخص، Lease/TTL، quota و collision policy بسازید؛ State مشترک را read-only یا partition کنید؛ Cleanup را فقط روی Run identity انجام دهید؛ و random-order/parallel series را برای کشف تداخل اجرا کنید.

بهترین KPI برای مدیریت داده تست چیست؟

KPI جهانی وجود ندارد. برای Flow مشخص، Request-to-ready latency، consumer wait، obligation satisfaction، false-result contribution، reproduction/collision، Privacy finding، cleanup closure و Pack cost را با Countermetric بسنجید. Row count، GB یا Scanner score را هدف مستقل نکنید.

دیدگاهتان را بنویسید