在研发管理中,如何准确评估研发人员的效能一直以来都是一个挑战。传统的评估方式大多依赖于观察软性技能的表现,如问题的跟进实时性、反馈的有效性、推动事情的能力,以及解决技术问题的能力。然而,对于研发人员而言,他们的代码质量和效率往往是最直接、最硬性的评价标准。而代码很多时候是看不到的,特别是当团队规模到达一定数量的时候。
代码的质量和开发效率是研发同学工作的核心。好的代码不仅要能完成预设的任务,也要易于理解、修改和测试,以便其他开发者在未来能够维护和改进。代码的质量和开发效率可以直接反映开发人员的技术能力和专业知识。因此对于一个研发管理者来说,要想掌控一个团队的情况,从代码出发,从代码量和代码质量来度量是一个不可或缺的角度。
为何要度量代码?
代码是软件产品的基础,深入理解代码可以帮助我们更好地了解产品的健康状况、性能状况和维护情况。更重要的是,通过深入分析代码,我们可以发现代码中可能存在的问题和改进点,以便提前发现并解决问题,降低项目风险。基于代码的研发效能度量为我们提供了一个量化、可度量的评估标准,从而使我们能够更科学、更有效地管理和优化研发过程和研发分工。
基于代码的度量是什么?
基于代码的研发效能度量是一种通过对代码及代码提交进行深入分析和理解,从中洞察出可能存在的问题和改进点,以提高研发效率和产品质量的方法。这涉及到代码质量分析、代码性能分析、代码测试分析、代码维护性分析以及技术债务分析等多个方面。
从实际落地来说,基于代码的研发效能度量通常涉及到以下几个方面:
-
代码质量:这是衡量代码健康状况的重要指标。
-
代码复杂度:例如,使用圈复杂度(Cyclomatic Complexity)或 Halstead 复杂度(Halstead Complexity)度量代码的逻辑复杂度。 -
代码规范性:如代码是否遵循了 PEP 8(Python编程规范)或其他语言的编程规范。 -
代码重复率:如通过工具(如 SonarQube 或 PMD )检测代码的重复部分,计算代码重复率。 -
用例覆盖率:如使用工具(如 JUnit 和 Cobertura )运行单元测试和集成测试,计算用例覆盖率。 -
注释覆盖率:SonarQube 等工具可以分析出代码覆盖度
-
-
开发活动:这是了解开发团队工作模式的重要度量。
-
提交频率:如通过 Github 或其他版本控制系统统计每个开发人员的提交频率。 -
代码修改频率:如统计某段代码或某个文件被修改的频率,以理解代码的稳定性。
-
-
问题和缺陷:这是评估代码质量问题和风险的关键度量。
-
缺陷密度:例如,通过错误跟踪系统(如Jira或Bugzilla)统计缺陷数量,然后除以代码行数,计算缺陷密度。 -
问题解决时间:例如,统计从发现问题到解决问题的平均时间,了解团队的响应效率。
-
以上就是基于代码的研发效能洞察的主要组成部分。这些度量有助于我们理解代码的健康状况、开发过程的效率,以及代码质量的问题和风险。需要注意的是,这些度量并不能全面反映研发效能,还需要结合具体的项目情况和团队情况进行分析。
基于代码的研发效能度量如何实施
将以上的这些组成部分、时间、人、项目、团队这些结合起来就是一个基本完整的基于代码的研发效能分析系统。
做基于代码的研发效能洞察无非是回答如下的 2 类问题:
-
做了什么,做了多少 -
你的团队做了什么,做了多少 -
你的团队成员做了什么,做了多少 -
每个成员在团队中的水平处于什么样的水平,有没有特别突出的(多或少)
-
-
做得怎么样 -
你的团队的代码质量如何 -
有没有比较突出(好或坏)的成员 -
有没有共性的质量问题
-
要想回答这些问题,基于代码层面,通过代码度量研发的研发效能,影响力产出,代码质量等,拿到客观的数据度量到人、团队、项目。
我们做代码的洞察实施简化后可以有 4 步:
1.引入工具或系统:将代码这个盒子打开,看到度量后的数据。这里当然会有一个问题分析、行业方案对比的过程。
-
机制化跟进:需要有一个组织来承接事项,无组织即无成果。结合管理人员的机制化跟进,根据度量的数据和系统的指标,以某个时间间隔来做洞察,发现问题。 -
整体洞察:从下往上,形成整体效能的洞察,根据发现的问题,明确代码产出的问题点和能衡量状态的指标。 -
复盘:以 3 个月以一个区间来盘点指标和问题,清晰团队/项目的变化。
基于代码的研发效能度量的优势与挑战
当我们引入某些工具或系统来做了基于代码的度量或洞察后,可以得到如下的一些东西:
-
全面的代码质量管理:通常能够全面地对代码质量进行管理,包括代码质量分析、代码审查等。 -
技术债务管理:通常提供了一种有效的方式来管理技术债务。 -
提高团队效率:通过对代码的持续分析和审查,可以帮助团队提高效率,减少错误和问题。 -
提供具有洞察力的数据和报告:通常能够提供具有洞察力的数据和报告,帮助团队更好地理解代码质量和研发效能。
以上是一些好的方面,但是也有一些不好的点:
-
需要一定的学习和适应:对于新的系统和工具,团队成员可能需要一段时间来学习和适应。 -
可能存在一定的成本:这类系统通常需要付费使用,这可能会增加公司的开支。 -
可能与现有的流程和工具不兼容:如果团队已经有了自己的流程和工具,那么使用新的系统可能会导致一些兼容性问题。 -
安全或隐私问题:如果系统是基于云的服务,这意味着代码需要上传到外部服务器进行分析。这可能会引发一些安全和隐私问题。一般我们选择通过私有化部署来解决,但是成本会更高一些。
最后,随着时间的推移,可能会出现「面向指标编程」的情况。这通常发生在过度重视某些度量标准并以此作为主要驱动开发的团队或组织中。这些度量标准可能包括代码行数、问题数、提交频率、测试覆盖率等。
这样可能会带来一些问题:
-
优化错误的指标: 有时,开发同学可能会在不影响或甚至损害总体产品质量的情况下优化这些指标。比如,如果过度关注代码行数,开发者可能会写出冗长和复杂的代码来增加代码行数。 -
忽视质量和实用性: 过度关注指标可能会导致开发者忽视代码质量、可读性、可维护性和实用性。例如,开发者可能编写无实际价值的测试,只是为了提高测试覆盖率。 -
鼓励短视行为: 如果某些指标被用作评估性能或提升的基准,开发者可能会采取短期行为来满足这些指标,而忽视了长期的技术健康状况。
为避免「面向指标编程」,作为团队的管理者应该谨慎选择和使用度量标准。应该选择那些能反映出代码质量、可维护性和实用性的指标,并且要注意平衡多个指标,避免过度优化某一个指标。同时,要培养一个开放的团队文化,鼓励开发同学关注长期的技术健康状况,而不仅仅是满足短期的指标。