تست بازی نه «چند ساعت بازی‌کردن» است و نه تلاش برای تبدیل Fun به یک عدد جادویی. بازی یک سامانهٔ stateful، real-time، content-heavy و اغلب چندپلتفرمی است؛ بنابراین باید Build، Input، State، Save، Economy، Network، Rendering، Audio، Accessibility و تجربهٔ بازیکن را با Claimهای جدا آزمود. Playtest نیز پژوهشی محدود برای پاسخ به یک سؤال طراحی است، نه رأی‌گیری دربارهٔ خوب یا بد بودن کل بازی.

این راهنما مسیر عملی را می‌سازد: Game Quality Charter → Build/Platform Identity → State/Mechanic Oracle → Technical Matrix → Playtest Question → Participant/Task/Protocol → Observation/Telemetry/Interview → Evidence/Triage → Release Gate. هدف، وعدهٔ موفقیت تجاری یا «تضمین سرگرمی» نیست؛ هدف آن است که تیم بداند کدام Claim فنی یا تجربی، در چه شرایطی و با چه محدودیتی پشتیبانی می‌شود.

خلاصهٔ اجرایی تست بازی

  1. Player، Platform، Mode، Session و Quality claim را مشخص کنید.
  2. هر نتیجه را به Build/branch/commit/content/config/device/input/save/network وصل کنید.
  3. Game state و Mechanic را با Invariant، Transition و Oracle مستقل تست کنید.
  4. Smoke، Functional، Content، Compatibility، Performance، Network، Save و Accessibility را جدا طراحی کنید.
  5. Automation را برای تکرارپذیری و State coverage به کار ببرید، نه اثبات Fun.
  6. برای Playtest فقط یک سؤال تصمیم‌ساز و Participant criteria مرتبط انتخاب کنید.
  7. Task success، path، error، moderator rescue، telemetry و گفتهٔ Participant را تفکیک کنید.
  8. میانگین Rating را جای Observation، Support، Slice و Counterexample نگذارید.
  9. Issue فنی، usability barrier، design hypothesis و preference را با workflow جدا ثبت کنید.
  10. Release gate را بر Evidence، ریسک، Platform requirement و محدودیت آزمون بنا کنید.

تست بازی چه Intentهایی دارد؟

IntentپرسشEvidence
Functional/StateRule و Transition درست است؟assertion/state trace
ContentMap/asset/quest/item قابل‌بارگذاری و متصل است؟content scan/traversal
Compatibilityروی Platform/Device/Input matrix چه می‌شود؟build-device run
Performance/Stabilityframe/load/memory/crash در workload چیست؟trace/profile/crash dump
Network/Multiplayerauthority/sync/reconnect/migration درست است؟multi-client/server trace
AccessibilityPlayer با نیاز/تنظیم معین به Task دسترسی دارد؟guideline + player test
Usability/OnboardingPlayer هدف می‌تواند Goal را بفهمد و انجام دهد؟observed task study
Experience/Designکدام لحظه چرا tension/confusion/delight ساخت؟observation + interview + telemetry
Platform/Store readinessRequirement و packaging/release flow آماده است؟platform-specific evidence

مرز این صفحه با مقالات تخصصی سایت

این صفحه مالک orchestration تست بازی است. روش عمومی مطالعهٔ کاربر در راهنمای Usability Testing و Metricهایی مانند Task Success و SUS در معیارهای تست کاربردپذیری تشریح شده‌اند. برای Workload و p95/p99 به برنامه تست عملکرد و برای Device matrix به تست سازگاری بروید.

موضوعمالک داخلیاتصال بازی
Accessibility عمومیتست دسترس‌پذیریInput/caption/motion/difficulty/player barriers
Explorationتست اکتشافی ساختاریافتهGame charter/session/debrief
Non-determinismتست سیستم‌های غیرقطعیseed/replay/repeated trial
فارسی/RTLتست i18n/L10n فارسیsubtitle/HUD/input/save/font

Game Quality Charter

game_quality_charter:
  player/audience: declared, not “everyone”
  platform/mode: PC single-player / controller+keyboard
  build/content/config: exact identities
  core_promise: what meaningful experience/action is intended?
  critical_paths: boot → menu → new game → tutorial → save/load
  quality_claims:
    - state correctness
    - input responsiveness
    - readable feedback
    - recoverable save
    - accessible alternatives
    - target-player task comprehension
  prohibited_harms/dark_patterns: declared
  known_limits: content/mode/platform/language
  evidence_owner / decision_owner / review_date

Charter واژه‌هایی مثل «Fun»، «fair difficulty» یا «immersive» را به سؤال قابل‌بررسی تبدیل می‌کند. مثلاً «بازیکن تازه‌وارد در Build B42 بدون کمک Moderator می‌تواند Dodge را یاد بگیرد و Encounter اول را تمام کند؟» بهتر از «Tutorial سرگرم‌کننده است؟» است. پاسخ نیز فقط برای Participant/Task/Build/Session آزموده‌شده اعتبار دارد.

هویت Build؛ شرط بازتولید هر باگ

Identityنمونهچرا لازم است؟
Buildbuild ID + branch + commitتفکیک binary دقیق
Contentasset bundle/map/localization versionکد یکسان/محتوای متفاوت
Config/Feature flagconfig hashdifficulty/economy/experiment
PlatformOS/console/store/regionAPI/package/requirement
HardwareCPU/GPU/RAM/storage/displayperformance/render/device
Inputcontroller/keyboard/layout/firmwaremapping/dead zone/haptics
Account/Profilesynthetic entitlement/progressionunlock/cloud/profile state
Saveschema/checkpoint/digestreproduction and migration
Networkclient/server/region/protocol/NAT profileauthority/sync/reconnect
Run/Sessionrun ID + seed + attempttrace/replay/evidence

مستند Steamworks دربارهٔ Branchهای Beta نشان می‌دهد Branchها Buildهای مشخصی هستند که می‌توان برای تست توزیع کرد و تغییر Build فعال نیازمند اقدام روشن است. این فقط یک نمونهٔ Platform workflow است؛ Steam requirement یا راه انتشار همهٔ بازی‌ها نیست.

Build Manifest و Test Session Contract

game_test_session:
  session_id / purpose / owner
  build/branch/commit/content/config digests
  platform/device/input/display/audio/network
  language/locale/timezone
  account/profile/entitlements/save snapshot
  mode/map/quest/checkpoint/difficulty
  random seed / server / clients / attempt
  test charter/tasks/oracles
  capture: video + input + logs + metrics + crash dump
  privacy/consent/retention if human playtest
  cleanup/reset and side-effect sink
  verdict/limits/follow-up

State Model؛ ستون تست Gameplay

Boot → Title → Profile → MainMenu → Loading → Playing
Playing → Paused → Playing
Playing → Checkpoint → SaveCommitted
Playing → Death → Respawn/Reload
Playing → Disconnect → Reconnect/Offline/Fallback
Playing → Quit → Save/Discard confirmation

Each transition needs:
event + guard + state delta + feedback + persistence + recovery

Bugهای بازی اغلب از ترکیب Stateها می‌آیند: Pause هنگام cutscene، Load در transition، controller disconnect وسط QTE، fast travel با quest flag ناسازگار، respawn بعد از inventory commit یا reconnect پس از authority change. پوشش Screen کافی نیست؛ World، Player، Quest، Inventory، Economy، AI، Network و Save state باید به هم Trace شوند.

Mechanic Contract و Oracle

mechanic: dodge
input: button press / remapped alternatives
preconditions: playing, stamina≥cost, not stunned
timing: input buffer + startup + invulnerability + recovery windows
state_delta: stamina, animation, position, collision flags
feedback: visual + audio + haptic + accessible alternative
interruptions: pause, hit, terrain, device disconnect, network correction
invariants:
  stamina never below declared minimum
  one input produces at most one accepted action
  invulnerability matches frame/state contract
  save/load cannot persist transient invulnerability
oracle: event/state trace + frame capture + collision/debug data
known nondeterminism/tolerance: declared

تست Functional و Content را جدا اما متصل کنید

سطحنمونهOracle
Pure ruledamage/cooldown/economy formulaindependent calculation/property
Componentinventory/equipment/quest statestate snapshot/invariant
Featurecraft/purchase/save/reloadcross-system trace
Levelspawn/nav/collision/triggercontent validation/traversal
Assetmissing texture/audio/animation/localizationreference/dependency scan
Packaged buildboot/input/platform APIreal artifact run
E2E pathnew profile→tutorial→save→resumeplayer-visible + internal state evidence

Automation در تست بازی چه چیزی را خوب پوشش می‌دهد؟

مستند Automation Test Framework در Unreal Engine Unit، Feature، Content Stress و Screenshot Comparison را از هم تفکیک می‌کند و توصیه می‌کند تست به state یا ترتیب اجرا وابسته نباشد و محیط را پاک تحویل دهد. این یک نمونهٔ Engine-specific است، نه توصیهٔ انتخاب Unreal یا پوشش خودکار تمام Gameplay.

مناسب Automationنیازمند Human/ترکیبیچرا؟
formula/invariant/state transitioncontrol feelبدن/دستگاه/expectation
map/asset/reference scancomprehension/onboardingmental model
boot/smoke/path replaytension/pacing/boredomexperience/context
save/load/migration fixturesocial dynamicshuman interaction
multiclient protocol assertionsmeaningful choicedesign interpretation
performance capture/screenshotsaccessibility with playersbarrier lived experience

Determinism، Seed و Replay

Seed ثابت می‌تواند بخشی از random generation یا AI را تکرارپذیر کند، اما physics، frame timing، thread scheduling، network order و external service ممکن است هنوز تغییر کنند. Replay ورودی نیز همیشه replay state نیست. Build/seed/input stream/initial state/tick rate و tolerance را ثبت کنید و نتیجهٔ یک run را قانون قطعی دربارهٔ احتمال Failure ننامید.

Evidenceمی‌تواند نشان دهدنمی‌تواند به‌تنهایی نشان دهد
Input replayهمان command sequenceهمان physics/network state
Fixed seedهمان PRNG stream در Scopeتمام nondeterminism
Videoplayer-visible symptominternal cause/state
State logdeclared transitionsperception/feel
Crash dumpfailure contextreproduction probability

Platform و Device Matrix را از Risk بسازید

بُعدنمونه Cellریسک
Platform/OSPC/console/handheld + versionAPI/package/lifecycle
CPU/GPU/RAMmin/target/high + driverframe/memory/render
StorageHDD/SSD/free-space pressureload/stream/install/update
Displayresolution/aspect/HDR/refreshUI/crop/frame pacing
Inputkeyboard/controller/touch/remapfocus/glyph/dead-zone
Audiostereo/surround/headphone/no-audiocue/mix/fallback
Localefa-IR/RTL/digits/fonts/subtitlelayout/readability/save
Networklatency/loss/NAT/disconnectsync/authority/rejoin
Lifecyclesuspend/resume/background/controller lossstate/save/resource

همهٔ ترکیب‌ها را brute-force نکنید. Platform requirement، telemetry، audience، min/target spec، feature risk و change surface را وزن دهید؛ Cellها و Exclusionها را نسخه‌دار کنید. Emulator یا Editor run، Hardware/packaged-build evidence را جایگزین نمی‌کند.

Performance بازی: FPS متوسط کافی نیست

ClaimMetricWorkload/Oracle
Frame deliveryframe-time distribution/hitchesscene/path/camera/effect density
Loadingcold/warm load and streaming stallstorage/cache/build identity
Memoryworking set/VRAM/growth/peaklong traversal/reload cycle
CPU/GPUthread/GPU timings/saturationtarget device/settings
Thermal/powerclock/temp/battery where availablehandheld/mobile sustained session
Stabilitycrash/hang/ANR/soak durationpopulation and censoring
NetworkRTT/jitter/loss/snapshot agedeclared topology/fault profile

Profile داخل Editor ممکن است با packaged build فرق کند. Scene، path، camera، settings، resolution، driver، warm-up، background load، capture overhead و run count را ثبت کنید. «۶۰ FPS» بدون frame-time distribution، target hardware و quality settings یک Claim کامل نیست.

Multiplayer و Network Testing

ریسکFault/ScenarioOracle
Authorityclient conflicting actionserver state wins per contract
Ordering/Duplicatereorder/redeliveryone valid state transition
Loss/Jitterprofiled packet impairmentbounded prediction/correction
Disconnect/Rejoindrop at combat/trade/checkpointidentity/state/recovery
Host migrationhost leavesownership/timer/score continuity
Matchmakingregion/party/skill/input pooldeclared constraints/fallback
Cheat/abuseunauthorized client claimvalidation/audit/rate policy
Voice/chatblock/mute/report/reconnectsafety/privacy/accessibility

Network simulation باید محل Injection و مدل Fault را روشن کند؛ latency اضافه‌شده در Client با congestion واقعی یا server overload یکی نیست. Multiplayer Playtest نیز رفتار اجتماعی، moderation و consent را وارد Scope می‌کند و صرفاً Functional session چند Client نیست.

Save، Progression و Economy

ناحیهتستInvariant
Save atomicityinterrupt before/during/after commitold or new valid state، نه half-state
Migrationold schema→new builddeclared data/progression preservation
Cloud conflicttwo devices/offline/late syncvisible conflict policy/no silent loss
Checkpointdeath/quit/crash/reloadworld/player/quest consistency
Inventorygrant/spend/drop/trade/retryno negative/duplicate effect
Economyprice/reward/currency transactionledger conservation per design
Entitlementoffline/revoke/restore/regionno unauthorized loss/access
save_test:
  build/from_schema/to_schema
  initial_save_digest + profile/account
  action sequence + checkpoint
  fault moment: before/write/fsync/rename/cloud-sync/after
  expected state alternatives
  forbidden partial states
  local/cloud/conflict evidence
  recovery/rollback/manual support path
  cleanup: synthetic profile only

Accessibility بخشی از Playability است

Xbox Accessibility Guidelines مجموعهٔ Best practiceهایی برای Text، Contrast، Captions، Audio، Input، Difficulty، UI، Time limits، Motion، Photosensitivity، Communication و Support ارائه می‌دهد و صریحاً می‌گوید XAG چک‌لیست انطباق حقوقی نیست. از آن به‌عنوان منبع ایده/Guardrail و Test design استفاده کنید، نه Certification.

BarrierClaim/TestEvidence
Inputremap/single-stick/hold-toggle/timingdevice/player task
Visualtext/contrast/color-independent cue/scaleinspection + player use
Audiocaption/non-speech cue/volume channelscontent coverage/timing
Motioncamera shake/FOV/blur/flashes settingsconfig persistence + player feedback
Cognitiveobjective clarity/pause/repeat/tutorial paceobserved task
Difficultyassist choices preserve declared goalmechanic/state tests
Communicationtext/voice alternatives/block/reportmultiplayer workflow

تستر بدون معلولیت نباید نقش «بازیکن دارای معلولیت» را بازی کند و نتیجه را نماینده بداند. ابزار/inspection با مشارکت افراد دارای تجربهٔ زیسته و accommodationهای امن کامل می‌شود. Disability، skill و preference سه مفهوم یکسان نیستند.

Localization فارسی، RTL و محتوای بازی

  • Font fallback، shaping، نیم‌فاصله و ترکیب فارسی/لاتین/عدد.
  • RTL در Menu، HUD، inventory grid، tooltip و subtitle.
  • Persian/Arabic/Latin digits و key glyphهای پلتفرم.
  • Subtitle timing، speaker، non-speech caption و line length.
  • Variable/plural/gender/context و متن‌های dynamic.
  • نام Save/Profile/Server با Unicode و normalization.
  • Cutscene، texture-baked text، voice-over و lip-sync coverage.
  • Time/date/timezone و نمایش شمسی در صورت Claim محصول.

Playtest با QA Execution یکی نیست

فعالیتParticipantهدف
QA functional runتستر آشنا با BuildContract/defect/reproduction
Expert reviewDesigner/UX/Accessibility expertheuristic/design critique
Internal playtestهمکار با exposure ثبت‌شدهearly hypothesis/counterexample
Target-player studyافراد مطابق recruitment criteriatask/comprehension/experience
Accessibility playtestplayers with relevant lived experiencebarrier/assistive setup
Beta/field testbroader opted-in participantsenvironment/device/content signals

QA می‌تواند فرضیهٔ Design بسازد و Evidence دقیق گزارش کند، اما سلیقهٔ یک تستر نمایندهٔ Audience نیست. «خود را جای تازه‌کار گذاشتن» جای Recruiting بازیکن تازه‌وارد را نمی‌گیرد. Internal expert feedback و Target-player evidence هر دو ارزش دارند، به شرط آنکه منبعشان در Report مخلوط نشود.

Playtest Question Contract

playtest_question:
  decision: keep/change tutorial prompt sequence
  research_question: can first-time target players complete Dodge task?
  build/platform/input/language: pinned
  participant_criteria: relevant prior experience/exclusions
  task/start_state/end_condition/timebox: declared
  moderator_script/rescue_rule: fixed
  observations: path, hesitation, error, retry, rescue, completion
  telemetry: event dictionary/version; no hidden inference
  interview: neutral prompts after task
  measures: counts + support + quotes/context
  consent/privacy/recording/compensation/withdrawal: explicit
  stop/safety/accessibility conditions
  analysis plan/slices/decision rule: predeclared
  known_limits: sample/context/novelty/order effects

Participant Recruitment و اخلاق Playtest

  • Target audience را با رفتار/تجربهٔ مرتبط تعریف کنید، نه stereotype.
  • Employee، fan، expert، first-time و accessibility participant را مخلوط و ناشناس گزارش نکنید.
  • سن، رضایت سرپرست/قانون محلی و حمایت از کودک را در صورت حضور minor بررسی کنید.
  • هدف، مدت، recording/telemetry، incentive، confidentiality و حق توقف/حذف را روشن کنید.
  • Motion sickness، flashing، audio، horror، violence، chat/harassment و physical setup را در safety screen بگنجانید.
  • Accommodation و break را بدون تنبیه Metric فراهم کنید.
  • NDA مانع گزارش harm، abuse یا حق قانونی Participant نشود؛ مشاورهٔ حقوقی محلی لازم است.

Task، Moderator و Rescue Rule

جزءتعریفخطای رایج
Start statesave/profile/inventory/tutorial exposureParticipantها از state متفاوت
Task promptGoal بدون لو دادن مسیرleading instruction
End conditionobservable completion/failure/withdrawalmoderator judgement مبهم
Timeboxبرای safety/protocol، نه سرعت اجباریfrustration مصنوعی
Rescueچه زمانی/چقدر کمک؟help پنهان و success جعلی
Think-aloudاختیاری/آموزش/اثر روشرفتار طبیعی فرض‌کردن
Ordercounterbalance/randomize where relevantlearning/fatigue confound
Moderatorscript/neutrality/debriefدفاع از Design

Observation، Telemetry و Self-report سه شاهد متفاوت‌اند

شاهدنمونهنمی‌گوید
Observationhesitation/path/error/rescueعلت درونی قطعی
Telemetryevent/time/state sequenceاحساس یا نیت
Self-reportگفته/برداشت/Ratingرفتار/علت عینی قطعی
Game state traceflag/inventory/AI/networkفهم Player
Video/Input capturevisible context and commandکامل‌بودن internal state
Moderator notecontext/interventionunbiased truth

Telemetry Contract؛ Event name به‌تنهایی کافی نیست

playtest_event:
  event_id / session_id / participant_pseudonym
  build/content/config/platform/input
  event_name + schema_version
  game_time / wall_time / sequence
  map/state/task/attempt
  action/result/reason if known
  moderator_rescue flag
  consent/purpose/retention/access
  no raw secret/chat/voice/identifier by default
  quality checks: missing/duplicate/order/clock

اگر Tutorial-complete event fire نشود، Failure می‌تواند instrumentation باشد؛ اگر دو بار fire شود، Completion rate تحریف می‌شود. Event taxonomy، schema، ordering، drop/duplicate و Build mapping را خودتان تست کنید. Telemetry بیشتر همیشه بهتر نیست؛ Purpose و minimization و امکان انصراف مهم‌اند.

«Fun Factor» را به یک Score ذاتی تبدیل نکنید

Fun یک خاصیت واحد و مستقل از Player/Genre/Context نیست. بعضی بازیکنان Mastery، بعضی Exploration، Story، Expression، Social connection، Competition، Discovery یا Relaxation می‌خواهند. Frustration نیز همیشه Defect نیست و Difficulty همیشه Barrier نیست. Design intent، Target player و لحظه/Task را ثبت کنید و به‌جای «Fun=۸/۱۰» الگوهای Evidence را تحلیل کنید.

Claim تجربیEvidence ممکنAlternative explanation
Goal understoodcorrect paraphrase/path/actionprior genre knowledge
Control felt responsivetiming complaint + trace + retrydisplay/input latency
Challenge legiblefailure reason understoodlucky success
Choice meaningfultradeoff articulated/path differencenovelty or obvious dominant option
Pacing draggedobserved idle/repetition + quotefatigue/session order
Discovery workedunprompted exploration/recallstreamer/external exposure
Social loop supportedcoordination/communication patternpre-existing friendship

Rating می‌تواند یک Self-report مفید باشد، اما Scale anchor، سؤال، زمان پرسش، ترتیب، Support و Distribution لازم است. میانگین روی مقیاس ordinal را با احتیاط تفسیر کنید و از آن برای ادعای ترشح Dopamine، روان‌شناسی همگانی، Retention یا فروش استفاده نکنید. Participant quote نیز شاهد تجربهٔ همان فرد است، نه حقیقت Population.

آزمایش قطعی: میانگین خوب، Tutorial شکست‌خورده

یک Fixture مستقل Node.js ۲۴.۱۸.۰ با هشت Session کاملاً ساختگی ساختیم: شش Returning و دو First-time. سؤال از پیش مشخص بود: «آیا Player تازه‌وارد، Task آموزشی اعلام‌شده را بدون نجات Moderator تمام می‌کند؟» Cohort، event، Rating و Gateها پیش از تنها Aggregation قفل شدند.

ALL FICTIONAL SESSIONS
overall support=8
overall tutorial completion=0.75
mean arbitrary rating=7.25

first-time slice support=2
tutorial completion=0.00
mean arbitrary rating=6.50
failed sessions=S07,S08

NAIVE AGGREGATE GATE:
overall completion≥0.75 AND mean rating≥7 → PASS

TASK/SLICE GATE:
overall completion≥0.70
AND first-time completion≥0.80 → HOLD

Aggregate مطلوب، Failure کامل Slice ازپیش‌تعریف‌شده را پنهان کرد. اما این Fixture بسیار کوچک، عمدی و غیرنماینده است؛ Ratingها فقط Labelهای ordinal ساختگی‌اند و Scale معتبر Fun، Satisfaction یا Psychometric نیستند. هیچ انسان، Gameplay، Build، Telemetry، Observation، Interview یا نتیجهٔ تجاری سنجیده نشده است. Accessibility، Difficulty، Retention، Learning، Immersion، Balance، Performance، Defect یا Harm پوشش ندارد. این Benchmark، قانون حجم نمونه، Threshold عمومی، پیش‌بینی بازار، Release algorithm یا اثبات اینکه Task completion برابر Fun است نیست.

تحلیل Playtest؛ Aggregation با Context

Measurementباید همراه باشد باهشدار
Task successsupport/start/end/rescue/withdrawalsuccess با کمک جدا
Time on taskcompletion status/distributionسریع‌تر همیشه بهتر نیست
Error/retrytaxonomy/severity/recoveryexploration را error ننامید
Pathgoal/context/map statedominant path لزوماً مطلوب نیست
Ratingquestion/anchor/distribution/supportordinal/response bias
Quoteparticipant/task/time/observationcherry-picking
Drop/quitreason/technical/safety/consentهمه را churn ننامید

Sliceها را قبل از Analysis بر اساس سؤال تعریف کنید: first-time/returning، input type، platform، accessibility need، language، genre familiarity یا exposure. Slice کوچک را با درصد قطعی گزارش نکنید؛ Count، Support و `INCONCLUSIVE` لازم‌اند. اگر پس از دیدن داده Slice تازه کشف شد، آن را Hypothesis برای مطالعهٔ بعد بنامید.

Playtest Finding با Bug Report فرق دارد

playtest_finding:
  finding_id / question_id / build / sessions
  observation: what happened, not inferred motive
  evidence: timestamps/video/events/state/quotes
  support/slices/counterexamples
  interpretation + alternative explanations
  affected design claim/player/task
  severity: barrier/harm/goal impact
  confidence: bounded by method/sample
  recommendation: option/hypothesis, not command
  owner/decision/status
  validation plan for changed build
  privacy-safe attachments/retention
RecordنمونهWorkflow
Technical defectsave corrupts after interruptreproduce/fix/retest
Accessibility barriercritical audio cue no alternativebarrier/owner/player validation
Usability problemgoal misunderstood in taskdesign change/study
Balance observationone option dominates fixturetelemetry/simulation/playtest
PreferenceParticipant likes art style Bcontext، نه defect
Design hypothesisprompt order may cause missnext experiment
Safety/abuse incidentharassment/photosensitivity eventimmediate safety process

Triage و تصمیم طراحی

  • Observation را از Interpretation و Recommendation جدا کنید.
  • Build و Participant/Task context را پیش از Severity ببینید.
  • Counterexample و evidence خلاف فرضیه را نگه دارید.
  • Design intent را سپر ردکردن تجربهٔ Player نکنید.
  • Preference فردی را به Bug یا «بازیکنان می‌خواهند» تبدیل نکنید.
  • تغییر Design را نسخه‌دار و روی Build جدید دوباره بررسی کنید.
  • اگر چند تغییر هم‌زمان شد، Attribution را محدود گزارش کنید.
  • Release decision را از Test/Research verdict جدا نگه دارید.

Beta و Field Playtest

Beta دامنهٔ Device/Network/Player context را گسترش می‌دهد، اما کنترل کمتر، self-selection بیشتر، Label مبهم‌تر و خطر Leak/harassment/privacy بالاتر دارد. Branch/Build، opt-in، eligibility، NDA، feedback channel، crash/telemetry consent، moderation، support، rollback و stop rule را تعریف کنید. تعداد ساعت بازی‌شده یا Concurrent player به‌تنهایی Fun، Quality یا Market success نیست.

Release Gate بازی

GatePASSHOLD/Exception
Build identityartifact/content/config/platform pinnedevidence on wrong build
Critical path/statecontracts/invariants/recovery passcorruption/blocker/unknown
Platform matrixrisk cells and requirements evidencedcritical unsupported cell
Performance/stabilitytarget workload/budget supportedhitch/crash/memory risk
Save/network/economyduplicate/loss/conflict/recovery controlledirreversible state/value risk
Accessibilitydeclared barriers addressed/evidencedcritical inaccessible path
Playtest claimquestion-specific evidence supportedfailure/insufficient support
Safety/privacyconsent/data/moderation controls readyuncontained harm/data issue
Evidencelimits/unknowns/exceptions visiblegreen summary without trace

Exception باید Build/Platform/Mode/Player impact، Workaround، owner، telemetry/support، expiry و retest داشته باشد. QA یا Research team Verdict شواهد را می‌دهد؛ Product/Design/Platform/Risk owner دربارهٔ Tradeoff تصمیم می‌گیرد. «Fun کم» یک Severity خودکار نیست و «بدون crash» نیز مجوز انتشار خودکار نیست.

Game Test Evidence Pack

game_test_evidence_pack:
  game quality charter + claims
  build/branch/commit/content/config manifests
  platform/device/input/locale/network matrix
  state/mechanic/save/network contracts
  automation/content/performance/crash evidence
  accessibility scope/guideline/player evidence
  playtest question/protocol/participants/tasks
  observation/telemetry/self-report with support
  technical defects + experiential findings
  privacy/consent/safety/moderation records
  limits/unknowns/exceptions/expiry
  test/research verdict + separate release decision

سناریوی ایرانی ساختگی: بازی موبایلی آفلاین

یک بازی Puzzle کاملاً فرضی با Build اندروید B42، زبان فارسی/RTL و حالت آفلاین طراحی کنید. هیچ Player، Account، فروشگاه، پرداخت، Advertisement یا Analytics واقعی وجود ندارد. Profileها و Sessionها ساختگی‌اند، Notification/Leaderboard/Cloud Save به Sink جعلی می‌روند و هیچ نام، موبایل، ایمیل، Advertising ID، Device ID، IP، Voice/Chat، تصویر یا Credential واقعی ثبت نمی‌شود.

ClaimFixtureOracle
Install/updatelocal signed lab artifactsversion/data preserved
Offline firstnetwork loss at boot/save/resultplayable/reconcile no duplicate
Inputtouch/RTL/back gesturemapping/focus/no destructive surprise
Persian UIfont/half-space/digits/long textreadable/no clipping
TimeUTC state + Tehran/Jalali displaydaily reward no clock abuse claim beyond lab
Economyfictional coins onlygrant/spend/retry invariant
Tutorialsynthetic session eventstask/rescue/slice evidence
Access continuitypackage/cache/mirror/offline docsrebuild/restore checksums

اگر بعداً IAP یا Ad وارد Scope شد، از Sandbox/محصول جعلی و مبلغ canonical IRR با نمایش صریح تومان استفاده کنید؛ هیچ کارت، PAN، CVV2، OTP، Token، Wallet یا پول واقعی وارد Playtest نشود. محدودیت Store/region/payment/sanction/connectivity باید جداگانه و با متخصص مربوط بررسی شود. این مثال مشاورهٔ حقوقی، مالی، فروشگاهی، رده‌بندی سنی یا تحریم نیست.

نقش‌ها و حق تصمیم

نقشمسئولیتتصمیم
QA/Game testertechnical charter/execution/evidence/defectstest verdict
UX researcherplaytest protocol/recruitment/analysisresearch finding confidence
Accessibility specialist/communitybarrier guidance/lived-experience evidenceaccessibility recommendation
Designermechanic/loop/balance intent/optionsdesign change
Engineer/Tech art/contentimplementation/instrumentation/fixtechnical remediation
Platform/Releaseartifact/requirement/branch/rolloutplatform readiness
Safety/Privacy/Communityparticipant/data/chat/moderationauthorization/containment
Product owneraudience/scope/tradeoffship/hold/restrict

متریک‌های تصمیم‌ساز و Countermetric

Metricتعریف لازمCountermetric
Critical-path completionbuild/state/platform/support/rescueunknown/unattempted cells
Crash-free sessionsession population/duration/buildhang/data loss/telemetry gaps
Frame-time budgetworkload/device/settings/distributionvisual quality/power/thermal
Save recoveryfault points/valid alternativessilent progression loss later
Task successparticipant/task/end/rescue/supportcomprehension/frustration/access
Barrier countscope/severity/player impactcoverage/community evidence
Finding follow-throughdecision/change/retestquality/severity of findings
Evidence freshnesscurrent build/claim coveragetest debt/unknowns

Bug count، ساعت بازی، Cases/day، Rating متوسط یا Finding count را برای رتبه‌بندی فردی تستر/Participant/Designer استفاده نکنید. این رفتار، Duplicate issue، ساعت‌پرکنی، feedback نمایشی و پنهان‌کردن Unknown را تشویق می‌کند. Metric باید Claim و تصمیم تیم را روشن کند.

برنامهٔ ۳۰روزهٔ Game Test Pilot

بازهکارخروجی
روز ۱–۵Charter/critical path/build identityscope + manifest
روز ۶–۱۰State/mechanic/save contractsoracles + fixtures
روز ۱۱–۱۵Automation/content/platform/performance cellstechnical evidence
روز ۱۶–۲۰Accessibility/localization/fault runsbarriers + recovery
روز ۲۱–۲۵یک Playtest question/protocol/sessionobservation/telemetry/self-report
روز ۲۶–۳۰Triage/change/retest/Evidence Packverdict + next risks

ضدالگوهای رایج تست بازی

  1. تست بازی را بازی‌کردن بی‌هدف دانستن.
  2. نبود Build/Content/Config identity.
  3. Report بدون Save/State/Input/Network context.
  4. Editor run به‌عنوان packaged/platform evidence.
  5. FPS متوسط بدون frame-time/workload.
  6. Replay ورودی به‌عنوان Replay کامل state.
  7. Seed ثابت به‌عنوان حذف همهٔ nondeterminism.
  8. Automation به‌عنوان اثبات Fun.
  9. QA tester به‌عنوان نمایندهٔ همهٔ بازیکنان.
  10. نقش‌بازی‌کردن تازه‌کار یا معلولیت.
  11. Playtest بدون سؤال تصمیم‌ساز.
  12. Task با prompt راه‌حل‌گو.
  13. Moderator rescue پنهان.
  14. Telemetry بدون schema/consent/quality test.
  15. Rating میانگین به‌عنوان Fun score.
  16. Quote cherry-picking.
  17. تبدیل Preference به Bug.
  18. Beta hours/CCU به‌عنوان Quality proof.
  19. استفاده از بازی واقعی مشهور به‌جای Evidence خود Build.
  20. وعدهٔ موفقیت تجاری یا ماندگاری با QA.

چک‌لیست انتشار بازی

  • ☐ Player/Platform/Mode/Promise و known limits روشن‌اند.
  • ☐ Build/branch/commit/content/config هویت دارند.
  • ☐ Device/Input/Display/Audio/Locale/Network matrix نسخه‌دار است.
  • ☐ Profile/Entitlement/Save/Seed/Session بازتولیدپذیرند.
  • ☐ Critical state/transition/mechanic invariants آزموده شده‌اند.
  • ☐ Map/asset/quest/localization content scan دارد.
  • ☐ packaged build و lifecycle واقعی پوشش دارد.
  • ☐ frame time/load/memory/crash با workload ثبت شده‌اند.
  • ☐ multiplayer authority/reconnect/reorder پوشش دارد.
  • ☐ save atomicity/migration/cloud conflict آزموده شده است.
  • ☐ accessibility claim و player evidence متناسب است.
  • ☐ فارسی/RTL/font/subtitle/input glyph بررسی شده است.
  • ☐ Playtest question و decision از پیش نوشته شده‌اند.
  • ☐ Participant criteria/consent/safety/accommodation روشن است.
  • ☐ Task/start/end/timebox/rescue/moderator ثابت‌اند.
  • ☐ Observation/Telemetry/Self-report جدا ثبت می‌شوند.
  • ☐ Support/Slice/Unknown/Counterexample گزارش می‌شوند.
  • ☐ Bug/Barrier/Hypothesis/Preference workflow جداست.
  • ☐ Exception owner/workaround/monitor/expiry دارد.
  • ☐ Test/Research verdict از Release decision جداست.

جمع‌بندی

تست بازی از binary و state تا بدن، دستگاه، شبکه و تجربه امتداد دارد. Technical evidence می‌گوید Mechanic طبق Contract کار کرده؛ Playtest evidence می‌گوید Participant مشخص در Task مشخص چه کرد و چه گفت. هیچ‌کدام به‌تنهایی Fun، Fairness، Market fit یا موفقیت را تضمین نمی‌کنند. ارزش حرفه‌ای تیم در هویت دقیق Build، سؤال خوب، Oracle روشن، مشاهدهٔ صادقانه، Counterexample و تصمیم قابل‌ردیابی است.

پرسش‌های متداول تست بازی

۱. تفاوت Game QA و Playtest چیست؟

Game QA معمولاً Contract فنی، State، Content، Platform، Performance و Defect را بررسی می‌کند. Playtest یک سؤال طراحی/تجربه را با Participant، Task و Protocol مشخص مطالعه می‌کند. QA expert feedback و Target-player evidence می‌توانند مکمل باشند، اما منبع و اعتبار تعمیمشان فرق دارد.

۲. آیا می‌توان Fun Factor را با عدد اندازه‌گیری کرد؟

Rating می‌تواند Self-report محدودی باشد، اما Fun یک خاصیت واحد و جهانی نیست. سؤال، Scale anchor، Participant، Genre/Context، زمان، Distribution و Observation لازم‌اند. یک میانگین به‌تنهایی علت، Retention، فروش یا تجربهٔ همهٔ Playerها را ثابت نمی‌کند.

۳. چه بخش‌هایی از تست بازی را خودکار کنیم؟

Rule/Invariant، State transition، Asset/Map scan، Smoke path، Save fixture، Multi-client assertion، Performance capture و Screenshot comparison کاندیداهای خوبی‌اند. Control feel، comprehension، pacing، social dynamics و lived accessibility به Human evidence نیاز دارند.

۴. برای گزارش باگ بازی چه اطلاعاتی ضروری است؟

Build/branch/commit/content/config، Platform/hardware/input، Profile/Save/checkpoint، Mode/map/quest، Network، Seed/session/attempt، مراحل، Actual/Expected، ویدئو/Input/log/state/crash evidence و نرخ بازتولید. بدون State اولیه، ویدئو به‌تنهایی کافی نیست.

۵. تیم کوچک تست بازی را از کجا شروع کند؟

یک Build و Critical path را قفل کند؛ State/Save/Mechanic contract بنویسد، چند Smoke/Content/Performance cell بسازد و فقط یک Playtest question با Task و Rescue rule روشن اجرا کند. Evidence محدود اما قابل‌بازتولید بهتر از ساعت‌ها بازی بی‌Charter است.

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