2025-11-23T09:49:16.774551

Readability and Understandability of Snippets Recommended by General-purpose Web Search Engines: a Comparative Study

Dantas, Maia
Developers often search for reusable code snippets on general-purpose web search engines like Google, Yahoo! or Microsoft Bing. But some of these code snippets may have poor quality in terms of readability or understandability. In this paper, we propose an empirical analysis to analyze the readability and understandability score from snippets extracted from the web using three independent variables: ranking, general-purpose web search engine, and recommended site. We collected the top-5 recommended sites and their respective code snippet recommendations using Google, Yahoo!, and Bing for 9,480 queries, and evaluate their readability and understandability scores. We found that some recommended sites have significantly better readability and understandability scores than others. The better-ranked code snippet is not necessarily more readable or understandable than a lower-ranked code snippet for all general-purpose web search engines. Moreover, considering the readability score, Google has better-ranked code snippets compared to Yahoo! or Microsoft Bing
academic

Readability and Understandability of Snippets Recommended by General-purpose Web Search Engines: a Comparative Study

基本信息

  • 论文ID: 2110.07087
  • 标题: Readability and Understandability of Snippets Recommended by General-purpose Web Search Engines: a Comparative Study
  • 作者: Carlos Eduardo C. Dantas, Marcelo A. Maia
  • 分类: cs.SE (Software Engineering)
  • 发表时间/会议: AeSIR '21, November 15–11, 2021
  • 论文链接: https://arxiv.org/abs/2110.07087

摘要

开发者经常在Google、Yahoo!或Microsoft Bing等通用搜索引擎上搜索可重用的代码片段。但这些代码片段在可读性或可理解性方面可能质量较差。本文提出了一项实证分析,使用三个独立变量(排名、通用搜索引擎和推荐网站)来分析从网络提取的代码片段的可读性和可理解性评分。研究收集了Google、Yahoo!和Bing针对9,480个查询的前5个推荐网站及其相应的代码片段推荐,并评估了它们的可读性和可理解性评分。研究发现,某些推荐网站在可读性和可理解性评分方面显著优于其他网站。排名较高的代码片段在所有通用搜索引擎中并不一定比排名较低的代码片段更具可读性或可理解性。此外,在可读性评分方面,Google比Yahoo!或Microsoft Bing有更好的代码片段排名。

研究背景与动机

问题定义

  1. 核心问题: 通用搜索引擎推荐的代码片段在可读性和可理解性方面存在质量差异,排名靠前的代码片段不一定质量更高
  2. 实际需求: 开发者广泛使用通用搜索引擎查找代码示例,但缺乏对这些代码片段质量的系统性评估
  3. 搜索引擎局限: Google虽有超过200种排名因素,但排名靠前的页面可能包含质量较差的代码示例

研究重要性

  • 代码片段重用可以减少编程任务时间,加速开发过程
  • Google拥有超过90%的搜索引擎市场份额,但其他搜索引擎的代码质量排名情况未知
  • 需要理解可读性与可理解性之间的相互关系:可读性关联语法理解,可理解性关联语义方面

动机示例

论文引用了Hora的研究案例:在Google搜索"File.mkdirs examples"时,Tutorialspoint的代码片段虽然可读性和可重用性指标较差,但因为包含与查询相似的自然语言解释而排名更高。

核心贡献

  1. 首次系统性比较研究: 对Google、Yahoo!和Microsoft Bing三大搜索引擎推荐的代码片段进行可读性和可理解性的大规模比较分析
  2. 大规模数据集构建: 收集了9,480个查询的47,400个网页链接,覆盖5,355个不同网站
  3. 多维度分析框架: 提出了基于排名、搜索引擎和推荐网站三个独立变量的分析方法
  4. 实证发现: 证实了两个重要假设:排名更高的代码片段不一定具有更高的可读性/可理解性;不同推荐网站的代码质量存在显著差异
  5. 可理解性度量标准化: 提出了将认知复杂度转换为0,1区间的标准化方法

方法详解

任务定义

输入: 编程相关的查询语句 输出: 代码片段的可读性和可理解性评分 约束: 仅分析Java语言代码片段,考虑前5个搜索结果

研究设计架构

研究采用五步法:

  1. 选择输入查询: 从CROKAGE工具收集10,000个用户查询
  2. 收集前n个网页: 获取Google、Yahoo!和Bing的前5个推荐网页
  3. 提取代码片段: 从选定网站提取Java代码片段
  4. 计算指标: 计算可读性和可理解性评分
  5. 分析方法: 使用ANOVA和Tukey测试进行统计分析

关键技术实现

数据收集策略

代码提取方法

  • StackOverflow: 提取已接受答案中的Java代码片段
  • 其他网站: 使用正则表达式在HTML标签中搜索包含"example"和"Java"的源代码

评估指标

可读性度量:

  • 使用Scalabrino等人提出的预测模型
  • 包含注释、标识符一致性、文本连贯性、含义数量和概念等指标
  • 输出范围:0,1,0表示低可读性,1表示高可读性

可理解性度量:

  • 基于Campbell提出的认知复杂度
  • 标准化公式:
understandability(cs_i) = {
    1 - #cc/#mcc  if #cc < 15
    0.0           otherwise
}

其中#cc为认知复杂度值,#mcc=15为最大推荐值

实验设置

数据集详情

  • 查询来源: CROKAGE工具的用户查询,来自80多个国家
  • 数据规模: 9,480个有效查询,47,400个网页链接
  • 网站覆盖: 5,355个不同网站
  • 语言限制: 仅Java编程语言

评价方法

  • 统计分析: 使用方差分析(ANOVA),置信水平5% (p-value<0.05)
  • 多重比较: 使用Tukey测试识别组间显著差异
  • 分组设计:
    • 搜索引擎:3组(Google, Bing, Yahoo!)
    • 排名:5组(top-1到top-5)
    • 网站:5组(选定的5个网站)

数据预处理

  • 移除重复查询和手动标记为不适用的查询
  • 过滤少于5个网页推荐的查询
  • 使用正则表达式从HTML标签提取链接

实验结果

主要发现

RQ1: 搜索引擎排名与代码质量关系

  • ANOVA结果: 可读性p-value=0.0034,可理解性p-value=0.0003
  • 关键发现: Top-2代码片段在可读性和可理解性方面整体优于Top-1、Top-4和Top-5
  • 效应大小: 较小(-0.02到0.01可读性,-0.01到0.02可理解性)
  • 结论: 证实假设H1,排名更高的代码片段不一定更具可读性或可理解性

RQ2: 搜索引擎间比较

  • ANOVA结果: 可读性p-value=1.207e-12,可理解性p-value=0.0364
  • 可读性排序: Google > Microsoft Bing > Yahoo!
  • 可理解性: Google略优于Microsoft Bing
  • 效应大小: 小效应(-0.02到0.02可读性,-0.01到0.005可理解性)

RQ3: 推荐网站间比较

  • ANOVA结果: 可读性和可理解性p-value均<2.2e-16
  • 可读性最佳: geeksforgeeks
  • 可理解性最佳: tutorialspoint
  • 效应大小: 可读性中等效应(-0.15到0.10),可理解性小效应(-0.04到0.08)

详细分析结果

可读性分析

GeeksforGeeks表现最佳的原因:

  • 每行代码配有一条注释
  • 高内聚性,每个概念独立
  • 示例:查询"How to append to a string?"
    • GeeksforGeeks: 可读性评分0.94
    • Tutorialspoint: 可读性评分0.44

可理解性分析局限

  • 58.3%的代码片段达到最大可理解性评分
  • 多数代码片段为简单API调用,缺少复杂控制结构
  • 建议该指标更适用于完整的Git仓库类文件

相关工作

代码可读性研究

  • Hora (2021): 研究Google如何根据可读性和可重用性特征排名代码片段
  • Scalabrino等人: 提出代码可读性预测模型
  • Buse和Weimer: 学习代码可读性度量

代码搜索和推荐

  • API Sonar工具: 使用可读性特征排名代码片段
  • Muse方法: 使用可读性特征排名代码示例
  • CROKAGE: 从StackOverflow提取代码片段和解释的代码搜索引擎

代码质量评估

  • Treude和Robillard: 发现仅49%的StackOverflow代码片段完全自解释
  • 认知复杂度: Campbell提出的可理解性度量方法

结论与讨论

主要结论

  1. 排名悖论: 搜索引擎排名与代码质量不完全相关,Top-2和Top-3代码片段质量可能更高
  2. 搜索引擎差异: Google在可读性方面表现最佳,但优势有限
  3. 网站质量分化: 推荐网站间存在显著质量差异,教程类网站(GeeksforGeeks)可读性更佳
  4. 可理解性局限: 当前可理解性指标对简单代码片段区分度有限

实践意义

  • 开发者指导: 建议优先考虑GeeksforGeeks等教程网站的代码片段
  • 搜索策略: 不应仅依赖排名选择代码片段,需要综合考虑质量指标
  • 工具改进: 为代码搜索引擎提供质量评估的参考标准

局限性

  1. 网站覆盖有限: 仅分析5个网站,占推荐网站的34%-38.1%
  2. 提取策略: 每个网页仅提取第一个代码片段
  3. 查询修改影响: 添加"example in java"可能影响搜索结果
  4. 指标精度: 可读性和可理解性工具可能存在误差

未来方向

  1. 定性研究: 深入理解可读性和可理解性评分差异的原因
  2. 扩展研究: 包含更多网站或开发通用代码提取方法
  3. 多语言支持: 扩展到其他编程语言
  4. 多代码片段处理: 开发处理单页面多代码片段的启发式方法

深度评价

优点

  1. 研究新颖性: 首次系统性比较主流搜索引擎的代码片段质量
  2. 数据规模: 大规模实证研究,数据量充足,结论可信
  3. 方法严谨: 使用成熟的统计分析方法,结果具有统计显著性
  4. 实用价值: 为开发者选择代码片段提供实证指导
  5. 可复现性: 提供完整的复现包和详细的方法描述

不足

  1. 指标局限: 可理解性指标对简单代码片段区分度不足
  2. 网站选择偏差: 仅分析5个主流网站,可能存在选择偏差
  3. 语言限制: 仅考虑Java语言,泛化性有限
  4. 时效性: 搜索结果具有时效性,结论可能随时间变化

影响力

  1. 学术贡献: 为代码搜索和软件工程研究提供新视角
  2. 实践指导: 直接影响开发者的代码搜索行为
  3. 工具改进: 为搜索引擎和代码推荐系统优化提供依据
  4. 后续研究: 为相关领域研究奠定基础

适用场景

  • 软件开发者进行代码搜索时的质量评估
  • 代码搜索引擎的排名算法优化
  • 编程教育中的代码示例质量控制
  • 软件工程研究中的代码质量分析

参考文献

论文引用了23篇相关文献,主要包括:

  • 代码可读性和可理解性度量方法
  • 代码搜索和推荐系统研究
  • StackOverflow代码质量分析
  • 搜索引擎排名机制研究

总体评价: 这是一篇高质量的实证软件工程研究论文,填补了代码搜索质量评估的研究空白,具有重要的理论价值和实践意义。研究方法科学严谨,数据规模充足,结论可信度高,为开发者和研究者提供了有价值的洞察。