Context: Many studies consider the relation between individual aspects of the software engineering process and bug-introduction, e.g., software testing and code review. These studies typically only identify correlations between their set of variables without accounting for interactions with external variables, such as confounding factors. Objective: Within this study, we provide a broad empirical view on practices of software development and their relation to bug-introducing changes \rev{to enable} future work on causal relations between those aspects. Method: We consider the bugs, the type of change that introduced the bug, aspects of the build process, code review, software tests, and any other discussion related to the bug that we can identify. We use a qualitative approach that first describes variables of the development process and then groups the variables based on their relations. From these groups, we deduce how their (pairwise) interactions affect bug-introducing changes. Results: We found multiple relevant relations within the development process of bug-introducing changes. Logical groups of variables and their relations provide a framework for discovering areas of interest regarding intermediate effects in the process and confounders towards bug-introduction. Conclusion: Software engineering practices applied during the development of bug-introducing changes are interdependent. This work lays the foundation to understand why bugs are introduced using causal modeling, discovery, and inference.
翻译:背景:许多研究探讨了软件工程流程的各个具体方面与缺陷引入之间的关系,例如软件测试与代码审查。这些研究通常仅识别其变量集之间的相关性,而未考虑与外部变量(如混杂因素)的相互作用。目的:在本研究中,我们针对软件开发实践及其与缺陷引入变更的关系提供广泛的实证视角,以支持未来对这些方面间因果关系的研究工作。方法:我们考察缺陷本身、引入缺陷的变更类型、构建流程的各个方面、代码审查、软件测试,以及我们能识别的与缺陷相关的任何其他讨论。我们采用定性研究方法,首先描述开发流程中的变量,然后根据变量间的关系进行分组。从这些分组中,我们推断出它们的(成对)相互作用如何影响缺陷引入变更。结果:我们在缺陷引入变更的开发过程中发现了多个相关关联。变量的逻辑分组及其相互关系为发现流程中涉及中间效应及缺陷引入混杂因素的重点领域提供了框架。结论:在缺陷引入变更的开发过程中应用的软件工程实践是相互依存的。这项工作为通过因果建模、发现与推理解释缺陷引入原因奠定了基础。