When learning to program, students are usually assessed based on the code they wrote. However, the mere completion of a programming task does not guarantee actual comprehension of the underlying concepts. Asking learners questions about the code they wrote has therefore been proposed as a means to assess program comprehension. As creating targeted questions for individual student programs can be tedious and challenging, prior work has proposed to generate such questions automatically. In this paper we generalize this idea to the block-based programming language Scratch. We propose a set of 30 different questions for Scratch code covering an established program comprehension model, and extend the LitterBox static analysis tool to automatically generate corresponding questions for a given Scratch program. On a dataset of 600,913 projects we generated 54,118,694 questions automatically. Our initial experiments with 34 ninth graders demonstrate that this approach can indeed generate meaningful questions for Scratch programs, and we find that the ability of students to answer these questions on their programs relates to their overall performance.
- 论文ID: 2510.11658
- 标题: Automatically Generating Questions About Scratch Programs
- 作者: Florian Obermüller, Gordon Fraser
- 分类: cs.SE (软件工程)
- 发表时间/会议: CompEd 2025 (ACM Global Computing Education Conference 2025)
- 论文链接: https://arxiv.org/abs/2510.11658
在编程学习中,学生通常基于他们编写的代码进行评估。然而,仅仅完成编程任务并不能保证对底层概念的真正理解。因此,有研究提出通过询问学习者关于其代码的问题来评估程序理解能力。由于为每个学生程序创建针对性问题既繁琐又具有挑战性,先前的工作提出了自动生成此类问题的方法。本文将这一想法推广到基于块的编程语言Scratch。我们提出了30种不同类型的Scratch代码问题,涵盖了既定的程序理解模型,并扩展了LitterBox静态分析工具来自动为给定的Scratch程序生成相应问题。在包含600,913个项目的数据集上,我们自动生成了54,118,694个问题。我们对34名九年级学生的初步实验表明,这种方法确实能够为Scratch程序生成有意义的问题,并发现学生回答这些问题的能力与其整体表现相关。
该研究要解决的核心问题是:如何有效评估学生对自己编写的Scratch程序的理解程度,而不仅仅是检查程序是否能够正确运行。
- 理解与实现的差距:学生可能通过试错、复制或AI辅助完成编程任务,但并不真正理解底层的编程概念
- 评估方法的局限性:传统的评估方法主要关注代码的正确性,而非学生的程序理解能力
- 规模化挑战:在大规模教学场景中,教师难以为每个学生的程序手动创建个性化的理解评估问题
- 文本语言局限:现有的问题生成方法主要针对Java等文本编程语言,不适用于Scratch这样的块编程语言
- 语言特性差异:Scratch中变量通过用户界面创建而非声明语句,块无法通过行号引用
- 缺乏系统性:缺乏基于理论框架的系统性问题设计方法
本文的研究动机是将已有的"关于学习者代码的问题"(Questions about Learner's Code, QLCs)概念扩展到Scratch环境,为块编程教育提供自动化的程序理解评估工具。
- 系统化问题设计:基于Block Model程序理解模型,系统性地设计了30种针对Scratch代码的问题类型
- 工具扩展:扩展了开源静态分析工具LitterBox,使其能够自动生成Scratch程序的理解问题
- 大规模验证:在包含600,913个公开Scratch项目的数据集上验证了方法的适用性
- 实证研究:通过34名九年级学生的课堂实验验证了问题的有效性和学生答题表现与编程能力的相关性
输入:一个Scratch程序项目
输出:一组自动生成的关于该程序的理解问题,包括问题文本、答案选项和正确答案
约束条件:问题必须基于程序中实际存在的代码构造,且符合Block Model的理论框架
Block Model包含四个层次的关注范围和三个程序维度:
| 层次 | 文本维度 | 执行维度 | 目的维度 |
|---|
| 原子级 | 语言元素 | 元素操作 | 元素目的 |
| 块级 | 语法/语义相关区域 | 代码块操作 | 代码块功能 |
| 关系级 | 代码块间引用 | 代码块间流程 | 目标与子目标关系 |
| 宏级 | 程序整体结构 | 算法或程序行为 | 程序目标或目的 |
基于Block Model,设计了30种问题类型,分为5种答案格式:
- 数字型(🔢):答案为单个数字
- 字符串型(📝):答案为一个或多个字符串
- 是非型(✓/✗):答案为是或否
- 多选型(☑️):从选项中选择正确答案
- 自由文本型(📄):开放式问题,需要解释性回答
通过扩展LitterBox工具实现:
- AST解析:将Scratch程序转换为抽象语法树
- 访问者模式:为每种问题类型实现一个问题查找器
- 代码遍历:遍历AST识别可生成问题的代码模式
- 选项生成:为多选题自动生成干扰项
- 块编程适配:首次将QLCs概念系统性地应用于块编程语言
- 理论驱动设计:基于成熟的程序理解理论框架设计问题类型
- 自动化生成:实现了完全自动化的问题生成流程
- 多维度覆盖:问题涵盖了从基本语言元素到程序整体目的的各个层面
- 大规模数据集:600,913个公开的Scratch项目,排除空项目和混合项目
- 课堂实验数据:34名德国九年级学生,具有Scratch编程经验
- 脚手架项目:使用Boat Race游戏作为课堂实验的基础项目
- 问题生成频率:各类问题的生成总数和覆盖项目数
- 相关性分析:学生答题表现与编程任务完成度的Pearson相关系数
- 覆盖率分析:Block Model各维度的项目覆盖百分比
由于是首次针对Scratch的QLCs研究,主要通过以下方式验证:
- 与现有文本语言QLCs的概念对比
- 基于理论框架的系统性验证
- 实际教学场景的应用验证
- 工具扩展:基于LitterBox静态分析工具
- 输出格式:JSON格式,包含ScratchBlocks语法的代码片段
- 问题呈现:突出显示目标代码部分(如图1a所示)
- 评分机制:多选题每个正确选择0.2分,单选题正确答案1分
- 总体统计:在600,913个项目中生成了54,118,694个问题
- 最高频问题:
- Purpose of Script: 9,748,844次(100%项目覆盖)
- Purpose of If Condition: 5,103,322次(41.1%项目覆盖)
- Scripts for Actor: 3,524,268次(100%项目覆盖)
- 最低频问题:
- My Block Definition: 368,712次(11.3%项目覆盖)
- Purpose of Loop Condition: 486,902次(15.2%项目覆盖)
| 维度 | 原子级 | 块级 | 关系级 | 宏级 |
|---|
| 文本 | 64.5% | 61.2% | 46.5% | 100.0% |
| 执行 | 30.4% | 58.4% | 99.0% | 71.1% |
| 目的 | 49.0% | 100.0% | 31.2% | 100.0% |
- 相关系数:r = 0.467 (p = 0.005)
- 相关性强度:中等程度正相关
- 统计显著性:p < 0.01,具有统计显著性
- 实际意义:学生回答QLCs的能力与其编程任务完成度显著相关
- 普适性验证:所有30种问题类型都能在实际项目中频繁生成
- 层次化特征:高层次问题(如程序目的)几乎在所有项目中都能生成,而低层次问题依赖于特定编程构造
- 有效性证明:QLCs确实能够作为程序理解能力的有效指标
- 教学价值:可用于检测学生的前置知识缺陷
- 程序理解评估:传统方法主要关注代码追踪、解释和编写技能
- 自动问题生成:已有针对Java等文本语言的自动问题生成工具
- 块编程教育:Scratch作为编程入门语言的广泛应用
- 理论继承:采用了Block Model这一成熟的程序理解理论框架
- 技术扩展:将现有的QLCs概念首次应用于块编程语言
- 工具创新:基于LitterBox工具实现了针对Scratch的自动化问题生成
- 语言适配性:专门针对块编程语言的特点设计
- 系统完整性:基于理论框架的系统性问题设计
- 实用性:大规模数据验证和实际课堂应用
- 技术可行性:能够为Scratch程序自动生成大量有意义的理解问题
- 教育有效性:生成的问题能够有效评估学生的程序理解能力
- 实用价值:为Scratch教育提供了可扩展的自动化评估工具
- 自由文本评估:开放式问题的自动评估仍需人工参与
- 问题覆盖度:某些Scratch特定构造在低层次维度覆盖不足
- 实验规模:课堂实验样本量相对较小(34名学生)
- 时间限制:课堂实验时间限制可能影响结果
- LLM集成:利用大语言模型自动评估自由文本答案
- 问题扩展:增加更多针对Scratch特定构造的问题类型
- 用户界面:开发适合课堂使用的问题生成和管理界面
- 长期效果研究:评估QLCs对学习效果的长期影响
- 创新性强:首次将QLCs系统性地应用于块编程语言,填补了研究空白
- 理论基础扎实:基于Block Model的系统性设计确保了问题的理论完整性
- 实验充分:结合大规模数据分析和课堂实验,验证了方法的可行性和有效性
- 实用价值高:开源工具的发布使研究成果能够直接应用于教学实践
- 写作清晰:论文结构清晰,技术细节描述准确
- 评估局限:自由文本问题的评估仍需人工参与,限制了完全自动化
- 样本限制:课堂实验的样本量较小,需要更大规模的验证
- 深度分析不足:缺乏对不同问题类型有效性的细粒度分析
- 适应性问题:未充分讨论如何适应不同年龄段和技能水平的学生
- 学术贡献:为编程教育评估领域提供了新的研究方向和工具
- 实践价值:为Scratch教师提供了实用的自动化评估工具
- 可复现性:开源代码和详细的实验设置确保了研究的可复现性
- 推广潜力:方法可扩展到其他块编程语言和平台
- K-12编程教育:特别适用于使用Scratch进行编程启蒙的课堂
- 在线学习平台:可集成到在线编程学习系统中提供自动反馈
- 教师培训:帮助教师更好地理解学生的程序理解水平
- 研究工具:为编程教育研究提供标准化的评估工具
论文中引用了23篇重要文献,涵盖了程序理解理论、编程教育评估、Scratch分析工具等相关领域的核心研究成果。特别值得关注的包括Block Model的原始论文、LitterBox工具的相关工作,以及关于程序理解与编程能力关系的实证研究。