আমরা কীভাবে CI-তে Accessibility VPATs স্বয়ংক্রিয় করেছি আমরা কীভাবে CI-তে Accessibility VPATs স্বয়ংক্রিয় করেছি
Accessibility অডিট খুব দ্রুত পুরনো হয়ে যায়। একটি মাত্র কোড মার্জ সবকিছু বদলে দিতে পারে।
আমরা এটি সমাধান করেছি। আমরা আমাদের accessibility রিপোর্টগুলোকে একটি continuous build artifact-এ রূপান্তরিত করেছি।
ত্রুটি খুঁজে পেতে আমাদের পাইপলাইন তিনটি স্তর ব্যবহার করে:
- Static checks: Storybook-এ baseline টেস্টের জন্য আমরা axe-core ব্যবহার করি।
- Interactive tests: keyboard রুলস টেস্ট করার জন্য আমরা custom Vitest helpers ব্যবহার করি।
- Manual audits: আমরা screen reader-এর ফলাফলগুলো JSON ফাইল হিসেবে সংরক্ষণ করি।
আমাদের CI পাইপলাইন এই ফলাফলগুলো মার্জ করে।
যদি কোনো টেস্ট ফেইল করে, তবে PR ফেইল করে। যদি সব টেস্ট পাস করে, তবে সিস্টেম একটি নতুন PDF তৈরি করে। এই PDF-টি আপনার রিলিজের সাথে পাঠানো হয়।
আমরা একটি জিনিস চেষ্টা করেছিলাম যা ব্যর্থ হয়েছে।
আমরা manual audit-এর পরিবর্তে LLM ব্যবহার করার চেষ্টা করেছিলাম। আমরা সাথে সাথে এটি ব্যবহার করা বন্ধ করে দিয়েছি। AI-এর ফলাফল খুব বেশি পরিবর্তিত হয়। একটি CI gate-এর জন্য আপনার স্থিতিশীল (stable) ফলাফলের প্রয়োজন।
সম্পূর্ণ টেকনিক্যাল ব্রেকডাউন এখানে পড়ুন:
Source: https://dev.to/yassine_lakhdar_d0226709a/how-we-automated-our-accessibility-vpats-in-ci-46jk
ARTICLE: একটি ডেভেলপমেন্ট টিম তাদের continuous-integration (CI) পাইপলাইনের মাধ্যমে সরাসরি accessibility VPATs (Voluntary Product Accessibility Templates) তৈরি করার প্রক্রিয়াটি স্বয়ংক্রিয় করেছে, যা আগে একটি পর্যায়ক্রমিক manual রিপোর্ট ছিল, এখন তা প্রতিটি রিলিজের সাথে পাঠানো একটি build artifact-এ পরিণত হয়েছে। নতুন এই ওয়ার্কফ্লো সেই সমস্ত pull request গুলোকে ফেইল করে দেয় যা accessibility regression ঘটায় এবং বিল্ড সফল হলে স্বয়ংক্রিয়ভাবে একটি PDF কমপ্লায়েন্স ডকুমেন্ট তৈরি করে, যা নিশ্চিত করে যে প্রতিটি কোড পরিবর্তন accessibility স্ট্যান্ডার্ডের মধ্যে রয়েছে।
কেন অটোমেশন গুরুত্বপূর্ণ
নতুন কোড আসার সাথে সাথেই accessibility অডিট পুরনো হয়ে যায়। একটি মাত্র মার্জের ফলে missing alt text, ভুল focus order, বা screen-reader সংক্রান্ত সমস্যা তৈরি হতে পারে যা আগে ইস্যু করা VPAT-কে অকার্যকর করে দেয়। ম্যানুয়ালি কমপ্লায়েন্স বজায় রাখার অর্থ হলো প্রতিটি পরিবর্তনের পর অডিট পুনরায় চালানো, যা একটি ব্যয়বহুল এবং ভুল হওয়ার সম্ভাবনাযুক্ত প্রক্রিয়া যা প্রায়শই ডেভেলপমেন্টের গতির সাথে তাল মেলাতে পারে না। CI-তে চেকগুলো অন্তর্ভুক্ত করার মাধ্যমে, টিমগুলো তাৎক্ষণিক ফিডব্যাক পায়, কমপ্লায়েন্স আপডেট রাখে এবং ইনঅ্যাক্সেসিবল (inaccessible) সফটওয়্যার রিলিজ করার ফলে সৃষ্ট আইনি ও সুনামহানির ঝুঁকি এড়াতে পারে।
তিন-স্তরের টেস্টিং পদ্ধতি
Static checks – পাইপলাইন axe-core চালায়, যা একটি open-source লাইব্রেরি। এটি Storybook-এ রেন্ডার করা কম্পোনেন্টগুলোতে missing landmarks বা অপর্যাপ্ত color contrast-এর মতো পরিচিত ভায়োলেশনগুলো স্ক্যান করে। এই টেস্টগুলো কোনো ইন্টারঅ্যাকশন হওয়ার আগেই সমস্যাগুলো শনাক্ত করে।
Interactive checks – Custom Vitest helpers-এর মাধ্যমে keyboard navigation রুলস পরীক্ষা করা হয়, যা নিশ্চিত করে যে focus যৌক্তিকভাবে মুভ করছে এবং interactive element-গুলো স্ট্যান্ডার্ড keyboard event-এর প্রতি সাড়া দিচ্ছে। এই স্তরটি static analysis-এর বাইরে গিয়ে বাস্তব জগতের ব্যবহারযোগ্যতা (usability) নিশ্চিত করে।
Manual audit artifacts – screen-reader টেস্টিং থেকে প্রাপ্ত ফলাফলগুলো JSON ফাইল হিসেবে সেভ করা হয়। ডেভেলপাররা exploratory testing-এর সময় তাদের পর্যবেক্ষণগুলো রেকর্ড করেন এবং কোডের সাথে JSON ফাইলটি কমিট করেন। CI জব এই artifact-গুলোকে স্বয়ংক্রিয় ফলাফলের সাথে মার্জ করে, যা VPAT-এর জন্য একটি একক সত্য উৎস (single source of truth) তৈরি করে।
প্রথম দুটি স্তরের যেকোনো টেস্ট ফেইল করলে pull request ব্লক হয়ে যায়, যা পরিবর্তনটিকে প্রোডাকশনে পৌঁছাতে বাধা দেয়। যদি সব টেস্ট পাস করে, তবে পাইপলাইন সম্মিলিত ডেটাগুলোকে একটি PDF-এ একত্রিত করে যা রিলিজের সাথে সংযুক্ত করা হয়, ফলে অতিরিক্ত প্রচেষ্টা ছাড়াই একটি আপ-টু-ডেট VPAT পাওয়া যায়।
যা কাজ করেনি
টিমটি manual audit-এর অংশটি স্বয়ংক্রিয়ভাবে তৈরি করার জন্য একটি large language model (LLM) ব্যবহার করার পরীক্ষা করেছিল। AI-এর মাধ্যমে তৈরি ফলাফলগুলো খুব বেশি ওঠানামা করছিল, যা CI gate-কে অনির্ভরযোগ্য করে তুলছিল। একটি বাইনারি pass/fail চেকের জন্য ধারাবাহিকতা (consistency) অপরিহার্য, তাই JSON-ভিত্তিক manual artifact-এর পরিবর্তে এই পরীক্ষাটি পরিত্যাগ করা হয়েছিল।
পরবর্তীতে যা লক্ষ্য রাখতে হবে
আপাতত, এই তিন-স্তরের CI মডেলটি VPAT-কে আপ-টু-ডেট রাখতে, ম্যানুয়াল ওভারহেড কমাতে এবং প্রতিটি কোড পরিবর্তনের ক্ষেত্রে accessibility-কে অগ্রাধিকার দিতে একটি বাস্তবসম্মত পথ প্রদান করে।
