知识卡片
持续反馈机制要一站式整合进工作流,而不是依赖人工主动查看
内容
大多数烂代码就像癌症一样,等到它已经产生了能被明显感觉到的负面影响时,往往已经是”晚期”、很难根治了——所以提前发现代码正在变烂的趋势,比事后补救要重要得多。这类早期发现工作可以依赖CheckStyle、FindBugs这类静态检查工具,去持续监测一些能反映质量下滑趋势的信号:每天产生大量新代码、测试覆盖率下降、静态检查发现的问题数量增多,都是值得关注的预警信号。有了代码仓库之后,可以把这类检查工具和代码提交这个触发点结合起来(用Jenkins+SonarQube或类似工具),让每次代码提交都自动伴随静态检查、自动运行测试、自动生成报告。但在实践中会发现一个反直觉的现象:市面上关于持续反馈的工具五花八门,但真正能发挥作用的往往只有那么一两个——原因在于大部分人并不会在每次提交代码后,再专门打开一个网页、点击”生成报告”,或者登录另一个独立系统去查看测试覆盖率是不是变低了;一个需要人主动、额外操作才能获取到的反馈信息,在真实工作节奏下几乎注定会被忽略。因此一站式整合的系统往往比功能更多、但相互独立的一堆工具表现得更好——把代码管理、回归测试、代码检查和code review集成到同一条流水线上,让每次代码仓库有变更时自动运行测试用例、进行代码风格检查,并把结果直接输出到review界面,让review人员在做本来就要做的动作(审查代码)时,顺带就能看到这些质量检查结果,而不需要专门再切换到另一个系统去查看。这个案例提示了一条设计任何”反馈/提醒机制”的重要原则:与其追求功能全面但需要使用者主动触发的独立工具,不如把关键反馈整合进使用者本来就一定会经过的工作流程节点里,让获取反馈这件事从”需要额外主动做的事”变成”顺带就能看到的事”——这个差异往往直接决定了一套反馈机制在真实场景下有没有人真的会用。