۲۴۰ Check کارکردی از ۲۴۰ Check سبز است. پنج آیتم چک‌لیست «Performance، Security، Reliability، Usability و Scalability» هم تیک خورده و میانگین Latency برابر ۲۸۰ms است. آیا محصول از نظر کیفیت آماده است؟ نه لزوماً. هنوز نمی‌دانیم این عدد برای کدام Stakeholder، Workflow، بار، Percentile، Environment، Build، بازه‌ی مشاهده و Oracle است؛ Tail latency، خطای کسب‌وکاری، شرایط Degraded و Trade-offها نیز پنهان‌اند.

این راهنما «تست غیرعملکردی» را از فهرست ابزار و نوع تست به یک زنجیره‌ی تصمیم تبدیل می‌کند: Stakeholder Concern → Quality Attribute Scenario → NFR Contract → Measurement Contract → Evidence Profile → Result → Trade-off/Exception → Decision/Correction. خروجی، یک ادعای کیفیت محدود و قابل‌ردیابی است؛ نه تضمین موفقیت محصول.

پاسخ کوتاه: تست غیرعملکردی چیست؟

تست غیرعملکردی یا Non-Functional Testing مجموعه‌ای از فعالیت‌های ارزیابی است که درباره‌ی ویژگی‌های کیفی محصول، سیستم یا تجربه در Context مشخص Evidence می‌سازد. سؤال فقط «چقدر خوب؟» نیست؛ باید بپرسیم برای چه کسی، کدام Artifact، در پاسخ به چه Stimulus، تحت چه شرایطی، چه Response قابل‌اندازه‌گیری و با چه محدودیتی؟

عبارت مبهمپرسش قابل‌بررسی
سیستم سریع باشدکدام Journey، تحت چه Workload، در کدام Percentile و Measurement point؟
امن باشدکدام Asset/Threat/Control، در چه Scope و با کدام Test method؟
پایدار باشددر برابر کدام Fault، برای چه Window، با چه Recovery و Data integrity؟
کاربرپسند باشدکدام Segment/Task/Context، با چه Success/Error/Effort measure؟
مقیاس‌پذیر باشدبا تغییر کدام Load/Resource، کدام Service level و هزینه حفظ شود؟

مالکیت این مقاله و مرز با راهنماهای تخصصی

راهنمای عمومی تست غیرکارکردی تعریف، انواع و فرایند کلی را مالک است. تست Performance Workload/Latency/Throughput/Saturation، تست امنیت Threat/Control/RoE، معیارهای کاربردپذیری Task/SUS/Study design و برنامه دسترس‌پذیری Policy/WCAG/Evidence را پوشش می‌دهند. مالکیت این صفحه، قرارداد مشترکی است که هر Quality Attribute را از Concern به Scenario، Measure و Evidence تبدیل می‌کند.

نیاز خوانندهمقصدخروجی
انواع NFR چیست؟مقاله ۵۸۹نقشه‌ی انواع و مراحل
Load/Stress را چگونه اجرا کنم؟مقاله ۶۴۴Performance test plan
Security/Usability/A11y تخصصی۶۶۵/۷۷۴/۱۸۲۳Protocol حوزه‌ای
NFR چگونه قابل‌تصمیم شود؟همین مقالهScenario/Measure/Evidence/Trade-off contract

Functional و Non-functional مرز آهنی ندارند

تقسیم ساده‌ی «چه کاری» و «چقدر خوب» برای آموزش اولیه مفید است، اما در عمل می‌شکند. قفل‌کردن حساب پس از چند تلاش، حفظ یک Effect در Callback تکراری، ارائه‌ی متن جایگزین و رد دسترسی بدون مجوز هم رفتار قابل‌مشاهده دارند و هم به Security، Reliability یا Accessibility مربوط‌اند. یک Test می‌تواند هم Functional correctness و هم Quality Attribute را بسنجد.

  • نام NFR به‌تنهایی Level، Technique یا Automation method را تعیین نمی‌کند.
  • Performance بدون Correctness می‌تواند پاسخ اشتباه را خیلی سریع تحویل دهد.
  • Security فقط یک «نوع تست غیرعملکردی» در انتهای کار نیست؛ Requirementهای رفتاری دارد.
  • Usability و Accessibility را با Response time جایگزین نکنید.
  • Maintainability/Testability ممکن است با Analysis، Review و Instrumentation هم Evidence بگیرند.

Quality Attribute، NFR، Metric، SLO و Test یکسان نیستند

مفهومنقشنمونه‌ی محدود
Quality Attributeدسته یا خاصیت کیفیتReliability
Stakeholder Concernنگرانی زمینه‌مندCallback تکراری اثر مالی دوم نسازد
NFR/Quality Scenarioرفتار و Measure مورد انتظار در Contextدر Peak+Dependency degraded، Effect تکراری صفر
Metric/Measureعملیاتی‌سازی مشاهدهduplicate-effect ratio
Target/Thresholdمرز تصمیم برای Scenarioنسبت صفر در Population تعریف‌شده
SLO/Operational objectiveهدف سرویس در Window عملیاتیبا Policy و Budget مستقل
Test/Evaluationروش ساخت EvidenceWorkload + fault + invariant oracle

مدل کیفیت، فهرست خرید یا گواهی انطباق نیست

صفحه‌ی عمومی ISO/IEC 25010:2023 می‌گوید مدل Product Quality شامل ۹ Characteristic و Subcharacteristicهایشان است و می‌تواند برای Specification، Measurement و Evaluation استفاده شود. این صفحه، متن کامل استاندارد را در اختیار نمی‌گذارد؛ استفاده از نام Categoryها به‌تنهایی اثبات پیاده‌سازی کامل استاندارد یا انطباق نیست. نسخه‌ی ۲۰۱۱ نیز Withdrawn شده است، پس نسخه‌ی مرجع را Pin کنید.

مدل کیفیت کمک می‌کند Blind spotها را بپرسیم، اما همه‌ی Characteristicها برای هر Release وزن برابر ندارند. Domain، Product goal، User segment، Risk، Architecture و تعهدها تعیین می‌کنند کدام Scenario محرک تصمیم است.

از Stakeholder و Context of Use شروع کنید

«کاربر» یک Persona واحد نیست. مشتری با اینترنت ناپایدار، اپراتور پشتیبانی، کاربر Screen Reader، تیم عملیات، توسعه‌دهنده‌ی نگه‌دارنده، خریدار سازمانی و Risk owner Concernهای متفاوتی دارند. Threshold بدون Stakeholder و Decision need ممکن است عددی دقیق اما بی‌معنا باشد.

StakeholderConcern {
  stakeholderId, segment, jobToBeDone,
  qualityConcern, harmIfMissed, decisionNeed,
  authority, contextOfUse,
  accessibilityNeed, locale, timezone,
  assumptions, unknowns, evidenceRef
}

Quality Attribute Scenario شش جزء پایه دارد

SEI در قالب Quality Attribute Scenario شش جزء را جدا می‌کند: Source of stimulus، Stimulus، Environment، Artifact، Response و Response measure؛ مرجع اولیه: گزارش فنی SEI درباره Quality Attribute Scenarios. این مقاله Stakeholder، Basis، Priority، Scope، Version، Evidence و Governance را برای استفاده‌ی تستی به آن اضافه می‌کند؛ این افزوده‌ها را استاندارد SEI معرفی نمی‌کنیم.

جزءپرسشنمونه‌ی خیالی
Sourceچه کسی/چیزی رویداد را ایجاد می‌کند؟PSP Stub
Stimulusچه وضعیت/رویدادی رخ می‌دهد؟Callback تکراری و دیررس
Environmentدر چه حالت عملیاتی؟Peak مصنوعی + Dependency degraded
Artifactکدام بخش تحریک می‌شود؟Checkout callback handler
Responseسیستم چه واکنشی نشان دهد؟Deduplicate، Reconcile و Feedback محدود
Response Measureچگونه پاسخ سنجیده شود؟p95 و duplicate-effect ratio با Guardrail

قالب NFR قابل‌کپی

QualityScenario {
  scenarioId, qualityModel/version,
  stakeholderConcernId, characteristic/subcharacteristic,
  source, stimulus, environment, artifact,
  response, responseMeasure,
  scope, exclusions, preconditions,
  operatingMode, degradedMode, frequency,
  priority, rationale, basisRef,
  ownerCapability, version, digest
}

یک جمله‌ی Given/When/Then می‌تواند View مفیدی باشد، اما Contract اصلی را به متن آزاد تقلیل ندهید. شناسه، Version و Digest لازم‌اند تا Result بعدی دقیقاً به همان Scenario متصل شود.

Operating condition و Degraded mode را صریح کنید

Threshold بدون Condition اعتبار کمی دارد. Normal، Peak، Ramp، Maintenance، Partial dependency failure، Cache cold، Failover، Retry storm، low bandwidth یا assistive technology Contextهای متفاوت‌اند. «دنیای واقعی» یک Environment تعریف‌شده نیست؛ Profile قابل بازسازی لازم است.

ConditionFieldهای لازمClaim limit
NormalWorkload mix، rate، data statePeak/Failure را پوشش نمی‌دهد
PeakArrival model، duration، ramp، contentionGrowth آینده را ثابت نمی‌کند
Degraded dependencyFault، timeout، retry، recoveryهمه‌ی Dependency failures را نمایندگی نمی‌کند
Cold stateCache/connection/JIT stateSteady state را نتیجه نمی‌دهد
Accessible workflowAT/browser/input/contextهمه‌ی کاربران یا معیارها را پوشش نمی‌دهد

Threshold را Tester یا AI از خود اختراع نکند

منبع Threshold می‌تواند تعهد، Policy، Research معتبر، User need، Hazard/Risk analysis، Baseline مقایسه‌پذیر، ظرفیت Dependency یا Experiment کسب‌وکار باشد. هر عدد باید Source، Authority، Assumption، تاریخ اعتبار و Revisit trigger داشته باشد. «زیر دو ثانیه چون Best Practice است» Requirement کافی نیست.

نوع مرزکاربردنباید با آن اشتباه شود
Baselineآنچه قبلاً اندازه‌گیری شدههدف مطلوب
Targetمقدار مطلوبحد پذیرش/Block
Thresholdمرز Verdict برای ScenarioGuarantee آینده
Guardrailجلوگیری از بهبود یک Metric با آسیب دیگرMetric فرعی تزئینی
Budgetسهم تخصیص‌یافته در زنجیرهResult کل سیستم
SLOهدف عملیاتی در Window/PopulationTest threshold بدون Mapping

Measurement Contract؛ نام Metric کافی نیست

Latency، Availability، Error rate یا Task success بدون تعریف عملیاتی قابل مقایسه نیستند. نقطه‌ی شروع/پایان، Population، Sample frame، Unit، Aggregation، Window، Clock، Missing data، Warmup، Outlier، Collector و Uncertainty را ثبت کنید. Average می‌تواند Tail را پنهان کند؛ Percentile نیز بدون Sample و Window قابل تفسیر نیست.

MeasurementContract {
  measureId, construct, operationalDefinition, unit,
  population, sampleFrame, aggregation, percentile,
  target, threshold, guardrails,
  observationWindow, warmup, measurementPoint, clock,
  collector, collectorVersion, calibration,
  missingDataRule, outlierRule, uncertainty,
  oracleId, version, digest
}

Population، Sample و Denominator را Pin کنید

«۹۹٪ موفقیت» بدون Denominator معلوم نیست درباره‌ی Request، Journey، User، Session یا Minute صحبت می‌کند. Retry موفق می‌تواند Failure اولیه را پنهان کند؛ Timeout client ممکن است در Server success ثبت شود. Exclusion و Invalid attempt را پیش از مشاهده‌ی نتیجه تعریف کنید، نه برای سبزکردن Dashboard.

Fieldنمونهدام
Populationتمام Attemptهای معتبر Checkout در Runفقط Responseهای دریافت‌شده
NumeratorAttemptهای Oracle-correctHTTP 2xx بدون Business correctness
DenominatorStarted attempts طبق Manifestحذف Timeout/Abort
Invalid ruleHarness failure با Evidenceهر نتیجه‌ی نامطلوب
Retry semanticsOriginal + retry chainفقط آخرین Attempt

Workload Profile را از «کاربر همزمان» فراتر ببرید

عدد Concurrent user بدون مدل Arrival، Think time، Journey mix، Session، Payload، Cache، Data cardinality، Ramp و Duration مبهم است. ۵۰۰۰ کاربر برای یک محصول ممکن است زیاد، کم یا بی‌معنا باشد. در Performance تخصصی، Workload Model و Open/Closed model را دقیق‌تر دنبال کنید.

WorkloadProfile {
  profileId, source, validityWindow,
  arrivalModel, journeyMix, rate/concurrency,
  thinkTime, payloadDistribution, dataCardinality,
  ramp, steadyWindow, duration,
  retryPolicy, cacheState, geography/network,
  assumptions, exclusions, digest
}

Correctness Oracle را در تست NFR حفظ کنید

Load generator ممکن است پاسخ ۲۰۰ و Latency خوب ببیند، درحالی‌که Ledger effect تکراری، داده گم یا پاسخ stale است. NFR Result باید Oracle کارکردی/دامنه‌ای را کنار Measure کیفیت اجرا کند. برای طراحی منبع Expected و Verdict، راهنمای Test Oracle را ببینید.

  • Latency را فقط برای پاسخ‌های Oracle-valid یا با تفکیک Result class گزارش کنید.
  • Error rate فنی را از Business failure جدا کنید.
  • Timeout client، completion server و side effect را به یک Attempt chain وصل کنید.
  • Guardrailهای Integrity، Security و Accessibility را کنار Metric هدف نگه دارید.
  • Fast failure را Success performance حساب نکنید.

Evidence Profile از فهرست Test Type بهتر است

نوشتن «Load + Security + Usability test» نمی‌گوید چه Claimی باید بررسی شود. Evidence Profile با Question و Counterclaim شروع می‌کند، سپس Method، Level، Workload، Environment، Data، Dependency، Instrumentation، Attempt plan، Stop condition و Artifactهای مورد انتظار را مشخص می‌کند.

EvidenceProfile {
  evidenceProfileId, scenarioId,
  question, counterclaim,
  method, level,
  workloadProfileId, environmentProfileId,
  dataProfileId, dependencyProfileId,
  instrumentationProfileId,
  attemptPlan, stopConditions, safetyBoundary,
  expectedArtifacts, manifestSchema,
  retention, access, redaction,
  limitations, digest
}

Evidence را در چند Level تخصیص دهید

همه‌ی Attributeها در یک End-to-End Test بزرگ سنجیده نمی‌شوند. Static analysis، Component benchmark، Contract test، fault injection، System/load test، usability study، accessibility review و operational exercise Evidenceهای مکمل می‌سازند. Level را براساس Object/Boundary/Question انتخاب کنید، نه نام NFR؛ چارچوب تخصیص در راهنمای Test Level Allocation آمده است.

QuestionEvidence زودهنگامEvidence نماینده‌ترGap محتمل
Latency handlerComponent benchmarkSystem workloadNetwork/DB contention
RecoveryState-machine/Component faultDependency outage exerciseOperational procedure
AccessibilityLint/component reviewAT × Browser + complete processContent/user context
SecurityReview/SAST/unit controlDAST/manual scenarioThreat/identity/environment
MaintainabilityStatic/architecture evidenceTimed change exerciseTeam/tool familiarity

Environment Fidelity را Claimمحور تعریف کنید

Production-like یک وضعیت دودویی نیست. Compute، Network، Dependency، Data distribution، Scale، Config، Identity، Clock و Observability Fidelity جدا دارند. کمبود Fidelity Result را خودکار بی‌ارزش نمی‌کند؛ باید Limitation، Bias direction احتمالی و Compensation را بنویسید.

بُعدProfileEvidence محدودکننده
Scaleنسبت به Target و BottleneckCapacity extrapolation uncertainty
DependencyReal/Stub/Replay/Fault modelContract و Failure-mode gap
DataDistribution/Cardinality/StateProduction data لازم نیست
NetworkLatency/loss/DNS/TLS/pathLocalhost نتیجه‌ی WAN نیست
ObservabilitySampling/schema/collector overheadMeasurement effect

Stop condition و Safety Boundary قبل از اجرا

Stress، fault injection و Security test می‌توانند داده، سرویس یا افراد را آسیب بزنند. Scope، نرخ، محیط مجاز، Kill switch، Owner، Monitoring، abort threshold، cleanup، legal/policy approval و Incident path را پیشاپیش تعریف کنید. «نقطه شکست واقعی» را در Production بدون Authority و Guardrail دنبال نکنید.

Quality Attributeها با هم تعامل و تعارض دارند

Cache ممکن است Latency را بهتر و Freshness را بدتر کند؛ Encryption می‌تواند Security را تقویت و هزینه/Latency را تغییر دهد؛ Audit logging می‌تواند Traceability را بالا ببرد و Privacy/Performance را تحت فشار بگذارد؛ Retry می‌تواند Availability ظاهری را بهتر و Duplicate effect را بیشتر کند. هدف Maxکردن همه‌ی Attributeها نیست؛ تصمیم Trade-off با Guardrail و Authority لازم است.

QualityTradeoff {
  tradeoffId, scenarioIds[], attributeA, attributeB,
  decisionQuestion, optionSet,
  benefitHypothesis, costHypothesis, riskHypothesis,
  experimentId, guardrails,
  authority, rationale, evidenceRefs,
  expiry, revisitTrigger, digest
}

یک Scenario سبز، کل Characteristic را سبز نمی‌کند

قبولی یک Journey در یک Window فقط همان Population/Build/Environment/Method را پوشش می‌دهد. Characteristicهایی مثل Reliability یا Security مجموعه‌ی بزرگی از Concernها هستند. Coverage model باید Scenario population، Risk، Attribute interaction، شرایط عملیاتی، Platform/Segment و Evidence gap را نشان دهد؛ Dashboard «Performance: سبز» بیش‌ازحد خلاصه است.

Result Contract و واژگان Verdict

NFRResult {
  resultId, scenarioId, buildId,
  runIds[], attemptCount, validAttemptCount,
  observedMeasure, threshold, guardrailObserved,
  verdict: PASS | FAIL | INCONCLUSIVE | INVALID | NOT_RUN,
  confidenceRationale, unknowns, limitations,
  evidenceManifestId, exceptions, residualRisk,
  supersedes, digest
}

Unknown مساوی Pass نیست. INVALID درباره‌ی اعتبار Run است، نه کیفیت Product. INCONCLUSIVE یعنی Evidence برای Verdict کافی نیست. NOT_RUN را از Not applicable جدا کنید. PASS نیز Claim محدودی درباره‌ی Scenario می‌دهد، نه Quality یا Release.

Exception، Residual Risk و Release Decision

Failشدن NFR خودکار Release را Block نمی‌کند مگر Policy از پیش چنین Gateای تعریف کرده باشد؛ سبزشدن همه‌ی Resultهای موجود نیز خودکار Approval نیست. Missing scenario، Evidence gap، Exception، Benefit، Dependency و Residual risk باید به Authority مناسب برسند. چارچوب تصمیم را در کیفیت به‌اندازه کافی خوب و Release Decision ببینید.

Recordمالک/Authorityحد ادعا
Test ResultEvidence ownerScenario/Run
ExceptionPolicy-defined authorityScope + expiry + condition
Residual RiskRisk ownerشناخته‌شده و زمان‌دار
Release recommendationCapability تعریف‌شدهپیشنهاد، نه تصمیم
Release decisionDecision authorityبر پایه Evidence/Benefit/Risk

Change Trigger و Freshness برای NFR

Workload، User segment، Dependency، Architecture، Runtime، Data distribution، Collector، Threshold source یا Policy که تغییر کند، Result قبلی ممکن است stale شود. هر Scenario/Measure/Evidence Profile باید Change trigger و Validity window داشته باشد. بازاجرای کور همه‌ی Testها تنها راه نیست؛ Impact assessment لازم است.

Correction و Traceability نتیجه

اگر بعداً Collector خطا داشت، Percentile اشتباه محاسبه شد یا Sample ناقص بود، Result را بی‌صدا ویرایش نکنید. Correction باید Result قبلی را Supersede، دلیل و Evidence تازه را ثبت و تصمیم‌ها/داشبوردهای متاثر را پیدا کند.

NFRCorrection {
  correctionId, supersededResultId,
  trigger, reason, affectedFields,
  correctedMeasure, newEvidenceManifestId,
  affectedDecisionQuery, ownerCapability,
  publishedAt, priorDigest, newDigest
}

آزمایشگاه فارسی: Checkout خیالی و تعامل کیفیت‌ها

این Lab کاملاً ساختگی و جدا از هر شرکت، بانک، PSP، کاربر، پرداخت یا سامانه‌ی واقعی است. شبکه یا Production واقعی ندارد و توصیه‌ی بانکی، مالی، حقوقی، مالیاتی، امنیتی، حریم خصوصی یا انطباق ایران نیست. Objectهای خیالی شامل Order، PaymentAttempt، PSP Stub، Callback Event، Ledger Entry، Reconciliation Job و Notification هستند.

ConcernStimulus/EnvironmentResponse/MeasureGuardrail
Latency + ReliabilityCallback تکراری/دیررس در Peak+degraded stubp95≤450ms و duplicate effect=۰Error≤۱% و Ledger effect گم نشود
Usabilityوضعیت Pending برای Segment خیالیFeedback قابل‌فهم در Task protocolAccessibility path حفظ شود
Localizationارقام فارسی/عربی/لاتین و RTL/LTRParse/render مطابق OracleCanonical value تغییر نکند
TimeUTC instant و View تهرانترتیب Event حفظ شودJalali فقط Presentation

مبالغ کاملاً خیالی با Currency canonical برابر IRR و نمای تومانِ صریحاً برچسب‌خورده‌اند. Tenant/Order/Attempt/Event/Ledger/Run/Build/Evidence شناسه‌های جدا دارند. هیچ نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، Log یا Screenshot واقعی وجود ندارد؛ Unicode با NFC و زمان با UTC instant + Asia/Tehran view کنترل می‌شود.

Fixture: ۲۴۰ Check سبز در برابر ۱۸۵ Finding

Fixture مستقل و بدون Dependency بیرونی `SYN-NFR-QUALITY-SCENARIO-EVIDENCE-۰۱` با Node.js اجرا شد. Dashboard سطحی ۲۴۰/۲۴۰ Functional Check، پنج از پنج NFR checklist و Average latency برابر ۲۸۰ms را دید و `QUALITY_PASS` اعلام کرد. ممیزی ۱۸۶قاعده‌ای، همان ورودی را با دقیقاً ۱۸۵ Finding به HOLD برد.

گروهتعداد قاعدهنمونه‌ی الزام
Identity16Model/NFR set/Build/Environment/Data
Stakeholder14Concern/Context/Harm/Decision
Scenario20Source/Stimulus/Environment/Artifact/Response/Measure
Measure22Population/Percentile/Window/Clock/Uncertainty
Evidence Profile20Question/Counterclaim/Profiles/Stop/Safety
Trade-off16Options/Hypotheses/Guardrails/Authority
Result18Runs/Attempts/Measure/Verdict/Limit
Governance18Owner/Exception/Risk/Correction
Forbidden + Relations42مطلق‌گویی و اتصال بین Contractها

نسخه‌ی اصلاح‌شده `NFR-PROFILE-SYN-۳۰` را به Build/Data/Environment ثابت وصل کرد، Stakeholder خیالی را مشخص ساخت، Scenario تکرار Callback را در Peak+Degraded نوشت، p95 و Duplicate-effect ratio را با Population/Window/Oracle/Guardrail تعریف کرد، Evidence Profile و Trade-off سرعت در برابر Reliability/Auditability را ثبت کرد و سه Run معتبر را به Result متصل ساخت. خروجی `READY_FOR_NFR_EVIDENCE_REVIEW` با صفر Finding بود؛ نه اثبات Truth، کفایت Threshold، پوشش کامل Attribute، ایمنی، انطباق، کیفیت Product یا Release.

ابزار را بعد از سؤال انتخاب کنید

نیاز Evidenceقابلیت ابزارخطر انتخاب لوگومحور
Workload قابل‌بازسازیArrival/mix/data/manifestVU زیاد بدون مدل
Tail measurementHistogram/percentile/raw refsAverage-only dashboard
CorrectnessDomain oracle/invariantHTTP status-only
Fault/RecoverySafe injection/timeline/resetFailure بدون کنترل
Human qualityProtocol/segment/task/evidenceAutomation score جای مطالعه
TraceabilityProfile/Scenario/Run/Result IDsScreenshot و PDF جداافتاده

Automation و CI برای NFR

Checkهای ارزان و تکرارپذیر را در Feedback lane مناسب قرار دهید؛ Experimentهای پرهزینه، مخرب یا آماری را با Cadence و Environment جدا اجرا کنید. Threshold noise، Baseline drift، shared-environment contention و Collector change می‌توانند Flaky gate بسازند. هر Run باید Manifest، Exit semantics و Artifact identity داشته باشد.

AI چه کمکی می‌کند و کجا متوقف می‌شود؟

AI می‌تواند Concernها را خوشه‌بندی، Scenario/Counterclaim پیشنهاد، Log/Metric را خلاصه، Missing field را پیدا یا Experiment draft تولید کند. AI نباید Threshold بی‌منبع بسازد، داده/شاهد جعل کند، Secret/PII دریافت کند، Outlier نامطلوب را حذف کند، انطباق اعلام کند یا Exception/Residual risk/Release را بپذیرد. Model/prompt/input/version و Human decision را قابل‌ردیابی نگه دارید.

معیارهای برنامه NFR و Countermetricها

MetricکاربردCountermetric
Scenario readinessدرصد Scenarioهای دارای ContractStakeholder/attribute blind spots
Evidence freshnessسن Result معتبربازاجرای پرهزینه/بی‌ریسک
Invalid run rateسلامت Harness/Environmentنتایج نامطلوب Misclassified
Unknown ageپیری ابهام‌هاUnknownهای prematurely closed
Exception expiryانقضای بدهی پذیرفتهReopen/escape rate
Decision latencyزمان Evidence تا تصمیمEvidence sufficiency/correction
Attribute interaction coverageTrade-offهای بررسی‌شدهپیچیدگی و هزینه‌ی تست

۳۴ Anti-pattern تست غیرعملکردی

  1. Functional pass را Product quality دانستن.
  2. NFR را فقط «چقدر خوب» تعریف‌کردن.
  3. همه‌ی NFRها را Performance دانستن.
  4. Security را فقط یک Test type انتهایی دانستن.
  5. یک Threshold برای همه‌ی کاربران.
  6. Average latency به‌جای Distribution.
  7. Concurrent user بدون Workload model.
  8. Production-like را Production-equivalent دانستن.
  9. Production data را الزامی دانستن.
  10. Tool result را اثبات Attribute دانستن.
  11. ۵۰۰۰ User را خودکار واقع‌بینانه دانستن.
  12. ۴۸ ساعت را اثبات Reliability دانستن.
  13. Stress test را ظرفیت حقیقی نهایی دانستن.
  14. Zero finding را اثبات Security دانستن.
  15. SUS را اثبات Accessibility دانستن.
  16. Automation را پوشش کامل NFR دانستن.
  17. Shift-left را تضمین کاهش هزینه دانستن.
  18. Early test را تضمین پیشگیری از Failure دانستن.
  19. NFR testing را تضمین موفقیت کسب‌وکار دانستن.
  20. نبود NFR test را علت قطعی شکست کسب‌وکار دانستن.
  21. Attributeها را مستقل دانستن.
  22. Maxکردن هم‌زمان همه‌ی Attributeها.
  23. یک Scenario سبز را سبزی Characteristic دانستن.
  24. یک Scenario قرمز را خرابی Architecture دانستن.
  25. نام ISO category را اثبات Compliance دانستن.
  26. Checklist completion را Readiness دانستن.
  27. Telemetry را خودکار Test evidence دانستن.
  28. کپی آزاد Telemetry تولید.
  29. Threshold ساختن با AI.
  30. Risk acceptance با AI.
  31. هر Failure را Block خودکار دانستن.
  32. همه‌سبز را Release approval دانستن.
  33. Unknown را Pass دانستن.
  34. نبود Measurement را نبود Risk دانستن.

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

حوزهکنترل
ContextGoal/Risk/Stakeholder/Segment/Job/Concern/Harm/Decision روشن است؟
ModelQuality model و نسخه فقط Taxonomy است، نه Compliance claim؟
ScenarioSource/Stimulus/Environment/Artifact/Response/Measure کامل است؟
ScopeOperating/Degraded mode، Preconditions، Exclusions و Frequency ثبت است؟
ThresholdSource/Authority/Assumption/Validity/Revisit دارد؟
MeasureDefinition/Unit/Population/Sample/Aggregation/Window/Clock روشن است؟
ValidityWarmup/Missing/Outlier/Calibration/Uncertainty تعریف شده؟
OracleCorrectness و Guardrail کنار Metric هدف‌اند؟
ProfilesWorkload/Environment/Data/Dependency/Instrumentation versioned هستند؟
ExecutionAttempt/Stop/Safety/Reset/Manifest مشخص است؟
Trade-offOption/Hypothesis/Guardrail/Evidence/Authority/Expiry دارد؟
ResultScenario/Build/Runs/Verdict/Unknown/Limit/Evidence متصل‌اند؟
DecisionException/Residual risk/Release authority جدا هستند؟
FreshnessChange trigger/Correction/Affected-decision query وجود دارد؟

Pilot سی‌روزه NFR

بازهکارخروجی/Guardrail
روز ۱–۵یک Goal/Risk و سه Stakeholder Concernبدون Catalogue بی‌مرز
روز ۶–۱۰سه Quality Scenario و Threshold sourceUnknown و Exclusion صریح
روز ۱۱–۱۵Measurement/Evidence ProfilePopulation/Oracle/Safety
روز ۱۶–۲۰سه Run و Result ContractManifest + valid attempts
روز ۲۱–۲۵یک Trade-off/Exception/Correction drillAuthority + expiry
روز ۲۶–۳۰بازبینی Metric و Scale/Adapt/StopCountermetric + claim limits

قالب نهایی NFR Evidence Packet

NFR Evidence Packet
1) Goal/Risk + Stakeholder Concern + Decision need
2) Quality model/version + Scenario ID/version
3) Source/Stimulus/Environment/Artifact/Response/Measure
4) Measurement Contract + threshold source + guardrails
5) Workload/Environment/Data/Dependency/Instrumentation Profiles
6) Evidence question + counterclaim + method/level/attempt plan
7) Build/Run/Attempt identities + Evidence Manifest
8) Result/Verdict + uncertainty/unknowns/limitations
9) Trade-off/Exception/Residual Risk + Authority/expiry
10) Claim limit + Change triggers + Correction path

جمع‌بندی

تست غیرعملکردی با خرید ابزار یا تیک‌زدن چند Category بالغ نمی‌شود. از Concern یک Stakeholder در Context واقعی شروع کنید، آن را به Quality Scenario قابل‌نسخه‌بندی تبدیل کنید، Measure و Threshold را عملیاتی و منبع‌دار بنویسید، Correctness/Guardrail را حفظ کنید، Evidence را میان Levelها تخصیص دهید و Result را به Build/Run/Manifest محدود کنید. Trade-off، Unknown، Exception و Correction بخش خود کیفیت‌اند؛ حذف آن‌ها فقط Dashboard را سبزتر می‌کند.

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

تفاوت تست عملکردی و غیرعملکردی چیست؟

Functional testing معمولاً رفتار/قاعده‌ی مورد انتظار را بررسی می‌کند و Non-functional testing برای Quality Attribute در Context Evidence می‌سازد؛ اما مرز مطلق نیست. یک تست Callback می‌تواند هم Correctness اثر و هم Latency/Reliability را هم‌زمان بسنجد.

چگونه NFR قابل‌آزمایش بنویسیم؟

Stakeholder/Concern را به Source، Stimulus، Environment، Artifact، Response و Response Measure تبدیل کنید؛ سپس Scope، Population، Threshold source، Guardrail، Profileهای اجرا، Oracle، Evidence و Claim limit را نسخه‌دار اضافه کنید.

آیا تست غیرعملکردی همان Performance Testing است؟

خیر. Performance یکی از حوزه‌های کیفیت است. Security، Reliability، Compatibility، Usability/Interaction، Accessibility، Maintainability و دیگر Concernها روش و Measureهای متفاوت دارند. حتی دسته‌بندی باید با مدل و نسخه‌ی انتخاب‌شده Pin شود.

بهترین زمان شروع تست غیرعملکردی چه زمانی است؟

Concern و Scenario را هنگام کشف Goal/Risk شروع کنید؛ Evidence مناسب را در طول چرخه و در Levelهای مختلف بسازید. این به معنای اجرای همه‌ی تست‌های پرهزینه در روز اول نیست. زمان، Fidelity و Cadence باید براساس سؤال، Risk و Feedback budget انتخاب شود.

قبولی همه‌ی NFRها یعنی محصول آماده‌ی انتشار است؟

نه. Resultها فقط Scenarioهای اجراشده را در Build/Environment/Window مشخص پوشش می‌دهند. Coverage gap، Unknown، Freshness، Functional evidence، Benefit، Dependency، Exception و Residual risk نیز در Release Decision دخیل‌اند و Authority آن باید از قبل تعریف شود.

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