Cách chúng tôi tự động hóa Accessibility VPATs trong CI

Các cuộc kiểm tra khả năng tiếp cận (accessibility audits) nhanh chóng bị lỗi thời. Chỉ một lần gộp mã (code merge) cũng có thể thay đổi mọi thứ.

Chúng tôi đã khắc phục điều này. Chúng tôi đã biến các báo cáo khả năng tiếp cận thành một artifact của quá trình build liên tục.

Pipeline của chúng tôi sử dụng ba lớp để tìm lỗi:

  • Kiểm tra tĩnh: Chúng tôi sử dụng axe-core để thực hiện các bài kiểm tra cơ bản trong Storybook.
  • Kiểm tra tương tác: Chúng tôi sử dụng các helper Vitest tùy chỉnh để kiểm tra các quy tắc bàn phím.
  • Kiểm tra thủ công: Chúng tôi lưu trữ kết quả trình đọc màn hình (screen reader) dưới dạng các tệp JSON.

Pipeline CI của chúng tôi sẽ hợp nhất các kết quả này.

Nếu một bài kiểm tra thất bại, PR sẽ thất bại. Nếu tất cả các bài kiểm tra đều vượt qua, hệ thống sẽ tạo ra một tệp PDF mới. Tệp PDF này sẽ được gửi kèm với bản phát hành (release) của bạn.

Chúng tôi đã thử một phương pháp nhưng không thành công.

Chúng tôi đã thử sử dụng LLM để thay thế các cuộc kiểm tra thủ công. Chúng tôi đã ngừng sử dụng nó ngay lập tức. Kết quả từ AI thay đổi quá nhiều. Bạn cần các kết quả ổn định để làm rào cản kiểm soát (CI gate).

Đọc phân tích kỹ thuật đầy đủ tại đây:

Nguồn: https://dev.to/yassine_lakhdar_d0226709a/how-we-automated-our-accessibility-vpats-in-ci-46jk

ARTICLE: Một đội ngũ phát triển đã tự động hóa việc tạo các VPAT (Voluntary Product Accessibility Templates) về khả năng tiếp cận trực tiếp trong pipeline tích hợp liên tục (CI), biến một báo cáo thủ công định kỳ thành một artifact đi kèm với mỗi bản phát hành. Quy trình làm việc mới sẽ chặn các pull request gây ra lỗi suy giảm khả năng tiếp cận (accessibility regressions) và tự động tạo tài liệu tuân thủ dưới dạng PDF khi quá trình build thành công, đảm bảo mọi thay đổi mã nguồn đều nằm trong các tiêu chuẩn về khả năng tiếp cận.

Tại sao tự động hóa lại quan trọng

Các cuộc kiểm tra khả năng tiếp cận trở nên lỗi thời ngay khi mã mới được đưa vào. Một lần merge duy nhất có thể dẫn đến việc thiếu văn bản thay thế (alt text), thứ tự tiêu điểm (focus order) không hợp lý, hoặc các vấn đề với trình đọc màn hình làm mất hiệu lực của một VPAT đã ban hành trước đó. Duy trì sự tuân thủ một cách thủ công đồng nghĩa với việc phải chạy lại các cuộc kiểm tra sau mỗi thay đổi, một quy trình tốn kém và dễ sai sót, thường không theo kịp tốc độ phát triển. Bằng cách nhúng các bước kiểm tra vào CI, các nhóm có thể nhận được phản hồi ngay lập tức, giữ cho việc tuân thủ luôn được cập nhật và tránh được các rủi ro về pháp lý cũng như uy tín khi phát hành phần mềm không đảm bảo khả năng tiếp cận.

Phương pháp kiểm tra ba lớp

  1. Kiểm tra tĩnh – Pipeline chạy axe-core, một thư viện mã nguồn mở giúp quét các component được render trong Storybook để tìm các vi phạm đã biết như thiếu các mốc (landmarks) hoặc độ tương phản màu sắc không đủ. Các bài kiểm tra này giúp phát hiện vấn đề trước khi có bất kỳ tương tác nào xảy ra.

  2. Kiểm tra tương tác – Các helper Vitest tùy chỉnh sẽ thực hiện các quy tắc điều hướng bằng bàn phím, xác minh rằng tiêu điểm (focus) di chuyển một cách logic và các phần tử tương tác phản hồi với các sự kiện bàn phím tiêu chuẩn. Lớp này vượt xa việc phân tích tĩnh để đảm bảo khả năng sử dụng trong thế giới thực.

  3. Artifact kiểm tra thủ công – Kết quả từ việc kiểm tra trình đọc màn hình được lưu dưới dạng các tệp JSON. Các nhà phát triển ghi lại các quan sát trong quá trình kiểm tra khám phá (exploratory testing) và commit tệp JSON cùng với mã nguồn. Công việc CI sẽ hợp nhất các artifact này với các kết quả tự động, tạo ra một nguồn sự thật duy nhất (single source of truth) cho VPAT.

Khi bất kỳ bài kiểm tra nào trong hai lớp đầu tiên thất bại, pull request sẽ bị chặn, ngăn chặn thay đổi đó đến được môi trường production. Nếu tất cả các bài kiểm tra đều vượt qua, pipeline sẽ tổng hợp dữ liệu kết hợp thành một tệp PDF được đính kèm vào bản phát hành, cung cấp một VPAT cập nhật mà không cần thêm nỗ lực nào.

Những gì không hiệu quả

Nhóm đã thử nghiệm sử dụng mô hình ngôn ngữ lớn (LLM) để tự động tạo phần kiểm tra thủ công. Các kết quả do AI tạo ra biến động quá nhiều, khiến rào cản CI trở nên không đáng tin cậy. Sự nhất quán là yếu tố thiết yếu cho một bước kiểm tra pass/fail nhị phân, vì vậy thử nghiệm này đã bị hủy bỏ để chuyển sang sử dụng các artifact thủ công dựa trên JSON.

Những gì cần lưu ý tiếp theo

Hiện tại, mô hình CI ba lớp cung cấp một lộ trình thực tế để giữ cho các VPAT luôn cập nhật, giảm bớt gánh nặng thủ công và luôn đặt khả năng tiếp cận làm trọng tâm trong mỗi thay đổi mã nguồn.