“选错目标”和“没有选中”要分开:VR任务错误分类设计
界面里一个红色提示可能对应完全不同的事件射线没有命中、命中了不可交互对象、输入属于旧题或者确实选择了与规则不符的目标。如果日志把它们全部记成错误后续既难复现也容易误读参与过程。分类应从产品规则与输入链路共同定义。本文给出一个小型判定顺序先判断事件是否属于本轮再确认是否允许作答随后处理输入是否有效最后比较任务目标。先明确哪些是系统事件哪些才是作答没有有效目标不一定构成一次答案。有些任务允许空指向但不提交有些任务则把超时独立记录。应在内容说明中确定不能让开发者默认所有按键都进入正确率分母。同样“暂停期间按键被忽略”不是任务答错。技术日志可以记录被忽略的事件面向课程的记录则应依据清楚的规则筛选两者不必使用同一个计数器。fromdataclassesimportdataclassdataclass(frozenTrue)classInput:round_id:inttarget:str|Noneinteractable:booldefclassify(event,*,round_id,phase,expected):ifevent.round_id!round_id:returnstale_roundifphase!active:returnnot_answeringifevent.targetisNone:returnno_hitifnotevent.interactable:returnnot_interactablereturncorrectifevent.targetexpectedelseincorrect_targetdefjudge(event,phaseactive):returnclassify(event,round_id7,phasephase,expectedapple)assertjudge(Input(6,apple,True))stale_roundassertjudge(Input(7,apple,True),paused)not_answeringassertjudge(Input(7,None,False))no_hitassertjudge(Input(7,wall,False))not_interactableassertjudge(Input(7,pear,True))incorrect_targetassertjudge(Input(7,apple,True))correct这个顺序是一项设计选择。若业务需要统计暂停期间的空间命中可以另保留原始事件但不能为得到更多诊断信息改变“是否算作答”的定义。分母应来自分类之后设一段记录包含六类事件只有correct与incorrect_target进入本例的作答统计。no_hit是否进入必须由任务事先约定。不要一边统计所有按键一边把结果称为答案正确率。报告或界面展示时还需说明是否包含重试、同一题多次选择如何处理、退出任务怎样计算。否则即使分类函数没有bug指标也可能因口径不同而无法比较。原始输入可以记录目标标识、轮次、阶段和事件顺序不需要加入姓名、联系方式或其他与复现无关的信息。若记录涉及真实使用者应按实际权限与最小必要原则处理示例不使用个人数据。如何验证分类没有互相覆盖先为每一类构造独立输入再增加组合条件。例如旧轮次且无命中按当前优先级应返回stale_round。这能确认分类结果由规则决定而不是偶然取决于某个字段读取顺序。其次检查输入异常是否触发了不恰当的红色答错提示。日志分类正确不代表UI映射就一定正确每类结果还需要对应合适的反馈与后续动作。最后再检查一轮结束后的状态。结果提交以后如果继续接受输入可能产生重复错误或改变分母。分类、封口与统计应各自有明确边界。这套模型用于解释工程事件不把操作结果当成能力判断。保留“没选中”和“选错”的差别首先是让任务记录与实际过程对应为开发与课程说明提供更清楚的信息。作者说明由维爱智项目内容整理代码为独立Python教学示例不代表生产软件已采用相同分类。