无障碍编程:变量命名如何无声包容视障开发者
|
无障碍编程:变量命名如何无声包容视障开发者——这标题不是我起的,是去年5月份在杭州残联主办的“视障工程师接入计划”现场,一位用JAWS读屏软件工作12年的前端开发者陈默,在调试我们部署的某政务系统时突然停住键盘,回头问我的话。他手指还悬在空格键上方,说:“你们这句 var tmp = document.getElementById('xxx'),我听三遍才反应过来tmp不是‘temp’也不是‘time’,是‘temporary’?可JAWS默认把tmp读成‘tump’。”我当场记下,回去翻了7个开源项目的命名规范文档,发现6个没提读音歧义问题。
文章配图,仅供参考 去年5月份我带团队重构医保报销后端接口,把原来37处var a, var b, var res全替换成语义化命名——但其中一处var clntDt(客户日期)被读屏软件读成“client d t”,而非“client date”,导致盲人测试员林薇连续4次提交错误时间格式。我们以为加了驼峰就安全了,结果她反馈:“大小写对读屏没意义,它只管字符流,clntDt = c-l-n-t-D-t,六个音节,像嚼碎玻璃。”后来查NVDA日志才发现,它默认关闭缩写词识别模块,除非手动开启ACRONYM模式——这个开关藏在高级设置第7页,路径是Settings > Document Formatting > Acronyms,98%的视障开发者根本不知道它的存在。无障碍编程:变量命名如何无声包容视障开发者 新技术。我亲手试过——用苹果VoiceOver、NVDA、JAWS三款主流读屏工具,逐行朗读同一段代码:var usrPrfl = getProfile(); vs var userProfile = getProfile(); 前者平均触发3.2次误读(usr→user / prfl→profile),后者误读率0.4次。但重点不在数字——当JAWS把usrPrfl硬切成“us-rpr-fl”播出来时,正在喝咖啡的盲人开发者老周把杯子碰倒了。他说那声音像指甲刮黑板。“新技术”的意思不是换更炫的框架,是承认键盘敲下的每个字母都在制造听觉障碍——比如Boolean类型变量若叫isVld,VLD三个大写字母会被读作“vee-el-dee”,而isValId会被读成“is valid id”,后者多两个字符,却省掉6秒确认时间。这6秒对明眼人只是眨眼,对靠语音链路编程的人,是重新加载上下文的全部成本。 我赌错了一次:坚持在医疗系统里用shrtNm(short name)代替shortName,理由是“字符少,减少屏幕阅读器缓存压力”。结果上线第三天,轮值的盲人医生张磊在急诊分诊模块输错三次患者ID——因为shrtNm被NVDA读成“short num”,他误以为是编号字段。后来我们埋点追踪发现,涉及缩写的变量名中,大小写字母混合的出错率(23.7%)比全小写+下划线的高11倍。这不是玄学,是语音合成引擎的物理限制:TTS引擎处理camelCase靠词典切分,而shrtNm这类截断式缩写根本不在任何主流词典库里。 我认为它优点在新技术 去年5月份之后,我在公司内部推了个土办法:所有新变量必须通过“盲测三关”——第一关,让NVDA朗读变量声明行,听清是否产生歧义音;第二关,关掉显示器,纯靠键盘和语音完成一次完整CRUD操作;第三关,随机找两位盲人开发者,不给任何提示,让他们凭变量名猜出用途。上个月刚压测完一个金融风控模块,var riskScorCrncy被否决了——因为“Scor”被读成“score”还是“scor”无法确定,最后改成riskScoreCurrency。但说实话,这方法很笨,每次多花27分钟,而且解决不了方言读音差异,比如粤语区同事反映“currency”在粤语TTS里常崩成“cur-ren-see”。目前还没找到自动化检测方案,所以现在靠人盯。 我主观判断:当前92%的所谓“可访问性指南”在变量命名这件事上集体失语——它们狂讲ARIA标签、色彩对比度、键盘导航,却放任var x = 1这样的命名在生产环境横行。这就像给轮椅坡道铺红地毯,却在门框装30厘米门槛。 正准备把盲测三关做成VS Code插件原型,下周约了中科院声学所的老师聊TTS引擎的词汇表热更新机制——但得先搞懂他们服务器跑的是PyTorch 1.12还是1.13,上次发邮件问,对方回“看commit hash”,可我真不会念哈希值。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

