داشبورد تیم برای هر چهار ستون Unit، Integration، System و UAT عدد ۱۰۰٪ و چراغ سبز نشان می‌دهد. بااین‌حال Callback تکراری در Checkout مصنوعی، Ledger را دوبار تغییر می‌دهد. مشکل «نبودن یک Level» نیست؛ هیچ‌یک از Testها سؤال درست را روی Boundary و Fidelity لازم، با Oracle و Evidence هم‌Build، نپرسیده‌اند.

این راهنما سطوح تست نرم‌افزار را از یک چک‌لیست چهارخانه به Test Level Allocation Contract تبدیل می‌کند: Risk/Question → Observation need → Test object/Boundary → Level → Method/Environment/Data/Oracle → Evidence → Gap/Disposition. هدف اجرای اجباری همهٔ Levelها نیست؛ هدف این است که هر سؤال مهم در نزدیک‌ترین نقطهٔ توانمند و با Observation نمایندهٔ کافی پاسخ بگیرد.

خلاصه اجرایی: Level را از Test Object انتخاب کنید

  • Test level گروهی از فعالیت‌هاست که بر Test object و هدف مشخص متمرکز است؛ فقط مرحلهٔ تقویمی یا نوع ابزار نیست.
  • Component، Component Integration، System، System Integration و Acceptance Boundaryهای متفاوتی می‌بینند؛ هیچ‌کدام به‌تنهایی کیفیت را اثبات نمی‌کنند.
  • Test type مانند Functional، Performance یا Security با Level فرق دارد و می‌تواند در چند Level اجرا شود.
  • Test Pyramid مدل Portfolio اتوماسیون است، نه مترادف رسمی Test levels و نه نسبت جهانی Unit/Integration/E2E.
  • «همهٔ Levelها سبز» بدون Question registry، Object identity، Fidelity و Evidence ادعای کفایت نیست.
  • Gap را بر اساس Observation گمشده طبقه‌بندی کنید؛ حذف یک Label همیشه حذف Testing نیست.
  • هر Exclusion/Compensation باید Risk، Authority، Evidence، Expiry و Review داشته باشد.

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

Intent اصلی اطلاعاتی و اجرایی است: «سطوح تست نرم‌افزار چیست؟»، «تفاوت Unit، Integration، System و UAT چیست؟»، «آیا می‌توان یک Level را حذف کرد؟» و «چطور سبد Test level را بر اساس ریسک انتخاب کنیم؟». این مقاله مالک تصمیم تخصیص سؤال به Level و مدیریت Gap است.

برای طراحی نسبت و سبد اتوماسیون به هرم تست در عمل، برای جزئیات Integration Testing، System Testing و UAT مراجعه کنید. این صفحه تعاریف آن‌ها را تکرار نمی‌کند؛ Allocation و Evidence gap میان آن‌ها را عملی می‌کند.

سطح تست چیست؟ تعریف مبتنی بر Test Object

در ISTQB CTFL 4.0.1، Test level نمونه‌ای مشخص از Test process است که با Test object مرتبط می‌شود. Levelها با ویژگی‌هایی مثل Object، Objective، Test basis، Defect/Failureهای معمول، Approach و مسئولیت‌ها توصیف می‌شوند. همین تعریف مانع می‌شود Level را فقط «قبل/بعد» یا «دستی/خودکار» بدانیم.

LevelTest object نمونهObservation اصلی نمونه
Componentتابع، Class، Module، data conversionرفتار و Quality جزء در isolation کنترل‌شده
Component Integrationرابط میان Componentهاقرارداد، داده، state و error propagation
Systemسیستم کامل یا محصول یکپارچهرفتار End-to-end در Boundary سیستم
System Integrationرابط سیستم با سیستم/سرویس بیرونیprotocol، mapping، retry، failure semantics
Acceptanceسیستم/محصول در Context پذیرشنیاز، workflow، readiness یا تعهد تعریف‌شده

نام دقیق و Boundary به معماری وابسته است. آنچه در Monolith یک Component است ممکن است در اکوسیستم Microservice یک System باشد. Level را از Object و رابطه‌اش با محیط تعریف کنید، نه از نام Folder یا Job.

Test Level با Test Type، Technique، Layer و Stage فرق دارد

مفهومپرسشنمونه
Levelکدام Test object/Boundary؟Component Integration
Typeکدام Quality characteristic/هدف؟Functional، Performance، Security
TechniqueTest condition/case چگونه مشتق شود؟BVA، Decision table، State transition
Layerکدام Interface فنی را مصرف می‌کنیم؟function، API، UI، protocol
Stageچه زمانی در Flow اجرا می‌شود؟PR، nightly، pre-release، Production observation
Methodچطور Observation تولید می‌شود؟review، simulation، automation، exploration

یک Security question می‌تواند در Component با static/property checks، در System Integration با protocol tests و در Acceptance با policy evidence بررسی شود. «Security فقط System level است» یا «Manual یعنی Acceptance» طبقه‌بندی غلط است.

Test Level با Test Pyramid یکی نیست

Test Pyramid مارتین فاولر راهی برای فکرکردن به سبد Testهای خودکار و نسبت بیشتر Testهای کم‌سطح به Broad-stack است؛ خود مقاله نیز تفاوت تعریف‌ها و استثناهای هزینه/سرعت/پایداری را می‌پذیرد. Pyramid، UAT را «قلهٔ رسمی» معرفی نمی‌کند و Level taxonomy را جایگزین نمی‌سازد.

Test LevelTest Pyramid
تمرکز بر Object، Boundary و Objectiveتمرکز بر Portfolio و هزینهٔ Feedback خودکار
شامل Acceptance و System Integrationمعمولاً Unit/Service/UI یا Low/Broad stack
برای Manual/Automated قابل‌استفادهعمدتاً مدل Automation portfolio
نسبت عددی تجویز نمی‌کندشکل جهت‌دهنده است، نه درصد جهانی

Component Testing چه چیزی را می‌بیند؟

Component level برای مشاهدهٔ رفتار Object کوچک‌تر و Feedback نزدیک مفید است. Isolation می‌تواند علت Failure را محدود کند، اما Mock یا Fake ممکن است رفتار واقعی Dependency را حذف کند. Ownership نیز Contextual است؛ Author، Peer، Tester یا ابزار می‌توانند مشارکت کنند و «همیشه فقط Developer» قاعدهٔ Level نیست.

  • خوب می‌بیند: boundary logic، state transition داخلی، error branch، property و invariant.
  • کمتر می‌بیند: serialization واقعی، شبکه، deployment، configuration drift و emergent behavior.
  • ریسک False confidence: Mock با contract متفاوت، Oracle سطحی، تست implementation به‌جای behavior.

Component Integration؛ قرارداد واقعی بین جزءها

این Level تعامل میان Componentها در Boundary تعریف‌شده را هدف می‌گیرد: data shape، call sequence، transaction، timeout، error mapping و shared state. لازم نیست همهٔ Componentها ابتدا «کاملاً تست‌شده» باشند؛ Strategy ممکن است incremental، feature-slice یا risk-first باشد. اما Object/version و Stub fidelity باید روشن باشند.

System Testing؛ رفتار سیستم در Boundary خودش

System level رفتار و قابلیت‌های سیستم کامل را در برابر Test basis مناسب می‌بیند. Functional و برخی Non-functional types ممکن‌اند، اما «System testing همهٔ Security/Performance/Reliability را کامل پوشش می‌دهد» ادعای نامعتبر است. برخی Characteristics به Specialist environment، Production-like load یا evidence بیرون از یک System run نیاز دارند.

System Integration؛ مرزی که اغلب در E2E گم می‌شود

System Integration روی تعامل سیستم با سرویس‌ها، Providerها، سخت‌افزار یا اکوسیستم بیرونی تمرکز دارد. یک E2E happy path ممکن است این Level را لمس کند، اما retry، partial failure، version skew، clock، rate limit و protocol semantics را الزاماً پوشش نمی‌دهد.

Boundary questionObservation لازمخطر Fake
Timeout before/after commitside effect + response ambiguityFake atomic رفتار کند
Duplicate callbackidempotency across systemsStub فقط یک Callback بدهد
Version skewold/new contract combinationsهمه روی latest باشند
Retry/rate limitbackoff و quota behaviorunlimited provider
Clock/timezonecutoff و expiry بین سیستم‌هاshared fixed clock

Acceptance Testing؛ پذیرش کدام نیاز و توسط چه Authority؟

Acceptance level دربارهٔ Validation و پذیرش در Context تعریف‌شده است. UAT تنها شکل آن نیست؛ operational، contractual/regulatory، alpha/beta یا factory/site acceptance ممکن‌اند. UAT الزاماً آخرین مرحله، با کاربر واقعی، در محیط واقعی یا معادل Release sign-off نیست. جزئیات در راهنمای UAT آمده است.

Acceptance contextAuthority/Evidence نمونهClaim limit
User acceptancerepresentative workflow و business authorityنیازهای ثبت‌شده، نه market fit
Operational acceptancerunbook، monitoring، backup/restorereadiness محدود، نه zero incident
ContractualClause و evidence ruleهمان Scope قرارداد
Regulatoryapplicable requirement و authorized reviewنه Compliance کلی بدون Scope
Alpha/Betabounded participants و observationیادگیری، نه کیفیت تضمینی

Level Allocation Model؛ قرارداد مرکزی

levelAllocationModel:
  id: LAM-CHECKOUT-28
  version: 5
  purpose: "تخصیص Quality Question به Object/Boundary توانمند"
  decision: "ساخت/تغییر/حذف Allocation؛ نه Release verdict"
  scope: SYN-CHECKOUT@CUT-28
  levelTaxonomy: LEVEL-TAX-v4
  objectTaxonomy: OBJECT-TAX-v3
  claimLimit: "ساختار Observation portfolio؛ نه کفایت یا کیفیت"
  owner: test-strategy-owner
  unknowns: [real-provider-fidelity]
  status: READY_FOR_LEVEL_ALLOCATION_REVIEW

گام اول: از Risk به Quality Question برسید

Level را از روی عادت انتخاب نکنید. ابتدا Risk/Goal/Basis را به سؤال قابل‌مشاهده تبدیل کنید. تست مبتنی بر ریسک مالک Risk model است؛ اینجا خروجی آن مدل به Observation need تخصیص می‌یابد.

qualityQuestion:
  id: Q-IDEMP-28
  version: 3
  riskId: RISK-IDEMP-9
  testBasisRef: BASIS-CALLBACK-v8
  qualityCharacteristic: functional-correctness-and-recoverability
  claim: "هر Callback معتبر حداکثر یک Ledger effect دارد"
  observationNeed: "state before/after duplicate, late and reordered Callback"
  requiredFidelity: real-serialization-plus-transaction-boundary
  requiredIndependence: peer-plus-specialist-review
  requiredConfig: CONFIG-SYN-28
  requiredData: DATA-SYN-28
  requiredOracle: ORACLE-IDEMP-v8
  deadline: before-release-candidate-review
  criticality: HIGH
  ownerCapability: stateful-test-analysis
  status: ACTIVE

گام دوم: Test Object و Boundary را رسم کنید

Object IDداخل Boundaryبیرون/جایگزین‌شدهLevel candidate
OBJ-IDEMP-FNidempotency function/state modelDB/queue/providerComponent
OBJ-CALLBACK-DBhandler + repository + DBprovider/networkComponent Integration
OBJ-CHECKOUT-SYSCheckout deployable systemPSP StubSystem
OBJ-CHECKOUT-PSPCheckout + provider boundaryother ecosystemSystem Integration
OBJ-OPS-WORKFLOWdeploy/observe/reconcile/restoreunscoped organizationOperational Acceptance

عبارت «E2E» Boundary را توضیح نمی‌دهد. باید بدانیم کدام Processها واقعی‌اند، کدام Stub، کدام Queue/DB مشترک، کدام Identity و چه External effectی مشاهده می‌شود.

گام سوم: Fidelity و Independence را تعیین کنید

Level بالا خودکار Fidelity بالا نمی‌سازد و Level پایین الزاماً غیرنماینده نیست. Fidelity ابعادی است: protocol، data distribution، timing، concurrency، topology، dependency behavior و observability. Independence نیز جداست: Author، Peer، Specialist، organizational یا external.

بعد FidelityسؤالEvidence
Protocolserialization/error code واقعی است؟contract/trace
Statetransaction و persistence نماینده‌اند؟before/after state
Timingtimeout/retry/clock کنترل شده‌اند؟timeline
Concurrencyinterleaving و race قابل‌مشاهده‌اند؟schedule/trace
Databoundary/locale/relation شکل درست دارند؟data pack manifest
Topologynetwork/process/container مشابه نیاز است؟environment manifest
DependencyFake کدام رفتار را ندارد؟fidelity limitation

گام چهارم: Allocation Record بسازید

allocation:
  id: ALLOC-IDEMP-28
  version: 4
  questionId: Q-IDEMP-28
  testObjectId: OBJ-CALLBACK-28
  testObjectVersion: 7
  level: COMPONENT_INTEGRATION
  boundary: callback-handler+repository+fake-ledger-db
  interfaces: [callback-http, ledger-repository]
  dependencies: [PSP-STUB-v8]
  method: state-transition-plus-duplicate-injection
  environmentId: ENV-SYN-28
  dataPackId: DATA-SYN-28
  oracleId: ORACLE-IDEMP-v8
  executorCapability: integration-test-engineering
  independenceLevel: peer-reviewed
  evidenceRule: same-build-state-manifest
  freshnessRule: current-change-only
  resultVocabulary: [PASS, FAIL, ERROR, INCONCLUSIVE]
  failureOutcome: finding-plus-attribution
  feedbackTarget: under-8m
  maintenanceOwner: checkout-capability
  lifecycleStatus: PILOT
  rationale: "اولین Boundary دارای transaction واقعی و کنترل‌شده"

یک سؤال می‌تواند چند Allocation مکمل داشته باشد

Allocationچیزی که می‌بیندچیزی که نمی‌بیند
Component propertyinvariant در state modelDB transaction/protocol
Component Integrationhandler+repository atomicityprovider reordering واقعی
System Integrationretry/callback protocolProduction distribution
Operational Acceptancereconcile/restore workflowabsence of future incidents

تکرار دقیق یک سؤال در همهٔ Levelها اتلاف است. هر Allocation باید Observation افزوده، زمان Feedback یا استقلال متفاوتی داشته باشد؛ وگرنه Candidate ادغام یا Retirement است.

Gap Taxonomy؛ «Level نداریم» تشخیص کافی نیست

Gapنشانهگزینه
QUESTION_GAPRisk به سؤال تبدیل نشدهanalysis/model
OBJECT_GAPObject/Boundary نامعلومarchitecture map
INTERFACE_GAPتعامل مهم خارج Observationintegration allocation
FIDELITY_GAPFake رفتار لازم را نداردcontract/representative test
CONFIG_GAPConfig tuple مهم نیستmatrix allocation
DATA_GAPState/locale/boundary غایبdata pack
ORACLE_GAPReach هست، Verdict معتبر نیستoracle repair
INDEPENDENCE_GAPBias کنترل نشدهpeer/specialist review
TIMING_GAPFeedback خیلی دیر یا زودِ غیرنمایندهsplit allocations
EVIDENCE_GAPنتیجه به Subject متصل نیستmanifest
MAINTENANCE_GAPAllocation Stale/بی‌Ownerrepair/retire

Gap Record؛ تصمیم حذف یا جبران را ثبت کنید

gap:
  id: GAP-PROVIDER-FIDELITY-28
  questionId: Q-IDEMP-28
  type: FIDELITY_GAP
  missingObservation: real-provider-reordering
  reason: no-authorized-representative-sandbox
  riskImpact: callback-order-unknown
  currentEvidence: EVID-COMPINT-28
  compensatingEvidence: EVID-RECON-28
  options: [contract-simulator, provider-sandbox, production-monitor]
  decisionAuthority: risk-owner
  disposition: COMPENSATE
  owner: integration-capability
  dueAt: 2026-08-20T12:00:00Z
  expiry: 2026-09-13T00:00:00Z
  reviewDue: 2026-08-27T00:00:00Z
  status: ACTIVE

Dispositionهای Gap

  • ADD: Allocation جدید ارزش Observation دارد.
  • MOVE: سؤال در Boundary دیگری توانمندتر/سریع‌تر است.
  • SPLIT: Feedback زود و Evidence نماینده به دو Allocation تقسیم می‌شوند.
  • STRENGTHEN: Method/Data/Oracle/Fidelity موجود اصلاح می‌شود.
  • COMPENSATE: Control/Evidence جایگزین زمان‌دار است.
  • ACCEPT: Authority، Risk باقی‌مانده را با Expiry می‌پذیرد.
  • REMOVE: سؤال/Object دیگر معتبر نیست؛ Impact بررسی شده است.
  • INVESTIGATE: اطلاعات برای Allocation کافی نیست.

Evidence Manifest؛ سبزی Level را به Subject وصل کنید

evidenceManifest:
  id: EVID-ALLOC-28
  questionId: Q-IDEMP-28
  allocationId: ALLOC-IDEMP-28
  subjectId: checkout-api@C28
  buildId: BUILD-SYN-28
  testObjectId: OBJ-CALLBACK-28
  environmentId: ENV-SYN-28
  dataPackId: DATA-SYN-28
  methodVersion: stateful-callback/v8
  oracleId: ORACLE-IDEMP-v8
  artifact: artifacts/RUN-28/result.json
  digest: sha256:...
  startedAt: 2026-08-13T11:00:00Z
  finishedAt: 2026-08-13T11:08:00Z
  producer: pipeline/SYN-28
  reviewer: peer-reviewer
  unknowns: [provider-reordering]
  redaction: synthetic-only
  retention: 90d
  status: VALID_PASS

PASS فقط Claim همان Allocation را پشتیبانی می‌کند. Evidence Component Integration را نمی‌توان به System Integration یا UAT تعمیم داد. برای اندازه‌گیری Coverage چندبعدی و Evidence state، راهنمای پوشش تست نرم‌افزار را ببینید.

آیا می‌توان یک Level را حذف کرد؟

بله، اگر هیچ Question واجد شرایطی Observation منحصربه‌فرد آن Boundary را نیاز نداشته باشد، یا Observation با Evidence معتبر در Allocation دیگری فراهم شود. اما تصمیم «Unit نداریم» یا «UAT حذف شد» بدون Registry سؤال و Gap analysis قابل‌دفاع نیست.

پرسش حذف/ادغامEvidence لازم
چه Questionهایی به این Allocation وصل‌اند؟Question registry
Observation منحصربه‌فرد چیست؟Object/Boundary/Fidelity map
جایگزین همان Claim را پشتیبانی می‌کند؟same-question evidence
Feedback/independence چه تغییری می‌کند؟baseline و trial
چه Risk/Unknown باقی می‌ماند؟gap disposition/authority
اگر اشتباه بود، rollback چیست؟prospective change plan

«همه Levelها» نیز می‌تواند Portfolio بدی باشد

تست‌های تکراری با Oracle یکسان، Suite کند، Environment شکننده و Maintenance بی‌Owner می‌توانند چهار چراغ سبز بسازند و هیچ Observation تازه‌ای ندهند. به‌جای شمارش Level، Marginal evidence، Feedback age، Failure attribution، cost و lifetime را بسنجید.

Change Impact؛ Allocation ثابت نمی‌ماند

  • تغییر Boundary/Architecture ممکن است Level یا Object را عوض کند.
  • تغییر Contract/Provider، Fidelity Gap جدید می‌سازد.
  • تغییر Risk/Basis، Question را اضافه یا retire می‌کند.
  • تغییر Environment/Data/Oracle ممکن است Evidence قبلی را Stale کند.
  • تغییر Owner/Tool/Cost، قابلیت نگهداشت را عوض می‌کند.

Feedback زود در برابر Evidence نماینده

قانون «همیشه پایین‌ترین Level» کافی نیست. اول earliest capable observation را پیدا کنید، سپس اگر Fidelity یا Independence کافی نیست Countercheck نماینده‌تر بسازید. Component property در چند ثانیه و System Integration در زمان بیشتر می‌توانند یک سؤال را از دو زاویه پشتیبانی کنند؛ یکی جای دیگری نیست.

Cost model؛ قیمت Run فقط بخشی از هزینه است

هزینهنمونهMeasure
Buildطراحی Harness/Oracle/Datainitial effort
Runcompute، environment، licensecost/run
Feedbackwait و queuep50/p95 age
Diagnosistrace/attributiontime-to-classify
Maintenancechange repair/flakinesshours/window
Opportunityسؤال‌های مهمی که اجرا نشدندcritical gap age
Failure costواقعی و Contextualincident/rework data

قاعدهٔ ۱–۱۰–۱۰۰–۱۰۰۰ یا رشد نمایی هزینه، قانون عمومی نیست. هزینهٔ واقعی به architecture، observability، deployment، blast radius، repair و exposure بستگی دارد. دادهٔ خود سیستم را Baseline کنید؛ عددهای داستانی را ROI ننامید.

Correction؛ اگر Level label یا Evidence اشتباه بود

correction:
  id: CORR-LEVEL-28
  detectedAt: 2026-08-13T13:00:00Z
  cause: "Test mocked DB داشت اما Component Integration گزارش شده بود"
  invalidAllocation: ALLOC-IDEMP-28@v3
  invalidEvidence: EVID-ALLOC-28@v3
  affectedClaims: [COV-Q-IDEMP-28, RELEASE-EVID-28]
  containment: "Evidence INVALID و Decision downstream متوقف"
  correctedAllocation: ALLOC-IDEMP-28@v4/COMPONENT
  newGap: GAP-TRANSACTION-28
  revalidation: RUN-28R1
  republishStatus: COMPLETE
  status: CLOSED

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

تمام مثال‌ها در `SYN-CHECKOUT` جدا و جعلی‌اند: Order، PaymentAttempt، PSP Stub، Callback، Ledger و Reconciliation مصنوعی؛ timeout قبل/بعد از fake commit و Callback تکراری/دیر/جابجا. هیچ شبکه، Production، شرکت، تیم، کاربر، پرداخت، بانک یا PSP واقعی وجود ندارد.

QuestionAllocation زودAllocation نماینده‌تر
IRR/toman conversionComponent propertySystem UI/API display
Persian/Arabic/Latin digitsparser componentSystem locale journey
Unicode/RTLnormalizer componentbrowser/render system
UTC/Tehran/Jalalitime conversioncross-system cutoff
Duplicate Callbackstate propertyDB/provider boundaries
Reconciliationledger componentoperational acceptance drill

IRR canonical و تومان فقط نمایشی و برچسب‌دار است؛ ارقام فارسی/عربی/لاتین، Unicode NFC، RTL/LTR stable ID، UTC، Asia/Tehran و جلالی صرفاً نمایشی‌اند. هیچ نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، Screenshot یا Log واقعی و هیچ ادعای بانکی/مالی/حقوقی/مالیاتی/امنیتی/حریم خصوصی/انطباق دربارهٔ ایران وجود ندارد.

آزمایش اجرایی SYN-TEST-LEVEL-ALLOCATION-GAP-۰۱

یک Validator مستقل، قطعی و بدون dependency با Node.js v26.۷.۰ اجرا شد. Dashboard سطحی Unit، Integration، System و UAT را هرکدام ۱۰۰٪ و سبز نشان می‌داد و PASS می‌داد. ممیزی قرارداد ۱۶۷ قاعده داشت.

گروهتعدادنمونه کنترل
Identity۱۶Product، Risk، Strategy، Basis، Architecture، Build، Cutoff
Model۱۴Purpose، Decision، Scope، taxonomies، limit، Unknown
Question۱۶Risk/Basis، Claim، Observation، Fidelity، Independence، Oracle
Allocation۲۴Object/Boundary/Level، Method، Config/Data، Evidence، Cost
Gap۱۶type، missing observation، impact، options، authority، expiry
Evidence۲۰Question/Allocation/Object/Build، Method/Oracle، Artifact/digest
Governance۱۸Coverage/Critical rule، exception، change، maintenance، Correction
ادعاهای ممنوع۳۶چهار-Level اجباری، Pyramid/role/type universals، guarantees
روابط بین‌فیلدی۷Question/Allocation/Evidence/Build/Object/Gap/Compensation

نسخهٔ سطحی با ۱۶۰ Finding به HOLD رفت: همهٔ ۱۲۴ فیلد قرارداد و ۳۶ ادعای ممنوع Fail شدند. هفت رابطهٔ بین‌فیلدی به‌دلیل نبود فیلدها یا شرط Compensation فعال نشدند؛ شمارش برای قرمزکردن همهٔ Rules دست‌کاری نشد.

fixture: SYN-TEST-LEVEL-ALLOCATION-GAP-01
rules: 167

superficial dashboard:
  Unit: 100%
  Integration: 100%
  System: 100%
  UAT: 100%
  allLevelsGreen: true
  dashboardVerdict: PASS
  contractStatus: HOLD
  findings: 160

corrected model:
  question: Q-IDEMP-28
  allocation: ALLOC-IDEMP-28
  object: OBJ-CALLBACK-28
  build: BUILD-SYN-28
  gapDisposition: COMPENSATE
  compensatingEvidence: EVID-RECON-28
  structuralFindings: 0
  status: READY_FOR_LEVEL_ALLOCATION_REVIEW

نسخهٔ اصلاح‌شده Question، Test Object/Boundary، Level، Fidelity، Method/Environment/Data/Oracle، independence، same-Build Evidence، Gap/Compensation و Governance را کامل کرد و با صفر Finding به `READY_FOR_LEVEL_ALLOCATION_REVIEW` رسید. این وضعیت عمداً صدق Source/Evidence، کفایت سؤال/Allocation، absence of defects، Product quality، Security، market fit یا Release readiness را اثبات نمی‌کند.

شاخص‌های Allocation؛ تعداد Test و Level کافی نیست

MeasureCountermeasureخطر
Active-question allocation coverageEvidence validityMapping تزئینی
Critical gap ageRisk/complexity mixعدد Aggregate شکاف مهم را پنهان کند
Feedback ageFidelity scorecardسریع ولی غیرنماینده
Fidelity gap countcost/availabilityهر Fidelity بیشتر ارزشمند نیست
Failure attribution timeOracle/trace completenessتشخیص سریعِ غلط
Duplicate observation rateindependence/marginal evidenceادغام بیش‌ازحد
Maintenance age/costescaped-risk sampleحذف Test برای کاهش هزینه
Compensation expirycompensating evidence freshnessException دائمی
Correction closureaffected-claim completenessClose اداری

Automation و AI در Level Allocation

Automation می‌تواند Object graph، Question mapping، stale allocation، Evidence binding، Gap age و duplicate observation را بررسی کند. AI می‌تواند Candidate Level/Boundary یا Gap پیشنهاد دهد؛ اما معماری، Fidelity، استقلال، Risk acceptance، Retirement یا Release را بدون Review تصمیم نگیرد.

  • Source architecture/Basis و model/prompt نسخه‌دار باشند.
  • پیشنهاد Level باید Object/Boundary/rationale و Unknown داشته باشد.
  • AI label جای اجرای Representative trial را نگیرد.
  • داده/کد حساس به سرویس تأییدنشده ارسال نشود.
  • Authority انسانی و مسیر Correction/Appeal حفظ شود.

۳۶ ضدالگوی سطوح تست

ضدالگوخطراصلاح
همه پروژه‌ها چهار Levelمعماری/Context حذفobject taxonomy
همه Levelها همیشه لازمهزینه/تکرارquestion allocation
Levelها Phase متوالی‌اندFeedback دیرcontinuous allocation
Level=Pyramidدو مدل مخلوطseparate portfolio
UAT قله Pyramidtaxonomy غلطacceptance context
UAT همیشه آخرEarly validation حذفpurpose/timing
UAT فقط کاربر واقعیAuthority/representation مبهمacceptance contract
UAT محیط واقعیSafety/privacyfidelity rationale
Unit فقط DeveloperRole universalcapability
Unit همیشه سریع/ارزان/پایدارGuarantee کاذبmeasure
Integration بعد از Unit کاملترتیب اجباریstrategy
System همه NFRهاSpecialized gapstype allocations
Security فقط Systemmulti-level evidence حذفquestion map
Performance فقط Systemcomponent/boundary signal حذفlayered evidence
Acceptance=market fitValidation claim گستردهclaim limit
System test=brand protectioncausality کاذبbounded outcome
Skip Level=DefectGap/Outcome اختلاطobservation gap
Skip Level=Project failureفاجعه‌سازیrisk decision
Level بیشتر=کیفیت بیشترduplicate evidencemarginal value
Test investment=QualityGuaranteeevidence/limits
Testing=SecurityControlهای دیگر حذفsecurity program
Testing=Customer trustOutcome causalityseparate measures
۱–۱۰–۱۰۰–۱۰۰۰عدد بی‌Contextactual cost baseline
هزینه همیشه نماییArchitecture/repair حذفmeasure distribution
Untested code=bad codeCoverage/quality اختلاطrisk evidence
No Unit=Technical debtعلت قطعیdebt evidence
Coverage=ConfidenceOracle/fidelity حذفmulti-signal
هر Risk در هر Levelتکرار اجباریcomplementary allocation
Level name=FidelityFake پنهانfidelity dimensions
E2E=SystemBoundary مبهمobject map
Mock=UnitTool defines levelobject/boundary
Manual=AcceptanceMethod defines levelseparate method
Automation=ComponentMethod defines levelseparate axes
Pyramid ratio جهانیGoodhartcontextual portfolio
AI Level auto-approvalArchitecture/Risk authorityhuman review
Remove Level=Remove Testinglabel/object confusionquestion impact

چک‌لیست ممیزی Level Allocation

  1. Program/Product/Goal/Risk/Strategy/Basis نسخه‌دارند؟
  2. Architecture، Deployment، Environment و Data model قفل‌اند؟
  3. Repository، Commit، Build، Deployment و Cutoff مشخص‌اند؟
  4. Model ID/version، Purpose، Decision و Scope دارد؟
  5. Level/Object taxonomy تعریف شده‌اند؟
  6. Claim limit و Unknownها حاضرند؟
  7. هر Question به Risk/Basis وصل است؟
  8. Quality characteristic و bounded Claim روشن‌اند؟
  9. Observation need نوشته شده است؟
  10. Fidelity/Independence/Config/Data/Oracle requirements ثبت‌اند؟
  11. Criticality، deadline و Owner capability معلوم‌اند؟
  12. Allocation ID/version و Question ID سازگارند؟
  13. Test Object/version و Boundary دقیق‌اند؟
  14. Interfaces و Dependencies آشکارند؟
  15. Level از Object انتخاب شده، نه ابزار/عنوان؟
  16. Method، Environment، Data و Oracle Pin شده‌اند؟
  17. Executor capability و Independence level متناسب‌اند؟
  18. Evidence/Freshness rule و Result vocabulary دارید؟
  19. Failure outcome، Cost و Feedback target مشخص‌اند؟
  20. Maintenance owner و Lifecycle status وجود دارند؟
  21. Rationale ارزش Observation را توضیح می‌دهد؟
  22. Gap بر اساس missing observation طبقه‌بندی شده؟
  23. Gap دارای Risk impact، options و Authority است؟
  24. Compensation دارای Evidence معتبر است؟
  25. Disposition، Owner، dueAt، expiry و reviewDue ثبت‌اند؟
  26. Manifest به Question/Allocation/Object/Build همان رکورد متصل است؟
  27. Artifact/digest/times/producer/reviewer حاضرند؟
  28. Unknown/redaction/retention/status معلوم‌اند؟
  29. Critical-question rule Aggregate را کنترل می‌کند؟
  30. Change impact و Maintenance/Retirement rules فعال‌اند؟
  31. Correction affected claims و revalidation را پوشش می‌دهد؟
  32. Measureها Guardrail دارند و تیم/فرد را رتبه‌بندی نمی‌کنند؟

برنامه ۳۰ روزه برای بازطراحی سطوح تست

بازهکارخروجی
روز ۱–۵یک Flow و ۱۰ Risk/Question را Baseline کنیدQuestion registry
روز ۶–۱۰Object/Boundary/Fidelity map بسازیدTaxonomy و current allocations
روز ۱۱–۱۵Gapها و duplicate Observationها را طبقه‌بندی کنیدGap register
روز ۱۶–۲۰یک ADD/SPLIT/STRENGTHEN و یک Retirement Pilot کنیدEvidence/cost baseline
روز ۲۱–۲۵Compensation/Exception و Correction drill اجرا کنیدAffected-claim path
روز ۲۶–۳۰Measure/Guardrail و Portfolio را Review کنیدKeep/Adapt/Stop

موفقیت Pilot «پنج Level کامل» یا تعداد Test بیشتر نیست. موفقیت یعنی Critical question بی‌Observation کمتر، Evidence به Object/Build درست متصل، Feedback و Fidelity متعادل، Gapها زمان‌دار و Allocationهای تکراری/بی‌Owner قابل‌حذف شوند.

جمع‌بندی: Level را چک نکنید؛ Observation را طراحی کنید

نادیده‌گرفتن Level به‌خودی‌خود فاجعه نیست و اجرای همهٔ Levelها نیز موفقیت نیست. خطر واقعی، سؤال مهمی است که هیچ Test object/Boundary توانمندی آن را مشاهده نمی‌کند یا Evidence آن به Subject درست متصل نیست. Allocation Contract، Level را به Risk و Observation پیوند می‌دهد؛ Gap Record حذف/جبران را شفاف می‌کند؛ و Correction اجازه می‌دهد برچسب و Evidence غلط پیش از تصمیم اصلاح شوند.


سوالات متداول درباره سطوح تست نرم‌افزار

سطوح اصلی تست نرم‌افزار کدام‌اند؟

در Taxonomy رایج ISTQB، Component، Component Integration، System، System Integration و Acceptance مطرح‌اند. هر Level با Test object و Objective تعریف می‌شود. معماری و Context تعیین می‌کنند Object دقیق چیست و کدام Levelها برای سؤال‌های شما لازم‌اند.

تفاوت Unit، Integration، System و UAT چیست؟

تفاوت اصلی Object/Boundary و Objective است: Unit/Component روی جزء، Integration روی تعامل، System روی سیستم کامل و UAT روی پذیرش نیاز/workflow تعریف‌شده تمرکز دارد. Method دستی/خودکار، Type و زمان اجرا این Levelها را به‌تنهایی تعیین نمی‌کنند.

آیا همه پروژه‌ها باید همه سطوح تست را داشته باشند؟

خیر. از Risk و Quality question شروع کنید و ببینید کدام Object/Boundary Observation منحصربه‌فرد می‌دهد. حذف یا ادغام Level باید با Question registry، Evidence جایگزین، Gap disposition، Authority و Expiry قابل‌دفاع باشد.

Test Pyramid چه تفاوتی با Test Levels دارد؟

Test Levels Taxonomy مبتنی بر Test object/Objective است؛ Test Pyramid مدل فکری برای سبد Testهای خودکار و Feedback/cost در Low versus Broad stack. Pyramid درصد جهانی نمی‌دهد و UAT یا System Integration را به‌طور خودکار روی یک شکل ثابت قرار نمی‌دهد.

اگر یک Level را حذف کنیم حتماً باگ بیشتری می‌رسد؟

الزاماً نه. پیامد به سؤال‌های متاثر، Observation جایگزین، Fidelity، Oracle، Independence و Risk بستگی دارد. به‌جای پیش‌بینی قطعی، Trial قابل‌بازگشت اجرا کنید و Critical gap، escaped-risk sample، Feedback و Maintenance را با Guardrail بسنجید.

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