نمودار زیبا می‌تواند محاسبه‌ای درست را گمراه‌کننده نمایش دهد، محاسبه‌ای غلط را معتبر جلوه دهد یا Unknown را پشت رنگ سبز پنهان کند. بصری‌سازی داده‌های تست زمانی قابل اتکاست که مسیر Source→Rows→Transform→Aggregate→Scale→Marks→Alternative نسخه‌دار و قابل ممیزی باشد. این راهنما مالک «Chart Contract و Visual QA» است: ساخت، آزمون، انتشار و اصلاح یک نمودار مستقل؛ نه معماری کل داشبورد یا فن ارائهٔ مدیریتی.

برای معماری داشبورد به راهنمای داشبورد گزارش تست، برای Readout چندلایه به ارائهٔ نتایج تست و برای Snapshot پایانی به گزارش خلاصه تست بروید. این مقاله یک واحد کوچک‌تر را مهندسی می‌کند: نموداری که ادعایش، داده‌اش، تبدیلش و جایگزین متنی‌اش بازسازی‌پذیر باشد.

پاسخ کوتاه: بصری‌سازی داده‌های تست چیست؟

بصری‌سازی داده‌های تست نگاشت دادهٔ تعریف‌شده به موقعیت، طول، رنگ، شکل یا اندازه برای پاسخ به یک سؤال مشخص است. نمودار خودِ Evidence یا Decision نیست؛ Viewی از داده و تبدیل است. مخاطب باید بتواند Population، مخرج، Status، زمان، Scale، Missingness، Uncertainty، Source و نسخه را بفهمد و همان اعداد را در جدول یا Export معادل بازیابی کند.

لایهپرسشخطر
Sourceداده از کجا و کدام نسخه؟stale/wrong join
Semanticهر Row و Status چه معنایی دارد؟count inflation
Transformfilter/dedupe/bin/aggregate چیست؟hidden exclusion
EncodingField به کدام channel/scale می‌رود؟visual distortion
Alternativeبدون تصویر چه اطلاعاتی می‌ماند؟access barrier

مرز مالکیت: Chart، Dashboard، Report و Readout

Artifactمالک سؤالاین راهنما؟
Chartیک رابطه/مقایسه/توزیع چگونه Encode شد؟بله
Dashboardچند View چگونه به تصمیم و Drill-down وصل‌اند؟خیر
Status/Completion Reportکدام Snapshot و Artifact گزارش می‌شود؟خیر
Decision ReadoutClaim/Evidence/Uncertainty برای مخاطب چگونه ارائه شود؟خیر
Metric governanceMetric چرا و با چه سیاستی وجود دارد؟خیر

تعریف و حاکمیت KPI در راهنمای KPI تضمین کیفیت و فرمول‌های متریک در راهنمای متریک‌های تست قرار دارند. Chart Contract نباید فرمول یا تصمیم را بی‌صدا اختراع کند.

از سؤال شروع کنید، نه از نوع نمودار

سؤالرابطهView آغازین
کدام گروه بیشتر/کمتر است؟ComparisonBar/Dot
در زمان چه تغییری رخ داده؟TemporalLine/step
مقادیر چگونه پخش شده‌اند؟DistributionHistogram/box/ECDF
دو متغیر چگونه همراه‌اند؟RelationshipScatter
سهم اجزا از کل چیست؟CompositionStacked bar/table
دو بعد دسته‌ای کجا متراکم‌اند؟MatrixHeatmap + labels
برآورد چقدر نامطمئن است؟IntervalDot/interval

«برای گزارش روزانه همیشه Pie» یا «برای مدیر همیشه Gauge» پاسخ معتبری نیست. سؤال، نوع داده، تعداد دسته، مقایسهٔ مورد انتظار، اندازهٔ صفحه و alternative تعیین‌کننده‌اند.

Chart Contract پیش از کد یا BI ساخته می‌شود

Chart Contract
chart_id/version/status:
decision_question + allowed_use:
claim_boundary:
source/dataset/query/spec versions:
grain/identity/population/window:
fields/types/units/status vocabulary:
filter/dedupe/join/bin/aggregate/formula:
missing/late/invalid/exclusion rules:
mark/channels/scale/domain/baseline/sort:
labels/annotations/uncertainty/support:
short description/long description/table/export:
refresh/freshness/owner/review/correction:

ادعای نمودار را محدود و قابل رد کنید

«کیفیت بهتر شد» معمولاً بزرگ‌تر از داده است. «در Snapshotهای C1 تا C3، Pass/Executed از ۸۰٪ به ۹۵٪ تغییر کرد» قابل ممیزی‌تر است، ولی هنوز دربارهٔ Coverage، Risk، Population ثبات‌دار یا Release readiness ادعا نمی‌کند. Claim، alternative explanation و prohibited use را بنویسید.

Chart Claim
observation:
population/window:
formula/encoding:
support/missingness:
known changes:
alternative explanations:
does_not_establish:
reviewer/observed_at:

Dataset Identity را منجمد کنید

Source name کافی نیست. Snapshot/export/query version، schema، extraction time، cutoff، timezone، lineage، filter parameters، content hash و access classification را ثبت کنید. یک نمودار Live و یک نمودار آرشیوی ممکن است از نام یکسان اما Rowهای متفاوت ساخته شوند.

Dataset Manifest
dataset_id/version/hash:
source systems + schema versions:
query/transform commit:
extracted_at/cutoff/timezone:
row grain + primary identity:
population/inclusions/exclusions:
late-data/backfill policy:
quality state: VALID | STALE | INVALID | UNKNOWN
owner/access/retention:

Grain و Identity جلوی شمارش دوگانه را می‌گیرند

هر Row چیست: Test identity، Attempt، Result event، Defect report یا Canonical defect؟ Retry ممکن است دو Result event و یک Final outcome بسازد. Duplicate Report ممکن است چند Source و یک Defect باشد. Chart title باید واحد شمارش را بگوید و dedupe key/version را ثبت کند.

Row grainCount پاسخ می‌دهدسوءبرداشت
Result eventچند event ثبت شد؟چند Test نهایی؟
Final test outcomeچند Test به کدام Outcome رسید؟چند Attempt؟
Source reportچند Signal آمد؟چند Defect؟
Canonical defectچند نقص متمایز؟چند کاربر/رخداد؟
Request sampleچند Observation؟چند User؟

Population و Denominator باید داخل View بمانند

Pass Rate بدون مخرج یک Label مبهم است. Passed/(Passed+Failed)، Passed/Planned و Execution completion پرسش‌های متفاوت دارند. Counts و Status treatment را کنار نسبت یا در alternative table نگه دارید. برای گزارش رسمی Status و Release از راهنمای گزارش تست حرفه‌ای استفاده کنید.

Statusها را به صفر یا Pass تبدیل نکنید

Statusنمایشرفتار ممنوع
BlockedCount/segment مستقلحذف بی‌اعلان
Not RunPopulation gapPass فرض‌کردن
InconclusiveUnknown evidenceFail/zero اجباری
InvalidData-quality exceptionOutcome معتبر
MissingMissingness annotationصفر
Not applicableExclusion با دلیلMissing

Transformها بخشی از معنا هستند

Filter، join، dedupe، pivot، normalize، bin، aggregate و calculate را مخفی نکنید. مستند رسمی Vega-Lite Encoding Field و نوع معنایی Quantitative/Temporal/Ordinal/Nominal و Transformهای aggregate/bin/sort/stack/timeUnit را صریح می‌کند. این مرجع یک Syntax فنی است، نه سیاست عمومی QA یا تضمین Chart correctness.

Transform Contract
input grain:
filters + reason:
join keys/cardinality/unmatched behavior:
dedupe identity/winner rule:
calculated fields/formulas:
groupby + aggregate:
bin/timeUnit/timezone:
sort/stack/normalize:
output grain + reconciliation:

Aggregation یک جدول تازه می‌سازد

مستند رسمی Vega-Lite Aggregation توضیح می‌دهد Aggregate برای هر Group یک Record خلاصه می‌سازد. بنابراین groupby، operation و output field را مشخص کنید. Count، valid count، sum، mean، median، percentile و rate قابل جایگزینی نیستند.

Aggregateکاربرد محدودریسک
Countتعداد Row با grain معلومduplicate/mix
Meanمرکز عددی با توزیع مناسبtail پنهان
Medianمرکز مقاوم‌ترspread پنهان
p95Tail quantile با روش معلومsample/algorithm
Ratenumerator/denominatordenominator drift
Sumکل additivenon-additive metric

زمان را با Window، Bucket و Timezone قرارداد کنید

Event time، ingestion time، execution end و defect close time یکسان نیستند. Window نیمه‌باز، bucket روز/هفته، UTC storage، timezone نمایش، DST/Jalali/holiday mapping، late arrival و backfill را ثبت کنید. خطی که پس از backfill عوض می‌شود باید version/correction داشته باشد.

Time Contract
event_timestamp:
window: [start, end)
bucket/timeUnit:
storage_timezone:
display_timezone/calendar:
late_arrival_watermark:
backfill/recompute policy:
facts_as_of:

نمودار میله‌ای برای مقایسه، با خط مبنای صادقانه

Bar طول را از baseline مقایسه می‌کند؛ برای مقدارهای مثبت معمولاً baseline صفر لازم است. شکستن محور می‌تواند تفاوت کوچک را بزرگ جلوه دهد. Category order را semantic یا value-based و ثابت کنید، واحد و Count را نشان دهید و Horizontal bar را برای Label فارسی بلند در نظر بگیرید.

Dot Plot برای مقایسهٔ فشرده مناسب است

وقتی Category زیاد و baseline magnitude کمتر مهم است، Dot plot می‌تواند شلوغی را کم کند. Zero/domain همچنان باید معلوم باشد. برای دو مقدار، dumbbell اختلاف را نشان می‌دهد؛ اما ترتیب، جهت مطلوب/نامطلوب و فاصلهٔ عددی را Label کنید.

نمودار خطی فقط برای ترتیب زمانی معتبر ساخته می‌شود

Line بین نقطه‌ها تداوم القا می‌کند. Snapshotهای نامنظم، gap، data freeze و تغییر تعریف Metric را علامت بزنید. برای سه Category بدون ترتیب، اتصال خطی نسازید. Axis غیرصفر در Trend گاهی قابل دفاع است، اما domain و دلیل باید آشکار باشد و magnitude را اغراق نکند.

Histogram به Bin Contract نیاز دارد

Histogram توزیع دادهٔ پیوسته را با bin boundaries نشان می‌دهد؛ Bar chart دسته‌ها را مقایسه می‌کند. Bin width/start/end، inclusion boundary، overflow/underflow، missing و unit را ثبت کنید. تغییر Bin می‌تواند شکل توزیع را عوض کند؛ Export باید row-level یا جدول Bin را فراهم کند.

Box/Violin/ECDF را بدون Support تنها نگذارید

Box plot تعریف quartile/whisker و sample count می‌خواهد. Violin به smoothing وابسته است و با Sample کوچک شکل کاذب می‌سازد. ECDF تمام مشاهده‌ها را تجمعی نشان می‌دهد اما برای مخاطب ناآشنا توضیح لازم دارد. Median/p95 بدون Distribution و Support می‌تواند Tail یا mix را پنهان کند.

Scatter رابطه را نشان می‌دهد، نه علت را

هر Point باید واحد مشاهده و دو Field هم‌زمان را داشته باشد. Overplot را با opacity/jitter/bin کنترل و transform را افشا کنید. Trend line، correlation coefficient یا cluster دلیل علی نیست؛ mix، exposure، size، time و selection می‌تواند هر دو محور را تغییر دهد.

Defect Density Heatmap نقشهٔ کیفیت نیست

Heatmap می‌تواند Module×Release یا Risk×Evidence را خلاصه کند، اما Color فقط مقدار Contract‌شده را Encode می‌کند. تراکم نقص به تعریف Defect و Size denominator وابسته است و «ماژول قرمز = کد بی‌کیفیت» نتیجهٔ خودکار نیست. محدودیت کامل در راهنمای چگالی نقص آمده است.

Heatmap contractنمونه
row/column identitiesRisk×Build
cell aggregatevalid evidence count
scale/domain0–4 sequential
missing cellUnknown hatch + text
labelsexact value/status
alternativeaccessible matrix table

Pie و Donut را پیش‌فرض نکنید

زاویه و مساحت برای مقایسهٔ سهم‌های نزدیک دشوار است؛ دسته‌های زیاد، قطعه‌های کوچک و Legend دور خوانایی را کم می‌کنند. اگر composition ساده، mutually exclusive و جمع دقیقاً کل است، Pie با Label مستقیم شاید قابل استفاده باشد. در بسیاری موارد sorted bar یا table مقایسه را روشن‌تر می‌کند.

Stacked Bar ترکیب را نشان می‌دهد، اما مقایسه را محدود می‌کند

فقط Segment متصل به baseline به‌راحتی مقایسه می‌شود. ۱۰۰% stacked composition را نشان می‌دهد و Count کل را پنهان می‌کند؛ absolute stacked Count را نشان می‌دهد اما سهم را سخت‌تر می‌کند. Count و درصد و ترتیب Stack را در جدول جایگزین نگه دارید.

Gauge و Speedometer اطلاعات کمی در فضای زیاد می‌دهند

Gauge اغلب یک مقدار، Target و رنگ را بدون History/Population نشان می‌دهد. اگر Threshold واقعاً قراردادی است، عدد+هدف+trend+freshness یا bullet chart معمولاً فشرده‌تر است. رنگ سبز نباید Release decision یا کفایت Risk evidence را القا کند.

Dual Axis و 3D پیش‌فرض خطرناک‌اند

دو محور با Scaleهای قابل تنظیم می‌توانند هم‌حرکتی مصنوعی بسازند. دو Panel هم‌تراز یا normalized view با توضیح اغلب امن‌تر است. 3D طول/زاویه را تحریف و Occlusion ایجاد می‌کند. Decoration، shadow و gradient نباید data mark را جایگزین کند.

Scale Contract را صریح کنید

Scaleکاربردافشا
Linearفاصلهٔ برابر عددیdomain/unit
Logorders of magnitude و مقادیر مثبتbase/zero excluded
Ordinalترتیب قراردادیorder meaning
Sequential colourکم→زیادdomain/missing
Diverging colourحول midpoint معنادارmidpoint/limits
Thresholdbands قراردادیboundary/owner/version

Baseline و Domain می‌توانند داستان را عوض کنند

Bar با domain ۷۵–۱۰۰ اختلاف ۸۰ تا ۹۵ را بسیار بزرگ می‌کند. Line با domain محدود ممکن است برای Variation جزئی مفید باشد، به شرط نمایش دقیق domain، context و alternative. Percentage axis نیز اگر Metric امکان ۰ تا ۱۰۰ دارد، قطع‌کردن باید دلیل داشته باشد.

Sort، Stack و Legend تصمیم‌های معنایی‌اند

Sort براساس مقدار، alphabet، lifecycle یا risk order پیام متفاوت می‌سازد. Legend order باید با Stack/Line/Reading order همسان باشد. Label مستقیم وابستگی به تطبیق رنگ را کم می‌کند. Categoryهای فارسی را با collation و ترتیب قراردادی پایدار کنید.

رنگ را تنها حامل معنا نکنید

راهنمای رسمی Government Analysis Function دربارهٔ رنگ نمودار توصیه می‌کند به رنگ تنها تکیه نشود و جایگزین متنی فراهم باشد. Series را مستقیم نام‌گذاری کنید و از Shape/line style/text نیز استفاده کنید. Red/Green ممکن است علاوه بر دسترس‌پذیری، Pass/Fail یا Risk semantics ناخواسته بسازد.

عنوان، Subtitle و Footnote بخشی از داده‌اند

Chart Text Packet
headline: observation without causal overclaim
formal_title: metric + population + place/scope + window
subtitle: denominator/status/baseline
source: dataset/query/spec version + facts-as-of
footnotes: exclusions/missing/change/uncertainty
unit labels:
direct series labels:
link to table/download:

Annotation باید رویداد را نشان دهد، نه علت را جعل کند

Release، tool migration، policy change، outage یا data backfill را با Source و timestamp علامت بزنید. «پس از تغییر X» با «به علت X» فرق دارد. Annotation نباید روی داده را بپوشاند و در long description/table note نیز بازتاب یابد.

Uncertainty و Support را قابل دیدن کنید

Count، sample size، missing، interval، range یا variability را متناسب با Claim نشان دهید. Error bar بدون تعریف روش بی‌معناست. Confidence interval علت، اهمیت یا احتمال درست‌بودن فرضیه نیست. Snapshot کامل یک Run نیز ممکن است uncertainty اندازه‌گیری، environment یا representativeness داشته باشد.

Comparable Trend قرارداد ثبات می‌خواهد

بُعدثابت/افشاشده
Population/cohortidentity/mix/size
Metricformula/status
Sourceschema/query/instrument
Windowduration/cutoff/season
Environmentbuild/config/load
Processdiscovery/triage/automation
Missingnesscoverage/late data

برای تفسیر جهت شاخص، نه طراحی نمودار، به راهنمای شاخص‌های پیشرو و پسرو مراجعه کنید. یک خط صعودی لزوماً «پیشرو» یا مطلوب نیست.

Small Multiples مقایسه را بدون Dual Axis حفظ می‌کند

Panelهای هم‌اندازه با Scale یکسان برای Sliceها مناسب‌اند. راهنمای Accessible Charts دولت بریتانیا نیز برای Small multiples بر یکسان‌بودن Scale محورهای عددی تأکید می‌کند. Support و missing panel را نشان دهید؛ Panel خالی ممکن است No data باشد، نه صفر.

دسترس‌پذیری نمودار فقط Palette نیست

W3C WAI برای تصاویر پیچیده نمودار را نیازمند توضیح کوتاه برای شناسایی و توضیح بلند برای اطلاعات ضروری می‌داند و نمونهٔ ساختاریافته با جدول ارائه می‌کند. Alt کوتاه جای جدول، Scale، Values و Trend را نمی‌گیرد. Alternative باید همراه نسخهٔ نمودار به‌روز شود.

Chart Accessibility Packet
short_description: chart type + subject + scope/window
long_description: question + values + scale + relationships + limits
equivalent_table/download:
non_colour labels/patterns:
contrast/text size/zoom:
reading order/headings/caption:
keyboard/focus/tooltip alternative:
RTL/mobile/PDF/print checks:
tested_by/build/date/known_limits:

جدول جایگزین باید همان Data View باشد

Table نباید از Query دیگری یا Snapshot تازه‌تر ساخته شود. Row/column header، caption، units، exact values، Status، missing و footnoteها را حفظ کنید. Download ماشین‌خوان نیز delimiter/encoding/schema/version داشته باشد. جدول جایگزین لزوماً همهٔ Raw data حساس را منتشر نمی‌کند؛ همان View مجاز را معادل می‌کند.

Interactive Chart به Keyboard و State Contract نیاز دارد

InteractionContract
Filteractive state/clear/default/URL or export
Tooltipkeyboard/touch/text alternative
Zoom/panreset/domain disclosure
Drill-downidentity/context preserved
Selectionvisible focus/non-colour state
Live refreshannouncement/no focus loss

RTL، ارقام و واحد پول بخشی از صحت‌اند

محور عددی را به‌خاطر RTL معکوس نکنید مگر Scale معنا داشته باشد. Persian/Arabic/Latin digits، decimal separator، minus sign، percent، نیم‌فاصله و mixed-direction labels را تست کنید. مقدار مالی canonical IRR و مقدار نمایشی تومان را با واحد صریح جدا نگه دارید؛ تبدیل بی‌برچسب داده را ده‌برابر جابه‌جا می‌کند.

Export باید معنای نمودار را حفظ کند

Web، SVG، PNG، PDF، slide، print، email و mobile ممکن است Font، Legend، tooltip، footnote و clipping متفاوت داشته باشند. SVG zoom را بهتر حفظ می‌کند، ولی semantics و table را خودکار تضمین نمی‌کند. Export artifact، spec hash، dataset version و viewport را ثبت و هر Surface را جدا بازبینی کنید.

Render Manifest
chart/spec/dataset versions:
renderer/library/font versions:
locale/direction/number format:
viewport/DPI/theme:
format: HTML | SVG | PNG | PDF
content_hash:
table/description links:
tested surfaces:
known differences:

Visual QA خود نمودار را تست می‌کند

لایه تستنمونه
Schematypes/required/enum
Identitydedupe/join cardinality
Transformgolden rows/reconciliation
Metricformula/denominator/status
Encodingfield/channel/scale/domain
Renderclipping/font/legend/RTL
Accessibilitydescription/table/keyboard/contrast
ExportHTML/SVG/PNG/PDF parity
Decisionretrieval/misinterpretation task

Golden Data از Golden Screenshot مهم‌تر است

Screenshot diff تغییر پیکسل را می‌بیند، نه خطای معنایی ثابت را. یک Fixture کوچک با Duplicate، Missing، late event، Blocked و known aggregates بسازید. ابتدا transformed rows و exact values را Assert کنید، سپس spec و render را بسنجید. Snapshot test بدون semantic assertion می‌تواند نمودار غلطِ پایدار را PASS کند.

آزمایش بازتولیدپذیر: Trend سبز با Evidence نزولی

Fixture کاملاً ساختگی SYN-QA-CHART-CONTRACT-01 سه Snapshot با Planned population متفاوت دارد. همهٔ Countها آشتی می‌کنند. نمودار ساده فقط Pass/Executed را با محور ۷۵ تا ۱۰۰ نمایش می‌دهد؛ Chart Contract همان داده را با سه نسبت، Countها، مخرج‌ها و محور ۰ تا ۱۰۰ نگه می‌دارد.

$ node .post-1831-experiment.js
runtime: Node.js v26.7.0
fixture: SYN-QA-CHART-CONTRACT-01
reconciled = true

snapshot   planned  pass fail blocked notRun  pass/executed passed/planned completion
SYN-C1     100      72   18   4       6       80.0%         72.0%          90.0%
SYN-C2     140      63    7  10      60       90.0%         45.0%          50.0%
SYN-C3     200      76    4  20     100       95.0%         38.0%          40.0%

naive chart findings = 12
missing chart/question/source/population/transforms/status/missingness
missing-denominator
nonzero-baseline-without-justification
colour-only-or-unlabelled-series
missing-accessible-data-table + missing-correction-policy
naiveChartAudit.decision = HOLD

governedChartAudit.findings = []
governedChartAudit.decision = READY_FOR_CHART_REVIEW

Pass/Executed واقعاً بالا می‌رود؛ Passed/Planned و Completion واقعاً پایین می‌آیند. تناقض محاسباتی وجود ندارد: مخرج‌ها فرق دارند و Population ثابت نیست. هیچ نسبت به‌تنهایی کیفیت، Coverage، Risk یا آمادگی انتشار را ثابت نمی‌کند. Chart review نیز تصمیم Release نیست.

حدود اعتبار Fixture مصنوعی

  • تمام Snapshotها، Testها، Countها، Statusها، Chartها، Domainها و Rules ساختگی‌اند.
  • اعداد عمداً برای نمایش تفاوت مخرج و Population طراحی شده‌اند و Sample واقعی نیستند.
  • Audit فقط Presence/ساختار چند Field را می‌سنجد، نه صحت آماری، ادراکی یا دسترس‌پذیری واقعی.
  • محور صفر، نوع نمودار و ۱۲ Check استاندارد جهانی یا Algorithm عمومی نیستند.
  • هیچ کاربر، محصول، تیم، Release، کیفیت، Risk، Coverage، هزینه یا Outcome سنجیده نشده است.
  • READY_FOR_CHART_REVIEW معادل Publish approval، WCAG conformance یا تصمیم درست نیست.

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

Dataset مصنوعی SYN-CHART-FA-01 را با سه Build، Retry، Duplicate، Blocked، Not Run، Missing، late event و schema change بسازید. دو Transform مستقل تولید کنید، reconciliation را Assert و Bar/Line/Heatmap همراه جدول معادل در viewportهای RTL رندر کنید. شبکه و اتصال Production خاموش باشد.

FaultکنترلEvidence
Duplicate eventgrain/deduperow reconciliation
Unknown→0status contractmissing table
Timezone shiftbucket contractboundary fixture
Truncated axisscale auditspec snapshot
Colour-onlydirect labelnon-colour review
RTL clippingrender matrixSVG/PNG/PDF
Table driftone transformed viewvalue parity
Late correctionsupersede policyversion history

فقط شناسه‌ها و مقادیر ساختگی استفاده کنید؛ هیچ نام، موبایل، ایمیل، IP، حساب، Order، پرداخت، PAN، CVV2، OTP، Cookie، Token، Secret، Screenshot یا دادهٔ Production وارد نشود. برای مبلغ فرضی canonical IRR و تومان نمایشی را صریح کنید. این Lab ادعای حقوقی، مالی، آماری یا بازار ایران ندارد.

Correction نمودار باید Dataset و Spec را نسخه‌دار کند

اگر Query، مخرج، Axis، Label یا داده اشتباه بود، نسخهٔ منتشرشده را بی‌ردپا جایگزین نکنید. Correction reason، affected claims/decisions، old/new dataset/query/spec/render hashes و لینک superseding را ثبت کنید. اگر خطا تصمیمی را تغذیه کرده، صاحب تصمیم را مطلع و Decision record را باز کنید.

Chart Correction Record
chart/version corrected:
detected_at/by:
error class + impact:
old dataset/query/spec/render hashes:
new versions/hashes:
affected views/exports/decisions:
notification/review:
superseded_at + archive link:
prevention action/owner/due:

ابزار Visualization حقیقت را خودکار تولید نمی‌کند

Excel، Power BI، Tableau، Grafana، Vega-Lite، D3 یا کتابخانهٔ Python هرکدام قابلیت و خطر متفاوت دارند. انتخاب باید با data volume، semantic layer، version control، accessibility، export، deployment، skills، cost و exit سنجیده شود. «BI تخصصی همیشه بهتر» و «چند کلیک یعنی دقیق» ادعای معتبری نیست.

AI می‌تواند Spec پیشنهاد دهد، نه Claim واقعی

AI می‌تواند نوع View، Label، Alt draft یا test case پیشنهاد کند، اما نباید Field، denominator، missingness، Cause یا decision را حدس بزند. Dataset classification، prompt/output retention، hallucination review، deterministic export، source trace و human approval لازم‌اند.

معیارهای سلامت Chart System

SignalCountermetric
transform reconciliation passsemantic blind spots
source-to-chart latencylate/invalid data rate
table/render exact paritymasked formatting errors
accessibility checksreal task failures
correction count/timeunder-reporting errors
decision retrieval successconfident misinterpretation
unused charts retiredmissing necessary view

تعداد نمودار، View، Click، رنگ سبز، Export یا applause را KPI سازنده نکنید. هدف کاهش تعداد Correction نیز می‌تواند خطا را پنهان کند؛ sampled audit و مسیر امن گزارش اشتباه لازم است.

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

نقشمالکمالک نیست
Domain/Metric ownermeaning/formula/allowed userender details
Data ownersource/schema/quality/accessbusiness claim
Analyst/Chart authortransform/encoding/descriptionrisk acceptance
QA/Data testerfixture/reconciliation/parityall semantic truth
Accessibility revieweralternative/task/known limitsmetric validity
Publishersurface/version/freshnesssilent correction
Decision ownerinterpretation/action with limitsrewriting evidence

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

روزکارخروجی
۱–۵Inventory نمودار/تصمیم/خطاchart map
۶–۱۰تعریف Contract/Manifest/Correctionv0.1
۱۱–۱۵Fixture و transform assertionsgolden data
۱۶–۲۰render/RTL/accessibility/export matrixevidence pack
۲۱–۲۵Pilot روی سه Chart واقعی کم‌ریسکtask evidence
۲۶–۳۰Review خطا/هزینه/فایدهAdopt/Adapt/Stop

۳۰ ضدالگوی بصری‌سازی داده‌های تست

  1. شروع از Pie
  2. عنوان «سلامت پروژه»
  3. Source بی‌نسخه
  4. Row grain نامعلوم
  5. Retry دوبرابرشده
  6. Join چندبه‌چند مخفی
  7. مخرج حذف‌شده
  8. Blocked/Not Run حذف‌شده
  9. Missing=0
  10. Mean بدون Distribution
  11. p95 بدون Support
  12. Bin خودکار بی‌ثبت
  13. Timezone بی‌تعریف
  14. Trend با Population متغیر بی‌افشا
  15. Bar با محور بریده
  16. Dual axis
  17. 3D و shadow
  18. Gauge سبز=آماده
  19. Heatmap قرمز=کیفیت بد
  20. Scatter=Cause
  21. Pie با دسته‌های زیاد
  22. Legend دور و رنگ‌محور
  23. Alt «نمودار تست»
  24. Table از Query دیگر
  25. Tooltip بدون Keyboard
  26. RTL clipping
  27. تومان/ریال بی‌واحد
  28. Screenshot golden بدون data assertions
  29. AI-generated claim
  30. Correction بی‌ردپا

چک‌لیست ۴۸نقطه‌ای انتشار نمودار

  1. Chart ID
  2. Version/status
  3. Decision question
  4. Allowed use
  5. Claim boundary
  6. Dataset ID
  7. Source/schema
  8. Query version
  9. Spec version
  10. Facts-as-of
  11. Grain
  12. Identity/dedupe
  13. Population
  14. Window/timezone
  15. Fields/types
  16. Units
  17. Status vocabulary
  18. Filters
  19. Join cardinality
  20. Formula
  21. Numerator
  22. Denominator
  23. Aggregate/groupby
  24. Bin/timeUnit
  25. Missingness
  26. Late data
  27. Invalid/exclusion
  28. Reconciliation
  29. Mark
  30. Channels
  31. Scale/domain
  32. Baseline
  33. Sort/stack
  34. Direct labels
  35. Annotation source
  36. Support/uncertainty
  37. Short description
  38. Long description
  39. Equivalent table
  40. Download schema
  41. Non-colour meaning
  42. Contrast/zoom
  43. Keyboard/focus
  44. RTL/mobile
  45. Export parity
  46. Freshness/owner
  47. Correction policy
  48. Known limits/review

جمع‌بندی: نمودار یک قرارداد تبدیل است

پیش از رنگ و Chart type، سؤال، Claim، Dataset، Grain، Population، Status و Transform را تثبیت کنید. سپس Mark/Scale/Domain/Label/Uncertainty را انتخاب و همان View را با توضیح کوتاه، توضیح بلند و جدول معادل منتشر کنید. Golden data، render matrix، RTL/accessibility/export checks و Correction history نمودار را قابل ممیزی می‌کنند؛ هیچ Visual به‌تنهایی کیفیت، علت یا تصمیم درست را تضمین نمی‌کند.

سؤالات متداول بصری‌سازی داده‌های تست

برای وضعیت اجرای تست چه نموداری مناسب است؟

برای مقایسهٔ Countهای Passed/Failed/Blocked/Not Run، Bar یا stacked bar همراه Count کل مناسب است؛ برای تغییر در زمان، line/area با Population و Status ثابت یا افشاشده. Pie پیش‌فرض نیست. جدول معادل و مخرج نسبت‌ها را همیشه نگه دارید.

آیا محور نمودار باید همیشه از صفر شروع شود؟

برای Bar که طول از baseline مقایسه می‌شود، معمولاً بله. برای Line یا Distribution ممکن است domain محدود با دلیل، برچسب و context مفید باشد. قانون مکانیکی عمومی نیست؛ Chart Contract باید distortion risk، domain و alternative full-range را روشن کند.

تفاوت Bar Chart و Histogram چیست؟

Bar دسته‌های گسسته با ترتیب قراردادی را مقایسه می‌کند؛ Histogram مقادیر پیوسته را در Binهای عددی پیوسته خلاصه می‌کند. Histogram به boundary/width و Missing contract نیاز دارد و تغییر Bin می‌تواند شکل دیده‌شده را عوض کند.

چگونه نمودار QA را دسترس‌پذیر کنیم؟

معنا را فقط با رنگ Encode نکنید؛ Label مستقیم، contrast/zoom، عنوان و Source بیرون تصویر، توضیح کوتاه، توضیح بلند شامل Values/Scale/Trend/Limits، جدول/Download معادل، reading order و Keyboard/focus را فراهم و در RTL/mobile/PDF با کار واقعی آزمایش کنید.

آیا ابزار BI یا AI نمودار درست را خودکار می‌سازد؟

ابزار می‌تواند Transform/Encoding/Render را خودکار کند و AI پیشنهاد بدهد، اما Grain، Population، Oracle معنایی، مخرج، Missingness، Claim و Allowed use نیازمند قرارداد و بازبینی‌اند. خروجی را با Golden data، table parity، render/accessibility tests و Correction policy کنترل کنید.

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