论文部分内容阅读
作为程序语言的重要组成部分,动态特性因其极大的灵活性和便利性深受语言设计者和开发人员的喜爱。不仅仅是动态语言才有动态特性,Java等面向对象的高级语言在发展过程中也逐渐添加了类似功能,譬如Java的自省机制。动态特性的使用方便开发人员在程序运行过程中追踪、观察或动态修改代码,包括其语义、语法和具体实现,从而能提高开发、测试效率。但是,也有人认为动态特性的使用会增加程序维护成本、对软件质量产生影响。研究动态特性与软件维护的关系具有重要意义,然而很少有研究关注这些问题,特别是针对Python语言。为了科学、具体的探讨动态特性使用与软件维护的关系,首先,本文挑选了7个具有4到7年维护时间的开源项目,通过实证研究的方法,静态分析了53个程序版本中动态特性与模块易变性的关系,以及动态特性与模块易错性的关系。特别的,本文使用Fisher精确检验、Mann-Whitney检验和逻辑回归模型分别探究:模块易变性和模块易错性与动态特性的使用是否相关;模块易变性和模块易错性与动态特性的使用次数是否相关;模块易变性和模块易错性与特定类型的动态特性是否更相关。在开源软件项目上的实验结果表明,1)使用了动态特性的模块更容易发生改变;2)使用动态特性越多的模块越容易发生改变;3)特定类型的动态特性,在某些项目中,比其他动态特性,与模块易变性更显著相关;4)同样的实验结果也适用于动态特性与模块易错性的关系。此外,文本通过数理统计方法分析了99个项目中动态特性在变化的代码片段中的使用分布情况,并且结合人工代码审查的方式走读了4个项目中的600个commit信息,调查了4种最常使用的动态特性在变化的代码片段中的使用情况。通过人工代码审查的方式,我们总结了一些动态特性在代码维护中的变化场景,并验证了Python专家关于动态特性使用的建议。总之,这一创新性的工作,对一直关注怎样使用动态特性、为什么使用动态特性的研究者具有启发意义,并为其他研究者提供了相关的参考信息。基于实验结论以及人工审查结果,我们建议开发人员,尤其是语言的初学者,谨慎使用动态特性,因为对动态特性的误用会造成更大的维护成本;建议维护人员在有限的时间内重点关注使用了动态特性的模块,提高工作效率。