您好,欢迎访问三七文档
[打印][转载]软件度量的发展历程前言如Lemmerich所言,测量在科学领域有悠久的历史[116]。相对早在1889年就定义好了度量单位~米的长度测量[116],温度的度量复杂的多。Fahrenheit和Celsius分别在1714年和1742年提出了基于某固定点间隔递增等级的温度度量方法。Celsius将100度和0度之间分为100个等份。但问题是一直不能唯一确定50摄氏度。而且长度的测量总是一个比例尺度,但是温度可能用间隔(摄氏/华氏温度表)或者比例尺度(开氏温度)来衡量。今天,计算机在我们生活的每个领域几乎都扮演了非常重要的角色。在计算机上运行的软件也越来越重要。因此,可预测、可重复、准确地控制软件开发过程和软件产品已经非常重要。软件度量就是衡量软件品质的一种手段。软件度量或者说软件工程度量领域是一个在过去30多年研究非常活跃的软件工程领域。软件度量(softwaremeasurement)和软件量度(softwaremetrics)一样非常有名(译者注:为了区分,译者将softwaremeasurement和softwaremetrics分别译成软件度量和软件量度,其实他们都可以表示软件度量)。但目前学界还没有明确这两个术语的区别。参照测量理论[159]的相关术语,我们采用软件度量(softwaremeasurement)。从文献上看,这两个术语是同义词。量度(metric)在这里不作度量空间理解,它理解为:度量是客观对象到数字对象的同态映射。同态映射包括所有关系和结构映射。用另一句话说,软件品质和软件度量成直对关系。这是度量和软件度量的根本理念。软件度量研究主要分为两个阵营:一部分认为软件可以度量,一部分认为软件无法通过度量分析。无论如何,研究主流是关心软件的品质和认为软件需要定量化度量。目前有超过上千种软件度量方法被软件研究人员及从业人员提出,并且到今天有超过5000份论文出版发表。出于这个缘由,我们有必要对软件度量的发展历程做一个全面了解。当然,本文只是讨论软件度量发展过程中的一些里程碑。软件度量或者发表论文的全面综述可以参考以下文献[39,64,52,50,126,150,58,57,104,127,178,179,93,63,167,67,46,33,80,180,121,181,154,201,206,208]。为什么要进行软件度量?度量在自然科学领域有悠久的历史。在20世纪末,物理学家LordKelvin(1824-1904)明确表示[97]:当你能度量你所讲的内容,并且能用数据表达,那你是确实明白你所讲的内容。但是如果你不能度量你所讲的内容,也不能用数据表达,那你的认知是微不足道的和不能让人信服的那种,那只是认知的开始,几乎没有到科学的思想境界。测量理论的科学家们支持在科学中应用度量的观点。FredS.Roberts[159]在其一本杰出的有关测量理论著作中指出:发展成熟的学科如物理学和欠成熟的学科如心理学或社会学最大的区别是他们对研究对象的度量程度。在软件工程领域,度量已经被讨论了25年。软件开发和维护的巨大成本扩大了支持设计标准和通过度量进行管理决策的科学基础的需要。Curtis1980已经指出[43]:如果我们想将简单的编程转换程工程学科,就必须将严格的科学程序应用于软件系统开发研究,而这些科学程序的核心就是开发度量技术和决定相互影响的关系。下面是进行软件度量的问题所在,其中包括:1、应用度量是否可能在设计阶段预测软件系统潜在的错误。2、是否可以在软件的设计模型中抽取些定量特征使我们能预测软件的可维护性。3、程序模块代码是否存在一些定量的关键属性能让我们可以预测进行模块测试的困难程度和通过某种程度测试后隐含在模块中残余错误数。4、是否可能从设计说明书中抽取出定量属性来预测开发如设计所描述那样的软件的工作量。5、是否可以从一个子程序代码中提取定量的属性来帮助我们预测测试这个子所需要的工作量6、是否有在需求分析阶段可以预测项目规模的特征。7、确定一个设计的质量,需要什么样的软件度量手段。8、以ISO9126标准的软件品质数字属性为基础,什么样的软件度量是合适的。那些想用软件度量或者正在使用软件度量的人们最大的问题是软件度量对从业人员有什么好处。我们认为,Grady用明确的方式阐明了软件度量的需要和好处。1992年Grady[64,65,66]中肯地阐述了软件度量的合适性。软件度量用于度量软件产品或软件开发过程的特定属性。我们使用软件度量的目的如下:1.估计的基础,2.跟踪项目进展,3.决定(相关)复杂性,4.帮助我们理解我们什么时候有文档化的质量状态5.分析缺陷,6.实验验证的最好实践.简而言之:它帮助我们做出更好的决策。当然,还有许多其他需要软件度量的论述,但是全部论及会超出了本文的范围,本文就不作陈述。软件度量的基础工作在六十年代,主要是七十年代,人们就建立了软件量度和度量的基础性工作,根据这些早期工作,八十,九十年代出现了更进一步的工作成果。提出软件度量的原因是基于大家都认为结构和模块化对开发可靠软件非常重要。许多软件专家认为软件系统模块化越高且模块结构越简单,软件可靠性越能得到保证[168]。其实,模块很早就被研究讨论。为了使得模块和其他模块没有结构关系,Parnas建议模块应该结构化[148]。Myers描述了模块强度(modulestrength)的观念,Yourdon在1975论述了模块性。如Porter在文献[153]中指出的那样,这些因素影响软件的成本和质量。最早的软件度量单位是LOC,直到现在人们还在讨论和应用它。1974年Wolverton第一次正式用LOC度量程序员的生产率[197]。他提出了客观的指标:“人月”,作为生产率的度量单位,并且他认为他研究的内容可以作为典型的代码率。文献[178]指出,LOC能作为度量单位的基础是程序的长度能预测程序的特性如可靠性和易维护性等。尽管如此,或许是由于这种度量太简单吧,它受到学术界严厉的批判。如Walston和Felix在文献[192]那样,估计的代码行和实际的代码行在软件合同协商和执行期间用作生产率的评估不太一致。在六十年代,源代码行SLOC(SourceLinesofCode)是以80列为一行计算。在1983年Basili和Hutchens[15]建议应该把LOC作为其他度量单位可以比较的基本度量单位。我们认为有效代码行比源代码行作为度量单位好些,因为作为一个最小的度量单位,完全凭经验就可以知道,LOC有时是没有任何东西。超过上万篇论文提到过LOC度量单位。Rubey等人在1968年发表的论文[165]可能是最早的关于软件复杂性论文。在这篇论文的文献列表中没有更早公开发表的参考文献。1979年,Belady提到一篇1971年关于软件复杂性的论文[18]。Belady写道:在1974年,很少有关于复杂性的著名研究,程序复杂性的工作就更少。那时,我和Beilner教授在英国大学帝国学院共一个办公室,那是我们由兴而发地讨论过“复杂”程序和大规模程序的问题。有时候我们会问,什么是复杂性?是否可能提出合理的定义?直觉的复杂性概念是否可以定量计算。由于我们不能回答这些问题,我们就转而面向查文献。立即,在众多关于复杂性哲学论述中,我们找到了一篇由VanEmden写的博士论文:“复杂性分析”[54]。VanEmden的工作是基于有关信息理论形式主义的传统可能性理念,似乎适合连接系统的复杂性模块化,如将程序建为模块。早在六十年代,出现了成本估计模型Deplhi[76]和Nelson'sSDC。1975年,Kolence创造性提出了软件物理的概念[108],1977年,Halstead引入了软件科学的这个术语。在这个术语的潜在意义是用科学的方法来分析软件的特性和结构。Kolence的理论综合了那些惯用的性能量度,如往返时间,系统可用性和响应时间以及惯用的管理量度如生产率,每单元服务成本,以及预算等。软件物理是专业处理计算规模和工作量的最早理论之一[130]。McCabe[211]和Halstead[71]在70年代中期提出的度量方法是非常著名的度量方法,直到今天还被激烈讨论。McCabe根据图论定义了一个术语“圈数”来得到一种软件复杂性度量方法。McCabe说圈数是流程图中最少路径条数。他论述到,最少路径数可以确定程序的复杂度(译者注:这里说的是著名的CyclomaticComplexityMcCabe圈复杂度):其全部策略是通过计算线性独立路径条数v(G)来度量程序的复杂性,通过设置圈复杂度v(G)上限(代替仅仅使用物理规模控制)来控制程序的“规模”,并用圈复杂度作为一种测试方法论的基础。McCabe也提出度量基本复杂度,基本复杂度可能是第一个从根本上分析非结构的量度。1989年Zuse等人[200,201]指出McCabe复杂度可以通过三种简单的运算来刻画,作者从度量理论得出这个概念。Halstead度是基于程序源代码。Halstead指出估计工作量,或者程序员工作时间,可以用运算符,运算元或语法数的函数来表示[70]。Halstead方法已经被包括IBM的SantaTeresa实验室[38],,通用电气公司,通用汽车公司[70]等许多单位使用,起初是用于软件度量试验。今天,用的最多的Halstead量度是度量长度,容量,难度和工作量。Halstead在七十年代末期去世了,很遗憾他不能在今天解释他的度量方法。1977Laemmel和Shooman[110]验证考察了齐普夫定律(Zipf'sLaw),齐普夫定律本来是为自然语言提出的,他们扩展这个理论,把这个技术应用到程序语言。(译者注:齐普夫定律是美国学者G.K.齐普夫于本世纪40年代提出的词频分布定律。它可以表述为:如果把一篇较长文章中每个词出现的频次统计起来,按照高频词在前、低频词在后的递减顺序排列,并用自然数给这些词编上等级序号,即频次最高的词等级为1,频次次之的等级为2,……,频次最小的词等级为D。若用f表示频次,r表示等级序号,则有fr=C(C为常数)。人们称该式为齐普夫定律。)齐普夫定律也适合计算机程序的运算符,运算元以及运算符和运算元的联合。他们的验证结果表明,齐普夫定律对计算机语言也非常适合,而且可以得出和那些Halstead度量相类似的复杂性度量。1978年,伴随McClure提出的一个软件复杂性度量的提议[123],其他两个复杂度度量方法Interval-Derived-Sequence-Length(IDSL)和Loop-Connectedness(LOC)被提出来[74,201]。他们是基于流程图的间隔还原。但是,这两种方法不是很有名。Rubey,VanEmden的研究工作和Hecht度量已经大部分被遗忘,其中,1992年,Khoshgoftaar等人使用了VanEmden度量作文复杂性度量的基础[101].。1977年,Gilb[62]出版了一本标题为TomGilb:软件度量的书,这是软件度量领域的第一本书籍。1979年,Belady[18]提出了theMeasureBAND,该方法对嵌套是敏感的。JONE[90]在1978年发表了一篇讨论程序品质和生产率的论文,有趣的是,其中,在这篇论文中是他对度量单元的考虑。为了度量应用软件的开发生产率,Albrecht[2]在1979年提出了功能点(theFunction-Pointmethod)方法。1980年,Oviedo[146]开发了一个程序品质模型。这个模型将控制流和数据流复杂性一起处理。Oviedo通过一个方法计算控制和数据流复杂性来定义程序的复杂度。1980年,Curtis[43]发表一篇关于软件度非常重要的论文。在这篇文章中,Curtis论述了:科学和度量,一些度量的基本观念。他指出:欠成熟的科学,理论和实际的关系组成不是建立在正式的数学基础上,而是逻辑假设。并且,其中,他写到:我们的度量技术越严格,理论模型越能够彻底地测试和校准。因此,发展软件工程的科学基础依赖于改善基础构造元素度量方法。文章中,
本文标题:软件度量的发展历程
链接地址:https://www.777doc.com/doc-3969819 .html