对Go代码检查工具在实际问题上的应用效果进行实证评估
《Journal of Systems and Software》:An empirical assessment of go linters on real-world issues
【字体:
大
中
小
】
时间:2026年02月11日
来源:Journal of Systems and Software 4.1
编辑推荐:
静态代码分析工具(linters)在Go语言开发中的检测能力与辅助修复效果不足,通过工业级案例验证发现主流工具存在漏检、误报及指导性差等问题,提出多工具协同使用和开发者辅助工具优化建议。
吴建伟|詹姆斯·克劳斯
MathWorks测试基础设施团队,马萨诸塞州弗雷明汉,美国
摘要
轻量级静态代码分析工具(代码检查工具)通常用于检查复杂代码、定位格式错误、检测软件漏洞和修复错误。然而,开发人员往往对Go等较新语言的代码检查工具的功能了解不足。在本文中,我们通过调查MathWorks实际工作流程中的问题来评估现有的Go代码检查工具。由于Go代码检查工具的早期采用,我们继续观察到一些干扰开发流程的问题。本文介绍了我们使用Go代码检查工具的实际经验,重点介绍了那些经常被遗漏的问题及其后果。评估结果表明,这些工具往往无法检测到问题,即使能够检测到,也不足以引导开发人员找到有效的解决方案。这些结果有助于更好地理解Go代码检查工具的功能,并为未来开发更好的工具提供参考。
引言
对许多开发人员来说,轻量级静态代码分析工具(即代码检查工具)是他们开发工具箱中的重要组成部分。这是因为代码检查工具通常能够检测并帮助解决各种潜在问题(例如未定义的引用、语法错误、缺少nil检查、并发问题等),而无需大量的计算资源、内存或构建开销。因此,使用这些工具可以节省大量的时间和精力(Tómasdóttir等人,2018年;Héricko和?umak,2022年;Vayadande等人,2023年)。
然而,开发人员对代码检查工具的信任程度应基于对其功能和有效性的充分了解。对于某些编程语言,已有研究提供了这种理解。例如,C、C++、JavaScript和Java的代码检查工具已经得到了广泛研究(Johnson等人,2013年;Ayewah等人,2008年;Habib和Pradel,2018年;Tómasdóttir等人,2018年)。这些研究表明,这些语言的代码检查工具能够高效地发现多种潜在问题,例如:
1.代码中隐含的错误(Eghbali和Pradel,2020年;Krishna等人,2023年;Wang等人,2019年;Ayewah等人,2008年;Bessey等人,2010年;Bolotnikov和Borodin,2021年)
2.持续集成/持续部署(CI/CD)集成问题(HK等人,2021年;Zampetti等人,2021年;Do等人,2020年)
3.代码异味(Sanders,2021年;Toman和Grossman,2017年;Bergersen,2016年)
4.软件重构(Das,2021年)
相比之下,开发人员往往对Go等较新语言的代码检查工具的功能了解不足。在MathWorks,Go语言越来越常用于构建内部服务,这促使我们在持续集成和持续部署工作中早期采用了多种Go代码检查工具。然而,尽管进行了集成,我们仍然遇到了对开发过程产生重大影响的问题,包括错误的切片引用、缺失的错误检查以及并发滥用。其中一些问题导致了生产环境中的缺陷、调试延迟或意外的下游行为——这凸显了代码检查工具声称能检测到的问题与实际开发中出现的问题之间的差距。因此,开发人员对这些工具的信任基础并不牢固。受此启发,我们计划对其他尚未得到充分研究但越来越受欢迎的语言的代码检查工具进行进一步研究。为此,本文重点关注Go编程语言,因为它在基础设施软件开发领域得到了广泛应用。
本工作的目的是介绍我们在MathWorks不同团队中早期采用Go代码检查工具的实际经验,重点关注那些被遗漏的问题及其后果。在这里,我们考虑的问题仅限于之前由开发人员识别并修复的问题,以消除代码检查工具可能产生的误报风险。我们关注不同Go代码检查工具的功能,因为:
1.我们有内部需求,需要主动使用Go代码检查工具来修复Go程序中的潜在问题
2.现有的评估Go代码检查工具功能的研究有限
3.现有研究均未关注Go代码检查工具的实际性能,并未与专业开发人员进行评估——这是解决我们内部工作流程需求的关键方面。
出于内部需求,根据我们对多个软件开发团队的观察,我们注意到一些反复出现的问题,这些问题可能属于特定类别。这些问题继续阻碍我们的开发流程,因此通过实证研究进一步调查这些问题将是有益的。此外,Go语言越来越受欢迎(例如,它是构建Kubernetes、Hertz等核心基础设施项目的首选语言(GitHub社区,2024年)。因此,这项研究不仅符合我们的内部需求,也有助于外部开发人员更好地了解Go代码检查工具的功能。为了实现我们的目标,我们对未被检测到的问题进行了分类,并分析了它们的后果,还对常用的Go编程语言代码检查工具进行了实证评估。具体来说,我们想回答两个研究问题:“RQ1:代码检查工具在检测问题方面的效果如何?”和“RQ2:代码检查工具在帮助开发人员解决问题方面的效果如何?”所考虑的代码检查工具是根据外部整理的列表选定的(Denis Isaev,Ayoub Omari,2024年),而考虑的问题则是从流行的开源项目和MathWorks内部项目的issue tracker中抽取的。为了评估代码检查工具检测问题的能力,我们简单地在问题被修复之前在每个目标应用程序的版本上运行了这些工具。为了评估代码检查工具帮助开发人员解决问题的能力,我们对10位专业开发人员进行了调查,以评估流行Go代码检查工具的功能和有效性。评估结果表明:
1.代码检查工具的功能各不相同
2.代码检查工具的性能较差,未能检测到对我们系统有重大影响的问题
3.结合使用不同的代码检查工具可能会提高其有效性,但并不能保证
4.开发人员普遍认为代码检查工具是准确的(即它们能够识别实际问题),但它们并不能有效地引导用户解决问题。
基于评估结果,我们提供了一些可行的建议,以帮助内部和外部开发人员了解Go代码检查工具的功能,并促进未来新代码检查工具的开发。
本文的其余部分将更详细地描述相关工作:第2节讨论相关研究,第4节和第3节描述了实际中遇到的问题及其后果以及代码检查工具;第5节和第6节讨论了研究问题1和研究问题2的结果,第7节讨论了有效性的威胁,第8节讨论了一些可行的建议以及从评估结果中得到的经验教训,第9节讨论了结论和未来的工作。
相关研究
相关研究
在本文中,我们对Go语言的静态分析工具进行了实证评估,涉及不同的研究领域。本节的目的是回顾每个领域中最相关的研究成果。
考虑的问题
在本节中,我们描述了用于识别源代码中静态缺陷的过程,这些问题也是本文研究的对象。由于我们希望全面了解Go代码检查工具的功能,因此需要考虑那些在各种项目中可能出现的常见且具有代表性的问题。识别这类问题的一种方法是检查现有项目的issue tracker。这是我们选择的方法。
考虑的工具
在本节中,我们描述了选择用于研究的Go代码检查工具的标准。第一个标准是代码检查工具必须获得在内部项目上使用的批准。选择这一标准的理由是,只有获得批准的工具才能用于内部实验项目并纳入本研究。这一批准策略是由另一个内部团队设计的,我们无权在此透露更多细节。
RQ1:检测有效性
在本节中,我们描述了与我们的第一个研究问题相关的工作内容:所考虑的Go代码检查工具在检测问题方面的效果如何?我们的方法是将每个代码检查工具应用于每个问题,看该工具是否能够检测到问题。具体来说,我们对每组代码检查工具和问题进行了以下操作:首先,我们在问题出现之前立即在项目版本上运行了代码检查工具。
RQ2:解决问题有效性
在本节中,我们描述了与我们的第二个研究问题相关的工作内容:所考虑的Go代码检查工具在帮助开发人员解决问题方面的效果如何?在我们的环境中,有几个问题虽然被代码检查工具检测到,但仍需要开发人员付出大量努力才能理解和解决。我们的方法是调查专业开发人员的意见。
有效性的威胁
在本节中,我们讨论了这项研究的潜在有效性威胁。每个威胁按照其在章节中的顺序进行介绍。由于本研究在考虑的工具数量、问题和参与者方面存在局限性,因此观察结果可能不具有普遍性。然而,我们在选择参与者时非常谨慎,相信结果能够反映当前代码检查工具和开发人员对其的看法。
经验教训和可行的建议
根据第5节的观察,我们得出以下结论:现有的Go代码检查工具在问题检测方面的能力有限且不一致,即使在有限范围内也不可靠。使用多个代码检查工具可以略微提高覆盖率,但并不能显著提高有效性。实践者应将代码检查工具视为辅助工具,而不能依赖它们来识别实际问题。
根据第6节的发现和定量分析,我们
结论和未来工作
我们进行了一项研究,旨在了解使用Go语言编写的程序的代码检查工具的功能和有效性。首先,我们确定了所考虑的代码检查工具。其次,我们通过审查内部和外部Go项目的pull请求来确定所考虑的问题。利用分类后的问题,我们对10位专业开发人员进行了实证评估,以评估代码检查工具的性能
CRediT作者贡献声明
吴建伟:写作——审稿与编辑、撰写初稿、可视化、验证、监督、软件资源管理、项目管理、方法论研究、资金获取、数据整理、概念构建。詹姆斯·克劳斯:写作——审稿与编辑、撰写初稿、可视化、验证、监督、方法论研究、形式化分析。
利益冲突声明
作者声明他们没有已知的财务利益或个人关系可能影响本文所述的工作。
生物通微信公众号
生物通新浪微博
今日动态 |
人才市场 |
新技术专栏 |
中国科学人 |
云展台 |
BioHot |
云讲堂直播 |
会展中心 |
特价专栏 |
技术快讯 |
免费试用
版权所有 生物通
Copyright© eBiotrade.com, All Rights Reserved
联系信箱:
粤ICP备09063491号