تستر در ۱۲ جلسهٔ طراحی حاضر بوده، ۳۷ سؤال پرسیده، همهٔ Wireframeها «Review شده‌اند» و تیم می‌گوید کیفیت از ابتدا ساخته شده است. اما معلوم نیست کدام نسخهٔ Design بررسی شده، سؤال‌ها به چه Quality Claim و Riskی وصل بوده‌اند، چه Findingی پذیرفته یا رد شده، چه کسی اختیار تصمیم داشته و آیا تغییر طراحی در Artifact بعدی واقعاً اعمال شده است. حضور زودهنگام بدون قرارداد Review فقط جلسه را شلوغ‌تر می‌کند.

این راهنما یک Design Quality Review Loop می‌سازد: Decision Need → Artifact Baseline → Review Charter → Stakeholder Concern/Risk → Quality Claim → Scenario Lens → Review Question → Finding → Disposition/Design Decision → Revision → Verification → Downstream Countercheck/Correction. تمرکز مقاله «نقش تستر در بازبینی طراحی نرم‌افزار» است؛ نه تعریف عمومی Shift-left، نه تضمین پیشگیری از باگ و نه حق وتوی Design برای QA.

پاسخ کوتاه: تستر در بازبینی طراحی چه کاری انجام می‌دهد؟

تستر Concern و Risk را به Quality Claim قابل‌بررسی تبدیل می‌کند، مرز State/Interface/Data/Failure را با Scenario و Counterexample به چالش می‌کشد، نیاز به Observability/Controllability/Oracle را پیش از Implementation آشکار می‌کند و Finding را با Evidence و اثر تصمیم ثبت می‌کند. Author و Design authority گزینه را می‌سازند و تصمیم می‌گیرند؛ Risk owner استثنا را می‌پذیرد؛ تستر پس از Revision بررسی می‌کند که پاسخ واقعاً در Artifact تازه منعکس شده و بعداً آن را با Evidence اجرای مناسب Countercheck می‌کند.

  • Review object: Artifact و نسخهٔ دقیق؛ نه «طراحی Feature» به‌صورت مبهم.
  • Quality Claim: ویژگی مورد انتظار برای Subject/Scope/Condition معین.
  • Review Question: پرسشی متصل به Claim/Risk/Design element که پاسخ تصمیم را تغییر می‌دهد.
  • Finding: Gap یا Unknown مستند؛ نه الزاماً Defect محصول.
  • Disposition: تصمیم دربارهٔ Finding با rationale، owner و موعد.
  • Verification: Evidence اینکه Revision یا Experiment پاسخ مصوب را اجرا کرده است.

مرز این مقاله با Shift-left عمومی چیست؟

راهنمای نقش تستر در Shift-left مالک انتخاب «زودترین نقطهٔ اقتصادی بازخورد» و اتصال Quality Question به Countercheck دیرتر است. این مقاله فقط یکی از آن Interfaceها را عمیق می‌کند: Review یک Design artifact پیش از یا هم‌زمان با Implementation، از Baseline تا Finding closure. «چپ» تاریخ ثابت ندارد؛ نسبت به Feedback loop و تصمیم تعریف می‌شود.

Design Review با Requirement Analysis یکی نیست

فعالیتObject اصلیسؤال نمونهخروجی
Requirement analysisنیاز، Rule، Acceptance basisچه رفتاری و چرا لازم است؟Test basis/condition/gap
Design quality reviewراه‌حل، Component، State، Interface، Data flowاین Design چگونه Claim را برآورده یا قابل‌آزمون می‌کند؟Finding/decision/revision
UX researchArtifact در تعامل با participant/contextکاربر چه رفتار/نیازی نشان می‌دهد؟Observation/insight/option
Threat modelingAsset/trust boundary/threat/controlتهدید چگونه به Asset می‌رسد؟Security risk/control
Implementation testBuild/config/environmentرفتار اجراشده با Oracle سازگار است؟Result/finding/evidence

تحلیل نیاز و Test Basis را راهنمای تحلیل نیازمندی برای تستر پوشش می‌دهد. Design Review نباید Requirement مبهم را بی‌صدا با فرض Reviewer پر کند؛ Gap به Basis برمی‌گردد.

Review با Approval و Test فرق دارد

Review می‌تواند Anomaly، Risk، Alternative و سؤال باز پیدا کند؛ Approval یک تصمیم سازمانی با Authority است؛ Test یک Object را با روش و Oracle بررسی می‌کند. Review سبز به معنی Build آماده، Testability تضمین‌شده یا Release مجاز نیست. Design تصمیم‌شده نیز ممکن است در Code غلط اجرا شود؛ Downstream countercheck لازم است.

چه Design artifactهایی قابل بازبینی‌اند؟

Artifactلنز تسترEvidence بعدی
Wireframe/prototypeState، affordance، error/recovery، accessibilityprototype study/render check
Architecture diagramboundary، dependency، failure propagation، observabilitycontract/fault/recovery test
API/event contractschema، idempotency، ordering، timeout، versioningconsumer/producer contract
Data model/migrationinvariant، identity، null/default، rollback، reconciliationmigration/reconciliation witness
State machine/workflowtransition، guard، terminal/retry/resumemodel/state-transition tests
Deployment designconfig، cohort، health، stop، rollbackrehearsal/canary evidence
Decision recordassumption، option، trade-off، expiryvalidation/correction

Artifact Baseline؛ دقیقاً چه چیزی بررسی می‌شود؟

Review بدون نسخه می‌تواند Finding را به Artifact اشتباه وصل کند. شناسه، type، version/commit، digest، owner، status، linked basis، diagram source، generated view و زمان Freeze را ثبت کنید. اگر Diagram از مدل دیگری تولید می‌شود، Source authoritative و زمان generation را نگه دارید؛ Screenshot صرفاً نماست.

artifact_id: DESIGN-CHECKOUT-042
type: state_and_component_design
version: 6
commit: design-repo@8f31c2a
digest: sha256:synthetic-design-digest
status: review_candidate
owner_role: checkout-design-author
basis_refs: [REQ-IRR-v9, POLICY-RETRY-v3]
included_views: [state-machine-v6, sequence-timeout-v4, data-contract-v2]
generated_at: 2026-08-13T10:00:00+03:30
frozen_for_review_at: 2026-08-13T10:05:00+03:30

Review Charter؛ جلسه قرار است چه تصمیمی را پشتیبانی کند؟

Charter باید Objective، Decision need، Scope، excluded views، risks، review type/formality، roles، entry/exit، timebox، evidence store و not-claimed را روشن کند. «نظر QA را بگیریم» Objective نیست. نمونه: «بررسی کنیم Design v6 برای نمایش مبلغ IRR، timeout callback و duplicate event Claim و Evidence path کافی دارد یا به Revision/Experiment نیاز دارد.»

review_id: DQR-042
artifact: DESIGN-CHECKOUT-042@v6
objective: assess_claim_coverage_and_testability_before_build_commitment
decision_need: ACCEPT | REVISE | EXPERIMENT | HOLD
scope: [pricing-state, callback-sequence, evidence-hooks]
out_of_scope: [visual-brand, production-release, legal-conformity]
review_type: technical_review
formality: risk_tailored
entry: artifact_frozen_and_basis_available
exit: all_findings_dispositioned_and_verification_planned
facilitator_role: review-moderator
decision_owner_role: design-owner
risk_owner_role: checkout-risk-owner
evidence_store: em://design-review/042/v1

سطح رسمیت را بر Risk و Object تنظیم کنید

ISTQB CTFL توضیح می‌دهد Review از informal تا formal متغیر است و انتخاب به Objective، SDLC، پیچیدگی، Criticality، نیاز audit و منابع بستگی دارد. Comment async روی Wireframe کم‌خطر ممکن است کافی باشد؛ Migration برگشت‌ناپذیر یا Design حوزهٔ ایمنی/امنیت می‌تواند preparation، reviewer مستقل، checklist، entry/exit و audit trail رسمی‌تر بخواهد.

منبع رسمی Review چه می‌گوید؟

نسخهٔ رسمی ISTQB CTFL v4.0.1 نقش‌های Manager، Author، Moderator، Scribe، Reviewer و Review leader را جدا می‌کند، Finding را تا Fix/report دنبال می‌کند و پذیرش Work product را به Exit criteria وصل می‌داند. قراردادهای تفصیلی این مقاله، توسعهٔ عملی نویسنده برای Design quality review هستند؛ فیلد رسمی ISTQB یا ادعای انطباق نیستند.

NASA چه نکته‌ای به Review طراحی اضافه می‌کند؟

راهنمای رسمی NASA دربارهٔ checklist و پیگیری Peer Review می‌گوید Checklist باید با نوع Work product و منظر نقش‌ها متناسب باشد، Entry/Exit تعریف شود و Issueها تا حل و Verification دنبال شوند. این راهنما مربوط به Context مهندسی NASA است؛ الگوی این مقاله آن را به‌عنوان شاهد طراحی Review discipline استفاده می‌کند، نه الزام عمومی یا Safety certification.

نقش‌ها را از Job title جدا کنید

Review roleمسئولیتنباید
AuthorContext، Artifact و پاسخ/RevisionFinding خود را یک‌نفره Close کند
Review leaderObjective، scope، participant و logisticsنتیجه را از قبل تعیین کند
Moderatorقواعد، زمان، امنیت گفتگو و تعارضDesign option را تحمیل کند
Reviewer/test perspectiveClaim، scenario، testability و evidence gapخود را نمایندهٔ همهٔ کاربران بداند
Specialist reviewerامنیت، حریم خصوصی، دسترس‌پذیری، عملیات یا دامنهخارج از صلاحیت sign-off دهد
Scribeسؤال، Finding، decision و action را ثبت کندنیت افراد را تفسیر کند
Decision ownerOption/Revision/Hold را تصویب کندRisk خارج اختیار را بپذیرد
VerifierEvidence closure را مستقل بررسی کندDone تیکت را Evidence کافی بداند

تستر نمایندهٔ خودکار کاربر نیست

تستر می‌تواند Scenario و Risk را از منظر Evidence به چالش بکشد، اما Experience زیستهٔ همهٔ Segmentها، تخصص UX research، Accessibility lived experience یا Domain authority را ندارد. ادعای نیاز کاربر باید به Research/Evidence وصل شود. راهنمای UX Evidence-to-Decision Observation و Insight را مالک است.

Quality Concern را از Solution جدا کنید

«Cache اضافه کنیم» Solution است؛ Concern ممکن است latency زیر بار باشد. «Retry سه بار» Solution است؛ Concern ممکن است delivery قابل‌اعتماد بدون side effect تکراری باشد. ابتدا Stakeholder، harm/value، operating condition و uncertainty را ثبت کنید؛ سپس Claim و Option بسازید. تستر نباید سؤال را با نسخهٔ محبوب خود پاسخ دهد.

Quality Claim قابل Review بنویسید

claim_id: QC-IDEMPOTENCY-042
property: duplicate_callback_does_not_duplicate_ledger_effect
subject: payment-callback-handler-design-v6
scope: same_attempt_and_provider_event
conditions:
  - timeout_before_response
  - retry_after_unknown_outcome
  - duplicate_and_late_delivery
unacceptable: ledger_entries_for_same_effect > 1
design_refs: [sequence-timeout-v4, state-machine-v6]
verification_intent: contract_plus_stateful_fault_test
validity: design-v6
not_claimed: [provider_exactly_once, end_to_end_financial_correctness]

Claim باید bounded باشد. «سیستم امن/سریع/کاربرپسند است» Reviewشدنی نیست. برای Quality attribute و Measurement contract، راهنمای تست غیرعملکردی مرجع داخلی مکمل است.

Traceability گرافی بسازید

Basis/Risk → Concern → Claim → Design element → Review question → Finding → Disposition → Revision → Verification → Countercheck. این رابطه‌ها many-to-many و نسخه‌دارند. جدول یک‌به‌یک Requirement-to-Test می‌تواند Interface و emergent behavior را پنهان کند. Orphan Claim و Finding بدون Design ref را آشکار کنید.

Edgeمعنامثال
motivated-byRisk/Concern دلیل Claim استQC-42 motivated-by duplicate-effect risk
addressed-byDesign element ادعای پاسخ داردQC-42 addressed-by idempotency-key state
challenged-byQuestion یک assumption را می‌آزمایدQ-7 challenges retry ordering
producedQuestion Finding ساختهQ-7 produced F-3
dispositioned-asAuthority تصمیم دادهF-3 REVISE
implemented-inFinding در Revision پاسخ گرفتهF-3 implemented-in v7
verified-byClosure Evidence داردF-3 verified-by diff/review/trace
counterchecked-byImplementation evidence بعدیQC-42 counterchecked-by fault-run-91

Scenario Lens؛ مسیر عادی کافی نیست

لنزسؤال DesignEvidence intent
Boundaryصفر/حداکثر/خارج دامنه چگونه رفتار می‌کند؟boundary/property
StateTransition نامعتبر و terminal state چیست؟state-model
Timetimeout، expiry، clock skew و late event؟virtual-time/fault
Concurrencyدو Writer/Request هم‌زمان چه invariantی دارند؟race/witness
Dependencypartial/slow/wrong/duplicate response؟contract/fault
Dataidentity، null، migration، retention و reconciliation؟data invariant
Permissionچه Actorی چه Actionی را می‌بیند/انجام می‌دهد؟authorization matrix
Recoveryپس از failure چگونه State فهم و ترمیم می‌شود؟recovery rehearsal
Operationsتشخیص، alert، runbook، rollback و owner؟operability check
Locale/accessRTL، digits، units، keyboard و assistive tech؟locale/accessibility evidence

Counterexample ارزشمندتر از فهرست Edge Case است

به‌جای «همه Edge caseها پوشش داده شوند»، یک invariant را بگیرید و کوچک‌ترین مسیر نقضش را بسازید. اگر Design می‌گوید هر Attempt یک اثر Ledger دارد، بپرسید timeout پس از commit و پیش از response، سپس Retry با event ID متفاوت چه می‌کند؟ Counterexample باید precondition، sequence، state و expected property داشته باشد.

Happy Path را با State و Handoff کامل کنید

Flow chart خطی اغلب retry، cancel، resume، approval، duplicate، reversal، compensation و reconciliation را حذف می‌کند. برای هر handoff مالک، contract، timeout، idempotency، observable state و recovery را ثبت کنید. Diagram زیبا بدون failure semantics، Evidence design نیست.

Testability را به سه پرسش تبدیل کنید

  1. Controllability: آیا می‌توان State/Input/Time/Dependency را امن و تکرارپذیر کنترل کرد؟
  2. Observability: آیا Result، State transition و side effect با هویت کافی دیده می‌شود؟
  3. Oracle: آیا Property/Expected result مستقل از Implementation قابل تعیین است؟

وجود API یا log Testability را تضمین نمی‌کند؛ access، determinism، correlation، privacy، retention و failure mode مهم‌اند. طراحی کامل Testability در راهنمای تست‌پذیری نرم‌افزار آمده است.

Evidence Hook را در Design مشخص کنید

Hookهویت/معناخطر
Structured eventevent/schema/subject/trace/timePII/secret یا cardinality
State querycanonical state و freshnessbackdoor Production access
Dependency stub/virtualizationcontract/version/fault profilefidelity drift
Clock controlreference time/timezone/advanceرفتار متفاوت از Production
Feature/config identityflag/config/build/cohortstale cache یا hidden override
Reconciliation viewsource/denominator/cutofflate event/duplicate

Hook فقط برای QA نیست؛ Debugging و Operations نیز مصرف‌کننده‌اند. دسترسی، minimization، retention و disable/cleanup را در Design لحاظ کنید. Test endpoint مخفی بدون auth یک «تست‌پذیری» ناامن است.

Oracle را از Implementation استخراج نکنید

اگر Expected amount از همان تابع Production محاسبه شود، خطای مشترک پنهان می‌ماند. Basis، invariant، model، standard، reconciliation یا independent calculation را تعیین کنید و ambiguity را Finding کنید. طراحی Oracle و Partial/Metamorphic/Differential relations را راهنمای Test Oracle پوشش می‌دهد.

NFR را به صفت مبهم رها نکنید

«سریع، امن، مقیاس‌پذیر و کاربرپسند» Design criterion نیست. Source/stimulus/environment/artifact/response/measure/threshold و trade-off را بنویسید. Design می‌تواند مکانیزم پیشنهادی را نشان دهد، اما Threshold تا Measurement معتبر اثبات نمی‌شود. Capacity و availability نیز Context و load model می‌خواهند.

امنیت در Design نیازمند متخصص و Risk model است

NIST SSDF 1.1 در PW.۱/PW.۲ بر Security requirement/risk در Design و Review Design علیه آن‌ها تأکید می‌کند. این مرجع نشان می‌دهد سؤال امنیتی باید به Requirement/Risk متصل و توسط فرد/فرایند واجدصلاحیت بررسی شود؛ حضور تستر عمومی جای Threat modeling، AppSec authority یا اثبات امنیت را نمی‌گیرد. این مقاله مشاورهٔ امنیتی یا انطباق نیست.

Privacy، Accessibility و Safety را به Checklist عمومی تقلیل ندهید

تستر می‌تواند missing consent state، retention، focus order یا hazardous fallback را سؤال کند، اما Applicability و کفایت به متخصص و Context نیاز دارد. Checklist ثابت ممکن است ریسک جدید یا گروه حذف‌شده را پنهان کند. Perspectiveهای تخصصی را با Authority و Evidence خود دعوت کنید و اختلاف را ثبت کنید.

Review Question Contract بسازید

question_id: DQ-042-07
claim_ref: QC-IDEMPOTENCY-042
risk_ref: RISK-DUPLICATE-EFFECT
design_ref: sequence-timeout-v4#step-8
lens: time_state_dependency
question: what prevents a second ledger effect after commit-before-response timeout?
counterexample:
  - callback commits
  - response is lost
  - provider retries with new transport id
evidence_needed: state_identity_and_deduplication_rule
asked_by_role: test-reviewer
status: OPEN

سؤال باید پاسخ‌پذیر و به Decision مرتبط باشد. «اگر اینترنت قطع شود چه؟» بدون نقطه، State و expected property به فهرست بی‌پایان تبدیل می‌شود. Question count سنجهٔ بهره‌وری نیست.

Question، Finding و Defect را جدا کنید

Artifactمعنانمونه
Questionنیاز به توضیح/شاهدکلید dedupe چیست؟
Assumptionگزارهٔ موقت برای ادامهprovider event ID پایدار است
Unknownپاسخ فعلاً موجود نیسترفتار retry provider
FindingGap نسبت به Claim/Basis/PolicyIdentity transport به‌جای business effect است
Design defectDesign از criterion مصوب تخطی داردTransition duplicate effect ممکن می‌کند
Implementation defectBuild از Design/Basis معتبر منحرف استguard در Code اجرا نشده
Change requestانتخاب جدید، نه اصلاح الزام موجودنمایش تاریخچهٔ retry

Finding Contract کامل بنویسید

finding_id: DF-042-03
review: DQR-042
artifact_ref: DESIGN-CHECKOUT-042@v6
question_ref: DQ-042-07
claim_ref: QC-IDEMPOTENCY-042
type: missing_state_identity
observation: dedupe key is transport callback id
gap: business effect identity is not preserved across provider retry
potential_effect: duplicate synthetic ledger entry
evidence_refs: [sequence-timeout-v4#8, data-contract-v2#callback_id]
confidence: medium
alternatives: [provider_id_stable_but_not_yet_evidenced]
recommended_next: revise_identity_or_run_contract_probe
status: OPEN

Potential effect را Actual defect/incident ننویسید. Severity به اثر و likelihood/exposure وابسته است؛ Priority به timing، dependency و تصمیم. Reviewer پیشنهاد می‌دهد؛ Authority disposition می‌کند.

Disposition vocabulary محدود داشته باشید

Dispositionمعنانیاز
REVISEArtifact باید تغییر کندowner/due/revision/verification
CLARIFY_BASISRequirement/policy مبهم استbasis owner و impact
EXPERIMENTDesign choice به Evidence نیاز داردhypothesis/guardrail/stop
ACCEPT_RISKGap باقیمانده آگاهانه پذیرفته می‌شودrisk authority/scope/expiry
DEFERدر زمان دیگری بررسی می‌شودtrigger/due/residual risk
REJECTFinding معتبر/مرتبط دانسته نشدrationale/evidence/appeal
DUPLICATEبه Finding معتبر دیگر وصل می‌شودcanonical ref
OUT_OF_SCOPEبه Route دیگری می‌رودdestination/owner/receipt

Rejected Finding را حذف نکنید

ردشدن بخشی از تصمیم است. Finding، rationale، evidence و تصمیم‌گیر را نگه دارید تا بعداً معلوم باشد Risk دیده شده یا نه. اختلاف حل‌نشده را با minority note ثبت کنید؛ Consensus اجباری می‌تواند Signal را خاموش کند. Appeal و Reopen trigger برای Evidence تازه لازم است.

Exception و Risk Acceptance تاریخ انقضا می‌خواهند

«بعداً اصلاح می‌کنیم» Closure نیست. Scope، conditions، residual risk، compensating control، authority، due/expiry و reopen trigger را ثبت کنید. تغییر Exposure، Dependency، Policy یا Incident می‌تواند Exception را منقضی کند. QA به‌طور پیش‌فرض صاحب پذیرش Business/Security/Privacy risk نیست.

Design Decision Record را به Finding وصل کنید

decision_id: DDR-042-09
finding_refs: [DF-042-03]
options:
  - business_effect_key
  - provider_event_key_plus_reconciliation
  - no_change
selected: business_effect_key
rationale: stable_across_transport_retries_and_reviewable
tradeoffs: [new_state_store, migration_and_retention]
assumptions: [attempt_identity_available_before_callback]
owner_role: design-owner
risk_owner_role: checkout-risk-owner
valid_for: DESIGN-CHECKOUT-042@v7
verification: diff_review_plus_contract_probe
supersedes: none

Revision را با Diff و Impact بررسی کنید

Author باید Finding را به Revision دقیق وصل کند. Verifier فقط وجود متن جدید را نگاه نمی‌کند؛ Claim، Interface، State، Data، Error و downstream Test intent را بررسی می‌کند. تغییر یک Sequence می‌تواند Diagram دیگر، Requirement، API contract یا Testware را stale کند. Impact register بسازید.

Closure سه سطح دارد

سطحشرطچیزی که ثابت نمی‌کند
Question resolvedپاسخ و evidence/ref ثبت شدهDesign کافی است
Finding verified in designRevision Claim را پاسخ دادهImplementation درست است
Claim countercheckedBuild/Environment evidence سازگار استهمهٔ Riskها یا آینده

Review می‌تواند با Findingهای dispositioned منتشر شود، درحالی‌که Countercheck بعدی هنوز باز است. وضعیت‌ها را یکی نکنید؛ وگرنه «Design approved» به «Feature tested» تبدیل می‌شود.

Downstream Countercheck را از ابتدا طراحی کنید

برای هر Claim بگویید چه Evidence دیرتری ممکن است فرض Review را رد کند: Prototype session، static analysis، contract test، property test، fault injection، performance experiment، accessibility review، telemetry یا Production guardrail. Earliest feedback اقتصادی باید با Countercheck با fidelity بیشتر کامل شود.

Review را با Test Case workshop یکی نکنید

ممکن است Scenarioها به Condition/Case/Charter تبدیل شوند، اما هدف جلسه تکمیل Inventory تست نیست. Design choice و Evidence hook ابتدا باید روشن شوند. فهرست Test case می‌تواند سؤال معماری را پنهان کند یا خیلی زود روی UI فعلی قفل شود. Design review finding و test-design artifact دو lifecycle جدا اما traceable دارند.

آماده‌سازی Reviewer از حضور در جلسه مهم‌تر است

Artifact و Context را زود بدهید، سؤال‌ها را async ثبت کنید، Glossary و Known unknowns داشته باشید و جلسه را برای اختلاف و Decision نگه دارید. Reviewer بدون زمان preparation فقط واکنش لحظه‌ای می‌دهد. Attendance صددرصدی، کیفیت Review یا تنوع perspective را ثابت نمی‌کند.

جلسهٔ ۶۰ دقیقه‌ای پیشنهادی

  1. ۵ دقیقه: Charter، نسخه، Decision و not-claimed.
  2. ۱۰ دقیقه: Concern/Risk/Claim و assumptionها.
  3. ۱۵ دقیقه: State/Interface/Data/Failure walkthrough.
  4. ۱۵ دقیقه: سؤال‌های ازپیش‌ثبت‌شده، Counterexample و Finding.
  5. ۱۰ دقیقه: Option/Disposition/owner/due/verification.
  6. ۵ دقیقه: disagreement، open unknown، exit و next receipt.

زبان Review را از حمله به Author جدا کنید

بگویید «در v6 هویت business effect برای Retry مشخص نیست»، نه «طراحی شما به Retry فکر نکرده». Assumption در زمان Design ممکن است با اطلاعات موجود معقول بوده باشد. Blameless بودن به معنی پذیرش همه Optionها نیست؛ Finding، Authority و deadline روشن می‌مانند. Moderator باید قطع‌کردن، تمسخر و rank pressure را مدیریت کند.

همکاری تستر و توسعه‌دهنده یک Interface می‌خواهد

پرسش Review باید owner پاسخ، Channel، SLA متناسب، evidence و receipt داشته باشد؛ Pairing برای مسئلهٔ پیچیده و async comment برای سؤال ساده مناسب است. همکاری بدون خروجی قابل‌ردیابی به حافظه وابسته می‌شود. الگوی Request تا Joint Evidence در راهنمای همکاری تستر و توسعه‌دهنده</a آمده است.

متریک‌های Review با Countermetric

MetricتعریفCountermetric/محدودیت
Entry validityReviewهای دارای baseline/basis / started reviewsزمان انتظار و over-formality
Claim coverageClaimهای in-scope با question/evidence pathکفایت Claim و orphan risk
Finding disposition timeopen تا receipt با percentilepremature reject/close
Verification rateverified / due findingsreopen/correction rate
Design rework looprevisionهای ناشی از Findingارزش تغییر و churn غیرمرتبط
Downstream surpriseFindingهای Implementation مرتبط با reviewed claimdetection opportunity و attribution
Review loadprep/meeting/follow-up timedecision delay و after-hours work

Finding count KPI تستر نیست

پاداش تعداد سؤال یا Finding به nitpick، duplicate، اختلاف taxonomy و بازی با scope منجر می‌شود. صفر Finding نیز می‌تواند Design خوب، Review سطحی یا Reviewer نامناسب باشد. Outcome را در decision quality، resolved uncertainty، verification و downstream evidence ببینید؛ فرد یا تیم را رتبه‌بندی نکنید.

هزینه و فایدهٔ زودبودن را اندازه بگیرید

ادعای ثابت «باگ Production سی برابر گران‌تر است» بدون Context، Method و Source معتبر نیست. هزینه می‌تواند analysis، coordination، migration، downtime، support و opportunity باشد؛ Finding اولیه نیز ممکن است false positive یا Design churn بسازد. Baseline، matched change، range و Attribution limit بنویسید. مشارکت زودهنگام زمانی ارزشمند است که انتظار کاهش‌یافته یا تصمیم بهتر از هزینهٔ Review بیشتر باشد.

آزمایش تکرارپذیر: حضور زیاد، Evidence کم

Fixture مصنوعی زیر ۱۲ جلسه، ۳۷ سؤال، حضور ۱۰۰٪ و Design approved را نشان می‌دهد و DESIGN_QUALITY_ASSURED اعلام می‌کند. Auditor به‌جای این Dashboard، Contractهای Artifact، Charter، Claim، Question، Finding، Decision و Verification را بررسی می‌کند.

{
  "review_id": "",
  "artifact": {"id": "", "version": "", "digest": "", "type": "architecture"},
  "charter": {"objective": "", "scope": "", "not_claimed": [], "review_type": "", "entry": "", "exit": ""},
  "basis_refs": [],
  "claims": [],
  "risks": [],
  "questions": [
    {"id": "Q1", "claim_ref": "", "design_ref": "", "lens": "", "evidence_needed": ""}
  ],
  "findings": [
    {"id": "F1", "question_ref": "", "evidence": "", "disposition": "", "owner_role": "", "due": "", "verification": ""}
  ],
  "authorities": {"author": "", "decision_owner": "", "risk_owner": ""},
  "dashboard": {"meetings": 12, "questions": 37, "attendance_percent": 100, "approved": true},
  "declared": "DESIGN_QUALITY_ASSURED"
}
const fs = require('node:fs');
const r = JSON.parse(fs.readFileSync(process.argv[2], 'utf8'));
const f = [];
const need = (ok, rule, path) => { if (!ok) f.push({ rule, path }); };

need(r.review_id, 'IDENTITY', 'review_id');
for (const key of ['id', 'version', 'digest'])
  need(r.artifact?.[key], 'ARTIFACT_BASELINE', `artifact.${key}`);
for (const key of ['objective', 'scope', 'review_type', 'entry', 'exit'])
  need(r.charter?.[key], 'CHARTER', `charter.${key}`);
need((r.charter?.not_claimed || []).length, 'CLAIM_BOUNDARY', 'charter.not_claimed');
need((r.basis_refs || []).length, 'BASIS', 'basis_refs');
need((r.claims || []).length, 'QUALITY_CLAIM', 'claims');
need((r.risks || []).length, 'RISK', 'risks');
for (const [i, q] of (r.questions || []).entries())
  for (const key of ['claim_ref', 'design_ref', 'lens', 'evidence_needed'])
    need(q[key], 'QUESTION_CONTRACT', `questions[${i}].${key}`);
for (const [i, x] of (r.findings || []).entries())
  for (const key of ['question_ref', 'evidence', 'disposition', 'owner_role', 'due', 'verification'])
    need(x[key], 'FINDING_CONTRACT', `findings[${i}].${key}`);
for (const key of ['author', 'decision_owner', 'risk_owner'])
  need(r.authorities?.[key], 'AUTHORITY', `authorities.${key}`);

const computed = f.length ? 'HOLD' : 'READY_FOR_DESIGN_QUALITY_REVIEW';
if (r.declared !== computed) f.push({ rule: 'DECISION_MISMATCH', path: 'declared' });
console.log(JSON.stringify({ computed, count: f.length, findings: f }, null, 2));
process.exitCode = f.length ? 2 : 0;

نسخهٔ ناقص باید HOLD و ۲۷ Finding بدهد: Review identity، سه Artifact field، شش Charter/boundary، Basis/Claim/Risk، چهار Question field، شش Finding field، سه Authority و Decision mismatch. تعداد جلسه، سؤال و حضور در محاسبهٔ Readiness نقشی ندارند.

پس از ثبت DQR-۰۴۲، Artifact v6/digest، Charter و not-claimed، Basis/Risk/Claim، سؤال Q1 متصل به Design element، Finding F1 با Evidence/Disposition/owner/due/verification و سه Authority، اجرای دوباره باید count=۰ و READY_FOR_DESIGN_QUALITY_REVIEW بدهد. این فقط کامل‌بودن ساختار را می‌سنجد؛ درستی Design، Risk، Claim، Finding، Testability، امنیت یا کیفیت محصول را اثبات نمی‌کند.

نمونهٔ فارسی و آفلاین: Callback و مبلغ ریالی

برای Practice، یک Design ساختگی Checkout با Order، PaymentAttempt، PSP Stub، Callback، Ledger و Reconciliation رسم کنید. مبلغ canonical را IRR و تومان را فقط presentation label قرار دهید. Scenarioهای timeout پیش/پس از commit، Retry، duplicate/late/out-of-order callback، تغییر Rule، cache stale، refund و reconciliation را به Claim و Evidence hook وصل کنید.

همهٔ نام‌ها، شناسه‌ها و مقادیر Fictional و آزمایش کاملاً آفلاین باشد: بدون شبکه، Production، شرکت/کاربر/پرداخت/بانک/PSP واقعی، نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، log یا Screenshot. رقم فارسی/عربی/لاتین، ی/ی، ک/ک، Unicode NFC، RTL/LTR، UTC/Asia-Tehran و تاریخ جلالی فقط نمایشی را بررسی کنید؛ ادعای حقوقی، بانکی، مالیاتی، امنیتی یا آماری ایران نسازید.

AI در Design Review چه کار کند و چه کار نکند؟

AI می‌تواند missing state/interface candidate، سناریوی خلاف، Trace gap، duplicate Finding، خلاصهٔ Diff و Checklist candidate بسازد. نباید Requirement/Design گمشده را جعل، Intent author را حدس، Risk را بپذیرد، Finding را خودکار Close، Security/Accessibility را تأیید یا Approval صادر کند. Artifact/source، prompt، model/version، confidence، reviewer و correction را ثبت کنید.

ضدالگوهای مشارکت تستر در طراحی

ضدالگوپیامداصلاح
Invite QA به همه جلسه‌هابار زیاد و Objective مبهمrisk/decision-based review
تستر=وکیل همه کاربرانفرض نیاز و BiasResearch/specialist evidence
Question count=اثرگذاریnitpick و gamingclaim/decision/verification
Checklist ثابتContext و Risk تازه گم می‌شودartifact/perspective-specific
Design approved=کیفیتImplementation/unknown حذفbounded result + countercheck
QA vetoAuthority مبهم و تعارضdecision/risk map
همه Findingها باید Fix شوندtrade-off و capacity نادیدهbounded disposition/exception
Rejected finding حذف شودحافظه و appeal از بین می‌رودrationale/evidence/reopen
Testability endpoint مخفیسطح حمله/نشتauth/access/retention/design
۳۰x cost guaranteeتصمیم مبتنی بر عدد بی‌Contextlocal baseline/range

برنامهٔ Pilot سی‌روزه

بازهکارخروجی
روز ۱–۳یک Change/Risk/Decision و Artifact را انتخاب کنیدBaseline + Charter v1
روز ۴–۷Concern/Claim/trace/lenses را بسازیدReview packet
روز ۸–۱۰Async preparation و sessionQuestion/Finding register
روز ۱۱–۱۷Disposition، Revision و Design verificationDecision/diff receipts
روز ۱۸–۲۴Implementation countercheck محدودEvidence/unknown/correction
روز ۲۵–۳۰Outcome/guardrail/load reviewADOPT/ADAPT/STOP

چک‌لیست Review Leader

  • Artifact ID/version/digest و Source authoritative Freeze شده‌اند.
  • Objective، Decision، Scope، out-of-scope و not-claimed روشن‌اند.
  • Review type/formality متناسب با Risk و audit need است.
  • Entry/Exit و زمان preparation تعریف شده‌اند.
  • Author، Moderator، Scribe، Reviewer، specialist، Decision و Risk roles روشن‌اند.
  • Concern/Risk به Claim bounded تبدیل شده است.
  • Claim به Design element و Evidence intent وصل است.
  • State/Time/Concurrency/Dependency/Data/Permission/Recovery/Locale lenses Tailor شده‌اند.
  • Questionها counterexample و evidence-needed دارند.
  • Finding از Question/Unknown/Defect/Change request جداست.
  • Disposition rationale، owner، due، authority و exception expiry دارد.
  • Revision با Diff/Impact و Verifier مستقل بررسی می‌شود.
  • Closure سؤال، Finding و Downstream claim جداست.
  • Rejected/minority/correction history حفظ می‌شود.
  • Metricها با Countermetric و بدون رتبه‌بندی فردی‌اند.
  • AI فقط candidate می‌سازد و تصمیم انسانی قابل‌ردیابی است.

جمع‌بندی

ارزش تستر در Design Review با زودتر وارد اتاق‌شدن یا بیشتر سؤال‌پرسیدن سنجیده نمی‌شود. ارزش زمانی ایجاد می‌شود که Concern به Claim، Claim به Design element، سؤال به Finding، Finding به Decision/Revision و Revision به Verification و Countercheck وصل شود. Review خوب عدم‌قطعیت و trade-off را قابل مشاهده می‌کند؛ محصول بی‌نقص، هزینهٔ کمتر یا همکاری بهتر را تضمین نمی‌کند.

سؤالات متداول نقش تستر در بازبینی طراحی

آیا تستر باید در همهٔ جلسات طراحی حضور داشته باشد؟

خیر. بر اساس Decision، Risk، Artifact و نیاز به perspective انتخاب کنید. Review async، Pairing یا متخصص دیگر ممکن است مناسب‌تر باشد. حضور بدون Objective و preparation می‌تواند فقط هزینه و Queue بسازد.

تفاوت سؤال تستر با Finding طراحی چیست؟

سؤال درخواست توضیح یا Evidence است؛ Finding یک Gap مستند نسبت به Claim/Basis/Risk دارد. پاسخ ممکن است سؤال را بدون Finding ببندد یا نشان دهد Revision/Experiment لازم است.

آیا QA می‌تواند Design را رد یا تأیید کند؟

فقط اگر سازمان آن Authority محدود را صریح داده باشد. معمولاً QA Evidence، Finding و Recommendation می‌دهد؛ Design owner تصمیم فنی و Risk owner پذیرش Risk را در دامنهٔ خود ثبت می‌کند.

چگونه اثربخشی مشارکت زودهنگام را بسنجیم؟

Claim coverage، disposition/verification، resolved uncertainty، downstream countercheck و Review load را با Countermetric بسنجید. تعداد جلسه، سؤال، Finding یا ادعای عمومی کاهش هزینه به‌تنهایی کافی نیست.

آیا Design Review جای تست بعد از پیاده‌سازی را می‌گیرد؟

خیر. Review بازخورد زودتر روی Artifact و assumption می‌دهد. Build ممکن است منحرف شود و محیط/زمان/بار رفتار تازه بسازد؛ هر Claim به Countercheck متناسب با fidelity بعدی نیاز دارد.

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