Understanding how software defects manifest and evolve in production environments is critical for improving reliability. While previous research has largely focused on pre-release defects, the nature of residual faults, i.e., those escaping testing and surfacing post-release, remains poorly understood. This paper presents a large-scale characterization of pre- and post-release defects across C/C++ and Java systems, encompassing over 14k defects mined from open-source projects. We employ a broad suite of software metrics to capture diverse code attributes such as complexity, size, structure, and development history. Results show that post-release defects are concentrated in older, frequently modified, and high-churn components, typically requiring longer and more complex fixes than pre-release ones. These findings highlight that residual defects arise more from evolutionary and process dynamics than code structure alone, suggesting that reliability engineering should prioritize targeted testing in mature and complex code regions.
翻译:理解软件缺陷在生产环境中的显现与演化方式对于提升可靠性至关重要。尽管先前研究主要关注发布前缺陷,但对残留故障(即逃逸测试并在发布后出现的缺陷)的本质仍知之甚少。本文对C/C++和Java系统的发布前与发布后缺陷展开了大规模特征化研究,覆盖从开源项目中挖掘的超过14,000个缺陷。我们采用广泛的软件度量指标集合来捕获多样化的代码属性,例如复杂度、规模、结构及开发历史。结果表明,发布后缺陷集中在较老、频繁修改且高变动的组件中,通常需要比发布前缺陷更长且更复杂的修复。这些发现凸显残留缺陷更多源于演化与过程动态而非代码结构本身,建议可靠性工程应优先对成熟且复杂的代码区域进行针对性测试。