paperbot · PL 论文追踪

全部论文 待读 收藏

P2 Testing and debugging functional reactive programming

函数式反应式编程的测试与调试
ICFP 1(ICFP)2017匹配度 1/10 · 该论文研究纯函数式 FRP 的测试与调试,属于程序语言与软件测试领域,但未涉及用户核心关注的静态分析、ML/Agentic 程序分析、LLM 与形式化验证/程序分析交叉、浮点程序分析或贝叶斯程序分析,因此匹配度很低。引用 23 inbox
Ivan Perez, Henrik Nilsson
dblp: 2026-09-10crossref: 2026-09-10

AI 速览

一句话:基于纯函数式 FRP 的引用透明性,提出跨平台的时间逻辑断言、记录回放与随机测试方法。

交互式应用(如视频游戏)的测试与调试面临可复现性差、难以自动生成测试数据等挑战。本文指出,用纯函数式语言实现的某些函数式反应式编程(FRP)变体可在整个程序层面提供引用透明性,从而缓解这些问题。作者据此提出跨平台的多手段方法:基于时间逻辑的断言、运行记录与回放(也可用于已部署代码),以及 QuickCheck 自动随机测试。该方法在 Yampa 实现的真实非平凡游戏上验证,并配有图形界面工具,可控制执行、沿时间线移动并定位断言违规,支持 PC 和移动平台。

问题
交互式应用尤其是视频游戏难以测试和调试,主要因为缺乏事实上的可复现性,且难以自动生成合适的测试数据。
方法
利用纯函数式 FRP 在全程序层面的引用透明性,提供时间逻辑断言、运行记录与回放、QuickCheck 随机测试等跨平台测试调试手段。
评估
在 Yampa 实现的真实非平凡游戏上,通过带 GUI 的工具控制执行、沿时间线检查并定位断言违规,在 PC 与移动平台验证方法。
原文摘要(Abstract)

Many types of interactive applications, including video games, raise particular challenges when it comes to testing and debugging. Reasons include de-facto lack of reproducibility and difficulties of automatically generating suitable test data. This paper demonstrates that certain variants of Functional Reactive Programming (FRP) implemented in pure functional languages can mitigate such difficulties by offering referential transparency at the level of whole programs. This opens up for a multi-pronged approach for assisting with testing and debugging that works across platforms, including assertions based on temporal logic, recording and replaying of runs (also from deployed code), and automated random testing using QuickCheck. The approach has been validated on real, non-trivial games implemented in the FRP system Yampa through a tool providing a convenient Graphical User Interface that allows the execution of the code under scrutiny to be controlled, moving along the execution time line, and pin-pointing of violations of assertions on PCs as well as mobile platforms.

链接与引用

DOI 原文 · PDF(开放获取) · DBLP

BibTeX
@article{PerezN17,
  title = {Testing and debugging functional reactive programming},
  author = {Ivan Perez and Henrik Nilsson},
  journal = {Proceedings of the ACM on Programming Languages},
  volume = {1},
  number = {ICFP},
  year = {2017},
  doi = {10.1145/3110246}
}