برنامه تست زمانی خوانده می‌شود که خواننده برای تصمیم واقعی به آن نیاز داشته باشد. رنگ، جدول و خلاصه می‌توانند اصطکاک را کم کنند، اما سندی که نمی‌گوید «چه تصمیمی، تا چه زمانی، بر پایهٔ کدام ریسک و شواهد و با مسئولیت چه کسی» حتی اگر زیبا و کوتاه باشد، مصرف نمی‌شود. نوشتن برنامه تست یعنی طراحی یک قرارداد تصمیم زنده؛ نه پرکردن قالب و نه نوشتن رمان.

این راهنما مالک معماری اطلاعات و چرخهٔ مصرف Test Plan است: Decision → Audience → Risk/Scope → Approach/Evidence → Entry/Exit → Assumption/Dependency → Change/Acknowledgement → Gate/Archive. برای تفاوت مفهومی Test Strategy، Test Plan و Test Summary به راهنمای سه سند کلیدی تست و برای ارائهٔ نتایج اجرا به راهنمای ارائه نتایج تست مراجعه کنید.

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

یک Artifact نسخه‌دار است که برای یک Scope و بازهٔ مشخص، ریسک‌ها و ادعاهای کیفیت را به رویکرد تست، منابع، محدودیت‌ها، معیارهای تصمیم و مسئولان وصل می‌کند. نسخهٔ خوب در یک نگاه وضعیت تصمیم را نشان می‌دهد، برای جزئیات به Sourceهای معتبر پیوند دارد، با تغییر Context به‌روزرسانی می‌شود و پس از تصمیم قابل بازسازی است.

پرسشپاسخ Planشاهد
چرا تست می‌کنیم؟Outcome، تصمیم و Failureهای مهمDecision Brief
چه چیزی؟In/Out scope، نسخه و مرزScope Manifest
چگونه؟Risk response و Evidence strategyRisk-to-Evidence Map
با چه چیزی و چه کسی؟Environment، data، capability و ownerReadiness Matrix
چه زمانی کافی است؟Entry/Exit/Gate با مخرج و استثناDecision Criteria
اگر تغییر کرد چه؟Trigger، impact review و acknowledgementChange Log

خواندنی‌بودن Outcome است، نه آرایش صفحه

خواننده سند را برای سرگرمی باز نمی‌کند. مدیر Release دنبال تصمیم و Exposure است؛ توسعه‌دهنده مرز و Oracle را می‌خواهد؛ QA رویکرد و Fixture؛ عملیات Dependency و Rollback؛ متخصص امنیت یا دسترس‌پذیری Scope حوزهٔ خود را. اگر اطلاعات بر اساس Task مخاطب قابل یافتن نباشد، Whitespace هم آن را نجات نمی‌دهد.

مخاطبTaskنمای نخستDrill-down
Release ownerGo/Conditional/HoldDecision، risk، gaps، expiryEvidence packet
Product ownerTrade-off Scope/ValueOutcome و residual riskRisk register
EngineeringTestability/Fix/DebugBoundaries، oracle، dependencycontracts/logs
QAطراحی و اجرای Evidenceapproach، matrix، environmentcases/charters/runs
Operationsآمادگی و پاسخmonitoring، support، rollbackrunbook
Auditor/clientردیابی ادعاversion، scope، approvalsimmutable evidence refs

Test Plan را با Strategy، Case و Summary یکی نگیرید

Artifactافقپرسش اصلیتغییر معمول
Organizational Test Policyسازمانتعهد و حاکمیت چیست؟کم‌تکرار
Test Strategyمحصول/برنامهالگو و اصول کلی انتخاب Evidence چیست؟دوره‌ای
Test PlanRelease/پروژه/سطحبرای این تصمیم چه می‌کنیم؟با Context
Test Design/Case/CharterFeature/Riskچه آزمون مشخصی اجرا می‌شود؟با طراحی
Test Run/EvidenceBuild/اجراچه رخ داد؟هر اجرا
Test Summary/Release Memoنقطه تصمیمنتیجه و Exposure باقی‌مانده چیست؟هر Gate

Plan نباید متن Strategy، Requirement یا همهٔ Test Caseها را کپی کند. باید نسخهٔ مورد اتکا را لینک کند و تصمیم‌های Tailoring این Release را ثبت کند. صفحهٔ ۱۸۳۹ مالک شرح کامل سه سند است؛ اینجا روی مصرف‌پذیری و Trace میان آن‌ها تمرکز داریم.

استاندارد قالب اجباری واحدی برای همهٔ تیم‌ها نیست

ISO/IEC/IEEE 29119-2:2021 فرایندهای عمومی برای حاکمیت، مدیریت و اجرای تست در مدل‌های مختلف چرخهٔ عمر تعریف می‌کند. ISO/IEC/IEEE 29119-3:2021 قالب‌های مستنداتی را توصیف می‌کند که خروجی آن فرایندها هستند. صفحهٔ عمومی ISO متن کامل استاندارد را جایگزین نمی‌کند و این مقاله نیز ادعای انطباق ندارد؛ از منابع برای مرزبندی نسخه و Tailoring استفاده می‌کنیم، نه تحمیل یک سند ۵۰ صفحه‌ای.

کامل‌بودن یعنی اطلاعات لازم برای تصمیم و تعهد موجود و قابل ردیابی باشد؛ نه اینکه هر عنوان ممکن در یک فایل تکرار شود.

در Scrum، Test Plan Artifact رسمی جداگانه نیست

Scrum Guide 2020 سه Artifact یعنی Product Backlog، Sprint Backlog و Increment و تعهدهای Product Goal، Sprint Goal و Definition of Done را تعریف می‌کند؛ Artifact رسمی مستقلی به نام Test Plan یا نقش جداگانهٔ QA تعریف نمی‌کند. تیم Scrum می‌تواند اطلاعات برنامه‌ریزی تست را در Backlog، Definition of Done، Risk board و View زنده نگه دارد. راهنمای تخصصی نقش QA در Scrum مالک مشارکت در رویدادهاست.

Document، Data و Conversation را جدا اما متصل کنید

لایهنقشنمونهریسک
Conversationکشف ابهام و توافقworkshop/reviewبدون ثبت فراموش می‌شود
Plan Viewنمای تصمیم و navigationone-pager/wikiاگر دستی کپی شود drift می‌کند
Structured DataSource of Truthrisk/scope/criteria registryبدون context ناخوانا می‌شود
Evidenceاثبات اجرا/نتیجهruns/logs/reportsبدون identity قابل ردیابی نیست
Decision recordپذیرش/اقدام/expiryrelease memoبدون owner غیرقابل اجراست

جلسه جای Source of Truth نیست و Wiki نیز جای گفتگو را نمی‌گیرد. تصمیم جلسه باید در Plan/Decision Log ثبت شود؛ View باید از Registry مشترک بخواند؛ Evidence باید به Build و Plan version اشاره کند.

Plan Identity و وضعیت نسخه را در بالا قرار دهید

Living Test Plan Identity
plan_id / version / status: draft | reviewed | active | superseded | closed
product / release / build-range / target decision
owner / contributors / approvers / decision_owner
created_at / facts_as_of / last_reviewed / next_review
source_registry / evidence_workspace / decision_log
applicable_strategy / policy / requirement baselines
change_summary / supersedes / archive_uri

last_updated به‌تنهایی کافی نیست. facts_as_of می‌گوید داده و فرض‌ها تا چه لحظه‌ای معتبر بوده‌اند؛ Plan ممکن است امروز فقط از نظر نگارشی ویرایش شده باشد ولی Sourceهای هفتهٔ قبل را نمایش دهد.

از Decision Question شروع کنید

فیلدنمونهٔ ضعیفنمونهٔ تصمیم‌پذیر
هدفتست Checkoutتصمیم درباره ورود Build X به rollout کنترل‌شده
زمانتا پایان تستGate در ۱۴:۰۰ با Evidence تا ۱۲:۰۰
مالکتیمRelease owner مشخص
گزینهPass/FailGo/Conditional/Hold + rollback
Exposureباگ‌های بازRisk claims، untested scope و uncertainty
بعد از تصمیمانتشارactions، monitoring، review و expiry
Decision Brief
question / options / decision_owner / decision_at
business_outcome / critical_users / failure_consequences
minimum_evidence / unavailable_evidence / uncertainty
constraints / reversible_or_irreversible
conditional_controls / rollback_trigger
record_uri / review_or_expiry

Executive Summary را با Status Report اشتباه نگیرید

خلاصه Plan پیش از اجرا می‌گوید تصمیم، ریسک، Scope و روش شواهد چیست. Status Report در طول اجرا می‌گوید چه پیش رفته و چه مانعی هست. Test Summary پس از Cutoff، نتیجه و Exposure را می‌گوید. اگر همه در یک پاراگراف دستی ادغام شوند، زمان و منبع داده مخلوط می‌شود.

نمای یک‌صفحه‌ایمحتوا
Decisionسؤال، مالک، موعد، گزینه‌ها
Top risksClaim، Exposure، owner، planned evidence
Scope deltaداخل/خارج/تغییر از نسخه قبل
Readinessمحیط، داده، Build، dependency
CriteriaEntry/Exit و blockers با denominator
GapsUntested، unavailable، uncertainty
Next actionsowner، due، escalation
FreshnessPlan version، facts-as-of، links

Scope را با Identity و Boundary بنویسید

«ماژول پرداخت در Scope است» معلوم نمی‌کند کدام نسخه، Channel، Role، State، Integration یا داده. Scope باید مرز رفتار و Artifact را نشان دهد. تحلیل Requirement و Testability پیش‌نیاز این کار است و در راهنمای تحلیل نیازمندی STLC به‌تفصیل آمده است.

بعد Scopeنمونه
Release identitycode/schema/config/flag/rule versions
User/roleguest/member/operator/admin
Journey/statehappy/error/timeout/retry/recovery
Surfaceweb/mobile/API/email/PDF/job
Boundaryprovider/queue/database/cache
Data/localeempty/typical/boundary/fa-IR
Quality characteristicfunctional/performance/security/a11y
Operational phasedeploy/migrate/rollback/monitor

Out of Scope حذف مسئولیت نیست

هر مورد خارج Scope باید دلیل، Exposure باقی‌مانده، Dependency، مالک ریسک و تاریخ/شرط بازبینی داشته باشد. «بدون تغییر» دلیل کافی نیست؛ تغییر وابستگی، داده، پیکربندی یا مسیر مجاور می‌تواند Regression بسازد. Out of Scope پنهان، عدم پوشش است؛ Out of Scope ثبت‌شده، ورودی تصمیم است.

Scope Item Contract
scope_id / object / version / boundary / states
classification: in | out | conditional | unknown
reason / source / change_since_last
planned_evidence_or_existing_evidence
residual_exposure / risk_owner
dependency / revisit_trigger / expiry
approver / acknowledgement

ریسک را به‌صورت Claim قابل ابطال بنویسید

«ریسک پرداخت بالاست» نه طراحی تست می‌دهد و نه تصمیم. Claim باید Failure، Trigger، Impacted outcome و Mechanism فرضی را مشخص کند. اولویت می‌تواند Likelihood/Impact/Detectability/Change/Uncertainty را ببیند، اما عدد جای تحلیل و مالک را نمی‌گیرد. تست مبتنی بر زمینه و Tailoring در راهنمای Context-Driven Testing مالک مستقل دارد.

Risk ClaimEvidence responseOracle
Retry پس از timeout سفارش تکراری می‌سازدfailure injection + replayیک business effect
Migration تخفیف فعال را حذف می‌کندpre/post population reconcileidentity/rule lineage
Role شعبه دادهٔ شعبه دیگر را می‌بیندobject/action authorization matrixserver decision + audit
Queue lag Promise را کهنه می‌کندlag/ordering/expiry scenariosversion/freshness state
RTL شناسه را مبهم نمایش می‌دهدmixed text + copy/AT reviewlogical identity preserved

Risk-to-Evidence Map قلب Plan است

فیلدپرسش
risk_id/claimچه چیزی ممکن است شکست بخورد؟
priority rationaleچرا اکنون مهم است؟
prevention/mitigationفقط تست است یا کنترل دیگری هم هست؟
test objectiveچه عدم‌قطعیتی را کم می‌کنیم؟
method/layerreview/unit/contract/system/exploratory/monitoring
oracle/invariantچه چیزی نتیجه را معتبر می‌کند؟
coverage boundaryکدام variant/state خارج می‌ماند؟
evidence owner/cutoffچه کسی تا چه زمان؟
residual exposureپس از Evidence چه نامعلومی می‌ماند؟

Approach را فهرست انواع تست ننویسید

لیست «Functional، Integration، Performance، Security، Usability» بدون هدف، Scope، روش، ابزار و Oracle اطلاعات کمی دارد. Approach باید توضیح دهد هر Risk در چه لایه‌ای، با چه مدل/داده/محیطی و چرا آزمون می‌شود؛ چه چیزی خودکار نیست و چه Evidence دیگری آن Gap را پوشش می‌دهد.

تصمیم Approachثبت لازم
Static/reviewartifact، checklist/rule، reviewer
Unit/property/modelboundary، generator/model، invariant
Contract/integrationconsumer/provider/version/failure
System/E2Ecritical journey، environment، external boundary
Exploratorycharter، mission، timebox، notes
Non-functional specialistprofile، target، applicability، expert owner
Production controlcanary، monitoring، alert، rollback

Test Basis و Source Registry بسازید

به‌جای کپی Requirement و Design، مرجع نسخه‌دار ثبت کنید. لینک بدون Version یا Baseline با تغییر مقصد ممکن است Plan تاریخی را بازنویسی کند. برای Sourceهای پویا، snapshot/hash یا release tag نگه دارید.

Source Registry
source_id / type / owner / canonical_uri
version_or_hash / approved_at / status
scope_or_requirements_covered
expected_update / freshness_rule
conflicts / unresolved_questions
snapshot_uri / access_classification
consumers / change_notification

Assumption را حقیقت پنهان نکنید

Assumption ادعایی موقت است که Plan بر آن تکیه می‌کند. باید Validator، روش راستی‌آزمایی، Status، موعد و پیامد ابطال داشته باشد. عبارت «Sandbox پایدار است» تا زمانی که Health evidence و مالک ندارد، Fact نیست. فرض منقضی باید Gate را دوباره باز کند.

وضعیتمعنااقدام
Proposedهنوز پذیرفته نشدهValidator تعیین شود
Confirmedبرای Context/زمان مشخص شاهد داردEvidence link
UnverifiedPlan به نامعلومی متکی استGap/contingency
Invalidatedشاهد خلاف آمدهImpact review
Expiredبازهٔ اعتبار تمام شدهrevalidate یا HOLD
Supersededفرض تازه جایگزین شدهhistory حفظ شود
Assumption Contract
assumption_id / claim / rationale
owner / validator / validation_method
status / evidence_ref / confirmed_at
valid_for_builds / expires_at
dependent_plan_items / invalidation_impact
fallback / escalation / history

Dependency را با Deliverable و SLA تعریف کنید

DependencyDeliverableReady evidenceFallback
PlatformEnvironment build Xhealth + config manifestlocal stack
Datasynthetic fixture v3seed checksumreduced dataset
Providersandbox callback v6contract + statusdeterministic stub
Productdecision on refund policyapproved rulescope conditional
Securitythreat reviewsigned findingsHOLD risk owner
Operationsalert/runbookdry runno rollout

«وابسته به تیم API» قابل مدیریت نیست. Delivery، owner، due، status source، notification، impact و contingency لازم است. مانع باید پیش از موعد Gate به مخاطب دارای اختیار Escalate شود؛ راهنمای ۱۸۴۳ مالک جزئیات ارتباط پیشرفت و مانع است: اطلاع‌رسانی مؤثر وضعیت تست.

Environment را با نام «Stage» تعریف نکنید

Environment Readiness
environment_id / owner / purpose
code / schema / config / flag / dependency versions
data_fixture / seed / reset / clock
network / auth / certificates / secrets source
observability / log access / correlation
capacity / known differences from production
health checks / ready_at / expiry
change freeze / incident contact

Plan نباید Secret را داخل خود نگه دارد؛ فقط منبع کنترل‌شده و سطح دسترسی را ارجاع دهد. تفاوت Environment با Production، مانند Stub، حجم داده، topology و schedule job، مستقیماً محدودیت Evidence است.

Test Data را به Risk و Reset وصل کنید

DatasetهدفLineage/کنترل
MinimalSmoke و isolationgenerated seed
Typicaljourney عادیfictional personas/entities
Boundarylimits/rounding/length/timeexplicit generator
Failuretimeout/retry/conflictdeterministic fault
Densesearch/performance/UIvolume manifest
Migrationpre/post semanticsversioned source snapshot

«دادهٔ واقعی‌نما» کافی نیست. مالک، ساخت، PII classification، expiry، reset، concurrent isolation و expected invariant را ثبت کنید. Copy ناشناس‌سازی‌نشده از Production یک میان‌بر مجاز نیست.

Entry Criteria را Readiness Checklist پویا کنید

Entry Criteria نباید مانع مصنوعی Handoff میان Dev و QA بسازد. هر Criteria باید دلیل، Evidence source، owner، deadline و رفتار در صورت عدم تحقق داشته باشد. بعضی فعالیت‌های تست مثل review و طراحی پیش از Build آغاز می‌شوند؛ Entry مربوط به هر لایه را جدا کنید.

لایهEntry نمونهاگر آماده نیست
ReviewRequirement version و decision ownerسؤال/assumption ثبت
Componentcontract و runnable storytestability task
Integrationprovider contract/stubconditional evidence
Systembuild identity/environment healthblocked با owner
Performanceprofile/target/monitoringنتیجه غیرقابل تفسیر
Release gatecutoff و evidence snapshotتصمیم defer/HOLD

Exit Criteria را با درصد جادویی نسازید

«۹۵٪ تست‌ها Pass» بدون مخرج، Risk distribution، Blocked/Not run، اهمیت Test و Build identity ممکن است گمراه‌کننده باشد. همین موضوع در صفحهٔ ۱۶۷۸ برای نتایج به‌تفصیل بررسی شده است. Exit باید Evidence لازم برای Decision را تعریف کند، نه فقط فعالیت انجام‌شده.

بعد Exitقرارداد
Populationplanned/executed/eligible tests و snapshot
Outcome vocabularypass/fail/blocked/not run/inconclusive
Risk coverageRiskهای critical و evidence minimum
Defects/findingsseverity + user impact + workaround + owner
Non-functionaltarget/profile/applicability
Residual gapsuntested/invalid/stale evidence
Operationsmonitoring/canary/rollback/support
Decisionwho may waive/condition/hold
Exit Criterion Contract
criterion_id / decision_supported / rationale
population / denominator / cutoff / build
formula_or_rule / outcome_treatment
required_risk_evidence / forbidden_gaps
data_source / owner / evaluator
waiver_authority / conditional_control
status / evidence_ref / evaluated_at

Schedule را از فهرست تاریخ به Flow تبدیل کنید

MilestoneورودیخروجیDecision
Plan reviewscope/risk/sourceactive planکفایت approach
Environment readymanifest/healthrun-readyشروع لایه system
Evidence checkpointruns/findingsgap/actionsre-scope/escalate
Cutofffrozen snapshotdecision packetGo/Conditional/Hold
Canary reviewproduction signalscontinue/rollbackexpand/stop
Closuredecision/actionsarchive/lessonsplan closed

Deadline تست نباید فقط «روز قبل Release» باشد. زمان Fix، Retest، environment recovery، specialist review، data refresh و تصمیم را صریح کنید. Schedule باید Buffer و contingency داشته باشد، نه وعدهٔ قطعیت کاذب.

Capacity را با Availability اشتباه نگیرید

محورپرسش
Capabilityمهارت Performance/Security/A11y/domain موجود است؟
Availabilityچه بازه و چه درصدی واقعاً آزاد است؟
Throughputبا setup/retest/triage چه حجمی ممکن است؟
Constraintمحیط، داده، review یا specialist گلوگاه است؟
Interruptionsupport/incident/on-call چه ظرفیتی می‌گیرد؟
Contingencyدر غیبت یا تأخیر چه Scope/روش تغییر می‌کند؟

نام افراد و ساعت اسمی تضمین Evidence نیست. Capability gap را با آموزش لحظه آخری پنهان نکنید؛ Scope، specialist support یا Decision confidence را متناسب کنید.

RACI را جای Accountability واقعی نگذارید

Decision/ArtifactOwner نمونهApprover/Authority
Plan integrityTest lead/quality engineerprogram/release owner
Scope/valueproduct/process ownerrelease governance
Risk responsecross-functional ownerrisk acceptor
Environment/dataplatform/data ownertest lead for readiness
Specialist evidencesecurity/performance/a11y ownerdomain gate
Residual risknamed business/technical ownerrelease decision owner
Go/Holdrelease ownerdefined governance

QA نباید به‌طور پیش‌فرض مالک همهٔ ریسک‌ها یا تنها تأییدکنندهٔ کیفیت باشد. مسئول Plan مسئول صداقت و Traceability اطلاعات است؛ مسئول پذیرش Risk باید اختیار اثر آن را داشته باشد.

Information Architecture سه‌لایه بسازید

لایههدفمحتوا
Layer 1: Decision Viewخواندن در ۲–۵ دقیقهdecision/top risks/scope delta/readiness/gaps/actions
Layer 2: Plan Contractاجرای هماهنگidentity/scope/risk/approach/criteria/dependencies/change
Layer 3: Evidence Sourcesبازسازی و drill-downrequirements/models/cases/charters/runs/logs/reports/runbooks

هر Claim در Layer ۱ باید به Contract و Evidence برسد. هر جزئیات Layer ۳ لازم نیست در View کپی شود. این معماری می‌تواند در Wiki، repository، issue tracker یا ابزار مدیریت تست پیاده شود؛ ابزار باید رفتار تیم و نیاز Trace را پشتیبانی کند، نه اینکه قالب را تعیین کند.

Progressive Disclosure را برای مخاطب طراحی کنید

  • در بالای صفحه: Decision، Facts-as-of و Owner؛
  • پس از آن: Top risks، Scope delta و Critical gaps؛
  • بخش‌های جمع‌شونده: جزئیات Approach، Matrix و Environment؛
  • جداول با ستون‌های ثابت و شناسه‌های لینک‌پذیر؛
  • تعریف اصطلاح در نخستین استفاده و Glossary برای واژهٔ دامنه‌ای؛
  • لینک مستقیم به Section، نه فقط صفحهٔ اصلی ابزار؛
  • نمای متن‌محور و دسترس‌پذیر برای دیاگرام‌ها و رنگ‌ها؛
  • تاریخ/نسخه در خود View، نه فقط History پنهان ابزار.

رنگ و دیاگرام باید معنای افزوده داشته باشند

سبز/قرمز به‌تنهایی Status یا Scope را منتقل نکند؛ متن و Icon/label لازم است. دیاگرام وقتی مفید است که Boundary، Flow یا Dependency را فشرده کند و Source version داشته باشد. Screenshot معماری که قابل جست‌وجو، به‌روزرسانی یا خواندن با فناوری کمکی نیست، Source of Truth ضعیفی است.

لینک‌دادن از کپی‌کردن بهتر است—اگر Link Contract داشته باشد

خطر لینککنترل
مقصد تغییر می‌کندversion/tag/hash/snapshot
دسترسی ندارندaudience access check/summary
لینک می‌شکندlink validation/owner
ابهام مقصدdescriptive label + section anchor
چند Source متعارضcanonical source registry
حذف تاریخیretention/archive policy
داده حساسclassification/access/minimized view

Plan Review را بر پرسش تصمیم اجرا کنید

  1. آیا سؤال تصمیم، مالک و موعد روشن است؟
  2. آیا مهم‌ترین Failureها به Risk Claim تبدیل شده‌اند؟
  3. آیا Scope و Out-of-Scope با Exposure و owner ثبت‌اند؟
  4. آیا Approach برای هر Risk شواهد معنادار می‌سازد؟
  5. آیا Environment/Data/Dependency واقعاً آماده و نسخه‌دارند؟
  6. آیا Exit criteria مخرج، cutoff و Blocked treatment دارند؟
  7. آیا فرض یا منبع منقضی وجود دارد؟
  8. آیا مخاطب می‌تواند بخش مورد نیازش را سریع پیدا کند؟
  9. آیا تغییر از نسخه قبل و اثر آن مشخص است؟
  10. آیا Gap و disagreement به‌جای حذف، ثبت شده‌اند؟

Review جلسهٔ امضا برای اثبات خوانده‌شدن نیست. Comment، question، decision و action باید شناسه، owner و closure داشته باشند. سکوت ذی‌نفع را موافقت تلقی نکنید مگر Governance صریحاً چنین قاعده‌ای دارد.

Acknowledgement با Approval یکسان نیست

عملمعنا
Viewedصفحه باز شده؛ فهم یا توافق ثابت نیست
Acknowledgedتغییر/اطلاع دریافت شده
Reviewedبخش مسئولیت بررسی شده و Comment ثبت است
Approvedفرد دارای اختیار نسخه را پذیرفته
Risk acceptedExposure مشخص با شرایط/Expiry پذیرفته شده
Decision recordedگزینه، دلیل، actions و follow-up تثبیت شده

Change Trigger تعریف کنید

Living بودن به معنای ویرایش بی‌پایان و بی‌ردپا نیست. Triggerها را از قبل مشخص کنید: Scope، Requirement، Architecture، Contract، Config/Flag، Risk، Environment، Schedule، Capacity، Finding بحرانی یا External dependency. هر تغییر باید Impact، affected sections/evidence، reviewer و acknowledgement داشته باشد.

Plan Change Record
change_id / detected_at / source / initiator
old_value / new_value / reason
affected_risks / scope / approach / criteria / schedule
evidence_invalidated / retest_needed
impact_assessment / owner / due
reviewers / acknowledgements / dissent
plan_version / effective_at / notification
decision_or_follow_up

Versioning و Snapshot از Drift جلوگیری می‌کند

برای Gate، Snapshot غیرقابل‌ابهام از Plan، Source versions و Evidence cutoff بسازید. بعد از تصمیم، Plan active را بی‌ردپا ویرایش نکنید؛ Correction یا نسخهٔ تازه با تاریخ مؤثر بسازید. تاریخچه ابزار اگر فقط Diff فنی باشد، Decision history را جایگزین نمی‌کند.

وضعیت Planویرایشاستفاده
Draftآزاد با attributionگفتگو
Reviewedبا change noteآماده activation
ActiveTrigger + impact + versionاجرای جاری
Frozen for decisionفقط correction جداGate snapshot
Supersededغیرقابل جایگزینیhistory
Closedarchive/correction policyaudit/learning

Plan Drift را ماشینی پایش کنید

  • Source version مورد انتظار با نسخهٔ جاری؛
  • Scope item بدون Risk owner یا expiry؛
  • Assumption منقضی یا بدون Validator؛
  • Dependency overdue و بدون contingency؛
  • Exit criterion بدون denominator/cutoff؛
  • Environment manifest ناسازگار با Build اجرا؛
  • Change تأثیرسنجی‌نشده یا بی‌اطلاع؛
  • Evidence متعلق به Plan/Build دیگر؛
  • لینک شکسته یا دسترسی‌ناپذیر برای مخاطب؛
  • Decision/waiver منقضی.

اتوماسیون Plan جای قضاوت را نمی‌گیرد

Schema می‌تواند فیلد اجباری، شناسه یکتا، تاریخ، لینک و Version mismatch را پیدا کند. نمی‌تواند خوب‌بودن Risk Claim، کفایت Evidence، واقعی‌بودن Mitigation یا اختیار Risk owner را به‌تنهایی تعیین کند. Validation ماشینی برای completeness و drift است؛ Review انسانی برای معنا و تصمیم.

آزمایش بازتولیدپذیر: سند کامل، قرارداد ناقص

Fixture ساختگی SYN-LIVING-PLAN-01 یک سند با هشت بخش متداول، ۱۱۸۰ واژه، پنج جدول و دو دیاگرام دارد. کنترل سطحی فقط حضور بخش‌ها، کوتاهی نسبی و عنصر بصری را می‌سنجد. کنترل دوم روی Decision/Scope/Risk/Assumption/Exit/Source/Change contract اجرا می‌شود.

$ node .post-1825-experiment.js
runtime: Node.js v24.18.0
fixture: SYN-LIVING-PLAN-01

superficial.requiredSections = 8
superficial.presentSections = 8
superficial.readableLength = true
superficial.visualElements = 7
superficial.decision = PASS

decision contract findings:
  decision-without-owner
  out-of-scope-without-risk-owner: refund
  risk-without-owner-or-response: SYN-R2
  invalid-or-expired-assumption: SYN-A2
  ambiguous-exit-denominator: 95% passed
  stale-source-reference: checkout-api v5 vs v6
  unreviewed-unacknowledged-change: SYN-C17
decisionContract.decision = HOLD

PASS نخست ثابت نمی‌کند سند در دنیای واقعی خواندنی یا مفید است؛ فقط شروط ساختگی قالب را برآورده می‌کند. HOLD دوم نیز الگوریتم عمومی کیفیت Plan نیست؛ هفت Contract عمداً ناقص Fixture را بازتاب می‌دهد. نتیجه نشان می‌دهد Section count و ظاهر، پرسش تصمیم را پوشش نمی‌دهند.

حدود اعتبار آزمایش مصنوعی

  • هیچ پروژه، تیم، Requirement، محیط، Test Case یا Release واقعی بررسی نشده است.
  • ۱۱۸۰ واژه، هشت بخش، پنج جدول، دو دیاگرام و ۹۵٪ Benchmark یا توصیهٔ عمومی نیستند.
  • اسکریپت خوانایی انسانی، صحت Risk، کیفیت Strategy یا انطباق ISO را نمی‌سنجد.
  • Source، Scope، Assumption، Risk و Change همگی عمداً ساختگی‌اند.
  • PASS/HOLD گواه، استاندارد، تخمین موفقیت یا مدل Release نیست.
  • آزمایش فقط حسابداری قرارداد نوشته‌شده را بازتولید می‌کند.

آزمایشگاه فارسی کاملاً ساختگی

در یک repository محلی، Plan خیالی SYN-PLAN-FA-01 برای Release خیالی فروشگاه بسازید. همه Entityها، Riskها، تاریخ‌ها، مبلغ‌ها و کاربران با SYN-* باشند؛ External service با Stub بدون اینترنت جایگزین شود. هیچ نام، شماره، شرکت، حساب، پرداخت، Token، Secret، قرارداد یا دادهٔ Production وارد نشود.

Lab faultکنترلخروجی
Decision owner حذف شدهschema + reviewunowned decision
Refund خارج Scope بی‌مالکscope contractresidual-risk gap
API v5 در Plan و v6 در registrysource diffstale reference
Assumption تاریخ‌گذشتهexpiry jobrevalidation action
Exit «۹۵٪ Pass»denominator validatorambiguous criterion
Change بدون acknowledgementchange gatenotification gap
لینک فارسی شکستهlink/access checkunreachable source
Evidence Build دیگرidentity matchinvalid reuse

Lab فقط Traceability، Versioning و Information Architecture را تمرین می‌کند؛ دربارهٔ بازار ایران، تیم واقعی، طول مناسب سند یا صحت Release ادعایی ندارد.

قالب One-Page Decision View

[Plan ID/version/status] [facts as of] [owner]
Decision question / owner / due / options
Outcome and critical users
Top risks: claim | exposure | response | owner | evidence state
Scope delta: in | out | conditional | unknown
Approach summary by risk/layer
Readiness: build | environment | data | dependencies | capability
Entry/Exit and evidence cutoff
Open gaps / assumptions / disagreements
Actions: owner | due | escalation
Links: full contract | source registry | evidence | decision log
Change since previous / acknowledgement / next review

قالب Full Living Test Plan

بخشحداقل محتوای تصمیم‌ساز
Identityversion/status/facts-as-of/owners/sources
Decisionquestion/options/deadline/authority/reversibility
Contextoutcome/users/architecture/change/constraints
Scopein/out/conditional/unknown + exposure
Risksclaims/priorities/owners/responses
Approachrisk-to-evidence/oracles/layers/gaps
Basisversioned source registry
Readinessenvironment/data/dependency/capability
Flowmilestones/checkpoints/cutoff/contingency
Criteriaentry/exit/denominator/waiver/controls
Governancereview/approval/risk acceptance/escalation
Changetriggers/diff/impact/acknowledgement/versioning
Closuredecision/actions/monitoring/archive/lessons

Plan در تیم کوچک و محصول کم‌ریسک

ممکن است One-page به‌همراه Risk board و لینک به Evidence کافی باشد. حذف بخش زمانی مجاز است که اطلاعات لازم جای دیگری نسخه‌دار و قابل دسترسی باشد یا برای Decision کاربرد نداشته باشد. «کوچک» بودن تیم دلیل حذف Scope، owner، assumption یا Exit نیست؛ فقط شکل ثبت را سبک‌تر می‌کند.

Plan در محصول پرریسک یا چندتیمی

Plan می‌تواند Hierarchy داشته باشد: Master decision view، planهای سطح/حوزه و evidence workspace. Parent/child scope، shared dependencies، cross-plan risks، common release identity و aggregation rule را تعریف کنید. جمع‌کردن چند «سبز» مستقل لزوماً تصمیم کل سامانه را سبز نمی‌کند؛ Integration و complete workflow evidence لازم است.

سطحمالکیتAggregation
Program/Masterrelease decision و cross-cutting riskگپ/وابستگی و veto rules
Product/Systemjourney/integration/environmentrisk evidence
Specialistsecurity/performance/a11y/datadomain gate + limitations
Team/Componentchange-specific testsidentity + source links
Operationsdeploy/canary/monitor/rollbackruntime gate

Plan Quality را با Outcomeهای مصرف بسنجید

Metricپرسشدام
Decision retrieval timeمالک تصمیم/Gap را چقدر سریع می‌یابد؟سرعت بدون صحت
Unowned item rateریسک/Dependency/Action بی‌مالک چند است؟مالک اسمی بدون اختیار
Stale-source rateمرجع نسخه قدیمی چند است؟تازگی بدون relevance
Change acknowledgement latencyافراد مسئول چه زمان آگاه می‌شوند؟Viewed به‌جای understood
Decision surpriseچه Gapی در Gate تازه کشف شد؟مقصرسازی
Evidence trace successClaim تا Build/Run قابل پیگیری است؟لینک بدون identity
Plan reworkکدام ابهام باعث بازطراحی دیرهنگام شد؟کاهش مستندات به‌جای علت

View count، طول سند و تعداد Comment می‌توانند Signal باشند، نه Outcome. سند ممکن است زیاد باز شود و تصمیم غلط بسازد یا کم باز شود چون تیم از API/board همان Source را مصرف می‌کند.

Closure و Archive را فراموش نکنید

  • نسخهٔ frozen Plan و Source registry؛
  • Evidence cutoff و Release identity؛
  • تصمیم، دلیل، dissent و Risk acceptance؛
  • شرایط Conditional release و Monitoring؛
  • Actions باز با owner/due؛
  • Correctionهای بعدی بدون بازنویسی تاریخ؛
  • Retention/classification و حذف داده حساس؛
  • Lessonهایی که Strategy/Template/DoD را تغییر می‌دهند؛
  • Superseding plan و لینک دوطرفه.

آمادگی عملیاتی، Support، Rollback و Monitoring دامنه‌ای فراتر از خود Plan دارند؛ برای آن‌ها به راهنمای تست آمادگی عملیاتی ارجاع دهید و فقط تعهد/شاهد مربوط را در Plan پیوند دهید.

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

بازهکارخروجی
روز ۱–۳انتخاب یک Release و Decision questionDecision Brief
روز ۴–۶Audience task و Source inventoryView map/registry
روز ۷–۱۰Scope/Risk/Assumption workshopcontracts v1
روز ۱۱–۱۳Risk-to-Evidence و criteriaPlan v1
روز ۱۴–۱۶Environment/data/dependency readinessreadiness matrix
روز ۱۷–۱۹One-page view و accessibility reviewDecision View
روز ۲۰–۲۲Review/acknowledgement workflowactive Plan
روز ۲۳–۲۵Change trigger و drift checksversion/change evidence
روز ۲۶–۲۸Freeze/Gate/decision dry runsnapshot + memo
روز ۲۹–۳۰مصاحبه مصرف و retrospectivetemplate/strategy improvements

ضدالگوهای نوشتن برنامه تست

  • شروع از قالب قدیمی پیش از سؤال تصمیم؛
  • یک سند برای همه بدون Audience task؛
  • Executive Summary بدون owner و facts-as-of؛
  • کپی Strategy، Requirement و Test Case داخل Plan؛
  • Scope در حد نام ماژول؛
  • Out of Scope بدون Exposure و risk owner؛
  • Risk در حد «بالا/متوسط/کم»؛
  • Approach به شکل فهرست انواع تست؛
  • انتخاب ابزار پیش از Evidence need؛
  • Source link بدون version/hash؛
  • Assumption بدون Validator و expiry؛
  • Dependency بدون deliverable و fallback؛
  • Environment فقط با نام Stage؛
  • قرار دادن Secret و داده واقعی در Plan؛
  • Entry criteria به‌عنوان دیوار Dev→QA؛
  • Exit «۹۵٪ Pass» بدون denominator؛
  • برابرگرفتن Test count با Risk coverage؛
  • تاریخ پایان بدون Fix/Retest/Decision buffer؛
  • Availability اسمی به‌جای Capability؛
  • QA به‌عنوان مالک همهٔ Riskها؛
  • رنگ به‌عنوان تنها حامل Status؛
  • دیاگرام screenshot بی‌نسخه؛
  • Wiki به‌عنوان Sourceهای کپی‌شده و متناقض؛
  • Viewed به‌عنوان Approval؛
  • سکوت به‌عنوان Risk acceptance؛
  • Living document بدون Change Log؛
  • ویرایش Snapshot بعد از تصمیم؛
  • Automation برای قضاوت معنای Risk؛
  • اندازه‌گیری کیفیت با طول/View count؛
  • بستن Plan بدون archive، action و expiry.

چک‌لیست برنامه تست زنده و خواندنی

  1. Plan ID، version و status دارد.
  2. Facts-as-of جدا از last-edited است.
  3. Decision question، owner و موعد روشن‌اند.
  4. گزینه‌های Go/Conditional/Hold تعریف‌اند.
  5. Outcome و کاربران/عملیات بحرانی ثبت‌اند.
  6. مخاطب و Task هر View معلوم است.
  7. Strategy و Summary از Plan جدا هستند.
  8. Tailoring و دلیل آن ثبت است.
  9. Scope دارای release identity است.
  10. Role، State، Surface و Boundary در Scope است.
  11. Out of Scope reason و risk owner دارد.
  12. Conditional/Unknown scope پنهان نشده است.
  13. Risk به‌صورت Failure claim نوشته شده است.
  14. Priority rationale و owner دارد.
  15. هر Risk به Evidence response وصل است.
  16. Oracle/Invariant روشن است.
  17. Evidence gap و residual exposure ثبت‌اند.
  18. Approach فقط لیست نوع تست نیست.
  19. Source registry canonical و نسخه‌دار است.
  20. لینک‌ها section-level و دسترس‌پذیرند.
  21. Assumption validator/status/expiry دارد.
  22. ابطال Assumption impact و fallback دارد.
  23. Dependency deliverable/owner/due دارد.
  24. Contingency و Escalation روشن‌اند.
  25. Environment manifest با Build سازگار است.
  26. Data lineage/reset/privacy ثبت است.
  27. Entry criteria برای هر لایه Tailor شده است.
  28. Entry Handoff مصنوعی ایجاد نمی‌کند.
  29. Exit population/denominator/cutoff دارد.
  30. Blocked/Not run/Inconclusive treatment معلوم است.
  31. Risk evidence از Test pass rate جداست.
  32. Waiver authority و control روشن‌اند.
  33. Schedule شامل Fix/Retest/Decision است.
  34. Capacity، capability و constraint جدا هستند.
  35. Risk acceptor اختیار متناسب دارد.
  36. Decision View به Contract/Evidence drill-down دارد.
  37. رنگ تنها حامل معنا نیست.
  38. دیاگرام Source/version و text alternative دارد.
  39. Review بر پرسش تصمیم متمرکز است.
  40. Comment/action owner و closure دارند.
  41. Acknowledgement از Approval جداست.
  42. Change triggerها تعریف شده‌اند.
  43. Impact و evidence invalidation ثبت می‌شوند.
  44. Gate snapshot پس از تصمیم بازنویسی نمی‌شود.
  45. Drift check برای source/assumption/criteria اجرا می‌شود.
  46. Quality metrics Outcome مصرف را می‌سنجند.
  47. Closure شامل archive/actions/monitoring/expiry است.
  48. دقیقاً پنج FAQ و Meta پیش از انتشار کنترل شده‌اند.

جمع‌بندی: Plan باید تصمیم را کوتاه کند، نه حقیقت را

برنامه تست خواندنی از حذف جزئیات به‌دست نمی‌آید؛ از معماری درست به‌دست می‌آید. Decision View کوتاه است، Plan Contract تعهدها و مرزها را نگه می‌دارد و Evidence layer امکان بررسی را می‌دهد. Risk، Scope، Assumption، Source، Criteria و Change نسخه‌دار می‌شوند تا تیم هنگام تغییر Context بداند چه شواهدی دیگر معتبر نیست و چه کسی باید تصمیم بگیرد.

سؤالات متداول درباره نوشتن برنامه تست

تفاوت Test Strategy و Test Plan چیست؟

Strategy الگوها، اصول و رویکردهای نسبتاً پایدار محصول یا سازمان را تعیین می‌کند؛ Plan آن‌ها را برای یک Release، پروژه، سطح یا تصمیم مشخص Tailor می‌کند و Scope، Risk، منابع، Criteria و مسئولان همان Context را می‌سازد. Plan باید Strategy نسخه‌دار را ارجاع دهد و استثنا/تغییر خود را ثبت کند.

برنامه تست باید چند صفحه باشد؟

عدد ثابتی ندارد. یک Decision View می‌تواند یک صفحه باشد و جزئیات در Contract و Sourceهای پیوندی قرار گیرند. کفایت را با یافتن پاسخ تصمیم، Traceability، Freshness و نبود Gap پنهان بسنجید، نه تعداد صفحه یا واژه. محصول پرریسک ممکن است Plan سلسله‌مراتبی بخواهد.

آیا تیم Agile یا Scrum به Test Plan نیاز دارد؟

Scrum Guide Test Plan را Artifact رسمی جدا نمی‌داند. بااین‌حال تیم برای شفافیت Risk، Scope، Evidence، Dependency و تصمیم به اطلاعات برنامه‌ریزی نیاز دارد. این اطلاعات می‌تواند در Backlog، Definition of Done، Wiki و Registry مشترک به‌شکل سبک و زنده باشد؛ یک فایل سنگین اجباری نیست.

چه کسی باید برنامه تست را بنویسد و تأیید کند؟

یک مالک مشخص باید انسجام و Versioning Plan را حفظ کند، اما محتوا محصول همکاری Product، Engineering، QA، Operations و متخصصان حوزه است. Approval و Risk acceptance باید به افراد دارای اختیار مربوط برسد؛ QA به‌تنهایی مالک همهٔ Riskها یا تصمیم Release نیست.

چگونه بفهمیم برنامه تست واقعاً خوانده و استفاده می‌شود؟

View count کافی نیست. ببینید مخاطب می‌تواند Decision owner، Scope، Top risk، Gap و Action را درست و سریع بازیابی کند؛ تغییرها acknowledgement می‌گیرند؛ Surprise در Gate کم می‌شود؛ Sourceهای stale و موارد بی‌مالک کاهش می‌یابد؛ و Claim تا Build/Evidence قابل ردیابی است. مصرف می‌تواند از View، board یا API مشترک باشد.

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