پانزده نفر از پانزده نفر جلسه را تمام کرده‌اند، ۶۴ Journey از ۶۴ Journey «Pass» است و همه فرم Sign-off را امضا کرده‌اند. آیا UAT موفق بوده و محصول پذیرفته شده است؟ نه لزوماً. ممکن است هر پانزده نفر از یک Role کم‌ریسک باشند، Build میان اجراها عوض شده باشد، Journeyهای برگشت‌ناپذیر اصلاً در Scope نباشند، Facilitator مسیر را گفته باشد یا امضا فقط حضور را تأیید کند.

این راهنما موفقیت تست پذیرش کاربر (UAT) را با تعداد Participant، درصد Pass یا رضایت جلسه تعریف نمی‌کند. زنجیره‌ی تصمیم را می‌سازد: Segment → Participant eligibility → Business Journey → Acceptance Claim → Run/Observation/Evidence → Finding/Exception → Acceptance Recommendation → Authority Decision → Retest/Correction.

پاسخ کوتاه: UAT موفق چه خروجی دارد؟

UAT موفق برای یک Release/Build مشخص نشان می‌دهد چه کاربران یا نمایندگانی، کدام Journeyهای کسب‌وکار را، در چه Environment/Data و با کدام Oracle اجرا کرده‌اند؛ چه چیزی Pass، Fail، Inconclusive یا Not Run شده؛ چه Segment، Risk و Unknownی بیرون مانده؛ چه Exceptionی پذیرفته نشده یا زمان‌دار است؛ و چه Authorityای در چه محدوده‌ای تصمیم گرفته است. نتیجه یک ادعای محدود و قابل اصلاح است، نه تضمین موفقیت بازار.

سیگنالآنچه واقعاً می‌گویدآنچه ثابت نمی‌کند
۱۵/۱۵ حضورCompletion برنامه‌ریزی‌شدهنمایندگی Segmentها
۶۴/۶۴ PassVerdict ثبت‌شده برای Attemptهاصحت Oracle یا کفایت Journey
۱۰۰٪ Sign-offامضا طبق معنای فرممجوز Release یا نبود ریسک
Zero FindingFinding ثبت‌شده صفرنبود Failure/Unknown/Coverage gap
Participant راضییک Signal ادراکیپذیرش همه Roleها یا Outcome بازار

هدف جست‌وجو و مرز این راهنما

اگر تعریف UAT، تفاوت آن با System Testing و Sprint Review، نقش‌ها، Entry/Exit، سناریو و قالب عمومی Sign-off را می‌خواهید، راهنمای پایه تست پذیرش کاربر مالک آن Intent است. این صفحه مسئله‌ی باریک‌تر و پیشرفته‌تری را حل می‌کند: چگونه Participant Coverage و Evidence را به یک Acceptance Decision قابل ممیزی وصل کنیم و Sign-off را بیش از ظرفیتش تفسیر نکنیم.

پرسشمالک محتواخروجی
UAT چیست و چگونه اجرا می‌شود؟راهنمای پایه UATPlan/Scenario/Entry/Exit/Sign-off
کاربر واقعاً Workflow را قابل استفاده می‌داند؟Usability TestingStudy finding/measure
عملیات آماده پشتیبانی است؟Operational ReadinessRunbook/monitoring/recovery evidence
Release با ریسک باقی‌مانده انجام شود؟Release DecisionGo/Conditional/No-go record
UAT چه ادعایی را با چه نمایندگی پذیرفت؟همین مقالهAcceptance Evidence/Decision record

تعریف رسمی را دقیق و محدود بخوانید

ISTQB CTFL 4.0.1 Acceptance Testing را متمرکز بر Validation و نشان‌دادن آمادگی برای Deployment می‌داند؛ یعنی سیستم نیازهای کسب‌وکار کاربر را برآورده کند. سند می‌گوید اجرای آن توسط Intended Userها ایده‌آل است و UAT را کنار Operational، Contractual، Regulatory، Alpha و Beta از شکل‌های Acceptance Testing می‌شمارد. این تعریف نه فرم اجباری می‌دهد و نه می‌گوید هر UAT مجوز خودکار Go-live است.

UAT با همه Acceptance Testingها یکسان نیست

نوعسؤال نمونهAuthority/Evidence محتمل
User AcceptanceJourney نیاز کسب‌وکار Intended user را پوشش می‌دهد؟Business acceptance authority
Operational AcceptanceOperate/Monitor/Recover ممکن است؟Operations/SRE authority
Contractual Acceptanceتعهد قراردادی احراز شده؟Contract authority
Regulatory Acceptanceشرط الزام‌آور مرتبط احراز شده؟Compliance/legal-defined authority
Alpha/Betaدر گروه/محیط محدود چه یادگیری حاصل شد؟Program-specific decision owner

یک UAT موفق نمی‌تواند نبود Operational، Security، Accessibility یا Contractual evidence را پنهان کند. برای سنجش کفایت کلی Release، چارچوب تصمیم انتشار با کیفیت کافی را جدا نگه دارید.

UAT همیشه «آخرین مرحله تست» نیست

در یک جریان ترتیبی ممکن است UAT نزدیک Go-live باشد؛ در Agile/Continuous Delivery می‌تواند برای Sliceهای ارزش، Prototype، Migration rehearsal یا Release candidate چند بار رخ دهد. پس از UAT نیز ممکن است Retest، Regression، Operational rehearsal، Security verification یا Accessibility review لازم باشد. ترتیب را SDLC، Risk و Decision need تعیین می‌کند، نه یک جمله‌ی ثابت.

مدل مرکزی: Acceptance Evidence Chain

UATAcceptanceChain {
  releaseId, buildId, environmentId, basisVersion,
  segmentModelId, participantSetId,
  journeyPortfolioId, acceptanceClaimIds[],
  runIds[], observationIds[], evidenceManifestId,
  findingIds[], exceptionIds[],
  recommendationId, decisionId,
  limitations[], expiry, correctionId
}

این قرارداد و قراردادهای بعدی الگوی عملیاتی همین راهنما هستند، نه فیلدهای تجویزی ISTQB. ارزش آن‌ها در Traceability است: اگر Build، Basis، Segment، Journey یا Evidence تغییر کرد، می‌توان ادعاها و تصمیم‌های متاثر را پیدا کرد.

هویت‌ها را پیش از اولین جلسه قفل کنید

Program/Product/Release/UAT Cycle/Charter/Basis/Repository/Commit/Build/Deployment/Environment/Data Profile/Segment Model/Journey Portfolio/Acceptance Policy/Decision Policy/Evidence Manifest و Cutoff زمان‌دار لازم‌اند. «نسخه امروز» یا «محیط UAT» هویت نیست. اگر Hotfix میان دو Run آمده، نتایج دو Build را بی‌صدا جمع نکنید.

UAT Charter؛ تصمیم مورد انتظار را قبل از اجرا بنویسید

UATCharter {
  uatCycleId, purpose, decisionNeed, businessOutcome,
  releaseId, basisVersion, inScope[], outOfScope[], notClaimed[],
  stakeholderIds[], segmentModelId, journeyPortfolioId,
  participantRole, facilitatorRole, testSupportRole,
  decisionAuthority, riskAuthority,
  entryCriteria[], exitCriteria[], schedule,
  changeRule, stopRule, digest
}

«برگزاری UAT» Purpose نیست. بنویسید کدام تصمیم با چه Consequence نیاز به Evidence دارد. notClaimed را صریح کنید: برای مثال Market adoption، کل Product quality، انطباق حقوقی یا آمادگی عملیات با این Cycle اثبات نمی‌شود.

Acceptance Basis؛ معیار را بعد از دیدن نتیجه عوض نکنید

Business process، Policy، Requirement، Acceptance criteria، Contract rule، Data definition، Workflow map و Decision rule می‌توانند Basis باشند. Source/Owner/Version/Effective date/Conflict/Assumption را ثبت کنید. تغییر مشروع است، اما باید Baseline تازه و Change impact داشته باشد؛ حذف Criterion شکست‌خورده از مخرج، اصلاح نیست.

Basis itemسؤال کنترلخطر
Business ruleنسخه و Owner چیست؟قاعده شفاهی
Acceptance criterionObservable و Oracleدار است؟«کاربر راضی باشد»
WorkflowRole/State/Handoff روشن است؟Screen-only scope
Data definitionواحد/پول/زمان/Null چیست؟Expected مبهم
Decision policyAuthority و vocabulary چیست؟Sign-off نمایشی

Segment با Persona یا Job Title یکی نیست

UATSegment {
  segmentId, segmentName, jobToBeDone,
  businessRole, permissionProfile,
  experienceBand, frequencyBand, contextOfUse,
  language, locale, timezone,
  accessNeeds[], assistiveTechnology[],
  connectivityContext, deviceContext, riskExposure,
  populationBasis, targetCountRationale,
  recruitmentLimitations[], coverageStatus
}

دو نفر با عنوان «کارشناس عملیات» ممکن است Permission، تجربه، Frequency، Context، زبان یا نیاز دسترسی متفاوت داشته باشند. Segment برای پوشش تصمیم ساخته می‌شود؛ Persona تخیلی به‌تنهایی Participant eligibility یا نمایندگی جمعیت را ثابت نمی‌کند.

Participant مناسب: واقعی، محتمل یا Proxy شفاف

راهنمای رسمی GOV.UK برای جذب مشارکت‌کننده بر Actual یا likely user، تنوع گروه‌ها، دسترسی‌پذیری، پرهیز از سوگیری جذب و کمینه‌سازی داده شخصی تاکید دارد. این منبع درباره User Research است، نه استاندارد UAT؛ اما برای طراحی نمایندگی و محدودیت نمونه مرجع عملی مفیدی است.

در UAT سازمانی، کارمند داخلی می‌تواند خودِ Intended user باشد. اگر نماینده، Subject-matter expert یا Proxy است، Basis و Limitation را ثبت کنید. گزاره‌ی «داخلی هرگز معتبر نیست» همان‌قدر نادرست است که «یک مدیر می‌تواند نماینده همه کاربران باشد».

Participant Contract؛ حضور با نمایندگی برابر نیست

UATParticipant {
  participantId, segmentId,
  eligibilityEvidence, screeningVersion,
  actualOrLikelyUserBasis, conflictDisclosure,
  priorExposure, trainingLevel,
  accessAccommodation, languageSupport,
  consentRef, privacyNoticeRef, dataMinimization,
  withdrawalStatus, incentiveClass,
  attendanceStatus, replacementRule, pseudonymizedRef
}

Participant ID را Pseudonymous نگه دارید و Attributeهای حساس را فقط طبق Purpose/Policy و با دسترسی محدود ذخیره کنید. Absence، Replacement، Withdrawal، prior product exposure و Training می‌تواند Interpretation را تغییر دهد؛ حذف بی‌صدای آن‌ها داده را «تمیز» نمی‌کند.

تعداد مشارکت‌کننده عدد جادویی ندارد

هدف Discovery کیفی، Benchmark، اثبات قراردادی یا پوشش Roleهای عملیاتی یکسان نیست. تعداد را از Segment/Risk/Journey/Method/Decision consequence، تنوع، عدم‌قطعیت و امکان Iteration استدلال کنید. پانزده نفر از یک Segment نمی‌توانند فقدان Segment بحرانی را جبران کنند؛ صد نفر نیز Oracle بد را درست نمی‌کنند.

پرسشEvidence لازمClaim limit
مسئله‌ای کشف می‌شود؟نمونه هدفمند و Observation غنینه شیوع جمعیتی
Journey Role حیاتی پذیرفته است؟Eligible role + valid attemptsهمان Role/شرایط
دو نسخه مقایسه شوند؟طرح/نمونه/Measure مناسبطبق عدم‌قطعیت طرح
تعهد سازمانی احراز شود؟Basis/Authority قراردادیفقط تعهد تعریف‌شده

Consent، Privacy و Accessibility بخشی از اعتبار اجرا هستند

Purpose، داده جمع‌آوری‌شده، ضبط/مشاهده، استفاده و نگهداری، دسترسی، خروج داوطلبانه و مسیر پرسش را با زبان و قالب قابل فهم Participant روشن کنید. نیازهای Keyboard، Screen reader، بزرگ‌نمایی، مترجم، زمان استراحت، مکان/اتصال و پشتیبانی را پیش از جلسه بپرسید. این متن توصیه حقوقی نیست؛ Policy و Authority سازمان حاکم است.

Journey Portfolio؛ Screen را با Outcome اشتباه نگیرید

BusinessJourney {
  journeyId, journeyVersion, segmentIds[],
  businessGoal, trigger, preconditions,
  startState, endState, steps[], roleHandoffs[],
  businessRules[], dataClasses[], dependencies[],
  expectedOutcome, unacceptableOutcomes[],
  criticality, frequencyBasis, riskIds[],
  acceptanceClaimIds[], digest
}

Journey فقط Happy path داخل UI نیست. Handoff، Timeout، Resume، Approval، Export، Notification، Reversal، Retry، Duplicate، Late event و Reconciliation ممکن است بخشی از Outcome باشند. برای ارزیابی عمیق Workflowهای سازمانی، تست کاربردپذیری نرم‌افزار سازمانی را جدا اجرا کنید.

Acceptance Claim؛ دقیقاً چه چیزی قرار است پذیرفته شود؟

AcceptanceClaim {
  claimId, claimText, basisRef,
  segmentIds[], journeyId, scope, conditions[],
  expectedOutcome, oracleRef,
  evidenceRequirement[], threshold, thresholdBasis,
  validityWindow, ownerCapability,
  limitations[], status, digest
}

«سیستم قابل قبول است» بیش از حد پهن است. Claim سالم می‌گوید Role تعریف‌شده روی Build و Environment معین، Journey معین را تحت Conditionهای معین با Outcome و Evidence معین انجام می‌دهد. Product success، Retention یا رضایت بازار را از یک Cycle داخلی نتیجه نگیرید.

Oracle پذیرش را به لبخند یا نظر لحظه‌ای نسپارید

Participant statement مهم است، اما تنها Oracle نیست. State transition، Business invariant، نتیجه Ledger/Report، Role authorization، Handoff receipt و Outcome observable را کنار آن بگذارید. Expected باید Source و version داشته باشد. برای طراحی Comparator و مرز Expected/Verdict، راهنمای Test Oracle را ببینید.

Oracleنمونهمحدودیت
Business ruleاثر مالی خیالی حداکثر یک بارنسخه Rule لازم است
StatePENDING→RECONCILEDظاهر UI کافی نیست
Document/Reportمجموع/واحد/بازه درستSource data هم باید معتبر باشد
Participant judgmentOutcome برای Role قابل قبول استScope و Authority محدود
Policy thresholdUnacceptable outcome صفرBasis و مخرج لازم است

Environment و Data؛ واقع‌گرایی چندبعدی است

UAT Environment لازم نیست Production باشد و کپی Production نیز خودکار «واقعی» نیست. نسخه، Configuration، Integration stub، Permission، Feature flag، Locale، Timezone، Device/Network، Data distribution و Volume را نسبت به Claim بسنجید. Fidelity را بعدبه‌بعد ثبت و Limitation را حمل کنید.

بعدپرسششاهد
Build/Configهمان Candidate است؟Digest/manifest
Identity/RolePermission واقعی‌نماست؟Role matrix
DataBoundary/relationship/state دارد؟Data profile
DependencyStub چه چیزی را شبیه نمی‌کند؟Contract/limitation
Locale/Timefa-IR/RTL/UTC/Asia-Tehran درست است؟Environment evidence
AccessParticipant ابزار لازم دارد؟Accommodation record

Entry Criteria؛ «QA تمام شد» معیار کافی نیست

Charter/Basis/Build/Environment/Data آماده، Participant eligibility و Consent روشن، Journey/Claim/Oracle قابل اجرا، Known issue و Limitation ابلاغ، Evidence capture آزموده، Support و Stop rule حاضر و Change freeze تعریف‌شده باشند. Entry miss می‌تواند BLOCK، WAIVE با Authority/expiry یا Reschedule شود؛ نباید ناپدید شود.

Execution Record؛ هر Attempt هویت و محدودیت دارد

UATRun {
  runId, participantId, journeyId, claimIds[],
  buildId, environmentId, dataProfileId,
  startedAt, endedAt, facilitatorId,
  assistanceEvents[], deviations[],
  attemptStatus, resultVocabulary,
  oracleResult, evidenceRefs[], limitations[], digest
}

Attempt را PASS نکنید اگر Build معلوم نیست، Participant اشتباه است، Dependency قطع بوده، Facilitator پاسخ را داده یا Evidence ناقص است. INVALID و INCONCLUSIVE به‌اندازه PASS/FAIL واقعی‌اند؛ حذف آن‌ها Pass rate را زیبا و تصمیم را ضعیف می‌کند.

Facilitation؛ کمک را ثبت کنید، نه اینکه پنهان کنید

Clarify task wording، توضیح Business rule، Navigation hint، Recovery help و اجرای مستقیم توسط Support اثر یکسان ندارند. Assistance level، زمان، دلیل و اثر بر Verdict را ثبت کنید. Training لازم را از Coaching هنگام Attempt جدا کنید. Participant نباید برای «قبولی پروژه» تحت فشار باشد.

رخدادثبتاثر محتمل
توضیح واژه سناریوClarificationLimitation/ممکن است Valid بماند
گفتن محل دکمهNavigation hintClaim استقلال متاثر
انجام مرحله توسط FacilitatorDirect interventionAttempt معمولاً Invalid/Fail برای آن Claim
رفع خرابی EnvironmentEnvironment interventionRestart/Separate attempt

Observation، Feedback، Finding، Defect و Change Request را جدا کنید

UATObservation {
  observationId, runId, timestamp,
  observedBehavior, participantStatement, interpretation,
  evidenceRefs[], assistanceLevel,
  affectedClaimIds[], affectedSegmentIds[],
  classification, severityProposal, businessImpact,
  unknowns[], disposition, ownerCapability, digest
}

Observation می‌تواند به Defect، Requirement gap، Usability issue، Training/content need، Data/Environment issue، Policy conflict، Change request یا No action with rationale تبدیل شود. گفته Participant واقعیت تجربه اوست، اما Cause یا راه‌حل قطعی نیست. برای فرایند تصمیم، پروتکل تریاژ باگ را به‌کار ببرید.

Evidence Manifest؛ Screenshot به‌تنهایی پرونده نیست

Manifest باید Evidence ID/Type/Source/Subject/Run/Claim/Build/Environment/CapturedAt/Producer/Access/Redaction/Retention/Digest و Limitation را نگه دارد. داده شخصی یا کسب‌وکاری را بی‌نیاز جمع نکنید. Screenshot بدون State، Time، Build و Oracle ممکن است قابل تفسیر نباشد؛ Recording نیز Consent و Access policy می‌خواهد.

Vocabulary نتیجه را قبل از Run تعریف کنید

Verdictمعنااقدام
PASSClaim در Scope و Conditions با Evidence پشتیبانی شدCarry limitations
FAILOracle/Unacceptable outcome نقض شدFinding/Triage
INCONCLUSIVEEvidence برای Verdict کافی نیسترفع Gap/تکرار
INVALIDAttempt قرارداد اجرا را نقض کرداصلاح Setup/تکرار
NOT_RUNAttempt انجام نشدعلت/اثر بر Coverage

PASS_WITH_ASSISTANCE یا PASS_WITH_LIMITATION را می‌توان به‌عنوان Extension تعریف کرد، مشروط به semantics نسخه‌دار. «Completed» Verdict نیست. مخرج را ثابت کنید: Planned، Eligible، Started، Valid، Decided و Retested را یکی نگیرید.

Coverage را چندبعدی گزارش کنید

Coverageصورت/مخرجBlind spot
SegmentSegments adequately represented / plannedیک نفر نماینده ضعیف
JourneyJourneys with valid attempts / scopedHappy path غالب
ClaimClaims with verdict / baselinedClaim پهن یا Oracle ضعیف
RiskRisks with mapped evidence / scopedشدت بالا بیرون Scope
VariantBoundary/negative/handoff variants / plannedهمه Pass اما تکراری
BuildEvidence on candidate build / all evidenceنتیجه نسخه قدیم

Retest و Regression؛ تغییر کوچک Evidence را منقضی می‌کند؟

Fix، Config، Copy، Permission، Data mapping یا Dependency change می‌تواند Claimهای دیگری را متاثر کند. Change impact، affected Claim/Journey/Segment، Retest scope، Regression guardrail و Evidence supersession را ثبت کنید. فقط مورد Fail را دوباره زدن ممکن است Handoff یا Variant مجاور را جا بگذارد.

Exception و Residual Risk را زیر Sign-off دفن نکنید

Exception باید Claim/Journey/Segment، Evidence، Rationale، Business impact، Compensating control، Owner، Authority، Expiry، Reopen trigger و Retest plan داشته باشد. Acceptance of a workflow با Acceptance of risk یکی نیست. Participant یا Facilitator لزوماً Risk authority نیست.

Recommendation، Acceptance Decision، Sign-off و Release را جدا کنید

Artifact/ActionسؤالAuthority
UAT ResultEvidence چه Verdictهایی ساخت؟Evidence/Test owner
Recommendationبا این Evidence چه پیشنهاد می‌شود؟Charter-defined recommender
Acceptance Decisionکدام Claim در چه Scope پذیرفته است؟Business acceptance authority
Risk Acceptanceکدام Residual risk پذیرفته می‌شود؟Named risk authority
Release DecisionDeploy/Release/Launch شود؟Release authority
Sign-offامضا طبق semantics فرم چه چیزی را attest می‌کند؟Defined signatory

برای بسته‌ی کامل شواهد انتشار، گزارش اختتامیه تست را ببینید. UAT می‌تواند ورودی آن باشد، اما جای Security، Performance، Operations یا Deployment evidence را نمی‌گیرد.

Acceptance Result و Decision Record قابل‌کپی

UATAcceptanceDecision {
  recommendationId, cycleId, scope,
  basisVersion, releaseId, buildId, environmentId,
  segmentCoverage[], journeyCoverage[], claimVerdicts[],
  findingSummary[], exceptionRefs[], unknowns[], limitations[],
  residualRisk[], recommendation,
  decisionAuthority, decision, conditions[],
  evidenceManifestId, decidedAt, expiry,
  reopenTriggers[], supersedes, digest
}

Vocabulary پیشنهادی: ACCEPT_WITHIN_SCOPE، CONDITIONAL_ACCEPTANCE، DO_NOT_ACCEPT، INCONCLUSIVE و ESCALATE. این‌ها وضعیت Product یا Release جهانی نیستند. Conditions باید Owner/due/evidence داشته باشند؛ Expiry بدون Reopen نیز فقط یک تاریخ تزئینی است.

Sign-off دقیقاً چه چیزی را امضا می‌کند؟

فرم می‌تواند حضور، مشاهده‌ی Result، تایید صحت Summary، Acceptance محدود Claimها، پذیرش Exception یا Decision انتشار را امضا کند؛ این معناها را یکی نکنید. Signatory role، Authority source، Scope، Build/Basis، Evidence digest، Conditions، Dissent، timestamp و معنا را روی خود Record بیاورید.

امضامتن سالممتن خطرناک
AcknowledgmentResult نسخه X را دیدممحصول خوب است
Evidence attestationSummary با Manifest Y سازگار استهیچ باگی نیست
AcceptanceClaimهای A/B در Scope C پذیرفته‌اندهمه چیز Accepted
Conditionalبا شروط/expiry/owner مشخصبعداً درست می‌کنیم

Dissent و Conflict را پاک نکنید

اختلاف Participant، Product، Operations یا Support یک Average ساده نیست. Claim، Evidence، Interpretation، Consequence و Authority را جدا ثبت کنید. تعارض منافع—مثلاً Facilitatorی که هم Delivery target دارد و هم Acceptance authority است—باید Disclosure/Recusal/Escalation داشته باشد. Minority observation ممکن است Risk پراثر را آشکار کند.

Agile و Continuous UAT؛ Evidence کوچک اما نسخه‌دار

به‌جای یک Ceremony سنگین انتهای Release، Claimها را به Journey/Risk Slice تقسیم کنید؛ Business representative می‌تواند Example review، workflow rehearsal و Candidate acceptance انجام دهد. Automation Preconditions و State checks را آماده می‌کند، اما تجربه، اختیار و Judgment را تقلید نمی‌کند. Evidence هر Slice باید Build/Basis و expiry داشته باشد تا جمع‌شدن آن به معنای جمع‌کردن نسخه‌های ناسازگار نباشد.

UAT با Usability Study و Beta چه تفاوتی دارد؟

UAT درباره پذیرش نیاز کسب‌وکار در Scope تعریف‌شده است؛ Usability Study می‌تواند رفتار، موفقیت Task، زمان، خطا، SEQ یا SUS را با طرح پژوهش بررسی کند؛ Beta یادگیری در جمع/محیط محدود و متنوع‌تری می‌دهد و معمولاً کنترل کمتر دارد. یک Session ممکن است داده‌ی چند هدف بسازد، اما Protocol، Sampling، Consent، Measure و Claims را مخلوط نکنید. برای سنجه‌ها به راهنمای معیارهای تست کاربردپذیری مراجعه کنید.

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

Lab کاملاً ساختگی و بدون شبکه است: Order/PaymentAttempt/PSP Stub/Callback/Ledger/Reconciliation خیالی دارد. Participant شبه‌نام‌دارِ Role عملیات باید پس از Timeout نمایشی، وضعیت Fake order را ببیند و دقیقاً یک اثر مصنوعی را Reconcile کند. این مثال هیچ شرکت، کاربر، بانک، PSP، پرداخت یا فرایند واقعی را توصیف نمی‌کند.

Journey variantAcceptance ClaimUnacceptable outcomeEvidence
Timeout پیش از commit خیالیوضعیت Unknown گمراه‌کننده نباشدتکرار کورState/Observation
Timeout پس از commit خیالیReconcile اثر موجود را تشخیص دهداثر DuplicateFake ledger
Callback دیررسOrder درست متصل شودWrong associationCorrelation IDs
Callback تکراریاثر اضافی ساخته نشودDuplicate effectInvariant output
Handoff Support→OpsContext قابل بازیابی باشدLost contextReceipt/trace

شناسه‌های Tenant/Order/Attempt/Event/Ledger/Run/Build/Evidence جدا هستند؛ IRR کاملاً خیالی واحد Canonical و تومان فقط نمایش برچسب‌خورده است؛ ارقام فارسی/عربی/لاتین، ی/ی و ک/ک، Unicode NFC، RTL/LTR، UTC/Asia-Tehran و جلالی فقط نمایشی آزموده می‌شوند. هیچ نام، موبایل، ایمیل، IP، Account، PAN، CVV2، OTP، Cookie، Token، Credential، Log یا Screenshot واقعی وجود ندارد.

Fixture: ۱۰۰٪ Sign-off در برابر ۲۲۰ Finding

Fixture مستقل `SYN-UAT-ACCEPTANCE-DECISION-۰۱` با Node.js و بدون Dependency بیرونی اجرا شد. Dashboard نشان داد ۱۵ نفر از ۱۵ نفر حاضر، ۶۴ Journey از ۶۴ Journey Pass و Sign-off برابر ۱۰۰٪ است و `UAT_SIGNOFF_PASS` صادر کرد. ممیزی ۲۳۰قاعده‌ای همان ورودی را با دقیقاً ۲۲۰ Finding به HOLD برد.

گروهقاعدهنمونه
Identity18Release/Build/Basis/Environment/Policy
Charter18Decision/Scope/Authority/Stop
Segment20Role/Context/Access/Population/Limit
Journey20Goal/State/Handoff/Rule/Risk
Claim17Basis/Scope/Oracle/Evidence/Validity
Participant18Eligibility/Consent/Exposure/Accommodation
Execution18Attempt/Build/Assistance/Verdict/Evidence
Observation17Behavior/Statement/Interpretation/Disposition
Decision20Coverage/Unknown/Risk/Authority/Expiry
Governance20Policy/Retest/Correction/Access/Metrics
Forbidden34تضمین و یکی‌گرفتن مفاهیم
Relations10پیوند هویت و vocabulary شرطی

۲۲۰ Finding برابر ۱۸۶ فیلد غایب و ۳۴ ادعای ممنوع بود؛ ده Relation چون رکوردهای Claim/Run/Decision اصلاً وجود نداشتند، صادقانه فعال نشدند. نسخه اصلاح‌شده Segment عملیات، Journey `JOURNEY-RECONCILE-SYN-۳۳`، Claim و Oracle، Participant eligibility/Consent، Build/Environment/Data، Assistance، Observation و یک `CONDITIONAL_ACCEPTANCE` منقضی‌شونده را پیوند داد و `READY_FOR_UAT_ACCEPTANCE_REVIEW` با صفر Finding ساخت؛ نه اثبات حقیقت Evidence، نمایندگی جمعیت، کفایت Threshold، کیفیت محصول، انطباق یا مجوز Release.

Automation و AI در UAT

Automation می‌تواند Build identity، Data reset، Environment smoke، Journey trace، State invariant، Evidence digest و Coverage diff را کنترل کند. AI می‌تواند Observationها را برای Human review خوشه‌بندی، Trace candidate پیشنهاد یا متن Summary را Draft کند؛ نباید Participant statement بسازد، Consent را فرض، Segment را بدون Basis نمایندگی، Finding را خودکار ببندد، Risk بپذیرد یا Sign-off/Release صادر کند. Prompt/Input/Model/Output و Reviewer را ثبت کنید.

معیارهای سالم و Countermetricها

MetricکاربردCountermetric/محدودیت
Segment coverageنمایندگی ScopeEligibility/Recruitment limitation
Valid Journey attemptsExecution واقعیAssistance/Invalid rate
Claim verdict coverageتصمیم‌پذیریOracle weakness/Unknown
Finding-to-claim traceاثر FindingUnclassified observations
Retest freshnessاعتبار CandidateChange-trigger misses
Exception ageبدهی زمان‌دارSilent expiry/reopen miss
Decision latencyFlow تصمیمPressure/weak evidence
Correction reachاصلاح downstreamAccess/privacy incident

۳۴ Anti-pattern در UAT و Sign-off

  1. UAT موفقیت محصول را تضمین می‌کند.
  2. UAT پذیرش بازار را تضمین می‌کند.
  3. UAT جلوی شکست Launch را می‌گیرد.
  4. Sign-off یعنی محصول بدون Defect است.
  5. Sign-off همان مجوز Release است.
  6. همه Pass یعنی Accepted.
  7. همه امضا کردند یعنی نمونه نماینده است.
  8. همیشه فقط کاربر واقعی معتبر است.
  9. کاربر داخلی هرگز معتبر نیست.
  10. UAT همیشه آخرین تست است.
  11. UAT فقط قبل Go-live انجام می‌شود.
  12. UAT همان Usability Testing است.
  13. UAT همان Beta Testing است.
  14. UAT همان Demo مشتری است.
  15. UAT همان Sprint Review است.
  16. UAT همان Requirement Review است.
  17. UAT جای System Testing را می‌گیرد.
  18. UAT جای Operational Readiness را می‌گیرد.
  19. UAT جای Accessibility Testing را می‌گیرد.
  20. UAT جای Security Testing را می‌گیرد.
  21. رضایت Participant اثبات Acceptance است.
  22. Zero Finding اثبات کیفیت است.
  23. یک فرد نماینده Segment است.
  24. یک تعداد ثابت برای همه UATها کافی است.
  25. Participant بیشتر Confidence را تضمین می‌کند.
  26. Participant خودکار Decision authority است.
  27. QA خودکار Acceptance authority است.
  28. Product Owner همیشه Signatory نهایی است.
  29. هر Major Finding همیشه Block است.
  30. هر Minor Finding هرگز Block نیست.
  31. Production data برای UAT لازم است.
  32. Production environment برای UAT لازم است.
  33. AI می‌تواند Sign-off کند.
  34. Acceptance یعنی Residual risk صفر است.

چک‌لیست ۳۲نقطه‌ای UAT Decision Owner

حوزهکنترل
IdentityRelease/Build/Deploy/Environment/Data/Basis/Policy/Cutoff قفل است؟
CharterPurpose/Decision/Scope/not-claimed/Authorities/Stop روشن است؟
BasisSource/Owner/Version/Conflict/Change ثبت است؟
SegmentJob/Role/Permission/Experience/Context/Access/Risk/Population دارد؟
ParticipantEligibility/Proxy limit/Exposure/Consent/Privacy/Accommodation ثبت است؟
JourneyGoal/Trigger/State/Handoff/Rule/Dependency/Unacceptable outcome دارد؟
ClaimBasis/Segment/Journey/Scope/Condition/Oracle/Evidence/Validity دارد؟
ExecutionAttempt/Build/Time/Assistance/Deviation/Verdict/Evidence متصل است؟
ObservationBehavior/Statement/Interpretation/Unknown جدا هستند؟
CoverageSegment/Journey/Claim/Risk/Variant/Build با مخرج گزارش شده؟
FindingClassification/Impact/Disposition/Owner/Retest دارد؟
ExceptionAuthority/Rationale/Control/Expiry/Reopen دارد؟
DecisionResult/Recommendation/Acceptance/Risk/Release/Sign-off جدا هستند؟
FreshnessChange impact/Validity/Retest/Supersession/Correction تعریف است؟
GovernanceAccess/Retention/Appeal/AI/Metric/Countermetric روشن است؟

Pilot سی‌روزه برای اصلاح یک UAT موجود

بازهکارخروجی/Guardrail
روز ۱–۵یک Decision و Release انتخاب؛ Charter/AuthorityScope کوچک/not-claimed
روز ۶–۱۰Segment/Journey/Claim/OracleRisk-based coverage
روز ۱۱–۱۵Recruitment/Consent/Environment/Data dry runPrivacy/accessibility/stop
روز ۱۶–۲۰Run/Assistance/Observation/EvidencePASS/FAIL/INC/INVALID/NOT_RUN
روز ۲۱–۲۵Triage/Retest/Exception/RecommendationOwner/expiry/reopen
روز ۲۶–۳۰Decision rehearsal/metrics/correctionScale/Adapt/Stop

جمع‌بندی

UAT را با Ceremony، تعداد شرکت‌کننده یا صفحه امضا مدیریت نکنید. ابتدا Decision و Authority را روشن کنید؛ Segment و Journey را با Risk بسازید؛ Claim و Oracle را به Basis نسخه‌دار ببندید؛ Eligibility، Consent، Environment، Assistance و Evidence هر Attempt را حفظ کنید؛ Coverage و Unknown را کنار Verdict بیاورید؛ و Acceptance را از Risk/Release جدا کنید. UAT می‌تواند یک ادعای کسب‌وکاری را معتبرتر کند، اما نتیجه خوب یا امضای کامل، آینده محصول را تضمین نمی‌کند.

سؤالات متداول

آیا ۱۰۰٪ Pass در UAT یعنی محصول پذیرفته شده است؟

فقط اگر مخرج، Segment/Journey/Claim coverage، Oracle، Build، Attempt validity و Authority روشن باشد. حتی آن‌وقت Acceptance به Scope و Conditions همان Record محدود است؛ Product quality، Residual risk یا Release را خودکار تعیین نمی‌کند.

چه کسی باید UAT را Sign-off کند؟

نقشی که Charter و Governance برای همان نوع امضا اختیار داده‌اند. Participant ممکن است Evidence بدهد، Process owner Claim را بپذیرد، Risk owner Exception را قبول کند و Release authority تصمیم دیگری بگیرد. Product Owner یا QA قانون جهانی نیست.

چند کاربر برای UAT کافی است؟

عدد ثابت وجود ندارد. Decision consequence، Segmentها، Journey/Risk، روش، تنوع، Confidence موردنیاز و Iteration را مبنا قرار دهید. Target count rationale و Recruitment limitation را ثبت کنید و فقدان Segment بحرانی را با تعداد بیشتر در Segment دیگر پنهان نکنید.

آیا کارمند داخلی می‌تواند Participant معتبر UAT باشد؟

بله، اگر واقعاً Intended user یا نماینده واجدصلاحیت Role سازمانی باشد. Prior exposure، Conflict و Training را ثبت کنید. برای محصول عمومی، Proxy داخلی محدودیت جدی دارد و نباید بی‌صدا به همه کاربران تعمیم داده شود.

اگر Finding مهمی در UAT پیدا شود چه کنیم؟

Observation را به Claim/Journey/Segment و Evidence وصل، سپس Defect/Requirement/Usability/Data/Environment/Policy یا Change request طبقه‌بندی کنید. Disposition، Owner، Retest و اثر بر Coverage را ثبت کنید؛ Block یا Exception را Authority و Risk تعیین می‌کند، نه فقط برچسب شدت.

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