版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE33哈尔滨工业大学毕业设计(论文)I-摘要根据研究,全球经济的出现使得开源软件进一步的普及。如果使用的是开源软件,那么文件的老格式就会在软件的不同版本保留,或者是新版软件更容易获得兼容性好的补丁。然而,有很多开源软件的安全风险,开源软件公司在享受带来的便利的同时也带来了一个巨大的安全风险。软件开发过程越来越多的使用开源软件,开源软件已经成为软件开发的核心基础设施,开源软件的安全应该上升到高度安全的基础设施来解决,应该得到更广泛的关注。本文介绍了课题研究背景和相关工作研究现状,将研究目标确定为基于软件历史数据挖掘,探索开源软件的质量和缺陷修复模式。对开源项目提交历史进行分析,采集和分析其中有关软件缺陷及其修复操作的历史信息,进一步利用错误修正操作分析代码质量。统计分析了相应的软件开发人员所有贡献的代码质量情况,可以更好地为未来开源软件缺陷发现和修复提供参考,提高软件维护的效率,进而提升开源软件的质量和可靠性。关键词:开源软件;代码质量;缺陷管理;软件仓库挖掘AbstractAccordingtotheresearch,theemergenceoftheglobaleconomymakesthepopularityofopensourcesoftwarefurtherifyouareusingopensourcesoftware,thenoldformatfilewillbeindifferentversionsofthesoftware,oranewversionofsoftwarecompatibilityiseasiertogetagoodpatch,however,therearealotofsecurityrisksofopensourcesoftware,opensourcesoftwarecompanyatthesametimeenjoytheconveniencebroughtahugesecurityriskofthesoftwaredevelopmentprocess,moreandmoreuseofopensourcesoftware,opensourcesoftwarehasbecomeacoreinfrastructureofsoftwaredevelopment,opensourcesoftwaresecurityshouldrisetohighsecurityinfrastructuretosolve,deserveswiderattention.Thispaperintroducesthebackgroundoftheresearchandthestatusquoofrelevantwork,anddeterminestheresearchobjectiveastoexplorethequalityanddefectrepairmodeofopensourcesoftwarebasedonsoftwarehistoricaldatamining.Analyzethesubmissionhistoryofopensourceprojects,collectandanalyzehistoricalinformationaboutsoftwaredefectsandtheirrepairoperations,andfurtheranalyzecodequalitywitherror-correctionoperations.Thestatisticalanalysisofallcodequalitycontributedbysoftwaredeveloperscanbetterprovidereferenceforthefuturediscoveryandrepairofdefectsinopensourcesoftware,improvetheefficiencyofsoftwaremaintenance,andtherebyimprovethequalityandreliabilityofopensourcesoftware.Keywords:OpensourcesoftwareCodequalityDefectmanagementSoftwarewarehousemining目录TOC\o"1-3"\u摘要 IAbstract II第1章绪论 11.1研究背景 11.2开源运动现状 21.3开源软件安全问题现状 51.4错误修正模式研究现状 71.5本文组织结构 8第2章软件历史数据挖掘的研究现状分析 102.1应用于编码的数据挖掘技术 102.2应用调试的数据挖掘技术 102.3应用于测试的数据挖掘技术 112.4版本控制信息的挖掘 122.5软件历史数据挖掘的价值 12第3章错误修正模式挖掘方法研究 143.1方法的总体框架 143.2决策树分类算法 153.3代码质量静态分析 163.3.1代码质量相关工作 173.3.2工具SonarQube 17第4章实验结果与分析 204.1实验数据 204.2实验设计 214.3实验结果及分析 22第5章研究方法对比与评价 275.1FP-Tree挖掘算法建简介 275.2实验环境及数据 285.3算法评价指标查准率和查全率 285.4实验结果 32结论 33致谢 错误!未定义书签。参考文献 错误!未定义书签。附录1译文 错误!未定义书签。附录2英文参考资料 错误!未定义书签。第1章绪论1.1研究背景自上世界80年代以来,开源应用软件一直在中国和全世界得到很大范围内的应用和推广,经过20多年的快速发展,现如今的开源应用软件产业中,开源应用软件已经在各个环节的应用中都充分发挥了其不可替代的重要作用。然而,在其发展的与此同时,开源应用软件也一直在行业中承受着众多的消费者和误解,特别是在其应用软件安全性的问题上更是一直颇受消费者的怀疑。本章在深入探讨开源软件的安全性存在问题的大背景之下,首先详细的介绍了目前开源应用软件的技术应用发展基本现状和目前开源社区已经形成的基本现状,并对存在的开源应用软件的安全性存在问题分析进行了较为详细的分析和介绍。与此同时本章会详细的介绍目前最比较流行的几种静态开源软件代码质摘问题分析的方法和工具,据此重点阐明了开源应用软件的代码质量安全性问题与软件缺陷的关系分析研究的意义及当前开源软件面临的困难,同时还对开源软件相关的技术应用发展中的现状问题进行了详细的介绍。开源软件运动中所提倡的大规模协同软件开发模式也在不断的改变着全世界软件开发者和技术人员的价值观和软件开发的模式,开源商用软件运动在给当今的人生活带来了机遇的同时,也给人带来了很多挑战,开源商用软件的绝对安全性等等问题一直被很多人所质疑。其实对于软件从业者与用户来讲不管使用的是任何一个开源的商用软件系统还是其他没有商用的开放软件源代码的商用的开源软件,绝对安全的开源商用软件系统是不一定有可能真实存在的,同时很多相关从事软件开发的人员也都会在网站上发布很多相关的开发缺陷,这些缺陷出现和产生的可能性和原因也有很多,而这些开发缺陷往往会直接导致一个个软件安全隐患的出现和产生。通过软件工程中对数据挖掘的使用就能够可以增强软件系统中的的维护效率同时也可以增加系统的稳定以及安全性。那么如何在这个大的背景下有效的提高一个商用开源软件的开发质量无疑是一个很大的挑战。从程序的本身而言,到现在还没有一套完整的理论和工具能证明程序本身的正确性,这是软件可靠性本质上的硬伤,排除这个因素,那么软件的质量就要通过测试来保证。但是,发现和修复软件缺陷仍然是一种高成本的工作。本论文的章节主要内容就是在探讨开源软件有关安全性的问题这个大的背景下,从当前国际开源运动的早期发展以及现状,开源社区的发展现状和与开源应用软件相关安全性的问题等几个角度来详细的介绍所研究的背景。1.2开源运动现状从1980年代以来,计算机软件技术已经得到了质的发展和飞跃,开源软件运动也随之日益兴起,随着移动互联网信息技术的普及和发展,那些完全向社会公众提供免费开放软件和源代码的计算机软件也越来越被大家所广泛接受。开源代码运动的历史序幕最初是由Richardstallman启动了一个GNU的项目而一步步拉开的。1989年,Richardstallman主持了一个GNU其他各个项目的工作,在随后一年中,越来越多的人开始加入到了GNU的项目中去,到了整个本世纪初中国的开源软件运动已经进入了全面形成和发展的第一个阶段,目前在软件数据库、编译工具、操作系统、移动应用终端等等都已经有了很成熟的开发成果,甚至在一些开发的语言上也都已经有了开源的产品踪迹,比如像操作系统开发软件(cms)已经逐渐的被其他开源软件产品所取代和占据,在目前是软件开发技术人员最为比较熟悉的基础开源软件的领域,大体的模式是类似于spring、Hibernate、Struts这样的开源运动自由软件的框架也不断的对之前的传统闭源软件框架模式进行了革命性的冲击。并且软件的质量就要通过测试来保证,开源软件的安全问题应该上升到基础设施安全的高度来对待,应该得到更多的,更广泛的重视。反观国内的新一轮开源软件运动来讲,国内的新一轮开源软件运动的开始和起步时间相对于国外的新一轮开源软件运动来说要晚的多,最早在一开始也可以说是主要对一些Linux的软件进行汉化,但是随着国内的新一轮开源软件运动的不断发展,国内的早期的互联网软件开发技术人员已经开始深刻的意识到了开源应用软件的重要性和优势,不断的将一些知名的国外开源应用软件产品引入国内的开发回,大大程度的促进了国内的开源应用软件的普及和发展。从2005年开始,互联网的技术已经得到了迅速的进步和发展,新一轮的国际开源软件运动也在不断的发展,出现了很多重要的开源运动成果,全世界开源软件运动的发展历程,就是可以很清楚地发现,开源应用软件的技术发展水平已经呈现了螺旋式的上升,开源应用软件的技术发展从括了开源软件在应用系统开发平台、基础设施协议以及软件开发编程语言等相关技术方面已经取得的重要技术成果,还包括了各种新型开源社区的诞生和兴起,甚至有更多的理由向他建信,开源应用软件在未来必然还在技术上有着长足的进步和发展,将会进一步展现出强大的技术生命力。全世界各地的项目和软件开发技术人员以及其他软件开发技术爱好者都希望可以通过使用这些社交平台开始频繁的相互协同进行软件开发与项目的技术交流。所以在接下来的工作中进行了相关研究调查。Github社区每年新增用户趋势图,如图1-1所示。图1-1Github社区每年新增用户趋势图前期由于开源社区只有少数核心的软件项目并且开发人员能够利用自己的项目和软件来进行协同开发,基本上没有其他软件开发人员控制的工具可以来指导和控制整个软件项目的协同开发和技术活动。其中例如Github、SourceForgc、OpenHub等。这些不同发展形态的开源社区项目总体呈现出:1)项目规模大,2)用户增长快,3)注册用户量多等的特点。研究人员发现,截止到2016年,Github累计托管开源社区的软件开源人员以及软件爱好者项目已超过了500万,常见开源社区的开源软件项目数量统计,如表1-1所示。表1-1常见开源社区的开源软件项目数量统计开源软件社区开源软件项目总量Github4,699,455SourceForge363,700OpenHub672,372OSChina42,238总计5,777,765与此同时,作为开源社区承载全世界开源软件的重要载体,开源社区的内容和形式也是随着开源软件时代而在不断的发生改变,随着国际开源软件运动在中国乃至全世界的深入和蓬勃发展。软件都已经是大型的公司内部进行研发,每个做开源项目的软件开发人员也没有现在那么多,所以没有真正产生开源社区的软件开发概念,项目开发当中的一些人为核心的开发人员最主要的特点就是沟通渠道和方式都是通过email来进行交流的,每次交流都是需要将自己的项目和代码放到一封邮件中,通过这样的邮件方式来向其他的专业软件开发的人员和爱好者传达自己的软件开发的理念和现状。但是随着国际开源软件运动的发展和兴起,软件开发的难度和门槛也没有以前那么高,大量的专业软件开发的人员和爱好者参与到了软件的研发当中。近年来,同时大量的专业软件开发人员和爱好者对软件开发的热爱被开源社区所点燃,比如Eclipse社区、Apache社区、Linux社区等,这些社区主要都是由一些规模停大的科技公司和互联网信息服务公司提供支持,为一些优质开源软件的作者和开发人员提供了各种以软件为基础的服务设施。随后逐渐出现的开源项目将代码托管,邮件列表和缺陷管理库等的功能突岀,展示了开源社区主页。SourceForge中开源软件Ubuntu的显示主页截图,如图1-2所示。图1-2SourceForge中开源软件Ubuntu的显示主页与此同时不同的开源社区也开始根据其用户的特定开发需求和活动来为开发者提供特定的产品和服务,比如软件编程问答社区StackOverflow的社区开始出现就是为了能够解决更多的软件开发者以及他在进行软件开发的过程中可能遇到的困难和问题而设计产生的。显示了开源社区及其应用数据的形成和演化过程。开源社区及其数据的演化截图,如图1-3所示。图1-3开源社区及其数据的演化1.3开源软件安全问题现状随着开源运动的发展,开源软件的优势越来越受广大软件从业者的喜欢,这些闭源开发项目的错误或者代码始终都是绝对保密的不可能将其公布出来,其中的一些软件的安全错误或者一些代码的安全问题很有可能会被其他的开发者有意无意的进行忽略或者有意悄悄的进行掩盖。然后,开源软件运动非常的有助于安全技术的广泛应用与其发展,喜欢参与开源软件运动的安全软件开发的人员一般都实际上是非常的乐于学习与探索各种现有的安全技术,并非常的喜欢追求新的安全技术,如此软件开发的风格往往这样就可以使得软件源代码的质量与安全性逐渐的得到了改善。但是长期以来一些没有参与到开源运动的人士对开源软件的安全性和维护问题的理解是经常会有很多误解的,其中的一个原因主要可能就是在其中的代码公开、免费的使用以及难升级的维护等因素造成的。所以可以直接得出的一个结果是开源软件和安全漏洞是没有直接的联系的,代码是否公开并不代表软件的安全性是否高低,其实开源软件的安全高低等问题更多的还是在于开源软件的系统架构,代码的质量和软件后续的升级维护等一些问题。展示独特的开放源代码的软件开发和管理模式。社会开发模式截图,如图1-4所示。图1-4社会化开发模式然后一个开源运动软件的安全等级其实应该是比较好的,因为这一款开源运动软件的所有源代码全部公开的的提供给了市场上的用户,所有的源代码和技术细节对于所有的用户来讲都实际上是完全透明的,能够为用户做的测试只能是简单的一个黑箱测试,而且这种沙箱测试往往是真的无法完全覆盖到所有的源代码情况,所以只有真正的开发源代码,用户往往才能彻底的去了解和检测到源代码的安全性,能够彻底排除病毒木马等的危害。最后在这里需要特别说明的是,一个成熟的商业开源软件组织机构是至少拥有成千上万的组织机构用户在使用的,在这其中也不乏一些大型的政府事业组织和一些耳熟能详的商业大公司,对于这些大型的组织和机构来讲软件的使用安全性这个问题尤其的重要,随意任何当他在使用时发现的安全性问题都会在其第一时间就直接发布和处理出来,有了这些大型的组织和机构的大力支持,对于软件的开发以及维护过程跟踪、信息的发布和对缺陷的管理都无疑是十分有力的。相对而言,那些商用的组织机构闭源开发软件因为其强大的商业性,当外部的研发管理人员在使用时发现了自己的软件在使用中的一些缺陷和安全性问题但是还没有得到解决时,为了更好的保证不可能地流失新的客户量,一般的情况下都组织机构是不会将具体的安全性问题直接发布岀处理出来的,同时当外部的研发人员在使用时发现了这些缺陷问题由于组织机构没有足够的能力与客户接触得到非常好的源代码,所以外部的人员根本无法没有能力去发现和解决这些缺陷问题。1.4错误修正模式研究现状当前的科技在不断的进步,数据挖掘技术越来越广泛的应用在生活中,比如银行、保险、运输和零售行业在数据挖掘技术的应用,发现问题,为决策提供了重要的支持。在软件工程中数据挖掘技术已经存在了超过20年,有着悠久的历史。软件开发人员在软件工程中使用数据挖掘技术可以改善软件系统的维护效率,增加系统的稳定性在所有方面。在软件工程程序代码分析、软件项目管理、开发软件和开源软件的故障检测是数据挖掘技术的应用。A.T.T.Ying用基于FP树的关联规则分析方法挖掘CVS代码库寻找那些经常一起发生变化的软件实体。该作者选用深度优先的FP树方法挖掘频繁项集,并进行了相关性规则挖掘用以提高准确率和算法效率。作者用两种度量评价算法的价值,分别是有趣度和预测,其中兴趣度又分三个等级,意外的、明显的和无意义的。并在两个开源的大型软件Eclipse,Mozilla上做了实验。该算法的两个缺点是:仅处理布尔值(即只考虑文件是否被修改);只能处理文件粒度,不能处理更细的粒度,如变量、函数等。T.Zimmermann等是较早做关于挖掘软件修改历史模式研究的人,他们提出ROSETool。该工具也是用关联规则Aprior算法挖掘CVS代码库,其优点是可以处理变量和函数级别的粒度。由于Aprior算法候选项集特性的缘故,故它可能需要产生大量候选项集和扫描n次数据库才能完成,所以在时间复杂度上比基于FP树的关联规则分析算法要局。郑美玲认为,学习误差有其必然性,在学习的过程中是不能够逃避的。不同学习水平的学生的学习错误有特殊性和差异,需要有针对性的、个性化的教学,目前常见的背景下大量的教学、分层纠正错误有它们存在的意义和紧迫性。对不同水平学生的错误,宜采用不同的修正模型,如优生自助误差修正模型,中等共同误差修正模型,修正的后进生。提出了一种简单的方法通过提交软件硏发时相关的软件开发技术人员根据所提交的软件源代码运行日志数据来分析并追踪相关软件的缺陷产生与错误的消失。许家欢研究了程序自动修正方法,并设计了一个学生程序自动修正系统,针对高校Java语言课程的编程练习,为学生提交的有缺陷的程序代码提供修正方案。由于学生程序具有程序规模小、含有丰富的模板程序、程序中包含多个缺陷等特征,教师人工检查大量学生程序的错误会耗费大量的时间和精力。目前现有的程序自动修正方法多为针对工业程序,且能够修正的错误具有局限性,取决于变异算子的设计,以及现有修正方法大多只能修正程序中的单个错误,对于包含多个缺陷的程序则无法解决,且程序修正的准确性一般依赖于错误定位的准确性,故修正的时间效率较低,占用空间较大。王雪华等人,侧重于自动纠错技术,在纠错系统需求分析的基础上,主要完成了以下工作:刚开始通过正确的原始程序分析词法语法和错误版本生成相应的抽象语法树,利用相关技术获得被测应用程序的执行路径,并随机抽取其中失败与成功的测试用例和执行结果,测试用例,以减少变异测试成本的影响。然后通过使用Tarantula和Ochiai两个错误定位技术,定位误差,统计分析软件,信息生成的执行语句按可疑度排名,错误定位技术对整个纠错效率的影响。然其次,为了定位误差修正,本文把八个预设变异算子,根据一定比例变化程度的可疑的优先级排名榜首的语句并生成变种。此外,通过利用TCC编译器从测试用例执行随机变异,所有变量在测试用例执行成功的验证变异是潜在的修复。最后,设计实现了基于突变的纠错系统测试,和SiemensSuite在标准测试套件设置到系统中行了测试,测试结果表明基于变异测试的方法对错误进行修正是有效的。1.5本文组织结构本文一共大概分为五章,每个主要操作章节的主要操作内容以及每一的章具体安排和操作方法概括如下。第一章主要重点关注了开源软件的当前现状以及在网络中出现的安全现状问题的重要理论研究。通过对各个因素的调研例如从当前国内开源企业社区应用软件的代码安全性研究发展史、开源社区的代码安全性概念形成及其技术发展演化过程、代码软件安全性问题分析的研究工具和应用技术以及国相应领域开源社区软件的代码安全性分析研究热点问题以及相关对策问题进行了深入阐述与针对案例进行分析。第二章的内容就是基于基于第一章的研究进而更深一层次的了解软件历史数据挖掘的现状。通过几个方面来进行分析和研究,例如从编码,调试,测试等诸多方面来清晰的表明软件历史数据挖掘的现状分析和研究。同时介绍了各个算法以及他所运用到的领域和限制性。第三章主要是对挖掘方法的研究。通过方法的总体框架进一步对算法有个更明确的研究。通过对开源软件代码质量问题的分析,同时分析了静态代码质量检测,进而引出静态软件质量设计和分析的工具,能够直接的对下一次所产生的软件代码设计和质量的分析。第四章是对是实验结果进行分析,找出实验数据,进行设计和分析,从不同的角度分析代码质量问题,进而得出结论。对已经设计好的文本以及下一步的研究工作打好了基础。第五章是对FP-Tree算法的介绍并且结合第三章的算法内容通过各方面的因素进行对比和分析。同时介绍实验环境和数据以及算法的评价指标得出本次研究内容的结论。第2章软件历史数据挖掘的研究现状分析在软件工程生命周期将会产生大量的数据,数据通常存储在代码库中。使用数据挖掘技术研究了软件数据,发现数据中潜在的模型和预测的软件开发的软件,可以帮助软件开发人员更好的理解系统,为了提高系统的稳定性,降低维修成本,缩短开发时间,通过各个方面进行研究。2.1应用于编码的数据挖掘技术数据挖掘技术可以帮助编码中的:API使用方法、软件框架重用、源文件查找和程序规范等。AmirMichail提出用泛关联规则挖掘技术发现软件库的复用模式的算法,例如大部分继承了类Widget的类,都会覆写Widget的成员函数Paint(),即是一种简单的复用模式。该算法与“购物篮”关联规则挖掘算法相似,只是表示方法不同,把与类或成员函数有关的行为称为复用关系,这些复用关系即是项集,如上面的例子可以表示成:class_inherits:Widgetclass_overrides:Widget::paint()class_inherits:Widget表T的是被继承的类,而class_overrides:Widget::paint()表T的是一种覆写关系,Widget的成员函数paint()被覆写。由于该算法会产生大量的规则,因此本文分别提出用全局剪枝和局部剪枝技术来处理候选项集。在全局剪枝中,提出三个剪枝度量:无意义的规则、错误的规则和统计上无意的规则。这种算法虽然可以发现五种复用关系:类的继承,类的实例化,成员函数的调用,成员函数的覆写和隐式调用关系的复用模式,但是它只能应用在面向对象语言上。所研究的这个内容可以理解成分类问题。并且数据挖掘技术在这个研究的内容上有着很多的解决方法。有的编码问题可以根据文本的特点以及它所包含的内容信息进行相关的信息转换,并且这个问题可以在很大的程度上实现相关的功能,为今后的编码提供很大的帮助。2.2应用调试的数据挖掘技术软件系统的调整主要是由开发人员手动完成,并一步一步的程序调试,是一个非常耗时的工作,特别是在软件系统非常复杂。其主要任务是调试、分析和错误报告,定位软件错误,修复bug可以使程序正确运行。数据挖掘的分类分析、贝叶斯统计理论和分层的应用程序更多的技术在这一领域的概念,如自动文本分类方法分类错误报告的应用这些技术可以减少程序员的工作。AndyPodgurski等人提出用分类技术对软件错误进行自动分类的方法,把由同一种原因因此的错误归为一类。本文的主要工作是对软件系统中错误代码进行优先级划分和检测这些错误产生的原因,该方法是基于一种监督学习的分类方法,把由同一种或相似的原因引起的错误归为一类。假设一个软件系统在某个时间段运行了n次,出现了m个错误,引起这m个错误产生的原因个数为k(通常远远小于m),把出现的错误记为F={f1,f2,那么存在以下对F划分,F1,F2..使得对与1<i都有是由同一错误引起的,这样的划分称为真实分类。算法分三个阶段进行。首先收集软件出现错误时的轨迹信息。其次把这些错误的轨迹信息和经过随机取样的正常运行时轨迹信息放在一起作为训练集,对这些训练集进行特征提取,利用这些特征构建能区分正常运行轨迹和错误运行轨迹的分类器,并选取全局最优的特征。用聚类的方法对那些错误运行轨迹信息进行聚类,把具有与相关特征相似的归为一类。2.3应用于测试的数据挖掘技术W.Dickinson等,提出一种有效的方法检测错误的集群测试跟踪操作。在该算法中,,作者使用了测试方法是基于观察,选择标准是跑道中的异常行为。他们聚集在其运行轨迹的自底向上的方法,首先每个最低运行的轨迹长度作为一个单元集群、原子簇会结合成更大的簇,直到满足终止条件。在作为一个整体类简单随机抽样;其次每次随机选择一个类的所有类内容;最后,所有类型的自适应抽样集群。其他数据挖掘技术进行测试以及美国Hangal和M.S.Lam出了异常值检测算法基于发现的bug。该算法可以帮助程序员跟踪其原因产生的缺陷和错误。VDallmeier对象行为与其他挖掘方法ADABU;摩根富林明包荣基于控制流和数据流分类器改进分类算法软件的行为;和H.Yuan和T.Xie的自动提取分支覆盖算法状态机等等。2.4版本控制信息的挖掘CVS,SVN等都是相关的版本控制系统,他可以帮助修改程序的有序性,全局统一性等等。到目前有一些关于软件开发相关的企业或者是它使用了大量的开源组织合并或组织软件开发相关的活动。现如今在版本控制信息上挖掘软件的历史变更大部分都是挖掘应用。同时还发现可以利用用不同程序之间模块的逻辑依赖,去测试程序故障的相关引入方法,或者是找出能够在以后出现的结果。通过重要的挖掘技术,能够有效并且降低在以后系统维护的效率,有利于系统的逆向分析以及它的前瞻性,并且预防可能因为变更而导致的故障问题。在今后变更的预测中,它可以为项目的相关管理以及重要的决策提供参考数据。比较典型的做法就是在CVS这个版本控制上运用相关的挖掘算法来找到当前程序变化引起的变更,根据前面研究者的研究发现,他们在这个基础上面研究出了应用于版本控制信息挖掘Eclipse的插件系统Rose,这个系统拥有很强的挖掘能力,在粒度上除了文件的级别以外还很支持类和函数等相关级别之间的关联分析的能力。故障所引起的挖掘情况可以为后期维护的软件系统提供一个重要的警惕作用。通过相关的验证,对历史变化的故障率预测和常规代码度量比较,前面的方法更加有效果,与此同时这个研究表明软件在增长之后的故障数量将比原来的数量少三分之一。有一些挖掘工具可以在软件修复历史记录里面可以挖掘出经常出现的错误模式,并且挖掘出来的结果可以帮助软件开发者尽可能的躲避这些经常出现的错误的又一次的导入。除此之外,挖掘版本库它所形成的相关知识可以帮助不同版本之间的程序的对比,然后找出互相匹配或者是近似代码。2.5软件历史数据挖掘的价值在软件过程中,由于它的数据具有特殊性,从而导致软件工程中的数据挖掘技术将要面临以下的几个方面:数据复杂,非传统分析以及挖掘结果评价标准。在数据挖掘的结果之上主要的目标就是为了能够获得重要的信息知识,研究的难点就表现在了数据的预处理以及如何去说明信息知识。有的主要工作仅仅限制为几种关系,同时大量的数据源以及数据关系是没有开发者研究的。可以将多个方面的数据源进行数据挖掘。每一个软件根据不同的变化去发展,而且这种变化在外部功能中能够体现同事还能够在内部结构中体现。因为增加了软件需求,扩展了软件的开发工具以及细致化分,扩大了软件开发团队,软件的开发周期也延长了。但是目前在软件工程中挖掘出里的数据量并不是很多,通常都可以从一个大规模的软件数据库里面提取出部分数据。比如说利用Eclipse开源软件里面的缺陷报告库里面只能提取并且检测一些缺陷研究报告。这就是因为目前算法的效率以及适用性问题。为了能够解决这一系列的问题就需要使用数据预处理方法,主通过利用这个方法能够将特征提取出来,在另一个当面可以开发更快速并且有意义的挖掘算法。一般性挖掘流程图,如图2-1所示。本章小结本章通过在软件开发过程中一个重要的基础理论,在各个方面进行了介绍,同时介绍了一个重要的理论基础那就是数据挖掘。然后对代码质量和性能进行迭代的研究,来设计和分析各个软件开发者在软件开发的过程中相应的专业设计和贡献的专业代码技术债务质量的水平和高低。在这个研究中,可以更好的了解重要知识内容,在结合之前所研究过的知识内容为以下的相关研究打好了良好的基础。第3章错误修正模式挖掘方法研究软件开发的人员越来越多的喜欢通过使用第三方软件源代码质量的静态分析和度量的工具功能来提高自己的第三方代码安全性和质量,所以在第三方开源静态度量软件的安全性和质量问题日益的受到程序员关注的巨大背景下,如何能够让更多的程序员在软件开发的过程中能够依靠第三方软件源代码质量的静态分析和度量的工具功能来有效的提高其软件安全性和源代码的质量最终这无疑是一个巨大的机遇和挑战。3.1方法的总体框架首先需要从数据仓库中找出数据源,然后将数据源进行数据预处理。处理完之后就需要分析出代码质量问题,获取提交记录。然后将这些记录进行过滤,将一些不符合的数据过滤掉,下一步就需要将错误修正模式进行记录,然后定位到代码上面,将这些代码进行静态分析,找出软件缺陷的数据,基于决策树的算法将这些数据进行分类,最终输出结果。方法的总体框架截图,如图3-1所示。图3-1总体框架图3.2决策树分类算法在决策树基本算法中,它是一种归纳分类算法,是通过学习训练集,挖掘出有用的规则,用于预测新集。在决策树形成的过程中,分区属性选择的指标是关键。通过属性的选择测量,选择最佳的样本分类的属性。ID3算法,C4.5算法以及CART算法都属于决策树的分类算法,自上而下的递归方法来构造决策树。所以在本次实验设计中用到了ID3算法。由给定的训练数据产生一棵判定树。ID3算法截图,如图3-2所示。图3-2ID3算法3.3代码质量静态分析分析软件代码质量的问题日益受到了关注,越来越多的软件开发技术人员开始使用第三方的静态软件代码的质量设计和分析的工具环境来设计和分析正在进行开发的静态软件代码的质量,通过在本地搭建静态代码的质量设计和分析的工具环境设计人员能够直接对下一代进行软件代码设计和质量的分析。展示了一个设计人员使用SonarQube来设计和分析软件代码设计和质量的问题后所需要展示的质量分析结果。SonarQube分析结果截图,如图3-3所示。图3-3SonarQube分析结果从这张图中可以清楚的看出,在开源代码软件中通过对开源代码进行SonarQube的分析后,SonarQube系统会详细的展示其需要分析的开源代码质量问题的结果,更以更好地清楚了解现在所有的代码质量现状。可以的看到所有的开源代码对于质星问题的分类都会被有相应的标记,与此同时对所有的开源代码质量问题都会分别有一个相应的质量问题分类和对应的技术债务分级,来用于提示哪些开源代码的质期债务问题已经变得比较严重或者质量问题急需解决。另外还有就是SonarQube还系统会对其需要检测的开源代码质量问题进行了技术债务的评级(一种类似于传统的开源代码技术债务评估的方法),技术债务越小说明代码的质量越高,需要检测和解决的质量问题越小。3.3.1代码质量相关工作静态代码质量分析工具通过具体的代码质量度量测试单元规范来通过扫描和分析相应的动态软件测试单元源代码,最后对每一个软件的所有源代码都进行质量的评估而且很多代码质量相关的软件动态代码质量分析工具已经成为软件开发人员在开发过程中进行评估和提高软件代码测试单元质量必不可少的重要工具了.同时由于可以通过使用各种静态的代码质量分析的工具结果来准确判断新引入的软件静态代码合格的程度,因此他正在鼓励更多的软件开发技术人员通过使用各种静态的代码质量分析工具的结果来准确区分和解决软件中所有可能发生的质量分析问题。在解决软件质量分析问题中,人为因素也是扮演着很重要的一个角色,bird等研究人之前在软件Windowsvista和Windows7上有过大量的研究,研究结果表明专业软件开发技术人员编写新引入的软件静态代码出现的质量分析问题的发生概率与其软件开发工作经验的可靠性有关,具有多年软件开发工作经验的专业软件开发技术人员所编写的质量分析代码更加具有其规范性、安全性。3.3.2工具SonarQube在研究的过程中,软件开发者在编写,组织,搭建,调试以及不停的修改应用程序的时候将会应用到很多的工具,重要技术,框架以及工作流程,然而SonarQube它是一种开源代码质量的管理工具,在最开始只是为了跟踪Java的项目质量所编写的,SonarQube可以使跟踪,管理以及提升代码质量形成高效的规范,同时还能实现最佳实践以及被广泛认可,同时为代码质量,评审以及相关的补救提供了一个完善功能的综合平台。SonarQube可以利用插件的模式设计方式更快更方便的集成FindBugs,PMD,checkstyle,Cubertuna,jcoco等重要的工具,可以让软件项目代码的静态检测得以实现。而且还可以通过配置相关的语言插件也就是可以支持对C,C++,C#,Cobol,Java,PHP等多种编程语言来进行相关的质量检测。在另一个方面,例如对其他工具的支持,使用了统一的接口设计方法可以更好得被其他的平台引用。使用持续的集成工具,还能够利用Jenkins这个持续集成工具去使用SonarQube。得到了通用规范设计的思想,同时也获得了国内外很多软件开发者的关注目光,SonarQube同时支持了Eclipse以及IntellijIDEA开发的环境的SonarLint插件。SonarQube的代码质量的管理体系大致上划分为以下几个方面:制定代码质量规范标准,在企业内部对质量管理平台的部署以及代码质量的管理流程。从代码的角度来衡量软件系统的质量被称作代码质量。而SonarQube就是利用简单的便于遵守的七大核心质量来陆续更改的源代码的质量,其中包含设计以及架构,重复度,注释比例单元测试质量,复杂度,潜在的漏洞以及编码规范。SonarQube能够与很好的企业所拥有的开源持续集成工具以及版本管理工具结合起来,利用持续集成工具来辅助,可以连续创建以及实施软件测试。平台是一种静态的对软件项目环境质量和代码分析的工具,从本地开始搭建好项目环境并将所有需要静态分析的项目代码区域提交到一个SonarQube的平台文件上去后,SonarQube平台就开始自动对一个整体的项目环境和代码区域进行了静态的分析,当这个SonarQube通过扫描得到的代码区域触犯到了SonarQube自身文件中所定义的项目代码和软件质岸的规范时,SonarQube就一定会自动标记一个行号issue来进行详细描述这个项目代码区域的负责人违反了哪些关于项目代码的规范,与此同时SonarQube平台还会将这些所有关于issue的代码详细信息都自动存入文件到MySQL中展示出去,包括了行号,违反的是代码规范和该代码的项目负责人,最重要的是SonarQube还会对这个项目的issue的负责人进行一个代码等级上的分类和判断,SonarQube对于issue的代码进行以下几个重要的等级分类。1.blocked这个问题是代码中等级最高的,已经出现了可以将一个issue级别定义为一个bug级别的修复这个问题,一般如果代码中出现了这种的情况就可能意味着的代码中已经出现了一些类似于内存连接被泄漏、数据库连接未及时关闭等等的问题,同时也非常希望能有相应的工程师和软件开发技术人员及时的发现和修复这个级别的问题。2.critical这个安全级别等级的问题数据分析表明,该类的issue类别级别问题可能会直接将其导致一些新的安全漏洞,软件的安全性能不佳,而却一些很有一定概率的问题可能会间接将其发展出来成为一个bug级别的安全等级问题。一般来讲对于sql的注入,内存处理中的大量垃圾未及时进行回收等安全级别问题一般都会直接及时标记这种问题安全级别,相应的软件工程师和其他软件开发中的技术人员也都是应该及时的进行深入研究去进行了解和及时关注他在一个项目的源代码执行处理过程遭遇中的这个安全级别问题。3.major软件代码的生成质量存在漏洞,表明该软件代码的质量问题存在可能会极大的严重并会影响一个企业及其软件开发者和技术人员的正常工作和技术生产力,一般都被企业认为可能是一些软件代码缺乏重复性和使用率过高的软件代码生成片段漏洞导致的。4.minor轻级的问题导致代码质暈出现漏洞,这个是有问题的也会从一定的程度上直接影响整个软件开发的稳定性和效率,但是这个问题影响的范围很大程度有限。5.info既不是错误或者缺陷也不是问题或者漏洞,只是简单的表明一个代码质量的问题。SonarQube对于一个代码的准确性分级和结果准确性等级的划分。SonarQube的分析结果展示截图,如图3-4所示。图3-4SonarQube的分析结果展示本章小结本章第三章主要是错误修正模式的挖掘方法研究,这一章主要的内容与工作重点在于提出了一种简单的方法通过提交软件硏发时相关的软件开发技术人员根据所提交的软件源代码运行日志数据来分析并追踪相关软件的缺陷产生与错误的消失。通过本章内容对SonarQube的相关研究,发现了它主要是通过建立一个标准的代码来约束软件开发者的相关代码质量,通过对源代码的静态分析之后得出的分析将结果,同时通过介绍相关的理念来帮助软件开发者提高代码的质量。第4章实验结果与分析该研究全面的分析项目中不同角色的开发人员所贡献的代码质量,并且得出很多有意思的结论,并为接下来的研究做好了铺垫。对一个开源项目中的所有软件开发人员所贡献的代码质量进行了代码质量分析,然后统计分析了相应的软件开发人员所有贡献的代码质量情况。4.1实验数据在本章的第一个实验中,从目前全球最大的开源代码托管软件开发平台Github当中筛选了世界上参与实验人数最多的开源代码项目,相应的工程师和软件开发技术人员在参与和开发这些项目时都是直接使用了Github来作为软件版本的控制器。同时这些使用开源代码托管软件的都必须符合如下的条件。1.编程语言Java、JavaScript、Python2.本次项目没有被fork3.创业项目必须要都是其所属公司业务所属的行业类目中销量排名前十的4.提交次数提交次数范围必须是100-20005.项目分析必须是可以被SonarQube正确的分析通过上述项目和条件然后经过筛选,从所有的GitHub上最终选择21个优质的开源软件项目,其中6个Python项目,7个Java项目和8个优质的JavaScript项目。从所有的Github上抽取并复制了所有经过筛选的开源项目的完整的软件开源代码,而且抽取了每个开源项目在软件开发的过程中需要相应的代码和软件开发技术人员每次提交软件开源代码时需要上传代码描述信息,同时通过抽取Github项目所提供的api,还获取了每个开源软件项目相应的代码和开发人员每次开发的记录。当然每次获取的代码质量信息都可以在每个软件的开发人员主页上方便的找到。以下主要将对这些优质的软件开源项目在软件和未来项目进行对代码质量的分析,体现项目的具体代码质量信息和细节。Github开源社区数据集类型以及规模表,如表4-1所示。表4-1Github开源社区数据集类型以及规模项目类型项目数量代码提交次数Python631,106Java768,410JavaScript818,4104.2实验设计实验过程在开始之前,需要先对所有的SonarQube软件安装一个基于git的插件,还有三种语言的插件。本节通过之前文章中描述的最优项目代码质量的分析实验算法对所有由git软件所控制的最优项目开发人员进行了版本的回退,同时对其进行了相应的软件版本回退运用SonarQube算法扫描其中的代码质量,统计项目开发人员在设计和开发整个软件过程中的项目代码执行质量,主要的步骤和方法有以下几个。步骤一:对协同开发项目过程中的所有的软件开发人员电子邮箱进行代码贡献数据的统计,主要的方法就是通过釆用git命令对每一个项目中所有的每一个软件开发工作人员的电子邮箱,代码开发行为贡献数据等进行代码贡献数据的统计。很多软件开发技术人员在进行协同开发的项目时都已经习惯于使用自己的电子邮箱开发代码作为自己的电子邮箱标记,在一开始就知道需要对每一个软件开发技术人员的电子邮箱代码贡献量进行数据排名。步骤二:对每一个项目在软件开发的过程中所提交产生的数据和日志进行了分析,通过git的提取命令将项目软件开发的过程中每次日志提交产生的数据和日志全部都提取了出来:cl,c2,c3等;同时还需要对每次开发者提交使用源代码时可能发生改动的源代码和文件提交集进行详细的记录,由于一个成熟优质的开源项目和软件的整个开发周期往往长达数年,源代码的版本和文件提交集数量也众多,并且需要有数百名的软件开发技术人员,所以必须对之前提取得出来的所有源代码和软件提交集进行了筛选,减少了需要需要多次扫描的文件版本次数。步骤三:对上一个遍历步骤的代码结果集文件进行遍历。如果前后两次代码的提交结果集记录所改动的结果集文件没有第一次发生的代码提交集,就将后面那次的提交结果集记录与后面的第一次提交记录的结果集继续进行比较,直到两次的代码提交结果集记录中已经修改的代码文件结果集都有了第一次的交集,则再继续记录这次的提交记,如此将从原来的提交记录集中重新筛选产生出新的代码提交集:nc1,nc2,nc3等;的具体流程。步骤四:首先使用分析器SonarQube对每次筛选项目提取出来的每次分析结果提交的记录都进行了质量跟踪分析,并且MySQL将每次质量跟踪分析的结果提交记录取出并将其关联到具体的筛选软件开发项目的人员中,这样就已经可以将筛选的项目中每个软件开发人员的代码以及质量跟踪问题都进行了统计。4.3实验结果及分析通过软件开发的过程,对软件开发工作人员的代码贡献量的分析和统计,本文将项目开发过程中的核心软件开发工作人员基本上分成了两类,第一类指的是普通软件开发人员:项目中的代码提交次数贡献人员的数量通常是占项目软件源代码的总行数的百分之五以下或者项目中的代码开发人员提交的次数通常小于5次;第二类是项目中的核心软件开发人员:这类普通软件开发工作人员的项目中代码提交次数贡献人员的数量通常是在百分之五以上而且项目中代码提交的次数通常大于5次。通过以上的分析和规则,可以发现,在本次选取的项目人员中有1596名普通软件开发人员,有367名项目中的核心软件开发人员,普通软件开发人员的提交次数比例已经占到了81%。为了进一步研究普通的开发人员与其他一些核心等级的开发人员之间项目代码质后的关系和差异,首先测量和比较了两种级别的开发人员在不同核心等级的代码质量问题平均的数量,可以发现除了info级别的质量是代码问题,在其他的级别上普通的开发人员引入一个项目的过程中代码质量的问题一般都远远多于一些核心等级的开发人员引入的项目质量是代码问题。特别的在一些普通或更高级别的代码质量问题上。核心开发人员与普通开发人员引入的平均质量问题数量截图,如图4-1所示。图4-1核心开发人员与普通开发人员引入的平均质量问题数量blocked和critical,普通企业核心系统开发人员能够解决实际问题累计引入的项目质量和能够解决实际问题的项目数量一般都可以是普通企业核心系统开发人员的累计引入问题数量的三倍。所以这张图中可以明显发现:在目前大规模的协同源代码开发的市场背景下,一个成熟的协同开源项目中,普通的开发人员可能会接触到比一个项目核心的开发人员直接引入的更多的是代码复杂度和质量的问题,而且一些级别复杂度越高的代码质量问题上普通的开发人员直接引入的代码质量问题可能会更多。同时也详细统计了普通的开发人员比较容易被触犯的影响代码设计质量的问题,图中可以明显发现5类影响代码设计质量的问题最容易被普通的开发人员直接引入:convention(代码设计规范的问题)、security(开发人员代码安全设计规范问题)、error-handing(开发人员程序异常处理不当)、cwe(开发人员代码的设计规范不合理)、brain(开发人员代码复杂度过高)。由此也可以看出知道普通代码开发人员的代码主要问题就是不规范而且可能会给程序员带来较多的代码性能问题。普通开发人员引入的质量问题种类与比例截图,如图4-2所示。图4-2普通开发人员引入的质量问题种类与比例接下来主要通过对SonarQube的代码和技术质量债务来进行分析这些技术债务代码的质量债务问题会如何直接影响涉及到软件相应的开发软件的技术债务质量,这里首先要给大家介绍一下技术债务sqale,是一套用来评估软件代码债务质量的基本方法。主要的思路是计算对应技术债务的时间占软件开发所有代码所需要的技术债务时间的大小比例(technicaldebtratio),并按照技术债务比例的多少和大小可以划分出从a到d的技术债务等级。在设计的模型中,软件性能的优良主要是有以下几个主要的方面来由设计决定的:readability(算法可读性),Exception-handing(异常处理),logicreliability(逻辑可靠性),CPUefficiency(CPU效率),unitytestability(统一的可测试性),other(其他)。通过对于SonarQube的技术债务分析和结果进一步的研究,可以进一步了解考虑到这些对应的技术债务代码issue,这些都会直接影响涉及到开发软件相应的技术债务性能和各方面的技术债务问题,所以对于SonarQube的代码质量债务进行分析。代码质量影响到的代码性能统计截图,如图3-3所示。图4-3代码质量影响到的代码性能统计从这张图中,可以明显发现软件代码质量的问题直接影响软件受到最多的还是软件相应的代码质量和可读性,其次是代码会直接影响到自带软件的异常发现和处理,然后是软件整体设计和架构的逻辑性和保证软件正常运行的稳定性和能耗。在仔细观察这个实验的结果和数据集时,可以发现有一部分的专业软件开发技术人员通常会同时参加几个项目的软件开发,而且往往这些人员会在不同的软件开发项目中扮演不同的软件开发角色,这些因素驱使必须去观察和验证相同的软件开发人员以及他是否在不同的软件项目开发过程中的表现和编写的开发代码质量也是不一样的。通过上述的实验可以发现,开发人员在不同的软件开发项目中扮演不同的代码管理角色时,其开发代码的质量往往不会因此有太大的实质性变化。同时上述的研究结果在实验总结中也分析了一些现在开源软件项目中的普通软件开发人员最容易被触犯的是代码出现质量的问题,从下表中可以清楚的看到,在一个软件开发项目中普通软件开发人员引入的代码质量异常处理问题比例超过50%这是一个关于代码质量规范的问题和异常处理的问题,随后分别列举了开发人员相应的最容易被触犯的最高质量代码问题和质量异常处理问题。普通开发人员最容易引入的质量问题统计表,如表4-2所示。表4-2普通开发人员最容易引入的质量问题统计类别名字破碎时间百分比严重程度语言Convention每个语句都应该以分号结束73,12239.6%minorJavaScript语句应该在单独的行中31,9286.2%mionrJava方法名称应该符合命名21,37323.4%minorPythonError-handing不应引发泛型异常87,51516.9%majorJava异常处理应保留原来的异常31,8766.2%croticalJava可抛错误不应被发现了12,3592.4%blockerJavaCweSenialable字段应该是可序列化的4,8721.0%criticalJava类变量字段不应具有公共访问权限4,5360.9%majorJava废弃的商店应该被删除2,6300.5%majorJavaBrain函数不应该太复杂16,6619.0%majorJavaScript重载方法不应该太复杂13,0927.1%majorJava函数不应该太复杂7,1587.8%majorPython总共成功选取了29名特别合格符合条件的优秀产品开发人员,这些特别合格的产品开发人员一般至少在两个产品开发设计项目中分别成功扮演不同的产品开发经理角色。其中比如:artem-zinnatullin这位优秀的产品开发人员在整个rxjava这个产品开发设计项目中分别只成功提交了25次的开发源代码,而在这个项目中只有retrofit分别提交了和。khttp项目中分别只有提交了3次和4次的开放源代码。这边好像也有类似这种一个情况的。同样可以清楚地发现,软件开发技术人员通过对不同的软件开发项目中需要扮演不同的代码开发管理角色时,他在不同的项目中需要引入的软件代码质量问题数量:与软件代码等级问题数量是差不多的,所以真正直接决定了软件的代码开发质量的还是取决于软件开发技术人员本身。可以很明显地发现当软件开发人员在不同的项目中分别扮演不同的角色时,其平均项目中引入的相应角色代码质量的问题应该是不会因为其在项目中相应开发人员角色的代码质量变化而有可能引入相应太大的代码质量变化,所以从这个问题是根据实验结果从上图中可以很明显地发现一个软件开发人员贡献的平均代码质量。软件开发技术人员分别从其中选取了37组类似的测试例子样本来作为本次测试的例子样本,由于从其中选取的测试例子样本问题数量比较小,分别釆用了T检验的方式对其来进行验证,验证的结果如下表所示。表4-3配对样本统计NMeanStd.ErrormeanMain37.042.011Casual37.110.048表4-4配对样本的相关性CorrelationSigMain&.034.842Main&CasualCasual表4-5配对样本测试MeanStd.errormeanTSigMain-.049-0.168Casual.0691.405本章小结通过分析的结果可以明显发现,相对与其他的代码问题和质量异常处理问题,代码质量规范对于开发人员来说很难真正的去完全理解和遵守的。因此在开源社区一般开发人员都会建立有自己的一套开源代码质量规范体系来用以帮助从事软件开发的人员规范其他有贡献的开源代码。第5章研究方法对比与评价在这个过程中,介绍FP-Tree算法,利用实验环境以及数据通过对比分析实验进行比较分析,然后利用图表直观的表明哪类算法更加适合这个研究内容,得出最终结果,然后将最终结果进行评价分析。5.1FP-Tree挖掘算法建简介在FP-Tree的算法上首先需要运用文献的方法进行数据清理,然后将CVS中的文件通过CVS自带的版本比较器进行解析,这就是CVS仅仅记录修改过的文件和所发生变化的代码行数,FP-Tree算法改进了Apriori算法的I/O瓶颈,非常灵活的利用了树结构,这样可以联想到BIRCH聚类,BIRCH聚类也是一样的方法,巧妙的运用树结构来加快算法的运行速度。通过利用内存数据结构以及空间所转换的时间是常用的提高算法运行时间瓶颈的办法。通过解析就可以把被修改过的软件实体按照文件名、变量、函数等三个粒度提取出来。接着按照本文算法提取CVS每两个历史版本间的事务,最后用FP-Tree算法挖掘规则。FP-Tree算法步骤截图,如图5-1所示。图5-1FP-Tree算法步骤5.2实验环境及数据实验的硬件环境如下,CPU为Inteli5-1035G1,内存为4G,硬盘为500GB;软件环境为Windows2010,实验用的软件平台是Eclipse,用Java语言编写算法实现。与两个大型的开源项目的CVS库:Eclipse和Mozilla,这两个开源项目事务数量较大。数据按时间段在CVS中选取,然后用在该时间段内不同的数据进行测试。算法用查准率和查全率两个评价指标度量以下内容。1.预测修改位置即当程序员的修改某个软件实体,算法是否能为其提供与之相关需要修改的软件实体位置。2.粒度主要是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高层建筑水电安装施工方案
- 急诊科特殊病例处理方案
- 农产品直供市场保障方案
- 学校图书馆文献资源整合方案
- 企业内部培训读书沙龙活动方案
- 高校毕业生就业返校工作方案
- 大型土石方工程施工进度控制方案
- 附中学校内津贴实施方案
- 步行街混凝土路面施工方案
- 汽车修理行业营销策略方案
- 《认识隶书(一)》名师课件
- 食堂醇基燃料应急预案
- 结构设计通用规范(住建部2023年颁布)
- 2023学年完整公开课版时行程问题
- 性格测试98题-最符合和最不符合答案
- 交通运输系统安全生产治本攻坚三年行动方案
- 《平衡計分卡》课件
- 机场运行职业生涯规划书
- 超声科发展规划方案
- 文化与艺术行业2024年人力资源管理与制度优化
- 2024年半导体技术行业培训资料
评论
0/150
提交评论