## 4 Experimental Setup  
### Dataset  
To evaluate the effectiveness of our proposed SCM feature selection framework in improving the prediction performance for crashing fault residence, we used a widely recognized benchmark dataset released by [PERSON] et al. [3]. This dataset contains crashing fault instances from seven Java-based software projects: Apache Commons **Codec**, Apache Commons **Collections**, Apache Commons **IO**, **Jsoup**, **JSqlParser**, **Mango**, and **Ormlite-Core**.  
The Apache Commons **Codec** provides various encoding and decoding techniques, including Base64, Hex, Phonetic, and URL-related methods. Apache Commons **Collections** offers numerous enhancements and additional functionalities for working with Java collections in the JDK. Apache Commons **IO** supports Java IO operations by providing a variety of utility classes and methods. **Jsoup** is an HTML parser library designed for manipulating and extracting data from real-world HTML files. **JSqlParser** parses SQL statements and translates them into hierarchical Java class structures. **Mango** is a high-performance, distributed framework aimed at facilitating object-relational mapping. Finally, **Ormlite-Core** serves as the core component of Ormlite, offering a lightweight parser for mapping Java objects to SQL databases.  
The basic information of these projects is reported in Table 1, in which 'LoC' denotes the number of lines of code in the project, and 'No. Classes' represents the total number of classes in the project. The crash fault instances in these projects are also summarized as follows: 'No. Crashes' indicates the total number of crashing fault samples, while 'No. InT' and 'No. OutT' represent the number of samples located inside and outside the stack trace, respectively. Additionally, \"% R' denotes the ratio of samples located inside the stack trace to those located outside, providing insight into the distribution of faults.  
There are three steps to collect this dataset, including crash generation by simulation with a mutation tool, feature extraction, and crash instance label assignment. The extracted  
\begin{table}
\begin{tabular}{c c c c c c c c} \hline \hline
**Project** & **Domain** & **LoC** & **No. Classes** & **No. Crashes** & **No. InT** & **No. OutT** & **\% R** \\ \hline Codec & Utility & 14,480 & 84 & 610 & 177 & 433 & 29.0\% \\ Collections & Utility & 61,283 & 435 & 1350 & 273 & 1077 & 20.2\% \\ IO & I/O & 26,018 & 122 & 686 & 149 & 537 & 21.7\% \\ Jsoup & Utility & 15,460 & 137 & 601 & 120 & 481 & 20.0\% \\ JsqlParser & Utility & 32,868 & 203 & 647 & 61 & 586 & 9.4\% \\ Mango & Database & 30,208 & 475 & 733 & 53 & 680 & 7.2\% \\ Ormlite-Core & Database & 20,240 & 175 & 1303 & 326 & 977 & 25.0\% \\ \hline \hline \end{tabular}
\end{table}
Table 1: The basic statistics of seven projects.  
features come from five families, which are briefly described as follows: 11 features characterizing the stack trace and 23 features from the class or function in the upper frame, including the number of local variables, fields (except constructor functions), and imported packages of the class in the upper frame; whether the class in the upper frame is inherited from others; the line of code of the class in the upper frame; the line of code of the function in the upper frame; and the quantity of parameters, local variables, if-statements, loops, for statements, for-each statements, while statements, do-while statements, try blocks, catch blocks, finally blocks, assignment statements, function calls, return statements, unary operators, and binary operators of the function in the upper frame. Similarly, there are 23 features from the class or function in the nether frame. Additionally, there are 16 features which are the features of the functions in the upper frame normalized by LoC and 16 features which are the features of the functions in the nether frame normalized by LoC.