● 摘要
相对于粗粒度的文件和系统等层次,函数粒度的演化分析有助于深层次的了解整个软件的内部的演化规律,同时函数生命周期分布和函数的生命周期内变化频率有助于开发者对于软件维护工作量的估计和分配。软件结构的稳定对于软件的稳定性和可维护性有着重要的影响,分析函数消失对于软件结构的影响对指导软件维护和开发软件有重要意义。本文分析了Linux内核从v2.6.12-rc2到v3.7-rc6 总计300个版本消失函数的生命周期分布和生命周期内发生的变化次数,发现大部分函数的生命周期都较低,大部分函数在演化过程中只会发生少量的变化,并且从度的角度对消失函数进行了分类,发现对于Linux内核结构的影响较小消失函数占据总的消失函数的60% 。本文发现Linux内核模块函数调用图出入度分布呈现不对称,而这种不对称结构被认为是导致软件脆弱的原因之一。考虑到度分布的形成与新增函数的调用行为有直接关系,本文分别对Linux内核中drivers,fs,kernel,mm四个模块的新增函数的行为进行了分析,发现新增节点对出度高和入度高的节点在偏好依附上对于有明显不同,同时发现新增节点存在明显的相互调用和聚类的现象,并基于以上新函数行为特点和消失函数的统计数据建立了演化模型,通过仿真实验发现通过配置合适的参数该模型网络的度分布和聚类系数参数能很好的匹配Linux内核模块,这可以用来解释Linux内核网络出入度分布不对称的形成。为研究版本间消失函数之间的相互关系,本文对函数消失传播进行了深入分析,提出并利用了文件位置信息、函数调用关系以及开发者历史提交信息对函数消失进行了预测,其中文件位置信息预测取得较好的效果,平均准确率为19.2%,同时平均召回率能达到81%,这部分工作可以为开发者软件开发提供参考。