  Previous studies have demonstrated that neural code comprehension models are
vulnerable to identifier naming. By renaming as few as one identifier in the
source code, the models would output completely irrelevant results, indicating
that identifiers can be misleading for model prediction. However, identifiers
are not completely detrimental to code comprehension, since the semantics of
identifier names can be related to the program semantics. Well exploiting the
two opposite impacts of identifiers is essential for enhancing the robustness
and accuracy of neural code comprehension, and still remains under-explored. In
this work, we propose to model the impact of identifiers from a novel causal
perspective, and propose a counterfactual reasoning-based framework named
CREAM. CREAM explicitly captures the misleading information of identifiers
through multi-task learning in the training stage, and reduces the misleading
impact by counterfactual inference in the inference stage. We evaluate CREAM on
three popular neural code comprehension tasks, including function naming,
defect detection and code classification. Experiment results show that CREAM
not only significantly outperforms baselines in terms of robustness (e.g.,
+37.9% on the function naming task at F1 score), but also achieve improved
results on the original datasets (e.g., +0.5% on the function naming task at F1
score).
