چگونه فرآیند تهیه VPATهای دسترسی‌پذیری را در CI خودکار کردیم چگونه فرآیند تهیه VPATهای دسترسی‌پذیری را در CI خودکار کردیم

ممیزی‌های دسترسی‌پذیری (Accessibility audits) خیلی سریع قدیمی می‌شوند. یک ادغام (merge) ساده در کد، همه چیز را تغییر می‌دهد.

ما این مشکل را حل کردیم. ما گزارش‌های دسترسی‌پذیری خود را به یک آرتیفکت (artifact) در فرآیند ساخت مداوم (continuous build) تبدیل کردیم.

خط لوله (pipeline) ما از سه لایه برای یافتن خطاها استفاده می‌کند:

  • بررسی‌های ایستا (Static checks): ما از axe-core برای تست‌های پایه در Storybook استفاده می‌کنیم.
  • تست‌های تعاملی (Interactive tests): ما از کمک‌کننده‌های (helpers) سفارشی Vitest برای تست قوانین کیبورد استفاده می‌کنیم.
  • ممیزی‌های دستی (Manual audits): ما نتایج صفحه‌خوان‌ها (screen reader) را به صورت فایل‌های JSON ذخیره می‌کنیم.

خط لوله CI ما این نتایج را با هم ادغام می‌کند.

اگر تستی با شکست مواجه شود، PR نیز با شکست مواجه می‌شود. اگر تمام تست‌ها با موفقیت انجام شوند، سیستم یک PDF جدید می‌سازد. این PDF همراه با نسخه انتشار (release) شما ارسال می‌شود.

ما یک روش را امتحان کردیم که شکست خورد.

ما سعی کردیم از یک LLM برای جایگزینی ممیزی‌های دستی استفاده کنیم. اما بلافاصله استفاده از آن را متوقف کردیم. نتایج هوش مصنوعی بیش از حد تغییر می‌کنند. شما برای یک دروازه CI (CI gate) به نتایج پایدار نیاز دارید.

تحلیل فنی کامل را اینجا بخوانید:

منبع: https://dev.to/yassine_lakhdar_d0226709a/how-we-automated-our-accessibility-vpats-in-ci-46jk

ARTICLE: یک تیم توسعه، فرآیند ایجاد VPATهای دسترسی‌پذیری (Voluntary Product Accessibility Templates) را مستقیماً در خط لوله یکپارچه‌سازی مداوم (CI) خود خودکار کرده است و آنچه را که قبلاً یک گزارش دستی دوره‌ای بود، به یک آرتیفکت ساخت تبدیل کرده که همراه با هر نسخه انتشار ارسال می‌شود. گردش کار جدید، Pull Requestهایی را که باعث بازگشت (regression) در دسترسی‌پذیری می‌شوند، رد می‌کند و در صورت موفقیت‌آمیز بودن ساخت، به طور خودکار یک سند انطباق PDF تولید می‌کند تا اطمینان حاصل شود که هر تغییر در کد، در چارچوب استانداردهای دسترسی‌پذیری باقی می‌ماند.

چرا خودکارسازی اهمیت دارد

ممیزی‌های دسترسی‌پذیری به محض ورود کد جدید، منسوخ می‌شوند. یک merge ساده می‌تواند باعث حذف متن جایگزین (alt text)، ترتیب تمرکز (focus order) نامناسب یا مشکلات صفحه‌خوان شود که VPAT صادر شده قبلی را باطل می‌کند. حفظ انطباق به صورت دستی به معنای اجرای مجدد ممیزی‌ها پس از هر تغییر است؛ فرآیندی هزینه‌بر و مستعد خطا که اغلب از سرعت توسعه عقب می‌ماند. با گنجاندن بررسی‌ها در CI، تیم‌ها بازخورد فوری دریافت می‌کنند، انطباق را به‌روز نگه می‌دارند و از ریسک‌های قانونی و شهرتی ناشی از انتشار نرم‌افزارهای غیرقابل دسترس جلوگیری می‌کنند.

رویکرد تست سه لایه

  1. بررسی‌های ایستا (Static checks) – خط لوله، axe-core را اجرا می‌کند؛ یک کتابخانه متن‌باز که کامپوننت‌های رندر شده در Storybook را برای یافتن تخلفات شناخته‌شده، مانند نبود نشانگرها (landmarks) یا تضاد رنگی (color contrast) ناکافی، اسکن می‌کند. این تست‌ها مشکلات را پیش از هرگونه تعامل شناسایی می‌کنند.

  2. بررسی‌های تعاملی (Interactive checks) – کمک‌کننده‌های سفارشی Vitest قوانین ناوبری با کیبورد را اجرا می‌کنند و تأیید می‌کنند که تمرکز (focus) به صورت منطقی حرکت می‌کند و عناصر تعاملی به رویدادهای استاندارد کیبورد پاسخ می‌دهند. این لایه فراتر از تحلیل ایستا می‌رود تا از قابلیت استفاده در دنیای واقعی اطمینان حاصل کند.

  3. آرتیفکت‌های ممیزی دستی (Manual audit artifacts) – نتایج تست صفحه‌خوان به صورت فایل‌های JSON ذخیره می‌شوند. توسعه‌دهندگان مشاهدات خود را در طول تست‌های اکتشافی ثبت کرده و فایل JSON را همراه با کد commit می‌کنند. وظیفه (job) CI این آرتیفکت‌ها را با نتایج خودکار ادغام کرده و یک منبع واحد و معتبر (single source of truth) برای VPAT تولید می‌کند.

اگر هر تستی در دو لایه اول با شکست مواجه شود، Pull Request مسدود می‌شود تا از رسیدن تغییر به محیط تولید (production) جلوگیری شود. اگر تمام تست‌ها با موفقیت انجام شوند، خط لوله داده‌های ترکیب‌شده را در قالب یک PDF جمع‌آوری کرده و به نسخه انتشار پیوست می‌کند و بدین ترتیب یک VPAT به‌روز را بدون تلاش اضافی ارائه می‌دهد.

آنچه کار نکرد

تیم با استفاده از یک مدل زبانی بزرگ (LLM) برای تولید خودکار بخش ممیزی دستی، آزمایش‌هایی انجام داد. نتایج تولید شده توسط هوش مصنوعی بیش از حد نوسان داشت و باعث می‌شد دروازه CI غیرقابل اعتماد شود. ثبات برای یک بررسی دوگانه (pass/fail) ضروری است، بنابراین این آزمایش به نفع آرتیفکت‌های دستی مبتنی بر JSON کنار گذاشته شد.

آنچه باید در آینده دنبال کرد

در حال حاضر، مدل سه لایه CI مسیری عمل‌گرایانه برای به‌روز نگه داشتن VPATها، کاهش هزینه‌های دستی و قرار دادن دسترسی‌پذیری در اولویت هر تغییر در کد ارائه می‌دهد.