写点什么

再无下文:Kubernetes 上众多 TODO 注释遭到遗忘

  • 2020-02-27
  • 本文字数:2338 字

    阅读完需:约 8 分钟

再无下文:Kubernetes上众多TODO注释遭到遗忘

Kubernetes 是个体量可观的大项目。这里说的“大”,指的不单单是愿景野心,同时也体现在源代码量层面。截至本文撰写之时,该项目拥有超过 86000 条提交、2000 多位贡献者、2000 多个开放问题、1000 多个公开 PR 以及超过 61000 星。绝非虚言,大家打开项目的 GitHub 页面即可求证。


根据计算,目前 Kubernetes 项目的 go 源代码量超过 430 万行(总代码量已经超过 520 万行),“actual”行超过 300 万,注释行也已经达到 70 万以上。项目的总文件数为 16000 多个,其中包括 vendor/目录。


我们的工作是通过一套代码库显示项目中的 TODO 注释量,希望帮助开发人员借此执行各类基础性项目管理流程。


这一次,我们决定利用一款小型 TODO 查找器对 Kubernetes 源代码进行一番筛查,看看结果究竟如何。下面来看我们的发现。


我们针对 commit 9bf52c2 的源代码运行了 tickgit。该 CSV 输出结果随后会被导入至 SQLite 以运行其他后续查询。请注意,该工具仅从已检出的提交当中查找 TODO 注释;曾经添加,但随后被删除的 TODO 部分不会被计入在内。因此,我们得出的数字将仅反映查询时仍“活动”于代码库之内的 TODO 注释。


  • 总体情况(9bf52c2)共存在来自 363 位不同作者、1230 个文件的 2380 条 TODO

  • 其中 460 条 TODO 注释指向明确待办人,例如 // TODO (patrickdevivo) Fix the …

  • 截至目前,2019 年年内新增 TODO 数量为 489 条

  • 单一 TODO 的平均存在周期为 860 天(折合 2.3 年)

  • 最早的现存 TODO 创建于 2014 年 6 月 6 日 来自首次提交

  • 最新的 TODO 来自 2019 年 12 月 9 日

  • 单一文件中的最高 TODO 数量为 33 条

  • deads2k 提交的现存 TODO(git blame)量最高,为 147 条

  • 此次提交一次性添加了最多 TODO(仍在源中),为 64 条


结果汇总计数文件路径
33cluster/gce/util.sh
25pkg/apis/core/types.go
23staging/src/k8s.io/api/core/v1/types.go
21staging/src/k8s.io/legacy-cloud-providers/aws/aws.go
20staging/src/k8s.io/code-generator/cmd/conversion-gen/generators/conversion.go
20pkg/apis/core/validation/validation.go
16test/e2e/network/service.go
16pkg/kubelet/kubelet.go
14test/e2e/framework/util.go
14pkg/kubelet/kubelet_pods.go


包含 TODO 最多的文件


作者计数
deads2k147
Clayton Coleman105
Chao Xu99
Dr. Stefan Schimanski93
Jordan Liggitt81
David Eads60
Random-Liu54
Wojciech Tyczynski50
Yu-Ju Hong43
Prashanth Balasubramanian38


提交 TODO 最多的作者


计数sha
646a4d5cd7cc58e28c20ca133dab7b0e9e56192fe3
19e01ff1641c7321ac81fe5775f6ccb21aa6775c04
194fb28dafad121e163fa86dc90067ce3d14415811
18adb75e1fd17b11e6a0256a4984ef9b18957d94ce
14963c85e1c807efcdbb82dd44439dc3c55f6a0bfd
148b17db7e0c4431cd5fd9a5d9a3ab11b04e2f0a7e
13f0f78299348afcf770d4e8d89dcea82f80811b28
11d0b94538b9744d0c06df6ddec2604be168568f9d
10f1248b9c829e225138ab6d6234221c63092f7592
10cd663d7ad00937cffa8a09e4761acb95d34c89a3


添加 TODO 最多的提交


计数年份
342014
2492015
5232016
6502017
4352018
4892019


各年份新增 TODO 数量


大家可以使用 tickgit todos --csv-output 获取原始 TODO 数据,得出与我们相似的查询结果。以上汇总内容来自 SQLite。


结论与问题这些结果未经任何处理与预设,完全是对 Kubernetes 源代码当中 TODO 注释的即时整理。我们对 TODO 的主要来源也比较明确,其中大部分由 Kubernetes 项目的顶尖贡献者创建。


我们还发现,虽然 Kubernetes 这种大规模项目的体量可观,但开发人员在 TODO 注释方面的行为模式与小项目没什么区别,只是绝对数量更高。


一大重要发现是,与 GitHub 提问相比,TODO 注释的数量更多。这是种有趣的现象,因为 TODO 代表着大量潜在的“工作内容”或者待办事项,而且除非我们亲身参与源代码开发,否则 TODO 对普通用户的提示性并不强。


核心贡献者们可能非常熟悉自己负责的代码库部分,也对自己的 TODO 与“潜在工作”了然于胸。但是,这一切在外部观察者看来毫无透明性可言。相比之下,GitHub 提问或者其他公开的交互跟踪机制显然更为便捷易用。


很多开发者朋友应该都清楚,软件项目本身类似于“生命体”。它会不时变化、持续改进、不断完善,同时带来大量讨论。工作流与流程安排非常重要,因为只有不断反思才能成就高质量的代码。通过在 Kubernetes 源代码当中的 TODO 注释,我们得以一窥反思的力量。然而,由于缺少相关基准,TODO 注释的平均存在周期长达 2.3 年,相当夸张。不过这里我们不敢评价太多,毕竟只有真正熟知项目内情的核心贡献者,才能断言 2.3 年算不算太长。接下来如果有机会,我们打算将 Kubernetes 的 TODO 周期与其他大型开源项目进行一番比较,相信结果会更有启发意义。


如果要对代码库中的 TODO 注释进行更深入的分析,我们可能需要纵观项目发展历程中曾经出现的所有 TODO,而不仅仅是仍存在于当前源代码中的 TODO。


  • TODO 的平均关闭周期是多长?

  • TODO 注释的平均生命周期是多长?

  • 不同流行代码库之间的 TODO 注释有何区别?


这事……有意义吗?当然有意义。TODO 注释所涉及的工作类型往往是那种不值得单独发一条申请,但却又比较重要的内容,因此有必要在代码行内做出注释与描述(当然,很多 TODO 也会引用问题/申请)。由于属于代码的组成部分,因为 TODO 与待完成工作往往“更加接近”。TODO 易于添加,但也很容易被遗忘(目前,Kubernetes 源代码当中仍然包含 1800 多条 2019 年之前添加的 TODO)。


我们希望能够创建一款显示相关代码元数据的工具,确保软件开发人员能够更轻松地完成规模不同、类型各异的项目,而显示 TODO 信息只是其中的一部分——当然,也是非常重要的一部分。


原文链接


https://medium.com/@augmentable/looking-at-kubernetes-2k-todo-comments-b2db42dc7fdb


2020-02-27 12:292354

评论

发布
暂无评论
发现更多内容

突破风电运维瓶颈!上交大联合昇腾实现联邦学习训练性能飞跃

极客天地

谷歌云 | 用 AI 启航,Gemini 重塑旅游酒店行业新体验

Cloud Ace 云一

华为开发者空间-云开发环境,实现PyCharm SSH远程开发

华为云开发者联盟

SSH PyCharm Pro 华为开发者空间

UI总改版?这个自我修复的AI测试神器让团队告别深夜紧急回滚

测试人

VMware ESXi 8.0U3g 发布 - 领先的裸机 Hypervisor

sysin

esxi

生产力UP!文心快码 Rules 功能实战指南

Comate编码助手

#程序员 AI辅助编程 AI 代码助手 AI 编程 文心快码

技术周期揭秘:AI Agent 黄金期还有多久

Techinsight

医护年省120小时!这场静默革命正在抢救医院资产

斯科信息

斯科信息 RFID系统 RFID读写器 RFID智能药柜

VMware vSphere 8.0 Update 3g 下载 - 企业级工作负载平台

sysin

vSphere

100万QPS短链系统如何设计?

电子尖叫食人鱼

系统开发

全民趣味测评小程序系统:趣味互动解决方案

微擎应用市场

牛蛙供应链商城小程序系统:全链路电商解决方案

微擎应用市场

别再手动筛选训练数据!Bright Data 智能处理,打造一流亚马逊电商AI推荐官

不叫猫先生

爬虫 模型训练 数据集

「AI+云」共创开发未来:Gemini Code Assist 与 Cloud Workstations 协同释放生产力

Cloud Ace 云一

gemini 云工作站

c# ACME client (补充)

八苦-瞿昙

数据分析与AI丨F1赛车级数据智能:Altair Panopticon如何助力Prodrive领跑赛事工程?

Altair RapidMiner

人工智能 AI 数据分析 汽车 仿真

用 AI 启航,Gemini 重塑旅游酒店行业新体验

Cloud Ace 云一

AI+ gemini

万字深度解析LangGraph如何解决HIL四大行业级痛点?​

聚客AI学院

agent LLM 大模型安全 AI 智能体 LangGraph

在Sermant中使用外部JavaAgent的最佳实践——以OTEL为例

华为云开源

开源 华为云 微服务治理 sermant

百度智能云千帆大模型(武汉)创新中心揭牌,首批23家企业入驻

科技热闻

[大厂实践] Netflix 时间序列数据抽象层实践

俞凡

架构 大厂实践

火山引擎多模态数据湖:AI时代的数据湖如何挖掘图片、视频、语音的“富矿”?

字节跳动数据平台

Playwright自动化测试系列课(4) | 异步加载克星:自动等待 vs 智能等待策略深度解析​

测吧(北京)科技有限公司

人工智能 测试开发 playwright agent

九块九付费进群系统:社群变现新工具

微擎应用市场

华为开发者空间部署Dify,构建儿科医生智能应用

华为云开发者联盟

华为云ModelArts dify DeepSeek 华为开发者空间

CrossOver玩游戏会损害电脑吗 CrossOver玩游戏会卡吗

凡凡不烦

crossover CrossOver Mac下载 如何在Mac上运行win游戏 苹果电脑必备软件

基于开发者空间的电商数据迁移:MySQL到GaussDB的奇幻之旅

华为云开发者联盟

Gauss DB #Mysql 华为开发者空间

IT服务台深陷手动操作泥潭?ManageEngine卓豪自动化功能释放管理员时间

ServiceDesk_Plus

ManageEngine卓豪

VMware vCenter Server 8.0U3g 发布 - 集中管理 vSphere 环境

sysin

vcenter

LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集

阿里巴巴云原生

阿里云 云原生 可观测

有没有不会BOM 也能做好生产的攻略啊?抱歉,这真没有!

积木链小链

BOM 智能制造 生产管理

再无下文:Kubernetes上众多TODO注释遭到遗忘_容器_Patrick DeVivo_InfoQ精选文章