关键词:
C++
程序设计语言
实证研究
开源软件
面向对象程序设计
泛型程序设计
并发程序设计
语言库
摘要:
日益兴盛的开源软件为语言研究者提供了丰富的实验资源。利用软件度量、数据挖掘、统计分析等技术对开源软件进行量化分析,成为了解程序设计语言的使用和发展趋势的关键途径。C++是最重要的程序设计语言之一,广泛用于大规模、高复杂度的开源软件的开发。然而,时至今日,却很少有研究者通过定量化的实验方法来分析C++语言在软件开发中的使用情况,导致人们无法客观评估C++和其它语言在编程方法、编程效率、代码质量等方面的差异,同时无法了解C++语言特性的使用规律,以及在使用过程中所出现的主要问题。为了改变C++实证研究相对匮乏的现状,本文全面分析C++关键语言特性在开源软件中的使用情况。具体而言,本文利用程序分析工具对开源代码进行语义分析,并采用软件度量方法对程序语义信息进行量化,最后使用统计学方法对实验数据进行定量分析。实验结果不仅说明了C++、C≠和Java在面向对象特性上的差异,而且揭示了C++模板、并发设施以及标准库在开源软件中的使用规律和常见问题。具体而言,本文的工作主要包括以下四方面:(1)面向对象特性的实证研究为了比较C++、C#和Java的面向对象特性,采用23种面向对象度量指标来定量对比78组开源程序,实验结果说明了三种语言在程序规模、复杂度、耦合性、内聚性、继承性、封装性、多态性与可复用性等面向对象特性上的差异。这项研究成果有助于人们理解不同语言的面向对象特性,并帮助软件开发者在实现面向对象系统时选择合适的程序设计语言。(2)模板的实证研究为了探索C++泛型程序的实现方式,定量分析了新型模板特性的使用、STL(Standard Template Library,标准模板库)的使用、模板使用的广泛性以及模板的作用。通过对50个开源软件系统的5.7亿行C++代码进行软件数据分析,发现了模板的使用规律,并揭示了模板在实际应用中所存在的问题,包括模板特性的误用、用户自定义模板的滥用以及泛型函数宏的过度使用等。这项研究成果不仅有助于人们准确地认识模板的实际用途,而且有助于程序员高效地使用模板来编写可复用的软件模块。(3)并发设施的实证研究为了研究C++并发程序的实现方式,定量分析了并发设施的使用、并发同步的管理、标准并发设施与第三方并发设施的关系以及影响并发设施使用的因素。通过对492个并发软件的1.3亿行C++代码进行语义信息提取和数据统计分析,挖掘了并发设施的使用规律,并发现了并发设施在实际应用中所存在的主要问题,包括promise等并发设施的误用、并发代码中异常处理设施的缺失以及线程安全的数据结构的缺失等。这项研究成果不仅为C++设计者改进并发设施的设计提供了指导性信息,而且为软件开发者合理运用并发设施指明了方向。(4)标准库的实证研究为了考察C++语言库对软件开发的影响,定量分析了标准库使用的广泛性、新型标准库与传统标准库的差异、废弃标准库设施的使用趋势以及影响标准库使用的因素。实验采用30个开源软件的1.5亿行C++代码,并利用统计学方法对标准库语义信息进行量化和统计分析。实验结果揭示了标准库的使用规律以及程序员在使用标准库时所存在的主要问题,包括未充分使用新型标准库以及过度使用废弃标准库设施等。这项研究成果有助于程序员高效地理解和运用C++标准库。