The relationship between root causes and symptoms
The above Table shows the correspondence between each fault symptom and the root cause. Here, in terms of symptoms, Crash and Incorrect Functionality are the most common symptoms for all the root causes, accounting for 62.14% of all faults in this study. This means that most faults can be detected by these two symptoms. However, there have been some techniques (e.g., differential testing and fuzzing) proposed to detect bugs with these two symptoms, but the characteristics of the multi-environment of the JavaScript-based DL systems are not considered. Hence, there is still a need for more testing methods specific to JavaScript-based DL systems. Additionally, there are 141 faults exhibiting the symptom of Build & Initialization Failure, which can be produced by some specific root causes. Among them, 33.33% are produced by Dependency Error and 14.89% are produced by Misconfiguration. Besides, among the 117 faults exhibiting the symptom of Poor Performance, 34.19% are produced by Incorrect Code Logic. Therefore, when a faults occurs with the two symptoms, developers can first check these highly relevant root causes to speed up the debugging process. Note that 45.65% of Unknown faults exhibit the symptom of Poor Performance. It shows that it is more difficult to analyze the performance errors, and even developers don’t know what causes such problems after a lot of hard work. For example, this memory leak bug was reported on 2020-12-07 and has not been resolved until now. During this period, the user tried the suggestions provided by the developer, but the bug still exists.
In terms of root cause, Incorrect Code Logic is the most common, and 23.29% of all faults are caused by it. Moreover, we can see that the same root cause can cause various symptoms such as API Misuse, Incorrect Code Logic and Dependency Error can cause the symptom of Crash, Poor Performance and Incorrect Functionality. There are also many faults whose root cause is unknown. These results show that debugging and locating bugs is difficult in JavaScript-based DL systems. Therefore, how to quickly debug and locate bugs in JavaScript-based DL systems is also a challenge for future research, especially errors caused by incorrect code logic should be the focus of researchers.