R1.18.2coverage is not correct use设计

覆盖率高不等于用得对

别名: 用对 · 误用覆盖 · coverage vs correctness · misuse under coverage

概念解释

覆盖率问的是「这里有没有出现体系标签」。用得对问的是「这个标签的属性组合、槽位内容和交互路径是不是体系允许的那一种」。前者可以接近 100%,后者同时很糟:按钮拿来当链接、对话框拿来当页面、把禁止一起开的两个属性同时打开、空态槽里塞了一段与空态无关的营销。高覆盖只证明调用点选择了体系的名字,不证明名字后面的用法成立。

「覆盖」是集合运算:标签 ∈ 体系。 「用得对」是谓词:这次调用满足该组件的合法配置。两个量没有蕴含关系。

机制

扫描器默认停在名字。认出 <Button> 就记一次覆盖,代价低。要判断用得对,必须读属性、读子树、有时还要跑起来看键盘和焦点。那是另一套分析,成本高两个数量级,于是报表里往往只有覆盖。使用方很快学会:只要标签是体系的,度量就过。于是误用被覆盖率养起来——越是被度量盯着「用了没」,越会把不合适的职责硬套进已有标签,因为换一个对的名字或开一个新组件不会涨覆盖,硬套会。

合法配置是一份有限表:哪些属性互斥、哪些槽必须有内容、哪条路径禁止。覆盖率没有这张表,所以它无法区分「用了按钮」和「用对了按钮」。把覆盖当健康,等于把名字当质量。

边界

尚无合法配置表的早期组件,覆盖是唯一能量的量,暂时可以单独报,但必须标明「未测用法」。视觉上无法区分的合法变体(同样的主行动,只是品牌表不同)不应记为误用。运行时才决定的内容(槽里将来才注入的子树)会让静态谓词误报,需要在可运行示例或集成测试里补一刀,而不是因此放弃用法检查。覆盖率为零时谈用得对没有对象;先有调用点,再有对错。

怎么落地

  • 为高频组件写合法配置表:互斥属性、必需槽、禁止路径。扫描在覆盖之外再跑这张表,产出「覆盖但非法」列表。
  • 报表拆成两列:覆盖率、合法率(合法调用 / 全部体系调用)。禁止只发覆盖。
  • 把最常见的非法组合做成检查器规则,在编辑器当场标红,不要等季度报表。
  • 验证:抽覆盖率最高的一个流程,按配置表人工标每一处调用为合法或非法。非法占比若被覆盖率的漂亮数字盖住,度量就在撒谎。再故意写一处禁止组合(按钮当链接、互斥属性同开):覆盖应仍计 1,合法应计 0——两列若一起动,扫描还停在名字上。

延伸

  • 同组R1.18.1 采用率按调用点统计而非按团队统计 · R1.18.3 度量用于定位缺口而非考核使用方 · R1.18.4 绕过点的分布指出体系缺什么
  • 相邻R1.04 用法准则 · R1.12 用法准则与反例文档
  • 站内检索coverage is not correct use · misuse under coverage · legal configuration

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/R1.18.2