估算python项目的是复杂性外文翻译资料

 2022-11-16 15:21:13

英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料


ISSN 1330-3651
UDC/UDK 004.412:004.43 Python

估算python项目的是复杂性

桑杰·米什拉,法里德·贾法尔

原始科学论文

在本文中,Python语言的复杂度是制定的。因为Python是一种面向对象的语言,目前的指标能够评估任何面向对象的语言。我们确认我们的度量与案例研究,比较研究和实证检验。该案例研究是在Python,Java和C ,结果证明,Python是比其他面向对象的语言更好。后来,我们凭经验验证度量了一个真正的项目,该项目使用python开发。

关键词:复杂度,Python和软件的复杂性,软件开发

该方案在Python语言的复杂性评估

评论性文章

本文制定了Python语言的复杂度。因为Python是一种面向对象的语言,现有的指标能够评估任何面向对象的语言。我们重申,我们度量案例研究,比较研究和实证检验。该案例研究了Python,Java和C 语言,结果表明,Python比其他面向对象语言更好。后来,我们凭经验验证度量了一个真正的项目,该项目是使用python语言开发的。

关键词:复杂度,python和软件的复杂性,软件开发

1

介绍

软件度量决定了软件产品的可维护程度,这是一项影响任何软件质量的重要因素。此外,软件度量提供了有用的反馈给设计者,那些反馈能够影响设计,编码框架或者规范阶段的决定。如果没有这样的反馈,很多决定都是由特设的方式做出的。

芬顿决定以度量为过程,通过根据清晰的被定义的规则,在现实世界中,以把数字或符号分配给实体属性的方式来描述它们,在软件工程中,软件度量是控制软件质量的唯一工具[6]。此外,要求提高软件质量是企业的首要目标,这促进了软件度量在项目研究技术方面的进展。但它始终是难以控制其质量的,如果代码是复杂的话。在软件社区中,复杂的代码总是制造问题。审查,测试,维护以及管理这样的代码是很困难的。因此,这些困难增加了维护的成本和产品的成本。由于这些原因,在软件开发的初始阶段就控制代码的复杂性是被强烈建议的。软件度量帮助实现这一目标。

事实上,没有严格的规定可以证明代码是好是坏。一些研究人员为开发好的高质量的软件提出了不同的标准。虽然他们考虑了质量的不同方面,有一个是公认的标准,即代码应该是灵活的[31]。特别是在面向对象软件发展中,有一个非凡的成果在过去的二十年中,这是必须的,换句话说,代码应该被写用这样一种方式,它应该被重复的使用和采纳。如果代码是不灵活的话,就很难更换(添加或删除)模块,并会浪费软件专业人员的时间。它也在可维护性方面有影响。

在过去,研究者提出他们的方法评估代码,这是写在程序语言[12],如C.后来,研究主要集中在面向对象(OO)的编程语言,例如C 的[1,2,3]和Java[35,36]。其他语言或技术,例如XML或Web 服务的软件度量[13,14和24]还能够在文献中找到。然而,要评估用Python语言编写的代码一直没有找到我们期望的正确的焦点。事实上,今天,Python不如C 和Java那样流行,但是由于其独特的特点,在软件开发上,它是一种更舒适的语言。它在软件社区日益普及。一些会议和研讨会专门讨论Python,包括2009年SciPy(印度)[16],年RuPyrsquo;09(波兰)[17],FRUnconrsquo;09(美国)[18],ConFoo.ca2010加拿大[19],证明了Python的重要性。这不是python成功故事的终止。它是高度理解的,相较于其他面向对象的语言,因而它的维护不太昂贵。知名企业像谷歌和YouTube都选择使用Python。评估Python代码的复杂性的一种方法是对程序语言设立发展指标。然而,所有的可用的指标只覆盖特定语言的功能。例如,如果我们应用代码行,则它只覆盖尺寸,同样McCabe的复杂性度量只涵盖的控制流程序。在一般情况下,适用于程序语言的指标不适合现代面向对象语言如C [3]。此外,当面向对象的代码是完善的或趋于完善的时候,大多数面向对象语言的可用的指标的和模型是可适用的。因此,他们提供的信息来不及帮助改进代码的质量。面向对象的方法需要在开发生命周期的早期显著努力识别对象,类,属性和操作的关系。封装,继承和多态性需要设计人员在早期仔细构造设计[32]。 因此,能够适用于的代码的完善的可用的指标,不适用于面向对象的环境。

通过考虑所有这些问题,在目前的工作中,通过确定所有的可能在代码的复杂性中发挥重要的作用的因素,我们正在评估Python代码的复杂性。重要的是要注意Python是一种面向对象的语言,它包括其他面向对象语言的大部分的功能;然而,差异发生在程序的主体。除此之外,执行和动态输入对Java提供了巨大的生产效益;Python程序需要更少的外部努力(即更清晰的代码)[21]。在这方面,Python是一种非常有用和重要的语言,但是这个语言的正确指标仍没有建立起来。这个因素促使我们进行这项工作,产生这样的指标,它可以涵盖Python的所有功能,以及涵盖所有复杂的方面。因此,一种新的方法被提出,这种方法是所有的属性的统一。作为这次研究的前期工作,这种度量出现在ICCSA 2010[33]。在目前的工作中,我们延长我们的会议演示和在一个真正的项目上,通过实证检验我们的工作,其中包括案例研究,比较研究和适用性。我们的案例研究在三个不同的面向对象语言中进行评估。此外,在实际项目中,我们应用我们的指标来证明其真正的适用性和用处。

这个文章是以下列方式组成的。在第二章节,我们讨论Python语言的重要性和它可获得的指标,再次之后,在第三章节我们提出了我们的指标。在第四章节,我们用一个程序范例论证了指标。在第五章节中,我们通过实证案例研究,比较研究,并通过实际项目验证我们的指标。这项工作得出的结论在第六章节。

2

文献综述

Python是一种编程语言,可以让程序员的工作更迅速地更为有效地去整合系统[10,11]。这是一个免费的用于商业目的的语言。它运行在所有主要的操作系统包括Windows,Linux/ Unix下,Mac OS X上,也已经被移植到Java和.NET的虚拟机[10]。除了这些功能,Python是一种有效的语言特别是对软件开发嵌入式系统。它也可以在web开发中使用的[4,5]。在生命科学研究和发展中和自然语言的进程中,为了开发软件应用,这是解决问题的理想语言,尤其是在Linux和UNIX系统上[7-9]。

在嵌入式系统中,廉价的元件和维护是被需求的,Python可以提供最好的解决方案。Python可以实现小尺寸,高可靠性,低功率消耗这些目标。此外,拥有Java,C和/或 Visual Basic[4]的基础的开发人员可以不用费太大的努力学会它。事实上,它拥有编程语言的混合特征。它提供了大多数的面向对象语言的特点以一个强大且简单的方式。除了它的这些强大特征,就我们所知,没有适当的技术能够用来评估Python代码的质量。我们无法找到一个单一的指标在发布的表单中,除了一些网上的文章[25-30]。这些可用的文章都涉及到可用的工具,它仅限于计算简单的度量。例如,Pythius[26]工具,通过计算简单的度量如注释行代码,模块和功能的大小比例来计算Python代码的复杂性。

另一个工具“snakefood”由马丁·布莱斯[27]提供了Python中的依赖关系图。对Python代码而言,它计算麦凯布的圈非常有帮助的。大卫·斯坦尼克[28]还用Python 代码开发Pygenie工具计算麦凯布圈的复杂度。瑞格·查尼还开发了一个开源的复杂度测量工具名为PyMetrics,它能够计算下列度量:程序块数,最深块嵌套级数,Python类的文档字符串数,类的数目,注解的数目,内联注解的数目,文件字符串总数,函数文件字符串的数目,函数的数目,所使用的关键字数目,行数,字符数,多项退出函数的数量。另一个可上网得到的工具是Pyntch[30]。Pinch PYthoN Type CHecker) 是一种静态代码分析器,它能够检测出可能存在的运行时错误在实际运行代码之前。上述所有工具都有效评估Python语言的质量最多只能在一定程度上。他们中的大多数都仅限于计算简单的度量,它只是给某些特定的属性一个想法,他们都不能够用一个单一的指标评估大多数属性。

3

提出度量

如果我们分析面向对象的软件,我们可以发现软件包括几个类与一个主程序。因此,面向对象代码的复杂性取决于类的复杂性和主程序的复杂性。在面向对象系统中,大多数可用的度量不关心主程序的复杂性是公认的意见。我们建议,我们考虑所有的因素来增加类的复杂性以及主程序,这是负责任的。其实主程序是主要部分来区分Python和其他面向对象语言的。我们将会用我们的经验评估来提供我们的主张,在第五章节,此外,系统的复杂性取决于以下几点因素:

  1. 由于类的复杂性。类是面向对象软件开发的基本单元。所有功能被分布在不同的类。而且类用面向对象代码编写不是继承层次结构就是明显分布式。因此,所有类的复杂性取决于继承类或独有类复杂性。
  2. 复杂性取决于全局因素:第二个重要的因素,在计算面向对象代码复杂性时,它通常是被忽视的,它就是主程序的全局因素的复杂性。
  3. 复杂性时由于耦合:耦合是用于增加面向对象的代码的复杂性的重要因素之一。

其他因素像内聚和方法被认为是类中的复杂因素。

因此,我们建议Python代码的复杂性定义为:

Software Metric for Python (SMPy) = CIclass CDclass Cglobal Ccoupling (1)
CIclass = Complexity due to Inheritance 继承复杂性
CDclass = Complexity of Distinct Class 独有类复杂性
Cglobal= Global Complexity 全局复杂性
Ccoupling= Complexity due to coupling between classes. 类间耦合复杂性

在计算继承类和独有类复杂性之前,我们会估算类的复杂性,它以后会成为继承层次或独有类的一部分。因此,我们将首先计算命名为Cclass的简单类的复杂性。

Cclass可以被定义为:

Cclass = weight (attributes) weight (variables) weight(structures) weight (objects) – weight (cohesion) (2)

Cclass = 权重(属性) 权重(变量)+ 权重(结构)+权重(对象)-权重(内聚)

权重属性W(attribute)被定义为:

W (attributes) = 4*AND MND (2.1)

AND = 任意指定的变量/属性的数目

MND = 一些有意义的命名不同的变量/属性

变量的权重W(variables)被定义为:

W(variables) = 4*AND MND (2.2)

任何有意义的变量或属性是复杂性的原因之一。 此外,如果一个变量的名字是任意给定的,那么该代码的可理解性会降低,[ 20 ]。 因此,变量和属性的类应该是有意义的名字。

虽然,在编程中变量的名称应该是有意义的,这是被建议的。但是有开发者不严格遵循这些建议。如果变量名是任意的,如果开发者评估自己的代码,它可能不会是一个严重的问题。

然而在现实生活中却不是这样。系统开发后,特别是在维护时间,任意命名的变量可能会增加理解的难度以相当于有意义名称四倍的时间。

结构的权重W(structures) 被定义为:

W(structures) = W(BCS) (2.3)

BCS 是基础的控制结构。

结构/基本控制结构(BCS):

序列的复杂度取决于它的数学表达式[ 15 ]。函数帮助代码整洁,此外,它们可以提高代码的可重用性。然而,每个函数调用都会干扰阅读代码的流畅度。循环用于重复一次以上的语句,但它们会减少计算性能。特别是,有更多的嵌套循环,需要更多的时间来运行代码。此外,人脑与计算机在解释数据时相似[ 22,23 ] 。条件语句用于编写动态程序,另一方面,呈现出更多的组合降低掌握程序的完整性。因此,条件语句可以被认为是在不同的情况下建立的序列。如果有条件的情况下是嵌套的,那么复杂度就高得多。异常的情况也是类似的。通过Wang[15]的相同的途径,我们为每一个基础控制结构分类权重。虽然我们和Wang一样遵循相似的途径,我们在一些基本控制结构的权重方面做了一些修改,如图表1。

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[30337],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。