克隆的好处范文

时间:2023-10-23 06:34:29

克隆的好处篇1

克隆人引发的争议已涉及到世界范围,近年来,科学家社会学家伦理学家等,及有并国际多次召开各种类型的会议,发表声明,提出建议,呼吁立法。我国政府也表明对克隆人的立场:不赞成,不支持,不允许,不接受。然而有些人却认为克隆的出现会给人们一个崭新的未来。那为什么克隆既会得到一些人的否定,又会得到一些人的大力支持呢?首先克隆人看起来是可以造福人类,但是随着这些好的方面,问题就来了。

我们先来说说关于克隆的那些好的方面,总的来说,克隆的好处有四个方面:一培育优良畜种和生产实验物。二生产转基因动物。三生产人胚胎干细胞用于替代疗法。四复制濒危物种,保存和传播动物物种资源。而且克隆技术可以用来治疗各种疾病,这是克隆的好处。

接着我们再来说一说克隆带来的坏处。克隆人的出现将会

初二:天空1994

克隆的好处篇2

克隆技术的发展对人类有很大的帮助,这种技术难道就没有坏处吗?

自从试管婴儿技术成熟以后,科学家们对“克隆人”进行了更深层次的研究。在3050年,科学家们已经能用人类的细胞克隆一个个胚胎,经过几天的成长就能与人类一般大小。因为是克隆人,所以他们只能按照人们的命令去做。大街上到处都是克隆人,受到这股“克隆风波”的影响,我也去克隆了一个“我”。

我本以为要做一次大手术,没想到科学家们只是在我身上取了一些细胞样本。他们将一部分细胞用紫外线照射,破坏其中的细胞核,然后依靠高超的外科手术从另一部分细胞里提取出细胞核放入培养液中。几个小时后再把细胞核植入被除去细胞核的细胞中,再将它们放入培养机器中,三天之后我就可以领取一个属于我自己的克隆人。

我对克隆技术充满了无限的好奇心,于是我奋力拼搏,终于在数年后成为了一名在克隆领域相当有威信的科学家。由于克隆人能够完成人类所能完成的一切事情,所以人类的生活就完全依靠克隆人:工厂里到处是克隆人,大街上也到处都是克隆人,只有少部分人类还坚持每天的工作与学习。过度依赖克隆人的人类慢慢丧失活动力,因为太长时间不劳作,人类已经演变为头脑过分庞大而四肢短小的生物。

克隆人开始批量生产他们的同类,而人类竟浑然不知。等到人类知情的时候已经晚了,克隆人肆意杀害人类。克隆人对世界上最后的几位科学家(包括我)传来这样一段话:上帝创造了人类,人类创造了克隆人,既然人类可以不相信上帝,那么克隆人为什么要相信人类?

时光不能倒流,我们不能改变历史啊!

就在我们将要绝望的时候,有一位科学家提出可以在超音速飞机上装上多个推动引擎,再用原子核能量作为燃料,使飞机的速度超越光速,这样飞机就可以带着我们回到过去。虽然听上去有一些荒唐,可也只能死马当活马医了!

一道强光过后超光速飞机真的带我们穿越到了过去。经过确认,我们得知,这就是人类成功创造出克隆人的那一天。我们想去“克隆研究中心”阻止人类成功研发克隆人。我们不认识路,只好向过路的人问路,没想到路人看到我们就跑——头脑庞大,四肢短小的我们看起来太吓人。一群警察模样的人竟然将我们绑了起来,他们要把我们带到哪儿去?

原来,他们把我们当成了研究失败出逃的克隆人样本,要把我们送到“克隆研究中心”去。我们心中不禁兴奋起来——终于可以去那里阻止克隆人的成功研发了,

几个穿着白大褂的人正在仔细地观察着我们。“喂,我们是从未来过来的,请你们一定要停止一切有关克隆人的研究,克隆人会引发灾难的。”被锁在铁笼里的我不停的重复着这句不知道说了多少遍的话。“胡说,克隆技术可以造福人类,如果你们真是从未来来的这么会不了解这一点呢?”一个貌似学者的人一边不厌其烦的“开导”着我们,一边情绪高亢的做着手势。“唉,人类要完蛋了!”我们消极的叹息道。这时,突然过来一个人喝那个“学者”咬了会耳朵。那个学者脸色立刻变了,急忙把我们放出来,简单的说明情况,后来我们大体明白了,未来克隆人追来了,他们四处杀害人类,而且有大部队真正向这里逼近。“真是对不起啊,请一定要救救我们。”我们不敢耽搁,立即配合过去的科学家们对付克隆人。“哎呀,我怎么忘了啊,只要将克隆技术销毁,这些未来的克隆人不就消失了嘛!”我拍了一下脑袋。“这怎么行啊,这可都是我们几代人的心血啊!”那位“学者”急忙说道。“为了全人类的安全只有这样了!”我有些愠怒。他叹了一口气,勉强的点了点头。“轰”的一声巨响,研究所没了,克隆人也随之消失了……

我们准备留在过去,和那时的科学家们共同研发脑部装有过滤系统的克隆人——让一切人类不允许克隆人拥有的思想灰飞烟灭!让克隆技术真正的造福人类!

科学需警惕啊!

克隆的好处篇3

内容提要: 克隆人是现代生命科技发展带给人类社会的一个挑战。从技术应用的目的上看,克隆可以被划分为治疗性克隆与生殖性克隆。在有关克隆人是否具有犯罪性以及刑法应否禁止克隆人的问题上,存在着“肯定论”与“否定论”两种截然相反的观点。站在刑法的视域下,生殖性克隆人是一种完全不同于治疗性克隆人的行为,它无法摆脱伦理上的非难性,已经超出了社会可承受的范围,其本质是一种的犯罪行为,对于这种行为,刑法应当将其入罪化,并配设适宜的刑事责任。当前我国现行立法中已经对生殖性克隆人作出了明令禁止,但却未就从事生殖性克隆人研究的刑事责任作出任何规定,也未出台有关克隆技术规范的专门立法。为此,需要制定一部《克隆技术管理法》,并修改现行刑法的规定,增设“非法从事生殖性人体克隆研究罪”。

生命科学技术的飞速发展是人类当代社会发展的最显著特征之一。伴随着以基因技术为核心的现代生命科学技术的快速进步,一系列伦理与法律问题相继而生。克隆人的法律规范问题便是其中之一。作为一个有可能对人类社会未来发展产生根本性影响的重大伦理及法律问题,克隆人问题的提出给当代立法带来了严峻挑战。从学理上探讨如何正确应对这一挑战,已成为当代法学理论研究的一个重大难题。本文拟从克隆及其技术分类入手,立足于刑法的视域对克隆人的法律规制问题浅陈拙见,以求为我国相关的立法完善提供一些参考建议!

一、克隆人的技术分类

克隆是英文clone的音译,意指生物通过细胞分裂进行无性繁殖,形成基因型完全一致的后代种群,因此更为科学的术语称为“无性繁殖”。在科学界,根据克隆技术所应用目的之不同,通常将克隆分为治疗性克隆和生殖性克隆。所谓治疗性克隆,是指从需要治疗的病人身上提取一些细胞,然后将该细胞的遗传物质置入一个去除了细胞核的卵细胞之中,重组的卵细胞通过化学或物理方法刺激之后,开始自行分裂增殖,直至形成一个早期胚胎。从这个早期胚胎中可以提取到对生命成长发育起主要作用的细胞—干细胞。胚胎干细胞经过相应的定向诱导发育的处理,便可以发育成病人需要的各种组织,由于再造的细胞及组织的基因与病人的基因相同,因而以往在器官移植中经常出现的排异反应的难题便得到了彻底的解决。由于从早期人类胚胎中提取的干细胞拥有形成所有270多种人体细胞类型的能力,因而它有可能成为21世纪最重要和最理想的人体器官替代或修复的原料,这项技术的成功应用将是再生医学上划时代的进步。所谓生殖性克隆,起始的步骤完全相同于治疗性克隆,即从某一供体身上提取少许细胞,然后将该细胞的遗传物质置入一个去除了细胞核的卵细胞之中,经过刺激后,重组的卵细胞开始自行分裂,直至形成一个早期胚胎。如果将早期胚胎植入受体的子宫内,完成受孕、发育和产子过程,就达到了生殖性克隆的目的{1}。以克隆技术的以上分类为基点,克隆人也可以被划分为两类,即治疗性克隆人与生殖性克隆人,前者是指以治疗为目的而进行的人体克隆,而后者则是以“造人”本身为目的的人体克隆。

二、有关克隆人的犯罪性及其刑事责任的学理争论

“克隆”一词最早于20世纪初被引入园艺学,以后又逐步应用于植物学、动物学和医学等方面{1}105 。 1997年世界上首例克隆羊“多莉”的诞生,震撼了整个世界,因为它的问世标志着又一项重大科技成果—人体的克隆(即克隆人)将极有可能很快问世。于是,针对人类可否克隆自身的问题,在全球范围内展开了一项大讨论,其影响深远,迄今余波犹在。在这场旷日持久的大讨论中,法学家也参与了其中,并就克隆人的犯罪性以及法律(尤其是刑法)应否禁止克隆人等进行了激烈争辩,形成了“肯定论”与“否定论”两种针锋相对的观点。

“肯定论”认为,克隆人是一种典型的犯罪,因为克隆不仅使得克隆者与被克隆者有着相同的基因构成,而且使克隆者总是生活在被克隆者的阴影之下,而这种阴影使他对自己的独立性和自我的感觉受到了限制{2}。不仅如此,克隆人也严重冲击了人类的伦理道德,威胁着现存的社会秩序。正如有学者所指出的,“我们为了保持人类社会特有的秩序,就应该防止有害因素的侵袭,原子弹只消灭物质,而克隆人毁灭伦理规范、精神和道德”{3},“生殖性克隆人行为已经对人类的公共利益和群体利益造成了损害和威胁,是具有严重社会危害性的行为”{4}。以此为基点,对于复制人类自身的做法,法律应当坚决禁止,并应当在刑法中增设“克隆人罪”{5},或者应当订立一部禁止克隆人的单行刑事法{6}。从犯罪控制论的立场来看,“只禁止人类生殖克隆技术是不够的,……只有确保违禁行为将受到双重制裁,禁令才具有意义:一方面是由已有国际人权法院(如欧洲人权法院、美洲人权法院或未来的非洲人权法院)或有待创建的国际人权法院在其他地区或联合国内部针对国家的违禁行为宣判的制裁措施;另一方面是由本国或国际司法机制根据反人类罪宣判的刑事制裁。”{7}

与“肯定论”针锋相对的是“否定论”。这一学说认为,发现和发明是科学发展的动力,人类最终将会承认创设人的生命的方式不止有性繁殖一种,应该允许无性繁殖作为一种补充方式。两种方式所创造出来的都是人的生命,同样是神圣的{8}。所以,克隆人的犯罪性尚待商榷,立法对待克隆人这一新生事物不能简单地一禁了事。“对克隆技术的禁止是违背人文主义的精神追求的,法律应宽容地看待克隆技术。……对任何新技术采取拒绝的态度和回避的立场不是人文主义者对待新技术的方法。我们在对新技术作反思性审视的同时,应对人的理性和经验抱以充分的信任。……技术本身引发的问题最终还是要靠科技本身的发展来解决,这是我们对待克隆技术应采取的态度。”{9}“现代法律是以理性与人道主义为基础的,它应具有更多的开放性与包容性,一方面,对现行占主导地位的人类价值观和伦理道德、生命观加以保护但不僵化与绝对化;另一方面,对于伴随新科学新技术而出现的新的生命现象伦理变化及价值观的变化,应该持一种宽容的、理性的、通达的态度,适当规范可能的不良后果,方可使法律始终适应生产力及生产关系发展的需要,并促进生产力的发展和社会的进步。盲目地、绝对地禁止克隆人,是不可取的,也是禁止不了的,只能导致人类社会僵化、保守和偏狭心理的炽燃,或者促使人们公然违法肆无忌惮地克隆人,扰乱社会。理性的办法应该是制定严密的法律,疏通、引导、规范克隆人的技术活动,使克隆人技术为人类谋福利,而不是把克隆人视为洪水猛兽,围追堵截。”{10}以此为立足点,对于克隆人,“我国法律应对此进行积极干预,而不是消极回避或绝对禁止”{10}12。

三、对克隆人犯罪加以刑法规制的必要性分析

笔者以为,由于克隆人在生命科学上可以被划分为治疗性克隆人与生殖性克隆人两种,而这两种克隆人的社会危害性又存在着明显差别,因此,对于克隆人犯罪性的评价应当分别加以讨论,并分别采取不同的立法对策。换言之,“制订任何反对克隆人类可能性的法规必须谨慎从事,以保证好的研究不至于被粗心大意地弃之不顾”{11}。具体来说:

首先,对于治疗性克隆人来说,由于其终极目的并不在于“造人”,而是要通过“造人”来获取医学治疗所必须的干细胞,因此,其本质实际上是以牺牲一个个体来拯救另外一个或一群个体,在这一点上,它与器官移植有着类似的伦理基础。在生命科学发展尚无其他更优方案可以替代的情况下,治疗性克隆人作为一种次优方案在伦理上具有一定的合理性。也正是由于这一原因,治疗性克隆人获得了世界上很多国家的认可。站在犯罪学的立场上看,犯罪是其社会危害性已经超出了社会的承受度从而需要由刑法来加以防范和惩治的行为,而治疗性克隆人则是一种尽管具有社会危害性但其社会危害性尚在社会承受范围之内的行为。以此为基点,笔者认为,治疗性克隆人并不具有犯罪性,对于治疗性克隆人,刑法不宜将之作为犯罪处理。[1]

其次,对于生殖性克隆人来说,笔者认为,这是一种具有严重社会危害性的行为,应当被刑法入罪化。这是因为人的生命复制或无性生殖问题不同于克隆技术在医学、农业等领域的运用,它将使人类面临巨大的伦理和法律危机。具体而言,主要表现在:(1)从法律上讲,每个人都有自己的尊严和价值,如果允许用克隆的方法在实验室内去复制人或大批复制同一个人,实际上是在认同人类可以被作为产品而在实验室里加以生产,这势必会贬损人的尊严与整体性社会价值。(2)从社会关系与家庭关系的角度来看,人的诞生都会在其家庭关系乃至社会关系中具有明确的法律身份和地位,但克隆人则完全改变了这一点,一旦其降生,则不论是社会还是其本人都无法界定其在伦理及法律上的身份和地位,这势必会造成其社会异类的身份,使其本人陷入被歧视甚至无法为社会认同和接受的窘境,并导致无法定位自我以致处于自我怀疑、自我否定的状态之中。不仅如此,人的复制完全违背了人类生育和人类亲亲关系的基本准则。它不仅完全改变了人类自然的、通过男女有性结合才能完成的生育方式,也使作为传统社会关系的亲亲关系发生了动摇。[2](3)从克隆人自身的立场上来说,一个生理性状被控制的人,如果为某种目的而再生产,就会有自身被沦为“社会工具”的悲观心理和宿命感,势必会激发其对科学与未来社会的报复感或对抗情绪。而一旦这种技术被用来控制人的性别、人种或生产人体器官,则其后果更难想象。(4)人的死亡是一个法律事实。人一旦死亡,其生命便不复存在。但克隆人却产生了这样一个问题,即死人是可以被复制的,而死人的复制则会使正常的或法律上的生死概念发生颠覆性的动摇与混乱。(5)从技术的角度上来说,克隆技术相对粗糙,克隆人的质量难以保障。克隆人是单性生殖,从进化论的角度看,它是一个粗糙的过程。克隆羊“多利”的成功率是1/227,而克隆人的成功率即使乐观估计也只有2-3%,而且克隆生物个体易产生畸形、死胎、流产、胎儿过大、早衰等情况{12}。综上所述,生殖性克隆人技术给在整个人类社会带来的弊是远大于利的,“如果复制技术被某些不负责任的人滥用,世界将因人类科技进步而陷入噩梦般的境地”{13}。以此为基点,笔者认为,生殖性克隆人是一种完全不同于治疗性克隆人的行为,它无法摆脱伦理上的非难性,已经超出了社会可承受的范围,其本质是一种的犯罪行为。对于这种行为,刑法应当将其入罪化,并配设适宜的刑事责任。

至于“否定论”所主张的“应对人的理性和经验抱以充分的信任”和“技术本身引发的问题最终还是要靠科技本身的发展来解决”,笔者认为,这些论证根本就是站不住脚的。首先,就前者而言,人类社会的发展已经不止一次地证明,科技的产生、发展和应用给人类带来的福与祸,从来都不是以人的善良意志为转移的。“科学提高了人类控制大自然的能力,因此很可能会增加人类的快乐和富足。这种情形只能建立在理性基础上,但事实上,人类总是被激情和本能所束缚。”{14}因此,我们切不可对人类的理性和经验抱以过高期望,而应当更多地寄希望于法律,因为法律才是人类高度理性的产物,其“对人的行为进行规范,基于对该行为的全面评价”{15}。其次,就后者而言,人类科学发展的历史表明,“科技发展是不问人的生存意义与尊严的,它隐含着无法预料的后果,而且科技不能体现对人类的终极关怀,它无法消除人类与科技的对立和冲突”{16}。为此,科技的意义深化应该被带入伦理、道德乃至法律的揭示中,“在科学的发展过程中,我们确实需要不时地停一停脚步,确保所发展的技术的确安全,然后重新上路”{16}10。而这也正是科技伦理学、科技法学以及生命伦理学、生命法学等一批新学科诞生的最主要原因。易言之,科技本身所引发的问题是不可能完全依靠科技本身的发展来解决的,在科技发展的过程中,为了保障科技的健康发展,法律的介入甚至是刑法的介入在多数情况下是必不可少的。

此外,“否定论”所主张的刑法宽容并不意味着刑法对生殖性克隆人的纵容。刑法宽容作为刑法谦抑品性所体现出来的一种外在素质,是指刑法应当对负面影响尚在人类社会控制和承受范围之内的一般行为网开一面,不将之作为犯罪来追究刑事责任;而不是指刑法应当对那些社会危害已经超出了社会承受度的犯罪置若罔闻。现代基因科技发展过程中引发了大量的法律问题,这些问题中的绝大多数都还在社会的承受范围之内,依靠一般法律手段甚至是伦理道德手段就可以解决,但有些问题则由于已经远远超出了人类社会的承受范围且也超出了一般法律手段与伦理道德手段的调整领域而必须要由刑法来加以控制。笔者以为,人体的生殖性克隆便在其中。人体生殖性克隆所带来的克隆人之社会地位的无法认定,使得这一行为具有不可抹杀的伦理非难性,假如刑法放任这一行为自流,则势必会严重冲击维系人类社会存续的现行伦理秩序,从而危及人类社会存续的基础。不仅如此,从刑法哲学的立场上来看,为了防控基因技术发展所引发的各种负面效应,在基因研究与基因技术的应用方面,刑法应当设置某些“”,而设置是“为了维护人类的利益而采取的手段,而不是目的”{17}。正如我国某些学者所指出的:“……设置并不是永远不许涉足该领域,而是指在条件不成熟或后果暂时无法控制的情况下,通过评价其潜在的风险而采取的一种特殊措施;当各种条件允许时,原先的也将不再是,而成为科学研究的‘富矿’。”{18}良好的刑法防控制度,不仅是基因研究健康开展与基因技术理性应用的保障,而且也是基因科技最终造福于人类的根本保障。而生殖性克隆人作为一种严重危及当代社会伦理秩序乃至社会秩序的行为,就是刑法应当在基因研究方面设置的一个必要。

基于以上分析,笔者认为,刑法应当禁止生殖性克隆人,并应当为擅自从事生殖性克隆人研究的行为配设一定的刑事责任。但是,另一方面,我们也必须明确:克隆人的出现是生命科学技术发展必然会出现的结果之一,法律对克隆人的禁止并不能够阻止克隆人的最终出现,它只是在一定程度上延缓了克隆人出现的时间。而法律尤其是刑法之所以要禁止克隆人,并不在于立法者看不到克隆技术发展的这一最终趋势,而更多地在于通过在一定时期内禁止克隆人,给人类生命伦理提供一个必要的缓冲期,以便尽可能地减少克隆人给社会带来的根本性冲击,维护社会的稳定,保证社会的健康发展。实际上,刑法中很多犯罪的设置都是为了给人类社会更好地承受各种行为的冲击赢得缓冲期。这一点我们可以从各国刑法中的很多犯罪之变迁上得到很好的诠释。以各国刑法对堕胎罪的规制为例,自1821年美国康涅格州制定了美国国内第一个《堕胎罪法》之后,一直到1950年代末,各国的法律一直都将堕胎行为视为犯罪而给予重罚。但随着工业发展所导致的大量畸形胎儿的涌现、堕胎术的逐渐成熟以及公众对堕胎的日益宽容,自1960年代起,美国很多州(如加利福尼亚州、北卡罗来纳州等)先后通过了允许堕胎的法律,而在其他很多国家,堕胎罪也逐渐由刑法明文规定的一种犯罪转化为一种合法的行为。时至今日,尽管堕胎罪在很多国家都已如历史的尘埃而被尘封在了各国的刑法教科书中,但其为确保人类在胎儿生命处理问题上实现社会观念和意识的平稳过渡以维护当时人类生命伦理秩序的稳定进而维系社会秩序的稳定发挥了不可抹杀的重要作用。而我国1979年《刑法》将流氓罪、寻衅滋事罪、投机倒把罪等诸多犯罪明文规定为犯罪来予以惩治,并在我国由计划经济到有计划的商品经济过渡的过程中乃至社会主义市场经济初期依然在刑法中保留这些犯罪,实际上也是为了给我国社会最终认同、接受和适应市场经济及与之相适应的各种社会现象赢得缓冲期。“从这个意义上来说,法律对克隆人的禁止与其说是对克隆人的彻底否定,不如说是为人类社会乃至法律自身应对克隆人所带来的各种挑战并最终认可和接受克隆人赢得缓冲时间。”{1}14尽管随着社会的发展所必然带来的克隆人的最终出现以及人们对克隆人的认同和接受都将会成为一种事实,但当前刑法禁止克隆人对社会稳健发展所起到的作用以及该罪在维护社会秩序方面的时代价值是不容抹杀的。

四、域外克隆人犯罪的刑法规范

在现代生物技术的整个体系中,“克隆人是目前争议最大、波及范围最广的一项生物技术”{19}。由于克隆人的出现将极有可能从根本上改变人类自然的生存繁衍方式,并会对人类传统的生命伦理观念带来毁灭性冲击,因此,动用刑法的力量对生殖性克隆人加以规范,便成为各个国家或地区乃至整个国际社会在发展生命科学技术过程中均须仔细权衡和认真考量的一个基本问题。在此背景下,一大批旨在禁止人类自我克隆技术研究与应用的立法开始出现,它们在保障基因技术健康发展方面发挥了不可抹杀的重要作用。而从比较法学的角度来看,分析这些立法,对于探究我国刑法应对人体克隆技术所带来的挑战,完善我国克隆技术的刑法防范策略,无疑具有不言自明的重要意义。

首先,就国际层面来看,尽管人们对克隆人的法律后果在理论上还存在诸多争议,但在实践中,有关国际组织及各国在生殖性克隆人这一问题上的立场却是非常明确的,即对生殖性克隆人基本上都持否定态度,反对甚至明文禁止生殖性克隆人。1997年11月12日,联合国教科文组织在巴黎通过的指导基因研究的道德准则性文件《世界人类基因组与人权宣言》中,就要求禁止克隆人等“损害人类权利和尊严的科研行为”。而在日内瓦举行的第55届世界卫生大会也通过决议指出,运用无性繁殖技术复制人类“违背人的尊严和道德,因而必须严格禁止”。世界卫生组织表示,利用克隆技术复制人在伦理上是不能接受的,这种试验违背医学要保护人类尊严和从遗传角度保证人类安全的基本准则。1998年1月12日,法国、丹麦、芬兰等19个欧洲国家在巴黎签署了《禁止克隆人协议》,规定禁止用任何技术创造与任何生者或死者基因相同的人{8}345。

其次,就各国国内立法层面来看,很多国家和地区都出台了禁止或限制生殖性克隆人技术的专门立法,有些国家甚至在刑法典中明确规定了生殖性克隆人犯罪。作为世界上首个成功培育出克隆羊的国家,英国国会于2001年通过了一项应急法案—《人类生殖性克隆法案》,将生殖性克隆人作为一种新的犯罪,并可判处最高达10年的监禁,以弥补其1990年《人类授精与胚胎移植法案》未明确规定禁止生殖性克隆人的缺陷{20}。澳大利亚2002年就专门出台了《禁止克隆人法案》,将故意克隆人类胚胎、进口或出口克隆的人类胚胎的行为明确列为犯罪行为,并规定这类犯罪的最高量刑可达到15年有期徒刑。不仅如此,该法案还将通过受精以外的方式生产或培养人类胚胎、非以妇女受孕为目的创造人类胚胎以及创造或培养包含有多于两人提供的基因内容的人类胚胎等明文规定为犯罪,并规定这类犯罪的最高量刑为有期徒刑10年{21}。日本2001年4月开始实施的《克隆技术限制法》全面禁止制造有损于人类尊严的克隆人,违者将被处10年以下劳役或1000万日元以下罚款{22} 。 2004年9月新加坡国会通过的一项法律也明文规定禁止在本国克隆人,违反这一法律者最高将被处以10万新元的罚款和10年监禁{23}。而美国国会也于2001年7月31日通过了全面禁止克隆人的法律,规定对违反法律规定者最高可处以10年监禁和100万美元罚款{22}。我国台湾地区2007年颁布的《人工生殖法》中也对从事生殖性克隆人作出了禁止性规定,依据该法,以无性生殖方式为人工生殖的,处其行为人5年以下有期徒刑,得并科新台币150万元以下罚金。[3]除以上国家和地区之外,法国、德国等也都制定了本国有关禁止克隆人的立法,并对非法从事生殖性克隆人的行为追究一定的刑罚。例如,法国对违反禁止克隆人法的行为处以20年以下徒刑,德国处以5年以下徒刑,英国则根据克隆手段的不同分别处以2-10年劳役和监禁{9}63。西班牙则将生殖性克隆人这一犯罪明文规定在其刑法典中,《西班牙刑法典》第161条第2款规定:“用克隆的方法进行人类繁殖和进行其他人种选择的活动的,处1年以上5年以下徒刑,并剥夺其担任公职、从事职业及担当任务6至10年的权利。”{24}国际社会以及各个国家和地区对克隆人技术的刑法规范不仅表明了人类在对待克隆人技术问题上的谨慎态度,而且通过刑法的力量阻止或至少是延缓了克隆人的产生,在一定程度上为人类社会应对生殖性克隆人所带来的冲击赢得了缓冲期。

五、我国应对克隆人技术的刑法对策思考

从法哲学的角度来说,克隆技术与法律的关系,就好似剑与剑鞘的关系。一把锋利无比的剑可以帮助人们披荆斩棘,但同时也可能会伤害用剑者自身,而剑鞘则可以帮助人们在不用剑的时候有效遮蔽剑的锋锐,防止造成不应有的伤害,克隆技术与法律的关系也是如此。克隆技术具有明显的双刃性,其健康发展与正当应用会极大地增进人类社会的福祉,而其滥用则可能会给人类带来灭顶之灾。为此,需要立法者采取适宜的对策,以便利用好法律尤其是刑法这一剑鞘,将克隆技术所引发的负面问题限制在最小限度内。对于克隆技术发展所潜藏的各种负面效应,理论上存在3种应对策略,即事前防范、事时制止以及事后惩戒。古人云:“先其未然谓之防,发而止之谓之救,行而责之谓之戒”,而“防为上,救次之,戒为下”(《申鉴·杂言》);换言之,事先防范是避免风险发生并避免或减少损害的最有效策略。以此为立足点,尽管从理论上来说,“社会和个体一样,无法在所有风险问题上都保持高度警惕”{25},但每一个社会与个人却都必须选择特定的风险加以关注以便实现其生存与发展,使克隆技术发展过程中所潜藏的巨大风险成为社会与个人通过法律来加以防范的基本风险之一。在此背景下,制定专门规范克隆技术的立法并在刑法中增加有关人体克隆方面的犯罪及其刑事责任的规定,无疑应当成为我国在防范克隆人技术所引发的社会风险方面所应肩负的一项基本使命。

(一)我国目前有关克隆技术规范的立法现状

在克隆技术的控制方面,我国目前尚未制定专门立法。但在已经出台的个别行政规章中却已经明文涉及了克隆人的问题。2003年12月由科技部与卫生部联合的《人胚胎干细胞伦理指导原则》第4条明文规定:“禁止进行生殖性克隆人的任何研究。”不仅如此,该《指导原则》还就从事治疗性克隆人研究(亦即人体胚胎干细胞研究)的条件与程序等作了明文规定。此外,在卫生部2003年8月颁布的《人类辅助生殖技术规范》中,也对实施辅助生殖技术人员之行为准则作了规定,其中第15项明文规定:“禁止克隆人”。就此来看,我国在人体克隆技术方面的立场是明确的,即绝对不允许从事生殖性克隆人方面的研究,但对于治疗性克隆人技术的研发则给予支持。[4]然而,另一方面,我国有关人体克隆技术规范的现行立法还存在明显缺憾,无论是《人胚胎干细胞伦理指导原则》,还是《人类辅助生殖技术规范》,都还存在着立法效力层次过低且刚性不足的严重弊端,而且在以上两部规章中都没有关于从事生殖性克隆人研究所应当承担的法律责任尤其是刑事责任的任何规定。这就使得我国现行立法对生殖性克隆人的禁止显得苍白无力,一旦实践中有人从事生殖性克隆人方面的研究,以上两部规章根本就无法发挥其应有的规制作用。在克隆技术,尤其是以治疗为目的的干细胞技术飞速发展,而滥用该技术从事生殖性克隆人研究的威胁又随时可能成为现实的背景下,这显然已经成为我国现行立法的一个不足。

(二)我国应对人体克隆的刑法对策建议

以上文对国外有关人体克隆技术刑法规制的分析为视角,并结合我国刑法“惩罚犯罪,保护人民”的庄严承诺,笔者认为,我国现行立法尤其是刑法在规制人体克隆技术方面还存在明显的缺陷,具体而言,现行法律尤其是刑法尚未针对非法人体实验配设相应的刑事责任制度。针对这一立法缺位以及我国克隆技术发展所必然带来的相关立法需求的日益强烈,我国应当制定一部专门引导和规范克隆技术研究与应用的《克隆技术管理法》,将我国在克隆技术发展方面的基本政策转化为法律予以推行,以保障克隆技术在我国的健康发展。在这样一部立法中,应当明确规定指导我国克隆技术发展的基本原则与基本制度,并明确规定相关不规范操作的一般法律责任以及刑事法律责任。[5]同时,为了使该法与刑法保持衔接以更好地防范生殖性克隆人犯罪的发生,应当及时修改现行刑法的规定,增加“非法从事生殖性人体克隆研究罪”这样一项罪名。在法治已经成为我国当代社会主旋律而罪刑法定的理念亦已深入人心的情势下,这显然已成为我国应对克隆技术发展所带来之挑战并弥补现行立法缺憾的内在需要。

【注释】

[1]当然,这并不意味着刑法将完全放任治疗性克隆人,而仅仅表明,刑法不应将治疗性克隆人做人罪化处理。假如治疗性克隆违背了法定的操作规程,造成了严重危害社会的后果,刑法依旧要将相关的行为作为犯罪来处理,并依法追究相关行为人的刑事责任。

[2]社会学的研究表明,家庭作为人类社会的基本构件、人类关系的基本单元,并不是某个或某些人随随便便发明创造所产生的,而是人类历史在漫长的自我探索与选择的进程中结出的文明成果。历史上曾有过取代家庭的实验,但未真正取得成功。而双亲家庭又是最有益于儿童身心发育、形成健全的人格和成熟的自主性及完美的爱的情感体验,从而避免罹患认知与情绪上的心理障碍的环境。相反,在丧失父母一方的家庭中的儿童,由于无法体验完整的父母之爱,其人格发展也难以达到健全的水平,心理失常、行为不轨的几率要远远高于双亲家庭中的同龄人。现实社会中,由于父母离异所造成的对子女的伤害已经是一种很大的不幸,但这些子女至少还是拥有他们的父母,至少还曾经拥有过完整的双亲家庭。而通过克隆技术使单身男女生殖后代的行为,则不仅使作为后代的当事人应当享有的惟一性、独特性的权利天然丧失,而且使得他应当享有的如其基因供体(即单身贵族)一般曾经享有过的拥有父母双亲的权利先天地被剥夺了,他从存在之时起便被先天地打入无父或无母的单亲家庭之列,这对于克隆人来讲,显然是不公平的,甚至可以说是一种伤害。而这种不公平和种种显而易见的对克隆人的身心伤害足以构成对法律禁止生殖性克隆人的强有力的理由。(参见:谭家宝,张绪治.论生殖性克隆人犯罪—对生殖性克隆人的犯罪学评价[j].英才高职论坛,2006,(1):10)

[3]参见我国台湾地区《人工生殖法》第16条及第30条。

[4]当然,这种支持是建立在相关研究须严格遵守《人胚胎干细胞伦理指导原则》所规定的条件和程序之基础上。

[5]在《克隆技术管理法》中明确规定克隆技术不规范操作的刑事法律责任,并不是要求该法对克隆技术操作方面的罪名和罪状作出规定,而是要求该法设置一些涉及克隆技术操作的刑事指引条款,以便为刑法介入对这类操作的规范提供立法支持。

【参考文献】

克隆的好处篇4

关键词:

克隆代码;主题建模;软件演化;演化模式;克隆谱系;软件维护

中图分类号: TP311.5; TP18 文献标志码:A

0引言

克隆代码(Code Clone)是指软件系统中一些具有相同或者相似的语法或语义特征的代码片段。克隆代码在软件系统中普遍存在,并且与软件工程领域中的各类研究问题密切相关。软件单一版本中的基础性克隆代码数据已经难以呈现克隆代码在软件演化过程中的变化情况,因此,需要对软件中的克隆代码进行演化跟踪并分析演化情况,从而获得更全面的信息,为软件开发及维护提供更多帮助。

当前的克隆谱系构建方法存在一些不足之处,例如克隆演化模式单一、克隆谱系构建方法复杂、能够分析的克隆类型及编程语言不全面等。本文提出了新的克隆演化模式、克隆演化特征以及克隆谱系的自动化构建方法。以区分视角的方式更加全面地分析了克隆代码的演化模式,利用代码主题信息确立版本间克隆代码映射并最终构建克隆谱系。本文研究结果将为软件开发、软件维护、软件重构及克隆管理等工作提供参考。

1相关工作

1.1克隆代码简介

在软件开发及维护过程中,由于程序员经常使用“拷贝/粘贴/修改”的开发方式、使用相同或相似的应用程序接口(Application Program Interface, API)及算法等因素,导致软件系统中存在大量相同或相似度非常高的代码片段,称为克隆代码。在该研究领域,经过学者们多年研究,已经达成了克隆代码至少应该被检测的基本共识。

克隆代码的研究工作最早可追溯到20世纪90年代,随后,该研究领域受到越来越多国内外相关研究者的高度关注,并在克隆检测、克隆演化、克隆分析以及克隆重构等方面产生了大量研究成果[1]。

在该研究领域,克隆代码以Type1、Type2、Type3和Type4的方式分类最为流行[2]。Type1指除空白符与注释变化外完全相同的代码段;Type2指除空白符、注释、标识符、类型及常量的替换外句法结构完全相同的代码段;Type3是指除空白符、注释、标识符、类型替换外,句法结构基本相同,但含有少量语句增加、删除或修改的代码段;Type4克隆代码则为功能相似或相同但句法结构不同的代码段。根据克隆代码检测的反馈粒度,相关工作通常以克隆对或克隆群(也称克隆集合、克隆类)为基本单位进行克隆代码的研究。克隆对是指存在克隆关系的一对代码片段。克隆群代表一些克隆代码的集合,同一克隆群内的任意两个代码片段可以构成克隆对,不同克隆群之间的克隆代码通常不具有克隆关系。

图1呈现了来自同一个克隆群的三段克隆代码CF1、CF2和CF3。由克隆代码类型的定义可知,CF1与CF2为Type2克隆关系、CF2与CF3为Type2克隆关系、CF1与CF3也构成了Type2克隆关系。在这三段代码中,只有函数名以及一处标识符不同,所以三者之间均可构成Type2类型克隆对。

1.2克隆演化与克隆谱系

随着软件需求的不断增加,软件需要不断升级,软件中的克隆代码也可能随着软件演化而发生改变。在分析克隆代码为软件带来的影响时,不但要研究软件单一版本中的克隆,还要研究克隆代码以时间为序的演化问题[3-4]。基于此,一些研究者从宏观上分析了克隆代码的数量或密度随着多版本演化的变化情况[5-6],从微观上利用演化模式来研究克隆代码的演化过程也受到研究者的广泛关注[7]。

Kim等[8]在2005年最早提出了克隆谱系的概念,并用克隆谱系抽取工具对克隆代码的演化进行分析[9]。随后,借助于克隆谱系研究克隆代码便在该领域成为了一种基本研究方法。例如,Zibran等[10]借助克隆谱系对软件演化过程中克隆代码的去除活动进行了研究。Saha等针对17款C、C++、Java及C#语言的开源软件进行了关于克隆谱系的实证研究[11],并发现大部分克隆群在演化中要么不发生句法上的不一致改变,要么会发生一致性的改变。虽然克隆谱系已经被广泛用于克隆代码演化研究,然而针对克隆谱系构建方法本身的研究却相对较少。目前构建克隆谱系的方法主要可以分为4种,分别为基于版本控制系统(Control Version System, CVS)或SVN(Subversion)、基于增量克隆检测、基于克隆区域描述符(Clone Region Descriptor, CRD)以及基于相似度距离函数。

基于版本控制系统的方法通常借助SVN或CVS中的修改日志来计算相邻版本间克隆代码的变化情况实现对克隆代码进行演化跟踪,进而按照时序关系合并修改信息,得到克隆谱系。由于该方法以某一选定版本中的克隆代码作为起源并进行跟踪,很难处理软件后续版本中新增的克隆代码。

Gde等[12]使用增量克隆检测技术构建了克隆谱系,然而该方法只适合处理给定版本的软件,当有新的版本加入后,整个方法需要重新执行,时空消耗均非常高,所以该方法难以灵活应对具有新增版本的克隆谱系构建工作。

基于相似度距离函数的方法通常要结合抽象语法树(Abstract Syntax Tree, AST)、Token等代码中间表示形式,该类方法的核心算法时空复杂度相对偏高。Bakota[13]提出了一种的基于相似度距离函数并结合抽象语法树的克隆谱系构建方法,并针对软件的多个版本进行了克隆代码的演化研究。Ying等[14]提出了基于Token与源码相结合的克隆谱系构建方法,但该方法只能在Linux系统下处理C语言的Type1和Type2类型的克隆代码,对其他程序设计语言或其他克隆类型的演化研究存在着很大的局限性。Saha等[15]提出了基于文本并结合代码位置信息的方法构建了克隆谱系。该方法首次对Type3克隆代码进行了克隆谱系的构建研究,然而由于该方法需要处理文件位置变化、方法重命名等问题导致了构建方法较为复杂。

基于CRD的方法在构建克隆谱系时也存在一定的局限性,如果代码某些部分(如循环终止条件、代码的嵌套结构、条件语句的分支谓词等)发生变化,则可能会导致CRD的失效,这将严重影响克隆谱系构建的全面性和准确性。Meng等[16]基于CRD确立了相邻版本间克隆群映射关系,然后基于二元关系合成方法研究了克隆谱系的构建。

1.3克隆演化模式与演化特征

克隆演化模式从微观上体现了克隆代码随着软件不同版本的演化而发生的变化情况。虽然不同研究问题针对克隆演化模式的分类有所不同,但对相同或相似的克隆演化行为的分类大致相同。根据匹配粒度及版本长度,可以将克隆演化模式大体上分为3类。

第1类是克隆群在两个版本间的演化模式。Kim等[8]最早开展了相关研究,将演化模式分为无变化、增加、去除、一致变化、不一致变化和位移6种模式。Ying等[14]以Kim等[8]的演化模式概念集为出发点,识别了除位移模式以外的其他5种模式。

第2类是克隆片段在两个版本间的演化模式。Bakota等[17]介绍了4种不同的克隆片段演化方式,包括消失克隆实例、发生克隆实例、移动克隆实例以及迁移克隆实例。

第3类是研究克隆群在多个版本中的长期演化模式,包括延迟传播(Late Propagation, LP)模式以及独立演化模式等[18-19]。

克隆代码演化特征可以从生命周期以及谱系结构等视角对克隆代码的演化过程进行分析。各类演化模式出现的时间及位置信息可以反映克隆代码的变化方式。克隆代码的演化特征将为克隆演化分析提供最基本的参考信息。长期性的克隆演化模式与演化特征将为软件后期开发及维护活动提供更多具有决策性的意见。

1.4基于主题建模技术研究软件演化

近年来,主题建模技术已不断地应用于软件工程领域。Kuhn等[20]将主题建模技术应用于代码分析,并尝试从中挖掘出代码的功能性主题;Thomas等[21]验证了利用主题建模技术进行软件演化分析是具有可行性的,并利用主题建模技术研究了软件的演化情况[22];Asuncion等[23]将主题建模技术用于软件的可追踪性研究;金靖等[24]运用潜在狄利克雷分配(Latent Dirichlet Allocation, LDA)模型识别代码功能以支持软件开发人员对代码进行良好的理解与复用;张瑞霞等[25]通过LDA主题模型针对软件相邻版本中的克隆群进行了映射研究,但并未构建克隆谱系也未深入分析克隆代码的演化模式和演化特征;Phan等[26]分析比较了LDA、概率隐语义分析(Probability Latent Semantic Analysis,PLSA)、潜在语义分析(Probability Semantic Analysis,LSA)等主题模型,并证明了LDA在挖掘文档潜在语义时比其他模型表现更佳。

1.5小结

通过分析、总结上述相关研究现状可知,现有克隆谱系构建方法主要存在以下不足:

1)依赖代码位置信息且构建流程相对繁琐。

2)无法处理软件在演化过程中新增的克隆代码。

3)代码语句格式对克隆谱系的构建存在影响。

4)不能处理Type3及Type4克隆代码。

5)可移植性较差、编程语言不可扩展。

6)严重依赖特定的克隆代码检测工具。

本文提出了一种基于主题建模技术的克隆谱系构建方法,通过映射克隆代码的主题信息进行克隆谱系的构建。与基于相似度距离函数的方法相比,本文方法不需要代码的中间表示形式(如Token、AST),流程相对简单;与基于增量克隆检测的方法相比,本文针对新增版本的克隆谱系构建而言具有良好的可扩展性。因为本文方法只需根据增版本中克隆代码的主题信息即可扩展原有克隆谱系,而基于增量克隆检测的方法则需要重新执行整个构建过程;与基于CRD的方法相比,本文方法直接利用主题信息构建谱系,避免了由于循环终止及条件语句的变化等情况造成的相邻版本间克隆代码映射失败或错误的问题。此外,由于本文借助于代码的主题信息,所以能支持多种程序设计语言及多种代码粒度的克隆谱系构建研究,而且能够有效处理Type3甚至Type4克隆代码,而不仅局限于Type1和Type2克隆。本文方法不依赖任何特定的克隆代码检测工具,只需运用主题模型从克隆检测结果中抽取主题即可。本文将在原型系统的实现中将克隆代码检测工具视为插件,以支持多种克隆检测工具。

自Kim等[8]提出克隆谱系概念以及克隆演化研究中所使用的6种模式后,该领域研究者大多以其作为基准框架进行克隆代码的演化研究,即便有新的模式提出也只是针对部分或个别演化现象而言,例如LP模式[18-19]。

通过分析现有研究中的克隆演化模式可以发现,前期研究者们不区分视角地分析各种演化模式,例如Kim等[8]提出的6种模式中,无变化、一致变化和不一致变化是针对克隆代码的数量和文本内容而言的,而位移则是针对代码位置的变化而言,增加和去除模式则是针对克隆群内代码片段数量而言的。这些演化模式属于不同的视角,但某些视角中显然缺少一些演化模式来解释不同的演化现象,例如Kim等[8]的模式中虽然包含了克隆群内代码片段数量的增加与去除,但并未包含片段数量不变这一模式,这个模式与其提出的无变化模式是不冲突的,因为一个克隆群内的克隆片段数量不变的情况下,克隆代码的文本内容是完全可以发生改变的。

本文区分视角地重新定义了传统意义上的克隆演化模式,并提出了新的演化模式,将从克隆群生存情况、克隆群内片段数量与克隆代码片段内容这三个视角来分析克隆代码的演化模式,这使得不同演化模式之间的区别更加清晰,模式识别的方法也将会变得简单。

通过分析1.4节的相关研究可知,基于主题建模技术的软件演化分析已经取得了很大的成功,并且这些研究问题充分证明了主题建模技术是可以用于软件工程领域中的众多问题,包括软件的理解与演化分析等。LDA已经被广泛并成熟地运用在人工智能及自然语言处理等领域,而且文献[20-26]可以充分说明利用LDA进行软件演化分析是可行的。本文将使用LDA对克隆代码进行主题建模分析,从而根据克隆代码的主题信息进行克隆群映射、演化模式识别及克隆谱系构建等工作。

2演化模式识别及克隆谱系构建方法

本文的克隆谱系构建方法主要分为5个核心步骤:

第1步针对软件多版本分别进行克隆代码检测并获取克隆检测结果;

第2步以克隆群为基本单位进行克隆代码的主题信息抽取;

第3步进行克隆群以及克隆片段的映射;

第4步识别各类克隆演化模式、分析克隆演化特征;

第5步合并映射结果与克隆演化模式,完成克隆谱系的构建工作。

主要流程如图2所示。

2.1克隆检测及代码主题抽取

克隆检测是克隆代码研究领域中的基础性、必要性工作,克隆检测的反馈结果能为克隆代码分布分析、演化分析、重构分析等研究提供最基本的数据支持。本文借助现有克隆代码检测工具对软件的多个版本进行克隆代码检测。选取了CloneDetective[27]以及本文的前期研究开发的克隆代码检测工具FClones[28]作为本文实验时所使用的克隆代码检测工具。CloneDetective能有效检测Java语言的Type1、Type2和Type3克隆代码,FClones能有效检测C语言的Type1、Type2和Type3克隆代码。这两款工具的克隆代码检测结果将为本文的克隆谱系构建研究提供基础性数据。

当软件多个版本的克隆检测完成后,每个版本中都会含有一定数量的克隆群,而相邻版本间的克隆群映射是构建整个克隆谱系工作中不可缺少的部分。在软件的每个版本中,由于同一克隆群内的克隆代码有较高的语法及语义的相似性,而不同克隆群之间克隆代码的相似程度却较低。所以,相邻版本中对应的克隆群之间的主题信息具有较高的相似性,而非对应的克隆群之间的主题信息差异较大。基于此,本文以克隆群为基本单位进行克隆代码的主题信息抽取,并基于主题的相似性进行版本之间的克隆群映射。

本文将使用LDA主题模型对克隆代码进行主题信息抽取。抽取主题之前需对代码进行预处理,方法参考了文献[24]中使用的静态分析以及切词方法。经过切词后还需针对部分单词进行过滤处理,因为初步切词的结果中会包含大量的编程语言关键字、Java开发工具包(Java Developers Kit, JDK)中的类名和接口名及英文中常见的停用词。过滤之后的结果作为主题模型的输入数据,然后利用LDA对克隆群抽取主题。抽取结果中包含了不同克隆群主题对应的主题词,本文以克隆群主题词集合的相似性作为克隆群映射的基本依据。

2.2克隆群映射

针对版本间克隆群主题词集合的相似性计算问题,本文使用Jaccard相似度计算模型,之所以采用此计算模型是考虑了每个克隆群的主题词集可视为一个集合,因此可以利用该模型计算两个克隆群主题词集之间的相似程度。Jaccard相似度模型计算两个集合A与B的相似度如式(1)所示:

JaccardSim(A,B)=A∩B/A∪B(1)

针对多版本克隆群映射问题,本文设计了映射算法,如算法1所示。算法思想为:按照版本时序关系,每个克隆群在后一版本中先寻找一个最相似的克隆群作为后继进行映射,此为第一轮映射。之后,对于任意一个没有前驱的克隆群,在其前一版本中寻找前驱,如果找到满足条件的克隆群则进行映射;对于任意一个没有后继的克隆群,在其后一版本中再次寻找后继,如果找到满足条件的克隆群则进行映射,此为第二轮映射。第二轮映射完成后,对于任意一个无后继的克隆群,从其下下版本开始,找一个与其最相似的而且无前驱的克隆群,如果找到满足条件的克隆群则进行映射并结束寻找,此为第三轮映射。至此所有克隆群映射工作完成。

算法1Clone Group Mapping。

有序号的程序――――――――――Shift+Alt+Y

程序前

1)

for each version∈versions do

2)

for each cg∈version do

3)

cg.pre=[],cg.next=[]

4)

end for

5)

end for

6)

for each version∈versions do

7)

for each cg∈version do

8)

cg.next.append(cg.findNext(version.next))

9)

end for

10)

end for

11)

for each version∈versions do

12)

for each cg∈version do

13)

if cg.pre==[] then

14)

cg.pre.append(cg.findPre(version.pre))

15)

end if

16)

end for

17)

end for

18)

for each version∈versions do

19)

for each cg∈version do

20)

if cg.next==[] then

21)

cg.next.append(cg.findNext(version.next))

22)

end if

23)

end for

24)

end for

25)

for each version∈versions do

26)

for each cg∈version do

27)

nextVersion=(version.next).next

28)

while cg.next==[] and nextVersion do

29)

if cg.findNext(nextVersion) then

30)

break

31)

nextVersion=nextVersion.next

32)

end if

33)

end while

34)

end for

35)

end for

程序后

在算法1中,Vi和Vi+1分别代表软件中的两个相邻版本,CGi, j代表版本Vi中编号为j的克隆群,CGi, j.pre记录CGi, j映射到了前一版本(或更前版本)中对应的克隆群编号信息。CGi, j.next记CGi, j映射到了后一版本(或更后版本)中对应的克隆群编号信息。在映射算法中,首先将当前版本Vi中的所有克隆群CGi, j的后继初始化为空,将后一版本Vi+1中所有克隆群的前驱初始化为空,然后再进行三轮映射。findNext和findPre函数分别代表在某一版本中为当前克隆群寻找后继克隆群、前驱克隆群并返回相应的克隆群的编号信息。version.pre和version.next分别代表当前版本的前一版本及后一版本。

在算法1中,相邻版本间克隆群映射的条件相对严格,对于当前版本Vi中的任一克隆群CGi, j而言,在后一版本Vi+1中映射到的克隆群CGi+1,k是所有Vi+1的克隆群中与CGi, j的主题相似度最高的,而不是仅仅在满足相似度阈值的情况下即可进行映射。这样的映射规则保证了每一对映射包含的两个克隆群都有非常高的主题相似度。克隆群映射过程中,主题相似度阈值直接影响映射结果,参照了前期研究[25]中采用的克隆群映射相似度阈值,本文将主题相似度阈值暂设为0.8,但该值并非固定,本文将在原型工具的实现以及后续研究中对该阈值的设定问题进行更详细的研究。

克隆群映射完成后,除起始本中的克隆群没有前驱、最终版本中的克隆群没有后继以外,如果某一克隆群未能找到其前驱,则说明该克隆群是新增克隆群,如果某一克隆群未能找到其后继,则说明该克隆群在软件演化的过程中可能被移除。克隆群的前驱与后继信息将有助于判断克隆代码的演化模式类型。

图3呈现了某款软件多版本中的部分克隆群映射效果。图中每一竖排圆点代表一个版本中的不同克隆群,每条线段代表映射关系,不同灰度和大小的圆形及线段代表了不同的映射关系与演化模式。

2.3克隆片段映射

由于单纯的克隆群映射还不能够呈现更多的克隆代码演化信息,例如不一致变化等。所以,在相邻版本间的克隆群映射完成后,还需要针对两个对应克隆群内的克隆代码片段进行映射,以便识别出更多的克隆代码演化模式与演化特征。由于存在映射关系的两个克隆群内的克隆代码片段之间的相似程度相对较高,导致代码主题信息区分度不大,所以片段映射时不能再次利用代码的主题信息进行匹配。

在Ying等[14]及Saha等[15]的克隆谱系构建研究中,克隆片段的映射主要参考了位置信息,例如Saha等[15]在映射克隆代码片段时,如果其所在的文件名、函数名及起止行号不变,在不匹配克隆代码内容的情况下就直接进行映射。该类方法虽然能够较快地进行片段映射,但针对函数重命名以及代码位置变化时,容易造成映射错误。如果文件名、函数名等属性不一致时,则还需要根据代码文本内容或中间形式进行克隆片段的映射。如果不考虑文件的位置属性而仅仅通过代码相似性来映射克隆片段,则可能由于克隆代码的位置改变而造成映射的偏差,所以为了综合考虑克隆代码片段的位置信息以及克隆代码本身的相似性,本文针对克隆代码片段映射任务定义了4种距离。

1)目录距离。两段克隆代码所在目录的相似程度。本文考虑了软件演化过程中某些路径名可能出现较小的修改,例如将某一目录名“temp”改为“tmp”等,所以计算目录相似度时不宜采用严格的字符串匹配。本文采用编辑距离来衡量两个目录的距离,这样避免了由于个别目录名修改而造成映射错位等问题。与Ying等[14]的克隆片段映射方法相比,本文考虑了目录名可能修改的情况,所以对位置属性的处理更为合理。

2)文件名距离。与目录距离的定义类似,文件名距离是指文件名之间的编辑距离。之所以将目录距离与文件名距离分开考虑是因为很大一部分克隆代码会来自于同一源代码文件,所以利用文件名距离辅助判断克隆代码片段映射关系可以大大减少其他距离的计算量。

3)签名距离。在本文中,签名是指能够代表一段代码的一个字符串,例如函数的签名可以为函数名和参数列表。签名距离为两个代码段对应的签名之间的编辑距离,签名距离可以在路径距离及文件名距离都相同时进一步来判断克隆代码之间的相似度,因此可以用于克隆片段映射。

4)文本距离。文本距离的计算首先将源代码视为字符串,进而通过计算字符串的编辑距离得出克隆代码的文本距离。当待映射的克隆片段之间具有相同的目录距离、文件名距离、签名距离时,利用文本距离可以最终判断克隆片段的映射关系。本文不仅仅使用文本距离进行作为克隆片段的映射依据是考虑了片段映射的效率问题,前3种距离的计算量相对较少,可以大大节省克隆片段映射的时间。

为了综合利用上述4种距离属性进行映射,制订了以下具有优先级的映射规则进行克隆代码片段映射,假设相邻版本中已经映射的两个克隆群分别为CG与CG′。它们所包含的克隆片段的映射步骤为:

步骤1对于克隆群CG中的任一克隆片段CF与CG′中的所有克隆片段计算目录距离,CF选择与其目录距离最小的克隆片段进行映射,已经映射的克隆片段不能再次参与映射。

步骤2如果目录距离相等,CF选择与其文件名距离最小的克隆片段映射,已经映射的克隆片段不能再次参与映射。

步骤3如果文件名距离相等,CF选择与其签名距离最小的克隆片段映射,已经映射的克隆片段不能再次参与映射。

步骤4如果签名距离相等时,CF选择与任意一个文本距离最小的克隆片段映射,已经映射的克隆片段不能再次参与映射。

克隆片段的映射方法之所以不再使用类似克隆群的映射方法是考虑了克隆片段可能存在新增、去除等情况,所以可能存在克隆片段映射不完全的情况,即部分克隆片段未能与相邻版本间的其他克隆片段建立映射关系,但这类信息将有助于克隆群容量演化模式及克隆代码片段内容层面演化模式的分析。

2.4克隆演化模式及其识别

当相邻版本间克隆群映射完成后,即可识别克隆群层面的演化模式。针对克隆群层面演化模式主要涉及到克隆群本身的生存情况以及群内包含克隆代码片段的数量的变化情况。

与其他研究方法相比,本文将克隆群与克隆片段的演化模式分开研究使得各种模式具有更加清晰的视角。Kim等[8]将演化模式分成6种,与本文所用模式不同的是,Kim等[8]的方法考虑了位移模式,即克隆代码的位置发生了改变。本文方法更关注克隆群及克隆代码内容上的改变,所以不考虑位移模式,取而代之,本文将简单模式、复活模式与合并模式引入到演化模式概念集中。复活模式的产生意味着克隆代码存在延迟传播现象的可能。延迟传播是指一些克隆代码在演化过程中出现过内容的不一致改变而分离,而在后续版本中又重新变为克隆关系。克隆代码的延迟传播研究将有助于分析克隆代码与Bugs的关系[18-19],所以复活模式值得深入研究。

本文针对克隆群演化而言主要研究两种视角下的九种演化模式,分别为克隆群生存视角下的6种模式包括:新生模式、消失模式、分支模式、合并模式、复活模式、简单模式;以及克隆群内片段数量视角下的3种模式,包括:增加模式、去除模式和保持模式。每种模式的基本定义如下:

新生模式当前版本中的某一克隆群与前续版本中的任何克隆群未能建立映射关系,即该克隆群无前驱。

消失模式当前版本中的某一克隆群与后续版本中的任何克隆群未能建立映射关系,即该克隆群无后继。

分支模式当前版本中的某一克隆群在后一版本中与多个克隆群具有映射关系,即该克隆群具有多个后继。

合并模式当前版本中的某一克隆群在前一版本中与多个克隆群具有映射关系,即该克隆群具有多个前驱。

复活模式某一克隆群在演化过程中先经历消失模式,而后又经历新生模式,即该克隆群“死而复活”,为复活模式。

增加模式当前版本中的某一克隆群与前一版本中对应克隆群相比,包含克隆代码片段的数量有所增加。

去除模式当前版本中的某一克隆群与前一版本中对应的克隆群相比,包含克隆代码片段的数量有所减少。

保持模式当前版本中的某一克隆群与前一版本中对应的克隆群相比,包含克隆片段的数量保持不变。

简单模式当前版本中某一克隆群有唯一的前驱克隆群和唯一的后继克隆群,而且前驱和后继克隆群都存在于相邻版本中,演化过程相对简单,没有发生过新生、消失、合并、分支以及复活演化模式。

克隆群映射完成后,克隆群层面的演化模式识别即可进行。由各类模式的定义可知,如果克隆群无前驱则发生了新生模式;如果克隆群无后继则发生了消失模式;如果克隆群有多个前驱则发生了合并模式;如果克隆群有多个后继则发生了分支模式;如果克隆群先发生了消失模式而后又出现新生模式则产生了复活模式;其余模式均为简单模式。

图4呈现了某软件系统6个连续版本中的部分克隆群的演化情况。其中:矩形代表软件系统的版本,圆形代表克隆群,箭头代表映射关系。由映射信息可知,B1和C3克隆群均发生了分支模式(例如B1分化为C1和C2),B2克隆群发生了消失模式,C4克隆群发生了复活模式,E1克隆群发生了合并模式,其余均为简单模式。

图5呈现了某克隆群CG在4个版本中的演化过程;同时呈现了克隆群内克隆片段数量的变化情况,其中圆形代表克隆群CG,正方形代表克隆代码片段。显然,CG在V1到V2的演化过程中增加了克隆片段,即发生了增加模式;在V2到V3的演化过程中去除了克隆片段,即发生了去除模式;在V3到V4的演化过程中,群内片段数量保持不变,即属于保持模式。

此外,本文还研究了3种克隆代码片段内容层面的演化模式,包括:无变化模式、一致变化模式和不一致变化模式。每种模式的基本定义如下:

无变化模式在相邻版本间对应的克隆群内,所有参与了片段映射的克隆代码片段的内容都未发生改变。

一致变化模式在相邻版本间对应的克隆群内,所有参与了片段映射的克隆片段的内容作了一致改变。

不一致变化模式在相邻版本间对应的克隆群内,所有参与了片段映射的部分或全部的克隆代码片段内容做了不一致改变。

克隆片段演化模式与克隆群演化模式不同,克隆片段模式仅仅针对克隆片段内容层面在相邻版本间的演化而言。本文将克隆片段演化模式分为3种,但这3种模式与Kim等[8]提出的相关演化模式存在差异。在本文中,这3种模并不涉及克隆群层面的演化,而在Kim等[8]的研究中,这3种模式既涉及到克隆群层面的演化同时又涉及到克隆代码内容层面的演化,视角混淆。本文将这3种模式重新定义,视角明确,有较好的层次感,更加清晰,易于理解。

图6呈现了某克隆群CG内的克隆代码片段在4个相邻版本间的演化过程,其中圆形代表克隆群,正方形代表克隆代码片段,不同填充颜色及边框代表克隆代码片段内容发生了不同的改变。在V1到V2的演化过程中,群内所有克隆代码片段发生了内容上的一致变化;在V2到V3的演化过程中,克隆代码片段发生了内容上的不一致变化;在V3到V4的演化过程中,也发生了内容上不一致变化,而且还增加了克隆代码片段。由此可见,不同视角的克隆演化模式可能会同时发生,所以区分视角的克隆演化模式分析是十分必要的,这将为克隆演化的后期研究提供更加清晰和明确的思路。

针对上述3种克隆片段演化模式,本文先识别无变化模式,即对应克隆群内的所有参与映射的克隆代码片段内容不变。这种模式识别较为简单,可以将代码元素的变化情况作为参考,求出对应克隆片段源代码的差异,从而确定是否改变。如果在对应克隆群内所有参与映射的克隆代码内容不变,则为无变化模式。识别无变化模式完成后,可识别一致变化和不一致变化模式。如果参与映射的部分或全部克隆代码内容发生了改变,先求出所有对应克隆代码片段的差异,然后计算这些差异的相似情况。如果所有差异相同,则为一致变化模式,否则为不一致变化模式。本文将借助Diff工具对克隆代码片段内容层面的演化情况进行分析,从而给出克隆代码片段的演化模式。

2.5克隆演化特征

克隆代码映射关系中包含了大量的克隆代码演化信息。基于已构建的克隆代码映射关系,本文从克隆演化模式、克隆生命周期以及克隆代码数量增长率等方面选取克隆演化特征进行分析。克隆演化模式提供了丰富的演化信息,便于研究和理解克隆演化现象。克隆生命周期能够反映克隆群在演化过程中所经历的版本数量。此外,克隆演化特征还可用于克隆代码相关问题的预测研究,例如可用代码的有害性及稳定性预测等问题。

2.5.1演化模式的数量特征

通过对各类克隆演化模式进行统计,可以发现克隆群在软件的演化过程中主要进行了哪种改变方式。统计某一克隆群经历各种演化模式的数量可以宏观地了解克隆群的演化情况。演化模式的数量特征可以从侧面反映一款软件中大部分克隆代码是否稳定,如果简单模式与无变化模式数量较多,则说明大部分克隆代码的演化相对稳定。而其他模式的数量较多,则可以反映某些克隆群在演化过程中比较多变,稳定性较差。在研究克隆代码的稳定性或有害性时,克隆代码所经历的某些演化模式可能作为判断其性质的决定性因素。例如,如果某个克隆群在演化过程中频繁发生一致或者不一致变化模式,则该克隆群必然占据了过多的维护成本,可以认为其有害性较强,建议优先去除或者重构,因此,克隆演化模式的数量特征可以为克隆代码的其他相关研究工作提供良好的数据支持。

2.5.2克隆代码的生命周期

对于一个克隆群而言,其所经历的版本数量就是其生命周期。克隆群的生命周期可以明确反映克隆群在演化过程中存在时间的长短。对于生命周期较长而且演化相对稳定的克隆群,可以建议开发或维护人员进行简单的跟踪。对于生命周期比较短暂的克隆,通过分析其引入因素及去除因素,可以总结一些有意义的开发及维护策略作为经验,从而为后期的开发及维护提供参考,避免再次引入该类克隆代码,从而降低开发及维护的成本。

2.5.3克隆代码数量结构特征

在软件的演化过程中,克隆代码片段可能被增加或去除,因此,克隆群以及克隆代码片段数量的增长比可以直接反映克隆代码整体数量结构的变化情况。克隆群与克隆代码片段的数量比则可以直接反映克隆代码在演化过程中整体的繁殖量。克隆代码的数量结构特征可以在宏观上反映软件系统中克隆代码所占比重的变化情况。在实际的软件开发或维护环境中,如果发现克隆代码的整体繁殖能力越来越强,则可以考虑重构或去除某些克隆代码,从而为后续的开发及维护工作减轻压力。

2.6克隆谱系构建

克隆谱系是指克隆代码在软件多个版本演化过程中变化情况的记录信息。将克隆谱系作为克隆代码分析的基本数据,可以进行更多克隆代码相关问题的研究。当相邻版本间的克隆群映射、对应克隆群之间的克隆代码片段映射、克隆演化模式识别及克隆演化特征分析完成后,按照版本的时序,将所有演化信息合并得到克隆谱系。从宏观结构层面来看,克隆谱系主要是根据克隆群映射关系连接而成的拓扑结构。克隆谱系反映了克隆代码在软件的演化过程中是如何产生、繁殖和去除的。克隆谱系中的每个克隆群都记录了对应的演化模式信息,其内部包含的克隆代码片段也各自记录了微观层面的片段映射关系以及片段演化模式。

本文克隆谱系结构与前期相关研究中的克隆谱系结构明显不同。在前期相关研究中,其克隆谱系结构主要为克隆群粒度层面的树形结构,而本文构建的克隆谱系不再为树形结构,而是拓扑结构。在前期相关研究中,克隆演化模式的概念几乎全部来自于Kim等的研究[8],仅限于大约6种模式,而且各个模式之间不分视角,结构不清晰。此外,前期相关工作也并为分开视角地考虑到克隆群的合并模式与复活模式,所以其克隆谱系的构建工作中还关注了克隆直系与克隆家系的概念。克隆直系描述了某一克隆群的单支演化过程,克隆家系描述了起源于同一个克隆群的所有克隆直系的演化过程。虽然本文研究方法拓展了传统意义上的克隆谱系结构,但是克隆直系与克隆家系的子结构仍然可以在本文方法构建的克隆谱系中找到,因为并非所有克隆群都经历合并或者复活模式。除了克隆直系与克隆家系以外,本文将引入克隆族系的概念,克隆族系描述了起源于或合并于不同克隆群的所有直系克隆及家系克隆。由于合并及复活演化模式的存在,某一些克隆群的起源并非前续版本中的单一克隆群,而可能是经由多个克隆群合并之后演化而来,克隆族系将更加有助于分析克隆群的合并或重构问题。

图7展示了克隆谱系的基本结构,其中圆形代表克隆群,正方形代表克隆代码片段,箭头代表映射关系,不同的灰度及字母分别代表了克隆代码的模式及编号。

3实验与分析

3.1数据来源

本文分别针对4款开源软件的多个版本进行了克隆谱系的构建研究。使用了CloneDetective[27]和FClones[28]克隆代码检测工具以函数粒度进行克隆检测。4款开源软件的基本信息如表1所示。本文所选取的开源软件常被软件工程领域研究者作为基础的实验数据使用,具有一定代表性。例如Lin等[29]在研究克隆代码模式时使用了jedit以及jhotdraw等开源软件作为研究对象。针对这些开源软件的实验数据能为本文的后续对比研究作一定的铺垫。选取这些开源软件还考虑了不同程序设计语言及不同功能的软件,而且这些开源软件一直被良好地开发与维护,拥有较多的版本,含有丰富的克隆代码。能为克隆演化研究提供基础性数据。

3.2实验结果及分析

实验中,在相邻版本间克隆群映射时,主题相似度阈值设定参照了前期相关研究[25],将阈值暂设为0.8,但是该阈值并非固定不变,本文将在后续研究中对此值的选取问题进行更为细致深入的研究。通过对4款软件系统构建克隆谱系,得出了每款软件中的克隆群在演化过程中表现在生存层面的演化模式数量,各类演化模式数量统计如表2所示。

由表2可知,本文新提出的克隆演化模式在克隆代码演化过程中确实存在,而且占有一定数量。例如,在jhotdraw的16个版本的演化过程中,出现了3次合并模式;在ffmpeg的29个版本中,出现了8次合并模式以及20次复活模式。复活模式将为克隆代码与Bugs的研究提供更多参考信息,因此本文所提出的新的演化模式具有更深层次的研究意义。

此外,实验还统计了克隆群在容量层面的演化模式,包括克隆群内片段数量的增加、去除以及保持3种模式,如表3所示。由表3可知,克隆群在容量层面发生克隆代码片段增加及去除模式也出现了多次,这说明了克隆代码在演化过程中是非常可能再次被复制重用或删除。在jhotdraw及ffmpeg中,克隆群容量发生多次增加及去除模式,而在jedit及bluefish中该类演化模式数量则相对较少。由此可知,各类演化模式在不同功能、不同程序设计语言、不同开发团队、不同规模的软件系统中均有可能发生。

除了分析粗粒度的克隆演化模式以外,本文还针对细粒度的克隆代码演化情况进行了分析。从克隆代码片段的内容层面,分析了同一克隆群内的克隆代码片段在版本之间的变化情况。包括无变化模式、一致变化模式和不一致变化模式。此层面的各类演化模式数量如表4所示。由表4可知,绝大多数(平均约90%)克隆克隆代码在演化过程中基本不变;平均约10%的克隆代码发生了改变,而发生一致改变的克隆代码较多,平均约为6.5%,发生不一致改变的克隆群最少,平均约为4.4%。这也说明了绝大多数克隆代码在演化过程中不会被修改,而被修改的克隆代码超过一半被一致性地修改了,仅有一少部分被不一致地修改。本文将在后续研究中继续关注引起克隆代码不一致性修改的原因及其为软件开发及软件维护带来的利弊。

本文除了关注克隆代码演化模式之外,还统计了克隆群的生命周期,如表5所示。由表5可知,大部分克隆代码在软件演化过程中并未生存较长时间,而仅有一小部分克隆代码在演化过程中一直稳定地生存下来。生存时间不超过软件整体生命周期40%的克隆群数大约为总数的67%。生存时间超过软件整体生命周期80%的克隆群数大约为总数的6%。剩余部分克隆群的生命周期约占软件整体生命周期的27%。

克隆代码在演化过程中会伴随着克隆群的消失与新生模式,但克隆群及克隆代码片段的数量会随着软件演化的推进而增多,表6给出了克隆群数量及克隆代码数量在软件版本演化过程中的数量增长比率。

由表6可知,这4款开源软件中的克隆代码几乎全部以增加克隆代码数量的方式演化。克隆群数量平均增长率约为24.1%,克隆代码片段数的平均增长率约为17.4%。也有个别相邻版本间存在着克隆群及克隆片段减少的情况,但这种情况比较少见。出现克隆代码数目减少的原因可能包括克隆检测工具阈值的固定性、克隆代码修改量较大、克隆代码被重构等。

克隆代码的数量结构说明克隆代码在软件开发、维护、升级及重构等活动中都扮演着不可或缺的角色,占据了软件整体代码的一定比例。克隆代码的跟踪、维护及管理将对软件开发活动和软件质量产生积极性的影响。

4结语

本文基于软件多版本演化,根据克隆代码主题信息构建版本间克隆代码的映射关系,为演化过程中的克隆代码添加演化模式,分析演化特征并构建克隆谱系。

本文传承了利用克隆代码主题信息进行克隆群映射的工作,并继续开展了克隆演化模式识别、演化特征分析以及克隆谱系构建的工作。发现了大部分克隆代码(约90%)在演化过程中表现得相对稳定,但仍然有部分克隆代码在演化过程中比较多变,稳定性较差。另外,本文还通过实验验证了新提出的克隆演化模式在克隆代码演化过程中确有发生。还发现了大部分克隆代码的生命周期并未超过软件演化整体周期的50%。本文研究结论将为克隆代码演化分析、克隆代码的维护管理及重构任务提供更多参考信息。

本文的研究内容与实验依然存在一些不足之处,包括:Type3克隆代码内容层面的演化模式还需要进一步深入研究;一致变化模式及不一致变化模式的判断需要更加详细合理的标准;克隆群映射准确性与全面性的评价需要研究;克隆谱系结果未进行良好的可视化等。

本文将在后续研究中陆续改进、完善不足之处,包括:选取更加适合分析克隆代码的主题模型;为克隆群和克隆代码片段映射工作构建测试集和自动化的评价框架;将克隆谱系的结果进行良好的可视化;研究各种演化模式与Bugs的关系;为克隆代码构建本体模型以及检索系统;为克隆代码的维护与管理提供更多帮助。此外,将在下一步研究工作中,进一步考虑将所提方法与已有的一些经典的研究工作进行深入的对比分析;同时,分析不同方法中某些阶段不同算法的选择或不同参数的取值对最终结果的影响。

参考文献:

[1]

ROY C K, ZIBRAN M F, KOSCHKE R. The vision of software clone management: past, present, and future (Keynote paper) [C]// Proceedings of the 2014 IEEE Conference on Software Maintenance, Reengineering and Reverse Engineering. Piscataway, NJ: IEEE, 2014: 18-33.

[2]

BELLON S, KOSCHKE R, ANTONIOL G, et al. Comparison and evaluation of clone detection tools [J]. IEEE Transactions on Software Engineering, 2007, 33(9): 577-591.

[3]

PATE J R, TAIRAS R, KRAFT N A. Clone evolution: a systematic review [J]. Journal of Software: Evolution and Process, 2013, 25(3): 261-283.

[4]

BARBOUR L, KHOMH F, ZOU Y. An empirical study of faults in late propagation clone genealogies [J]. Journal of Software: Evolution and Process, 2013, 25(11): 1139-1165.

[5]

LAGUE B, PROULX D, MAYRAND J, et al. Assessing the benefits of incorporating function clone detection in a development process [C]// Proceedings of the 1997 IEEE International Conference on Software Maintenance. Piscataway, NJ: IEEE, 1997: 314-321.

[6]

ANTONIOL G, VILLANO U, MERLO E, et al. Analyzing cloning evolution in the Linux kernel [J]. Information and Software Technology, 2002, 44(13): 755-765.

[7]

GDE N. Clone Evolution [M]. Berlin: Springer, 2011: 3-4.

[8]

KIM M, SAZAWAL V, NOTKIN D, et al. An empirical study of code clone genealogies [J]. ACM SIGSOFT Software Engineering Notes, 2005, 30(5): 187-196.

[9]

KIM M, NOTKIN D. Using a clone genealogy extractor for understanding and supporting evolution of code clones [J]. ACM SIGSOFT Software Engineering Notes, 2005, 30(4): 1-5.

[10]

ZIBRAN M F, SAHA R K, ROY C K, et al. Evaluating the conventional wisdom in clone removal: a genealogybased empirical study [C]// Proceedings of the 28th Annual ACM Symposium on Applied Computing. New York: ACM, 2013: 1123-1130.

[11]

SAHA R K, ASADUZZAMAN M, ZIBRAN M F, et al. Evaluating code clone genealogies at release level: an empirical study [C]// Proceedings of the 10th IEEE Working Conference on Source Code Analysis and Manipulation. Piscataway, NJ: IEEE, 2010: 87-96.

[12]

GDE N, KOSCHKE R. Studying clone evolution using incremental clone detection [J]. Journal of Software: Evolution and Process, 2013, 25(2): 165-192.

[13]

BAKOTA T. Tracking the Evolution of Code Clones [M]. Berlin: Springer, 2011: 86-98.

[14]

YING T, LI P Z, CHUN H W, et al. Extract function clone genealogies across multiple versions [J]. International Journal of Security and Its Applications, 2015, 9(6): 167-182.

[15]

SAHA R K, ROY C K, SCHNEIDER K. gCad: a nearmiss clone genealogy extractor to support clone evolution analysis [C]// Proceedings of the 2013 IEEE International Conference on Software Maintenance. Piscataway, NJ: IEEE, 2013: 488-491.

[16]

MENG C, XIAO H, TIAN T, et al. A new clone group mapping algorithm for extracting clone genealogy on multiversion software [C]// Proceedings of the 2013 Third International Conference on Instrumentation, Measurement, Computer, Communication and Control. Piscataway, NJ: IEEE, 2013: 848-853.

[17]

BAKOTA T, FERENC R, GYIMOTHY T. Clone smells in software evolution [C]// Proceedings of the 23rd International Conference on Software Maintenance. Piscataway, NJ: IEEE, 2007: 24-33.

[18]

AVERSANO L, CERULO L, PENTA M D. How clones are maintained: an empirical study [C]// Proceedings of the 11st European Conference on Software Maintenance and Reengineering. Piscataway, NJ: IEEE, 2007: 81-90.

[19]

THUMMALAPENTA S, CERULO L, AVERSANO L, et al. An empirical study on the maintenance of source code clones [J]. Empirical Software Engineering, 2009, 15(1): 1-34.

[20]

KUHN A, DUCASSE S, GíRBA T. Semantic clustering: identifying topics in source code [J]. Information and Software Technology, 2007, 49(3): 230-243.

[21]

THOMAS S W, ADAMS B, HASSAN A E, et al. Validating the use of topic models for software evolution [C]// Proceedings of the 2010 IEEE Conference on Source Code Analysis and Manipulation. Piscataway, NJ: IEEE, 2010: 55-64.

[22]

THOMAS S W, ADAMS B, HASSAN A E, et al. Studying software evolution using topic models [J]. Science of Computer Programming, 2014, 80: 457-479.(无期)

[23]

ASUNCION H U, ASUNCION A U, TAYLOR R N. Software traceability with topic modeling [C]// Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering. New York: ACM, 2010: 95-104.

[24]

金靖,李萌,华哲邦,等.一种基于LDA和静态分析的代码功能识别方法[J].计算机工程与应用,2013,49(15):27-31.(JIN J, LI M, HUA Z B, et al. Code function recognition approach based on LDA and static analysis [J]. Computer Engineering and Applications, 2013, 49(15): 27-31.)

[25]

张瑞霞,张丽萍,王春晖,等.基于主题建模技术的克隆群映射方法[J].计算机工程与设计,2015,36(6):1524-1529.(ZHANG R X, ZHANG L P, WANG C H, et al. Clone group mapping method based on topic modeling [J]. Computer Engineering and Design, 2015, 36(6): 1524-1529.)

[26]

PHAN X H, NGUYEN L M, HORIGUCHI S. Learning to classify short and sparse text & Web with hidden topics from largescale data collections [C]// Proceedings of the 17th International Conference on World Wide Web. New York: ACM, 2008: 91-100.

[27]

JUERGENS E, DEISSENBOECK F, HUMMEL B. Clonedetectivea workbench for clone detection research [C]// Proceedings of the 31st International Conference on Software Engineering. Piscataway, NJ: IEEE, 2009: 603-606.

[28]

张久杰,王春辉,张丽萍,等.基于Token编辑距离检测克隆代码[J].计算机应用,2015,35(12):3536-3543.(ZHANG J J, WANG C H, ZHANG L P, et al. Clone code detection based on Levenshtein distance of token [J]. Journal of Computer Applications, 2015, 35(12): 3536-3543.)

[29]

克隆的好处篇5

今天将有一只克隆龙会诞生,那是一条中国应龙。忽然在聂博士的克隆龙出生房里,传来了龙的叫声。“克隆龙出生了!”整个中国沸腾了起来,这欢乐的气氛持续了好几天,在这几天里到处都能看见克隆龙的身影,画有克隆龙的画,克隆龙的旗,全中国多沉浸在这应龙热里。

克隆龙很聪明,因为克隆龙的脑袋里植入了人的脑细胞,所以它像人一样聪明。克隆龙住在一个人工龙洞里,过着舒适的生活,但是克隆龙却不喜欢这样的生活,它觉得这样的生活很无聊,一点意思也没有,它很想逃出这里,但是它还不会飞,它是逃不出去的,于是它就只能等待,等待什么时候它能够学飞。几个月过去了克隆龙到了学飞的时候了,它很努力的学飞,因为它希望它能早日飞出这个是非之地,它很快的掌握了飞翔的技巧,它现在越飞越高,聂博士开始担心克隆龙会飞走于是每次克隆龙在空中飞时,他就派好几架直升飞机跟这它,克隆龙开始讨厌这老头子了,它心想:这老头子真是的,老是把我关在这里,像闷死我吗!我每次飞的时侯都派好几架的飞机跟在我后面,让我想逃也逃不了。你既然如此,那好!我豁出去了!

未完待续

克隆的好处篇6

开宗明义:我并不赞成克隆!

从医学的角度看,我还是很认同美国这家医学中心的做法的,这样的话,至少新生婴儿就不会被遗传某些基因疾病了,从一定程度上来说,还可以抑制某些疾病的延续。

但是,谁又能保证克隆的新生儿不会携带什么我们目前还不能控制的的新病毒呢?这不是个危害吗?

纵使有了这个,那个的好处,克隆想完全的冲破几千年历史留下的伦理道德的栅栏,还是很困难的。所以从现在大多数人的观念来看,克隆还是很难被接受的,更不要说克隆人了。

我们假设一下,克隆被完全的接受了,甚至到了人人都想克隆自己的时候,那是不是就表明克隆的完全成功了呢?我想还不是的,看按“第六日”中阿诺.施瓦幸格的无助我们就明白了一切。克隆留给我们的是一大堆尚待要解决的问题和一系列的困惑。

其中的一个问题就在于:在这个张扬个性的时代,克隆没有突出时代要求,而且制造的只是人的复制品,只是物质形态的复制品,这种复制品没有自己的思想,有的只是被复制者的旧思想,没有形成自己的新思想,这显然对社会的发展没有推动作用,甚至会阻碍社会的发展。

人类妄图成为造物主,担任造物的角色,必然自食恶果!据媒体报道,美国的一家医学中心已经制造出全世界第一匹基因改良婴儿,共15名,克隆的话题又一次的被提起。

开宗明义:我并不赞成克隆!

从医学的角度看,我还是很认同美国这家医学中心的做法的,这样的话,至少新生婴儿就不会被遗传某些基因疾病了,从一定程度上来说,还可以抑制某些疾病的延续。

但是,谁又能保证克隆的新生儿不会携带什么我们目前还不能控制的的新病毒呢?这不是个危害吗?

纵使有了这个,那个的好处,克隆想完全的冲破几千年历史留下的伦理道德的栅栏,还是很困难的。所以从现在大多数人的观念来看,克隆还是很难被接受的,更不要说克隆人了。

我们假设一下,克隆被完全的接受了,甚至到了人人都想克隆自己的时候,那是不是就表明克隆的完全成功了呢?我想还不是的,看按“第六日”中阿诺.施瓦幸格的无助我们就明白了一切。克隆留给我们的是一大堆尚待要解决的问题和一系列的困惑。

其中的一个问题就在于:在这个张扬个性的时代,克隆没有突出时代要求,而且制造的只是人的复制品,只是物质形态的复制品,这种复制品没有自己的思想,有的只是被复制者的旧思想,没有形成自己的新思想,这显然对社会的发展没有推动作用,甚至会阻碍社会的发展。

克隆的好处篇7

我来到克隆所,一个机器人走出来:“请问,你是来克隆的吗?”

“是的”

“请问,你想克隆谁呢?”

“我自己 。”“请躺在克隆床上。”

我躺在床上,心里美滋滋的:哈哈终于如愿以偿了。

“叮,叮叮,叮叮叮”机器越来越快,突然,我眼前一黑,再睁开眼时发现自己已在研究所门外了,只听机器人说:“输入错误,克隆失败。”说完,机器人就爆炸了,研究所也倒塌了。

过了几天,报纸和电视几乎全部做了报道:“克隆人摧毁了城市数座建筑,警察和军队联手,无人生还。”

我跑到研究所,我找啊,找啊,拼命的找啊。终于找到了一个晶片,上面有一行小字“DXDX 2828ROBERT”。经过电脑分析,我终于发现了克隆人的弱点。

我立即带着这块晶片跑到了克隆人面前,他大笑道:“小鬼,别逞强,不管是什么武器我都不怕。我现在给你10秒采取行动,如果不能打败我,你就不能留在这个世界上了。我会克隆无数个我统治世界了。

10秒,我从未像现在这样感觉时间的宝贵。我没想就飞速地来到克隆人面前,在他的脚掌底找到一个小槽,将那块晶片插了进去,然后跑开,用遥控器输入3个号码。4秒,3秒,2秒,只听“隆”的一声,克隆人到下了,瓦解了。

我呆呆地望着这一切,眼泪夺眶而出。第二天,报纸和电视又做了如下报道“克隆人被消灭”,“克隆人的下场”“小鬼做大事”……

“快起床了,上学迟到了。”一个熟悉的声音,是妈妈。原来是一场梦。我在梦里克隆自己,他给我带来了惊喜,也给我带来了灾难。克隆技术真的像人们说的那么美好和神奇吗?我真的有点儿怀疑了。

克隆的好处篇8

假如我会克隆,我要克隆出许许多多的迎客松和白杨树。我把迎客松栽在全国各省市的迎宾大道上,向来自世界各地的游客们招手问好;我把白杨树栽在那贫瘠的土地上,那荒凉的戈壁上,使那里也变得葱郁起来,让人们都拥有舒适的环境。这样,既美观了我们的祖国,又为祖国增加了森林覆盖面积。

假如我会克隆,我要克隆人体器官.如果有人小肠坏了,我会克隆出新的给他换上;如果有人眼角膜坏了,我也会克隆出眼角膜给他……我要让所有人都拥有良好的身体器官。

假如我会克隆,我要克隆缉毒猪。毒品对人体有很大的危害,现在又有许多不法分子,到处贩毒。这些缉毒猪能闻出毒品帮助警方抓捕坏蛋。除此之外,克隆缉毒猪还节省了培训警方专用猪的时间。

如果我长大后真的成为了克隆专家,我会克隆出很多有益的东西,使我的祖国更加繁荣富强,让地球变得更加美丽!

上一篇:材料力学课件范文 下一篇:发展规划部范文