一句话:提出 DepFuzz,通过跟踪多数据集行/列间协同依赖并联合变异,提升数据流大数据应用模糊测试效率。
数据密集型可扩展计算中,Spark/Hadoop 等数据流应用使用 UDF 处理多数据集,测试困难:输入多样、无显式 schema、运行时解析,且 join/groupByKey 等算子还使不同数据集字段间产生隐式协同依赖。DepFuzz 跟踪代码段操作哪些数据集、行与列,并结合数据流算子语义与 UDF 语义,定位协同依赖区域并联合生成/变异测试数据,以覆盖难达代码区域。在真实大数据应用中,它比 Java 字节码商业模糊器 Jazzer 多发现 3.4 倍故障,半数时间内语句覆盖率提高 29%,并优于先前 DISC 测试方法,能暴露更深的语义故障而非简单格式错误。
Data-intensive scalable computing has become popular due to the increasing demands of analyzing big data. For example, Apache Spark and Hadoop allow developers to write dataflow-based applications with user-defined functions to process data with custom logic. Testing such applications is difficult. (1) These applications often take multiple datasets as input. (2) Unlike in SQL, there is no explicit schema for these datasets and each unstructured (or semi-structured) dataset is segmented and parsed at runtime. (3) Dataflow operators (e.g., join) create implicit co-dependence constraints between the fields of multiple datasets. An efficient and effective testing technique must analyze co-dependence among different regions of multiple datasets at the level of rows and columns and orchestrate input mutations jointly on co-dependent regions. We propose DepFuzz to increase the effectiveness and efficiency of fuzz testing dataflow-based big data applications. The key insight behind DepFuzz is twofold. It keeps track of which code segments operate on which datasets, which rows, and which columns. By analyzing the use of dataflow operators (e.g., join and groupByKey) in tandem with the semantics of UDFs, DepFuzz generates test data that subsequently reach hard-to-reach regions of the application code. In real-world big data applications, DepFuzz finds 3.4× more faults, achieving 29% more statement coverage in half the time as Jazzer’s, a state-of-the-art commercial fuzzer for Java bytecode. It outperforms prior DISC testing by exposing deeper semantic faults beyond simpler input formatting errors, especially when multiple datasets have complex interactions through dataflow operators.