ساعت ۱۶:۳۰ است. چهل‌ودو تغییر پشت ستون «منتظر QA» مانده، تنها تستر تیم مرخصی است و Release متوقف شده است. روی داشبورد ماه قبل نوشته‌اند: «۴۲ از ۴۲ تغییر تأیید QA؛ صفر Incident». آیا مشکل کمبود تستر است، ضعف توسعه‌دهنده است یا خودِ سیستم تحویل؟ پاسخ بدون دیدن جریان کار، Controlها، اختیار تصمیم و Backup قابل‌اعتماد نیست.

این راهنما مسئلهٔ تستر به‌عنوان تنها شبکه ایمنی را از بحث شعاری «کیفیت مسئولیت همه است» به یک طراحی قابل‌ممیزی تبدیل می‌کند: Protection Control Map برای Prevention، Detection، Containment، Recovery و Learning؛ همراه با Handoff Contract، Queue Policy، سطح استقلال، Evidence و Correction. هدف حذف تستر یا حذف تست مستقل نیست؛ هدف حذف وابستگی پنهان به یک فرد، صف یا Approval مبهم است.

خلاصه اجرایی: شبکه ایمنی واقعی یک سیستم است، نه یک نفر

  • اگر همهٔ تغییرها فقط در انتهای کار به یک صف QA می‌رسند، سازمان یک Control مستقل ندارد؛ یک نقطهٔ وابستگی ساخته است.
  • مسئولیت مشترک کیفیت یعنی مشارکت قابلیت‌های مختلف با Owner و Decision Right روشن؛ نه اینکه «همه مسئول‌اند» و در عمل هیچ‌کس پاسخ‌گو نباشد.
  • تست مستقل می‌تواند ارزشمند و در بعضی Contextها ضروری باشد. استقلال با جداسازی اطلاعات، تأخیر یا خصومت یکی نیست.
  • Shift-left یعنی Feedback را در اولین نقطهٔ توانمند قرار دهید؛ نه اینکه همهٔ تست‌ها، همهٔ تسترها یا تمام Approvalها را به ابتدای جریان منتقل کنید.
  • Controlها باید پنج نیاز را پوشش دهند: پیشگیری، کشف، مهار، بازیابی و یادگیری. Automation یا QA Approval فقط بخشی از این نقشه‌اند.
  • هر Handoff باید ورودی، Readiness، Accept/Reject، Return reason، Resume condition، WIP، Service target و Escalation داشته باشد.
  • بهبود را با کاهش انتظار و Unknown، حفظ استقلال و Evidence و نبودِ Single Point of Failure بسنجید؛ نه صرفاً سرعت یا صفر Incident.

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

کاربر معمولاً می‌پرسد: «چرا QA گلوگاه شده؟»، «آیا کیفیت مسئولیت تستر است؟»، «چطور وابستگی تیم به تستر را کم کنیم؟»، «Shared Quality یعنی چه؟» و «آیا Shift-left تست مستقل را حذف می‌کند؟». Intent اطلاعاتی و اجرایی است؛ بنابراین خروجی این صفحه یک مدل تشخیص و قرارداد پیاده‌سازی است، نه توصیهٔ کلی برای تغییر فرهنگ.

فرهنگ کیفیت در نرم‌افزار مالک رفتار، Incentive و Learning system است؛ رهبری QA و مالکیت همگانی Decision Right و پاسخ‌گویی را پوشش می‌دهد؛ نقش تستر در Shift-left مالک Quality Interface زودهنگام است؛ و همکاری تستر و توسعه‌دهنده Request و Joint Evidence را توضیح می‌دهد. این مقاله فقط مالک وابستگی Safety-net و توزیع Control در سراسر Flow است.

«تستر شبکه ایمنی» دقیقاً چه مسئله‌ای است؟

شبکهٔ ایمنی استعاره‌ای برای آخرین Catch-all است: Work بدون Evidence کافی حرکت می‌کند و انتظار می‌رود یک Tester یا تیم QA در انتها همهٔ نقص‌های مهم را پیدا، تفسیر و متوقف کند. سه نشانهٔ اصلی آن عبارت‌اند از Concentration، Ambiguity و Late feedback:

نشانهمشاهدهٔ عملیریسک
Concentrationیک فرد/صف همهٔ Checkها و Approvalها را انجام می‌دهدSingle point of failure و صف
Ambiguity«بده QA تست کند» بدون Question، Scope و Evidenceانتظار نامحدود و اختلاف Verdict
Late feedbackابهام Basis یا Contract پس از Build کشف می‌شودRework و Feedback age بیشتر
Authority mismatchتستر باید Release را تأیید کند ولی اختیار Risk نداردApproval نمایشی یا فشار غیرایمن
Capability gapControl فقط با دانش یا Tool یک نفر اجرا می‌شودتعطیلی در غیبت و Bus factor پایین

چه چیزی Safety-net Dependency نیست؟

  • وجود Tester متخصص یا تیم مستقل به‌خودی‌خود مشکل نیست.
  • Handoff نسخه‌دار برای حفظ استقلال، جداسازی وظایف یا کنترل Safety می‌تواند عمدی و مفید باشد.
  • توقف Release به‌علت Evidence معتبرِ FAIL یک Bottleneck ناسالم نیست؛ ممکن است Control درست کار کند.
  • نیاز به دانش تخصصی Accessibility، Security، Performance یا Domain الزاماً «Silo» نیست؛ نبود Interface و Backup مسئله است.
  • تأخیر کوتاه و هدفمند برای Representative environment می‌تواند از Feedback سریع اما نامعتبر بهتر باشد.

Shared Quality یعنی چه و یعنی چه نیست؟

Shared Quality یعنی افراد مختلف در Outcome کیفیت اثر دارند و Control مناسب را در نقطهٔ توانمند اجرا می‌کنند. این عبارت Owner را حذف نمی‌کند. هر سؤال باید Producer، Executor، Reviewer، Decision authority و Escalation داشته باشد. «همه مسئول کیفیت‌اند» بدون این پنج نقش، معمولاً مسئولیت را پخش و پاسخ‌گویی را محو می‌کند.

قابلیتسهم نمونهادعای نامجاز
Product/BusinessOutcome، Constraint، acceptance و Risk authorityمالک همهٔ Testهاست
DevelopmentDesignability، component evidence، observability و repairفقط کد می‌نویسد
TestingQuestion، مدل، investigation، independent challenge و Evidenceهمهٔ نقص‌ها را پیدا می‌کند
Platform/OperationsPipeline، environment، telemetry، containment و recoveryفقط Deploy می‌کند
Risk/Security/DomainPolicy، specialized review و acceptance authorityQA Approval را جایگزین می‌کند

منابع رسمی چه می‌گویند؟ Whole-team و استقلال با هم

ISTQB CTFL 4.0.1 در Whole-team approach می‌گوید هر عضو دارای دانش و مهارت لازم می‌تواند Task را انجام دهد و همه نسبت به کیفیت مسئول‌اند؛ هم‌زمان توضیح می‌دهد این رویکرد همیشه مناسب نیست و در Contextهایی مانند Safety-critical ممکن است استقلال بالاتر لازم باشد. همچنین چند سطح استقلال را مکمل می‌داند: نویسنده، Peer، Tester خارج از تیم و طرف بیرونی. پس «Shared» مترادف «بدون استقلال» نیست.

Scrum Guide 2020 Scrum Team را cross-functional و مسئول فعالیت‌های مرتبط با محصول، از verification تا operation، معرفی می‌کند؛ Developers نیز برای instilling quality از طریق Definition of Done پاسخ‌گو هستند. این متن نقش اجباری Tester، Approval نهایی QA یا حضور Tester در همهٔ Eventها تجویز نمی‌کند. برای کاربرد DoD، راهنمای Definition of Done و Increment Evidence را ببینید.

Protection System: جایگزین یک Catch-all مبهم

Protection System مجموعهٔ Controlهای نسخه‌دار در سراسر جریان است که یک Protection objective را دنبال می‌کنند. هیچ لایه‌ای کامل نیست و Controlهای بیشتر الزاماً بهتر نیستند. نقشه باید نشان دهد هر Control چه چیزی را Prevent، Detect، Contain، Recover یا به Learning تبدیل می‌کند و کدام Unknown بیرون می‌ماند.

Modeسؤالمثال محدود
PREVENTچطور احتمال ایجاد خطای مشخص را کم کنیم؟Type/constraint، design rule، example refinement
DETECTچطور Failure/Risk signal را ببینیم؟review، static check، test، probe، monitoring
CONTAINچطور blast radius را محدود کنیم؟feature flag، limit، isolation، circuit breaker
RECOVERچطور حالت درست را بازگردانیم؟rollback، replay، reconciliation، restore
LEARNچطور مدل و Control را اصلاح کنیم؟incident review، escaped-risk analysis، experiment

Protection Control Map: قرارداد مرکزی

protectionControlMap:
  id: PCM-CHECKOUT-25
  version: 4
  purpose: "کاهش وابستگی به Catch-all انتهای Flow"
  decision: "انتخاب Control/Backup و Pilot؛ نه Release verdict"
  scope: checkout-change-flow@CUT-25
  objective: "حفظ idempotency و recoverability در جریان مصنوعی"
  claimLimit: "ساختار Control؛ نه کیفیت یا نبود نقص"
  controls:
    - id: CTRL-PREVENT-25
      mode: PREVENT
      flowPoint: design
    - id: CTRL-DETECT-25
      mode: DETECT
      flowPoint: component-and-contract-run
    - id: CTRL-CONTAIN-25
      mode: CONTAIN
      flowPoint: deployment
    - id: CTRL-RECOVER-25
      mode: RECOVER
      flowPoint: operation
    - id: CTRL-LEARN-25
      mode: LEARN
      flowPoint: feedback-loop
  owner: protection-system-owner
  unknowns: [real-psp-behavior]
  status: READY_FOR_PROTECTION_SYSTEM_REVIEW

فیلدهای هر Control

بخشفیلدهاسؤال ممیزی
IdentityID/version، Risk، Question، ObjectiveControl برای چه مشکلی است؟
PlacementMode، Flow point، Trigger، Subjectدر اولین نقطهٔ توانمند اجرا می‌شود؟
ExecutionMethod، Producer/Executor capability، Toolچه کسی با چه قابلیت و روشی اجرا می‌کند؟
AuthorityDecision right، Reviewer، Independenceچه کسی چه تصمیمی مجاز است بگیرد؟
ContinuityBackup capability، Capacity، Access، Supportغیبت یک فرد Flow را متوقف می‌کند؟
EvidenceRule، Freshness، Vocabulary، Failure outcomeVerdict به Subject همان Work متصل است؟
FlowService target، Escalation، Queue/WIPانتظار و Backpressure قابل‌مشاهده‌اند؟
LearningMeasure، Countermeasure، Cost، LifecycleControl مفید است یا فقط Ceremony؟

قالب آماده Control Record

control:
  id: CTRL-DETECT-25
  version: 3
  riskId: RISK-IDEMP-7
  qualityQuestion: "Callback تکراری Ledger را دوبار تغییر می‌دهد؟"
  objective: "کشف نقض idempotency در BUILD-SYN-25"
  mode: DETECT
  flowPoint: component-contract
  trigger: change-touches-callback-or-ledger
  subject: checkout-api@C25/BUILD-SYN-25
  method: idempotency-contract-suite/v6
  producerCapability: development
  executorCapability: contract-testing
  reviewerCapability: independent-test-analysis
  decisionAuthority: risk-owner
  backupCapability: cross-capability-reviewer
  independenceLevel: peer-plus-specialist
  evidenceRule: same-build-signed-manifest
  freshnessRule: current-change-only
  resultVocabulary: [PASS, FAIL, ERROR, INCONCLUSIVE]
  failureOutcome: return-with-finding-and-resume-rule
  serviceTarget: 2h
  lifecycleStatus: PILOT

Control Coverage با Test Coverage یکی نیست

Control Coverage یعنی آیا Protection objectiveهای ثبت‌شده حداقل Control معتبر در Mode و نقطهٔ لازم دارند؛ نه اینکه چند خط کد اجرا شده است. یک Risk ممکن است Detection خوب ولی Containment و Recovery نداشته باشد. درصد کلی می‌تواند این شکاف را پنهان کند؛ پس Critical objectiveها را به‌صورت hard constraint نگه دارید.

ObjectivePreventDetectContainRecoverLearn
Duplicate callbackidempotency contractstateful checkunique keyreconcileescape review
Money display mismatchcanonical IRR typeformat examplesdisplay-only boundarycorrect presentationmodel update
Collector unavailablepinned confighealth checkdo not publish stale PASSrerunincident correction

Handoff همیشه اتلاف نیست؛ Handoff مبهم اتلاف می‌سازد

یک Handoff می‌تواند استقلال شناختی، جداسازی وظیفه، دسترسی تخصصی یا نمایندگی Stakeholder را حفظ کند. حذف مکانیکی آن ممکن است Evidence را ضعیف کند. مسئله وقتی شروع می‌شود که Work با پیام «لطفاً QA کنید» وارد صف شود و Scope، Build، Risk، Readiness، موعد و Rule بازگشت معلوم نباشد.

Handoff Contract: قالب آماده

handoff:
  id: HO-CHECKOUT-25
  version: 2
  fromCapability: development
  toCapability: independent-test-analysis
  workItemId: CHANGE-25
  subjectId: BUILD-SYN-25
  requiredInputs:
    - risk-delta/RD-25
    - change-manifest/CM-25
    - component-evidence/CE-25
    - environment/ENV-SYN-25
  readinessRule: all-inputs-valid-and-same-build
  acceptRule: scope-capacity-access-confirmed
  rejectRule: missing-or-foreign-evidence
  returnReason: structured-finding-only
  resumeCondition: corrected-build-plus-targeted-evidence
  queueId: Q-INDEP-TEST
  wipLimit: 3
  serviceTarget: 4h
  feedbackChannel: work-item-thread
  escalation: capability-owner-after-2h-risk
  status: ACCEPTED

Readiness؛ QA نباید بستهٔ ناشناخته را Reverse-engineer کند

  • Work item و تغییر قابل‌ردیابی‌اند.
  • Subject، Commit، Build، Artifact و Environment یکسان‌اند.
  • Risk delta و Quality question نوشته شده‌اند.
  • Evidence قبلی و Unknownها ضمیمه‌اند.
  • Data، access، Tool و Cleanup آماده‌اند.
  • Scope، Not-in-scope، موعد و Decision consumer مشخص‌اند.

Readiness یک Gate برای پنهان‌کردن کار نیست. اگر Input ناقص است، Return reason باید ساختاری و Resume condition روشن باشد. تکرار Returnها یک Signal دربارهٔ Interface یا Capability است، نه بهانه‌ای برای سرزنش Producer.

Result Vocabulary؛ «QA Approved» چه چیزی را پنهان می‌کند؟

ResultمعناOutcome نمونه
PASSQuestion محدود طبق Evidence پاسخ موافق گرفتهمصرف در Decision؛ نه تضمین
FAIL_PRODUCTرفتار Subject با Oracle ناسازگار استFinding و repair
FAIL_TESTWAREروش/Oracle/Check معیوب استتعمیر Testware و rerun
ERROR_ENVEnvironment مانع Observation معتبر استrepair environment
BLOCKED_INPUTورودی یا Access حاضر نیستReturn با resume condition
INCONCLUSIVEEvidence برای Verdict کافی نیستUnknown و follow-up
NOT_APPLICABLETrigger برای این Change صدق نمی‌کندrationale ثبت شود

Approval کلی، Failure attribution و محدودیت Evidence را پاک می‌کند. QA ممکن است Evidence تولید یا Challenge کند، اما تصمیم Release باید در مدل اختیار سازمان و با Risk/Evidenceهای لازم باشد. گزارش تست و تصمیم انتشار این مرز را عملی می‌کند.

صف QA را قبل از افزایش نفر تشخیص دهید

صف می‌تواند از Demand بیشتر از Capacity، Batch بزرگ، ورودی ناقص، اولویت مبهم، Environment مشترک، rerun، انتظار تصمیم یا تخصص تک‌نفره ساخته شود. افزودن Tester فقط یکی از گزینه‌هاست و اگر علت Work arrival یا Rework باشد، صف دوباره رشد می‌کند.

Signalتعریف لازمپرسش
Arrival rateWork item واجد Readiness در windowتقاضا چه الگوی زمانی دارد؟
ThroughputWork item با Outcome معتبر در windowخروجی واقعی چقدر است؟
Queue ageاکنون منهای readyAtکدام Item پیر شده؟
Wait timeacceptedAt منهای readyAtقبل از شروع چقدر منتظر است؟
Service timefinishedAt منهای acceptedAt با policy pauseاجرای قابلیت چقدر زمان می‌برد؟
Return rateReturned/accepted با reasonInterface مشکل دارد؟
Blocked ageزمان در stateهای Blockedوابستگی بیرونی کجاست؟
Demand mixRisk/type/size/urgencyمیانگین، کار پیچیده را پنهان کرده؟

Little’s Law را فقط با تعریف پایدار استفاده کنید

Average WIP ≈ Average Throughput × Average Flow Time

این رابطه برای مشاهدهٔ یک سیستم نسبتاً پایدار مفید است؛ نسخهٔ جادویی برای پیش‌بینی نیست. Entry/Exit boundary، window، rework، cancellation، priority class و pause policy باید ثابت باشند. در Burst، Expedite یا تغییر ظرفیت، Median و percentile و نمودار Age از یک میانگین تنها مفیدترند.

Single Point of Failure را در Capability پیدا کنید، نه در عنوان شغلی

ممکن است سه Tester داشته باشید اما فقط یک نفر Certificate، Access، Domain model یا توان Repair داشته باشد. Backup با «یک نفر دیگر هم هست» ثابت نمی‌شود؛ باید Trial نماینده و recoverable انجام شود و Evidence نشان دهد Capability دوم می‌تواند Control را در Service target اجرا و Failure را Escalate کند.

وابستگیآزمون Continuityراه‌حل نمونه
دانش DomainBackup یک Question را مستقل تحلیل کندmodel + pairing + review
Accessدسترسی زمان‌دار در Sandboxrole-based access و expiry
Tool/FrameworkBackup یک Run و repair امن انجام دهدrunbook + restore
DecisionEscalation در غیبت Owner تمرین شودdelegation policy
EnvironmentNamespace دوم provision شودIaC/lease/cleanup

Independence Contract؛ استقلال را درجه‌بندی کنید

سطحنمونهمزیتمحدودیت
SelfAuthor component checkFeedback سریع و Context بالاBias مشترک
Peerهم‌تیمی غیرنویسندهنگاه دوم با Contextمدل مشترک
Specialist in product teamTester/Domain/Security capabilityChallenge تخصصیممکن است Authority مبهم باشد
Organizational independentتیم جدا با charterاستقلال بیشترFeedback و Handoff cost
Externalطرف مستقل در Scope لازماستقلال بالاهزینه و Context کمتر

سطح را از Risk، Policy و نوع Bias انتخاب کنید؛ نه از مد سازمانی. چند سطح می‌توانند مکمل باشند. استقلال نباید دسترسی به Basis، گفتگو یا Evidence را قطع کند و Whole-team نیز نباید Challenge مستقل را حذف کند.

Shift-left؛ انتقال سؤال، نه انتقال همهٔ کارها

برای هر Quality question، «earliest capable point» را پیدا کنید. ابهام واحد پول در مثال و Type بهتر از E2E دیده می‌شود؛ رفتار واقعی مرورگر یا بازیابی پس از Failure ممکن است به نقطهٔ نماینده‌تر در سمت راست نیاز داشته باشد. Shift-left و Shift-right مکمل‌اند. ادغام این Signalها در یک Loop در راهنمای تست در SDLC آمده است.

QuestionEarliest capableLater representative
فرمول feeexample/property/componentledger reconciliation
API contractschema/consumer contractdeployed integration
RTL renderingcomponent visualbrowser/device matrix
recoverystate modelfault injection/restore drill
user outcomeexample/journey hypothesisrepresentative observation

Automation یک Control است، نه انتقال مسئولیت

CI می‌تواند Check را اجرا و Evidence بسازد؛ اما Question، Oracle، candidate، maintenance، failure attribution و retirement همچنان Owner می‌خواهند. Pipeline سبز همهٔ نقص‌های جدید را دفع نمی‌کند. برای Lifecycle کامل، راهنمای اتوماسیون تست از Check تا Evidence و Retirement را بخوانید.

RACI کافی نیست؛ Decision Rights را بنویسید

RACI می‌تواند مشارکت را نشان دهد، ولی اگر نوع تصمیم روشن نباشد، حرف A یا R مبهم می‌ماند. فرق دارد چه کسی Method را انتخاب می‌کند، چه کسی Evidence را معتبر می‌داند، چه کسی Risk را می‌پذیرد، چه کسی Deployment را اجرا می‌کند و چه کسی Incident را اعلام می‌کند.

تصمیمAuthority نمونهورودی لازم
Control designcapability owner با Risk inputQuestion، constraint، cost
Evidence verdictExecutor/Reviewer طبق chartersame-subject manifest
Risk acceptanceRisk owner مجازimpact، alternatives، expiry
Release decisionRelease authorityچند Evidence و Unknown
Emergency containmentincident authoritytrigger و rollback boundary

Evidence Manifest برای هر Control

evidenceManifest:
  id: EVID-CTRL-25
  subjectId: checkout-api@C25
  buildId: BUILD-SYN-25
  changeId: CHANGE-25
  controlId: CTRL-DETECT-25
  methodVersion: idempotency-contract-suite/v6
  artifact: artifacts/RUN-25/result.json
  digest: sha256:...
  startedAt: 2026-08-13T08:12:00Z
  finishedAt: 2026-08-13T08:15:00Z
  producer: pipeline/SYN-25
  reviewer: independent-reviewer
  unknowns: [real-psp-reordering]
  redaction: synthetic-only
  retention: 90d

Exception؛ وقتی Control فعلاً قابل‌اجرا نیست

Exception مجوز دائمی عبور نیست. باید Risk، دلیل، Scope، compensating control، Authority، effective time، expiry، affected changes و revalidation داشته باشد. نبود ظرفیت QA به‌تنهایی دلیل پذیرش کیفیت نیست؛ یک Constraint است که صاحب تصمیم باید آن را همراه با گزینه‌ها ببیند.

exception:
  id: EX-CTRL-25
  controlId: CTRL-DETECT-25
  reason: "sandbox unavailable"
  affectedSubject: BUILD-SYN-25
  compensatingControl: limit-feature-flag-plus-reconcile
  riskOwner: authorized-risk-owner
  effectiveFrom: 2026-08-13T08:00:00Z
  expiresAt: 2026-08-13T14:00:00Z
  revalidation: run-control-after-sandbox-restore
  status: ACTIVE

Correction؛ اگر QA Approval به Build اشتباه وصل شد

correction:
  id: CORR-CTRL-25
  detectedAt: 2026-08-13T10:00:00Z
  cause: "EVID-24 برای BUILD-SYN-25 مصرف شده بود"
  invalidEvidence: EVID-24
  affectedDecisions: [REVIEW-25, RELEASE-CANDIDATE-25]
  containment: "Approval INVALID و downstream متوقف"
  revalidation: RUN-25R1
  correctedResult: INCONCLUSIVE
  republishStatus: COMPLETE
  notified: [evidence-owner, decision-owner]
  prevention: build-digest-equality-rule
  status: CLOSED

Correction فقط اصلاح تیک روی Board نیست. هر تصمیم مصرف‌کننده باید پیدا، وضعیت قبلی باطل، Evidence جدید تولید و نتیجه بازنشر شود. اگر هیچ‌کس نمی‌داند QA Approval کجا مصرف شده، Approval یک Control قابل‌حسابرسی نیست.

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

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

بعدطراحی مصنوعیControl question
MoneyIRR خیالی canonical؛ تومان فقط نمایشی و برچسب‌دارنوع/تبدیل/ledger کجا Prevent و Detect می‌شود؟
Digitsفارسی، عربی و لاتینparsing در کدام Layer Evidence دارد؟
Unicode/RTLNFC، RTL/LTR و stable IDContract و Browser observation چگونه مکمل‌اند؟
TimeUTC، Asia/Tehran و جلالی صرفاً نمایشیCutoff و display از هم جدا هستند؟
Stateduplicate/late/reordered callbackPrevention، detection، containment و recovery موجودند؟
IdentityTenant/Order/Attempt/Event/Ledger/Run/Build/Evidence جداEvidence به Subject همان Build وصل است؟

هیچ نام، موبایل، ایمیل، IP، حساب، PAN، CVV2، OTP، Cookie، Token، Credential، Screenshot یا Log واقعی استفاده نشده است. این Lab هیچ ادعای بانکی، مالی، حقوقی، مالیاتی، امنیتی، حریم خصوصی یا انطباق دربارهٔ ایران ندارد.

آزمایش اجرایی SYN-QUALITY-SAFETY-NET-DEPENDENCY-۰۱

یک Validator مستقل، قطعی و بدون dependency با Node.js v26.۷.۰ اجرا شد. Dashboard سطحی ۴۲/۴۲ تغییر با QA Approval، صفر Incident و میانهٔ انتظار شش ساعت داشت و PASS می‌داد. Validator قرارداد را با ۱۴۷ قاعده ارزیابی کرد.

گروهتعداد قاعدهنمونه
Identity۱۸Product، Risk، Strategy، DoD، Commit، Build، Change
Model۱۵Purpose، Decision، Scope، Objective، Claim limit، Unknown
Control۲۸Mode، Trigger، Capability، Authority، Backup، Evidence، Capacity
Handoff۲۰Inputs، Readiness، Accept/Reject، Queue، WIP، times، Escalation
Evidence۱۵Subject/Build/Control binding، Artifact/digest، time، retention
Governance۱۸Rights، independence، continuity، baseline، guardrail، Correction
ادعاهای ممنوع۲۷QA=quality/release، نقش اجباری، تضمین، حذف استقلال/تست دیرهنگام
روابط بین‌فیلدی۶پنج Mode، Backup، same-Build، service target، resume، authority

نسخهٔ سطحی با ۱۴۶ Finding به HOLD رفت: همهٔ ۱۱۴ فیلد قرارداد غایب، هر ۲۷ ادعای مطلق فعال و پنج رابطهٔ بین‌فیلدی نقض شده بود. رابطهٔ ششم عمداً Finding نداد، چون Rule مخصوص Work با وضعیت RETURNED بود و رکورد سطحی اصلاً وضعیت RETURNED نداشت؛ شمارش برای رسیدن به عدد زیباتر دست‌کاری نشد.

fixture: SYN-QUALITY-SAFETY-NET-DEPENDENCY-01
rules: 147

superficial dashboard:
  qaApproved: 42/42
  productionIncidents: 0
  medianQaWaitHours: 6
  dashboardVerdict: PASS
  contractStatus: HOLD
  findings: 146

corrected system:
  controls: PREVENT + DETECT + CONTAIN + RECOVER + LEARN
  build: BUILD-SYN-25
  executorCapability: explicit
  backupCapability: exercised
  decisionAuthority: governed
  handoffStatus: ACCEPTED
  structuralFindings: 0
  status: READY_FOR_PROTECTION_SYSTEM_REVIEW

در نسخهٔ اصلاح‌شده، هویت‌ها Pin، Protection objective و Claim limit تعریف، پنج Mode با مجری/Backup و Evidence همان Build ساخته، Handoff و Decision right کامل و Correction فعال شد. خروجی با صفر Finding به `READY_FOR_PROTECTION_SYSTEM_REVIEW` رسید؛ عمداً نه صدق Method/Evidence، نه کامل‌بودن Controlها، نه نبود نقص یا Incident، نه Product quality، نه سرعت بهتر و نه آمادگی Release را اثبات می‌کند.

چه چیزی را توزیع کنیم و چه چیزی را مستقل نگه داریم؟

قابلیتقابل‌توزیع نمونهاستقلال محتمل
Example refinementProduct، Dev، Test مشترکChallenge مستقل در Risk بالا
Component checksنزدیک Author با Peer reviewSample مستقل
System investigationTester/Domain capabilityReviewer غیرنویسنده
Security/Safety evidenceابزار/تیم‌های مختلفطبق Policy و Context
Risk acceptanceاطلاعات مشترکAuthority مستقل از Evidence producer
Release executionPlatform automationSeparation of duties در صورت نیاز

نقش Tester را از عنوان ثابت به Capability تبدیل کنید

Tester می‌تواند Test design، Investigation، Risk analysis، Automation، facilitation یا independent challenge انجام دهد؛ اما هیچ مسیر جهانی وجود ندارد که هر Tester باید Coach، Automation specialist یا «صدای کاربر» شود. Role charter باید با Work demand، مهارت، علاقه، اختیار، حمایت و استقلال متناسب باشد. کاربر واقعی و نمایندهٔ کسب‌وکار نیز قابل‌جایگزینی با حدس Tester نیستند.

توانمندسازی بدون انتقال کار نامرئی

  • Teaching، Pairing و Review را Work ظرفیت‌دار و جبران‌شده حساب کنید.
  • انتقال Capability باید Practice امن، Feedback و Trial داشته باشد؛ نه فقط سند.
  • تستر نباید علاوه بر صف قبلی، مسئول آموزش همه و نگهداشت همهٔ Toolها شود.
  • توسعه‌دهنده نیز نباید بدون زمان، Access و پشتیبانی مالک Control تازه اعلام شود.
  • Accessibility، timezone، زبان، remote work و accommodation را در طراحی Support لحاظ کنید.

شاخص‌های سیستم؛ نه KPI برای رتبه‌بندی آدم‌ها

MeasureCountermeasureمحدودیت
Queue age percentileRisk/demand mixسرعت به‌تنهایی کیفیت نیست
Ready-first-time rateQuestion complexityReject کمتر همیشه بهتر نیست
Feedback ageEvidence validityFeedback سریعِ غلط مضر است
Control-mode gapsControl cost/maintenanceControl بیشتر همیشه بهتر نیست
Backup trial coverageindependence levelCross-training استقلال را حذف نکند
Return/rework rateescaped-risk sampleکاهش Return با Approval سطحی ممکن است
Exception agecompensating evidenceExpiry بدون Risk review کافی نیست
Correction closureaffected-decision completenessClose اداری با repair فرق دارد

Automation و AI در توزیع Control

Automation می‌تواند Routing، Readiness validation، Evidence binding، queue age، escalation و backup notification را اجرا کند. AI می‌تواند Work را خوشه‌بندی، Control gap یا Return reason پیشنهادی تولید و Runbook را بازیابی کند؛ اما نباید به‌تنهایی PASS، Exclusion، Risk acceptance، independence waiver، performance evaluation یا Release را تصویب کند.

  • Prompt، مدل، Policy و Sourceهای مجاز نسخه‌دار باشند.
  • دادهٔ Production، شخصی یا Credential وارد ابزار تأییدنشده نشود.
  • Confidence و Unknown نمایش و Human reviewer ثبت شود.
  • حق اعتراض و مسیر دستی برای Work routing و ارزیابی حفظ شود.
  • AI output Evidence محسوب نشود مگر با Method و validation مستقل.

۳۲ ضدالگوی شبکه ایمنی QA

ضدالگوخطراصلاح
QA مالک همهٔ کیفیتAuthority نامتناسبControl/decision map
Dev فقط کد می‌نویسدFeedback دیرcapability contribution
QA همهٔ Bugها را می‌یابدExpectation ناممکنbounded claim
QA Approved=کیفیتEvidence مبهمquestion/result manifest
QA Approved=Releaseاختلاط Authorityrelease decision model
صفر Incident=صفر Riskabsence-of-evidenceexposure/unknown
Waterfall همیشه جداستکاریکاتور فرآیندflow evidence
Agile استقلال را حذف می‌کندChallenge ضعیفcontextual independence
Shift-left=همه‌چیز زودترFidelity پایینearliest capable + representative
تست دیرهنگام حذف شودRisk نماینده دیده نمی‌شودshift-right complement
Prevention=بدون Defectتضمین کاذبdetect/contain/recover
CI همهٔ Regressionها را می‌گیردOracle/coverage gapclaim limit
Unit test فقط کار Devتقسیم عنوانیcapability/context
Tester در همهٔ جلسه‌هابار و حضور نمایشیQuestion-triggered interface
هر Tester باید Coach شودمسیر اجباریrole charter/consent
هر Tester متخصص Automationنادیده‌گرفتن Work demandportfolio of capabilities
Tester بهترین نمایندهٔ کاربرجانشینی Stakeholderreal representation
Automation جای Manualدوگانهٔ کاذبquestion/method fit
Shared=بدون Ownerپاسخ‌گویی محوexplicit authority
Independence=IsolationContext قطعaccess + cognitive independence
هر Handoff اتلاف استحذف separationhandoff contract
«لطفاً QA کنید»Scope نامحدودquestion/readiness
Approval بدون BuildEvidence foreignsubject digest
صف با نفر حل می‌شودعلت پنهانdemand/rework diagnosis
Average wait تنهاTail پنهانage percentile/mix
Backup روی کاغذContinuity کاذبrepresentative trial
Access دائمی برای Backupریسک دسترسیtime-bound role
Control بیشتر=کیفیت بیشترهزینه و تضادobjective/cost review
سرعت بیشتر=کیفیت بهترGoodhartguardrail/evidence
Exception بدون Expiryدورزدن دائمیowner/revalidation
AI تصمیم‌گیر Riskواگذاری Authorityhuman accountable review
اصلاح تیک بدون Impactتصمیم آلودهaffected-decision correction

چک‌لیست ممیزی Protection System

  1. Program/Product/Goal/Risk/Strategy/Policy نسخه‌دارند؟
  2. Repository، Commit، Build، Deployment، Environment و Change قفل‌اند؟
  3. Model ID/version، Purpose، Decision و Scope روشن‌اند؟
  4. Protection objective و Claim limit نوشته شده‌اند؟
  5. هر Risk/Question به Control مشخص وصل است؟
  6. PREVENT، DETECT، CONTAIN، RECOVER و LEARN بررسی شده‌اند؟
  7. Mode و Flow point هر Control قابل‌دفاع است؟
  8. Trigger و Subject دقیق‌اند؟
  9. Method/Tool/version معلوم‌اند؟
  10. Producer، Executor و Reviewer capability روشن‌اند؟
  11. Decision authority با Governance سازگار است؟
  12. Independence level از Risk انتخاب شده است؟
  13. Backup capability در Trial آزموده شده است؟
  14. Access، Capacity و Support تعریف شده‌اند؟
  15. Evidence rule و Freshness همان Build را الزام می‌کنند؟
  16. Result vocabulary و Failure outcome تشخیصی‌اند؟
  17. Handoff ورودی و Readiness rule دارد؟
  18. Accept/Reject و Return reason استانداردند؟
  19. Resume condition برای Returned Work وجود دارد؟
  20. Queue، WIP، arrival/accepted/due times ثبت می‌شوند؟
  21. Service target و Escalation Risk-aware هستند؟
  22. Manifest Artifact/digest/time/producer/reviewer دارد؟
  23. Unknown، redaction و retention ثبت‌اند؟
  24. RACI با Decision rights تکمیل شده است؟
  25. Separation of duties و minimum independence حفظ‌اند؟
  26. Exception Owner/Expiry/compensating Control دارد؟
  27. Baseline، Measure، Countermeasure و Cost guardrail دارید؟
  28. Correction affected decisions و revalidation را پوشش می‌دهد؟
  29. Measureها برای رتبه‌بندی افراد استفاده نمی‌شوند؟
  30. AI اختیار Approval، Risk یا Release ندارد؟

برنامه ۳۰ روزه برای حذف وابستگی تک‌نقطه‌ای

بازهکارخروجی
روز ۱–۵یک Flow/Protection objective و دادهٔ صف را Baseline کنیدCurrent-state map و Unknown
روز ۶–۱۰Controlها، Mode، Authority و Handoffها را ثبت کنیدControl Map v1
روز ۱۱–۱۵یک Missing mode و یک ambiguous handoff را اصلاح کنیدContract و Evidence rule
روز ۱۶–۲۰Backup Trial و independence review انجام دهیدContinuity evidence
روز ۲۱–۲۵Queue/WIP/service target و Correction drill اجرا کنیدFlow signal و affected-decision path
روز ۲۶–۳۰Pilot را با Guardrail بازبینی کنیدKeep/Adapt/Stop و Backlog محدود

Pilot را با «QA دیگر گلوگاه نیست» اعلام نکنید. بررسی کنید آیا Feedback معتبر زودتر شد، Tail صف و Return علت‌دار کم شد، Backup بدون حذف استقلال کار کرد، Unknown دیده شد و هیچ Control حیاتی بی‌Owner نماند. کاهش زمان همراه با Evidence ضعیف شکست است.

جمع‌بندی: تستر را حذف نکنید؛ وابستگی مبهم را طراحی کنید

مشکل «تستر به‌عنوان شبکه ایمنی» وجود تخصص تست نیست؛ این است که سازمان تمام Protection را به یک Catch-all دیرهنگام، بدون Contract، ظرفیت، Backup یا اختیار روشن سپرده باشد. پاسخ نیز شعار، Automation کامل یا انتقال همهٔ کارها به Developer نیست. Protection Control Map نشان می‌دهد کجا باید Prevent، Detect، Contain، Recover و Learn کرد؛ Handoff Contract استقلال را بدون صف مبهم حفظ می‌کند؛ و Evidence/Correction اجازه می‌دهد تصمیم‌ها بازبینی و اصلاح شوند.


سوالات متداول درباره تستر به‌عنوان شبکه ایمنی

آیا کیفیت فقط مسئولیت تیم QA است؟

خیر. قابلیت‌های Product، Development، Testing، Platform و Risk در کیفیت اثر دارند. اما Shared responsibility به معنی بی‌مالک‌بودن نیست؛ هر Control باید Executor، Reviewer، Decision authority، Backup و Escalation روشن داشته باشد.

آیا Whole-team approach تست مستقل را حذف می‌کند؟

خیر. سطح استقلال به Context و Risk بستگی دارد. Self-test، Peer، Specialist، تیم مستقل و طرف بیرونی می‌توانند مکمل باشند. Whole-team همکاری و دسترسی را تقویت می‌کند؛ Independence تفاوت دید و جداسازی لازم را حفظ می‌کند.

چطور بفهمیم QA واقعاً گلوگاه است؟

Arrival، Throughput، Queue age percentile، Wait، Service time، Blocked age، Return reason و Demand mix را با مرز ثابت اندازه بگیرید. سپس علت را میان ظرفیت، Batch، ورودی ناقص، Environment، Rework، Authority و تخصص تک‌نفره تفکیک کنید.

آیا Shift-left یعنی همه تست‌ها را زودتر انجام دهیم؟

خیر. هر Quality question را در اولین نقطهٔ واقعاً توانمند بررسی کنید و Evidence نماینده‌تر را در نقطهٔ لازم نگه دارید. سؤال فرمول را می‌توان زود دید؛ رفتار مرورگر، یکپارچگی یا Recovery ممکن است later-stage observation بخواهد.

اولین اقدام برای کاهش وابستگی به یک تستر چیست؟

یک Flow و یک Protection objective را انتخاب کنید؛ Controlها، Handoffها، Authority، Evidence و Backup را روی نقشه بیاورید. سپس فقط یک Missing mode یا Handoff مبهم را در Pilot اصلاح و با Queue age، Evidence validity و Guardrail ارزیابی کنید.

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