亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        開(kāi)源對(duì)軟件工程的作用及關(guān)鍵搜索技術(shù)分析*

        2015-10-18 02:15:46曾國(guó)蓀同濟(jì)大學(xué)計(jì)算機(jī)科學(xué)及技術(shù)系上海0804國(guó)家高性能計(jì)算機(jī)工程技術(shù)中心同濟(jì)分中心上海0804
        關(guān)鍵詞:控制流源代碼程序員

        張 康,曾國(guó)蓀(.同濟(jì)大學(xué) 計(jì)算機(jī)科學(xué)及技術(shù)系,上海 0804;.國(guó)家高性能計(jì)算機(jī)工程技術(shù)中心同濟(jì)分中心,上海 0804)

        開(kāi)源對(duì)軟件工程的作用及關(guān)鍵搜索技術(shù)分析*

        張 康1,曾國(guó)蓀2
        (1.同濟(jì)大學(xué) 計(jì)算機(jī)科學(xué)及技術(shù)系,上海 201804;2.國(guó)家高性能計(jì)算機(jī)工程技術(shù)中心同濟(jì)分中心,上海 201804)

        隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,開(kāi)源軟件正以前所未有的優(yōu)勢(shì)得以迅速發(fā)展?,F(xiàn)在的開(kāi)源軟件已經(jīng)成為軟件發(fā)展的主要流行趨勢(shì)。開(kāi)源軟件的成功對(duì)軟件產(chǎn)業(yè)起到了巨大的作用。同時(shí),由于目前開(kāi)源軟件數(shù)量急劇增加,迅速準(zhǔn)確地尋找到用戶(hù)所需的代碼成為一個(gè)關(guān)鍵問(wèn)題?,F(xiàn)有的代碼搜索引擎大都是基于文本的搜索,并未利用語(yǔ)法、語(yǔ)義信息,在搜索準(zhǔn)確性方面受到極大限制。因此,有學(xué)者提出利用代碼的語(yǔ)法和語(yǔ)義等信息輔助代碼搜索。從多個(gè)方面對(duì)開(kāi)源的作用做一個(gè)較全面的介紹,并對(duì)開(kāi)源代碼的關(guān)鍵搜索技術(shù)做一個(gè)簡(jiǎn)要綜述。

        開(kāi)源;復(fù)用;搜索;關(guān)鍵詞;語(yǔ)法;語(yǔ)義

        0 引言

        隨著網(wǎng)絡(luò)時(shí)代的來(lái)臨和開(kāi)源運(yùn)動(dòng)的發(fā)展,軟件的開(kāi)發(fā)模式、運(yùn)行環(huán)境和提供方式都發(fā)生了巨大改變。興起于20世紀(jì)90年代的開(kāi)源軟件取得了巨大成功,其開(kāi)發(fā)活動(dòng)具有開(kāi)放分享、頻繁發(fā)布等特點(diǎn),能夠有效匯聚軟件各利益相關(guān)方的創(chuàng)意和貢獻(xiàn),其自由松散的表象下隱藏著重要的軟件工程新理論,對(duì)軟件產(chǎn)業(yè)的發(fā)展和格局產(chǎn)生了深遠(yuǎn)的影響。目前,開(kāi)源軟件有著良好的發(fā)展態(tài)勢(shì)。開(kāi)源文化是人類(lèi)幾千年的智慧結(jié)晶,是一種必然的歷史趨勢(shì),這種發(fā)展趨勢(shì)是誰(shuí)也阻擋不了的。

        開(kāi)源軟件[1]就是在開(kāi)發(fā)源代碼許可證的規(guī)范下發(fā)布的軟件,以保障用戶(hù)自由使用軟件及接觸源代碼的權(quán)利,同時(shí)也保障了用戶(hù)自行修改、復(fù)制以及再分發(fā)的權(quán)利。開(kāi)源軟件的數(shù)量目前正在不斷大量增長(zhǎng),大量開(kāi)源軟件的出現(xiàn),對(duì)軟件工程的實(shí)施起到巨大作用,本文以開(kāi)源對(duì)軟件工程的作用和關(guān)鍵技術(shù)為研究點(diǎn),主要分析開(kāi)源對(duì)當(dāng)前軟件工程的作用和針對(duì)開(kāi)源代碼的關(guān)鍵搜索技術(shù)。

        1 開(kāi)源對(duì)軟件工程的作用

        1.1 基于開(kāi)源庫(kù)的瀏覽學(xué)習(xí)

        數(shù)量巨大的開(kāi)源庫(kù)對(duì)于程序員來(lái)說(shuō)是一座巨大的寶藏,源代碼融合了作者數(shù)十年的方法、經(jīng)驗(yàn)和教訓(xùn),對(duì)于初學(xué)者來(lái)說(shuō)不可多得的學(xué)習(xí)資源。

        對(duì)于初學(xué)者來(lái)說(shuō),開(kāi)源主要有以下兩個(gè)方面作用:

        (1)有助于從理論到實(shí)踐的平滑過(guò)渡。從理論到實(shí)踐是一個(gè)痛苦的過(guò)程,正是因?yàn)檫@種痛苦讓很多初學(xué)者望而卻步。

        (2)有助于初學(xué)者了解技術(shù)潮流。開(kāi)源項(xiàng)目往往沒(méi)有遺留系統(tǒng)的負(fù)擔(dān),比較有利于新技術(shù)和新想法的實(shí)現(xiàn)。初學(xué)者通過(guò)閱讀源碼可以緊跟這些新技術(shù)和新想法。

        1.2開(kāi)源有助于了解API使用方法

        在現(xiàn)代軟件行業(yè)中,越來(lái)越多的程序員依靠API庫(kù)來(lái)完成他們?nèi)粘5拈_(kāi)發(fā)任務(wù)。HOFFLNANN R[2]等人的研究指出,程序員在軟件開(kāi)發(fā)的過(guò)程中經(jīng)常需要調(diào)用到其他庫(kù)里的API。對(duì)于一個(gè)簡(jiǎn)單的API來(lái)說(shuō),通過(guò)一個(gè)使用例子,可以更加直觀地看到使用方法,這會(huì)讓用戶(hù)使用API變得更加快捷方便,省下了閱讀API文檔的過(guò)程,提高了開(kāi)發(fā)效率。

        通過(guò)示例代碼學(xué)習(xí)具體API的使用方法是開(kāi)發(fā)人員進(jìn)行軟件復(fù)用的高效手段。例如,Java程序員要使用排序函數(shù)sort,通常需要打開(kāi)文檔,找到 sort函數(shù),然后仔細(xì)查看文檔。這里使用開(kāi)源代碼的搜索引擎 krugle,在開(kāi)源代碼庫(kù)里輸入關(guān)鍵字“sort”,通過(guò)對(duì)照著搜索結(jié)果中調(diào)用 API的方法使用該 API,就會(huì)省下很多時(shí)間,提高開(kāi)發(fā)效率。

        1.3 開(kāi)源有利于代碼精確復(fù)用

        代碼復(fù)用可以說(shuō)是任何一個(gè)軟件企業(yè)都不能漠視的課題,因?yàn)閺?fù)用已有的代碼意味著開(kāi)發(fā)人員可以節(jié)省許多對(duì)代碼進(jìn)行測(cè)試和提升代碼質(zhì)量的時(shí)間。在軟件開(kāi)發(fā)中,軟件的每個(gè)部分幾乎都包括可復(fù)用的代碼塊。隨著開(kāi)源的流行,開(kāi)源代碼庫(kù)的數(shù)量的日益龐大,開(kāi)源代碼的數(shù)量可以說(shuō)是不計(jì)其數(shù)。如此龐大基數(shù)的代碼幾乎包含了各個(gè)方面的代碼??梢哉f(shuō)很多程序員正在寫(xiě)或者將要寫(xiě)的代碼都是代碼庫(kù)里已有的代碼,這就浪費(fèi)了大量的人力、物力。因此,開(kāi)源就是使得任何所需要的代碼幾乎可以復(fù)用。

        1.4 開(kāi)源有助于軟件的推廣

        十年前,開(kāi)源支持者在試圖推廣免費(fèi)軟件時(shí)陷入了困戰(zhàn),推廣實(shí)施的障礙包括軟件質(zhì)量、安全保障、后期支持等。然而十年后,開(kāi)源模式已經(jīng)被大眾接受,相當(dāng)一部分公司在使用開(kāi)源軟件,開(kāi)源甚至更加有助于軟件的推廣[3]。開(kāi)源已經(jīng)走過(guò)了從忽視到嘲笑到打擊到被大家接受的過(guò)程[4],究其原因,可以從以下三點(diǎn)來(lái)說(shuō)明:

        (1)注重安全的人更加傾向于開(kāi)源軟件。開(kāi)源可以讓大家更加清楚軟件背后到底在做哪些不為人知的事,會(huì)讓使用開(kāi)源軟件的人更加放心。

        (2)節(jié)約成本的人更加傾向于開(kāi)源軟件。在使用軟件時(shí)一個(gè)不可避免的因素就是用戶(hù)是否愿意為其付費(fèi)。隨著開(kāi)源軟件的質(zhì)量的提高,用戶(hù)更愿意使用一個(gè)安全的、高質(zhì)量的、便宜的開(kāi)源軟件。

        (3)開(kāi)源社區(qū)積攢了大量的人群。在開(kāi)源代管平臺(tái)上發(fā)布項(xiàng)目會(huì)發(fā)布得更快,軟件發(fā)布后很快就會(huì)被各種用戶(hù)使用、轉(zhuǎn)載,形成了一個(gè)無(wú)形的軟件“供需超市”。開(kāi)源社區(qū)內(nèi)不同背景、不同專(zhuān)長(zhǎng)的人匯集成一股集體的力量,對(duì)于開(kāi)源項(xiàng)目的推廣起到了重要的作用。正如圖1所示,開(kāi)發(fā)者和用戶(hù)通過(guò)社區(qū)學(xué)習(xí)知識(shí)、提升能力、提升知名度、擴(kuò)展人際圈子,企業(yè)通過(guò)社區(qū)可以提高企業(yè)知名度、找到合適的人才、推廣技術(shù)和產(chǎn)品、降低成本等,社區(qū)在開(kāi)源項(xiàng)目的推廣中起到了重要的作用。

        圖1 2社區(qū)的作用圖

        1.5 開(kāi)源有助于軟件的個(gè)性化定制

        開(kāi)源軟件能夠迅速推廣得益于個(gè)性化定制。個(gè)性化定制是用戶(hù)介入產(chǎn)品的生產(chǎn)過(guò)程,將指定的圖案和文字印刷到指定的產(chǎn)品上,用戶(hù)獲得自己定制的個(gè)人屬性強(qiáng)烈的商品。

        由于開(kāi)源的關(guān)系,軟件也可以個(gè)性化定制。開(kāi)源意味著任何人都可以去下載修改開(kāi)源軟件的源碼,制作出屬于自己的專(zhuān)屬軟件版本,而且可以將自己的個(gè)性化軟件進(jìn)行傳播。

        以往,軟件給人的思想是“給你什么你就有什么”,大多數(shù)專(zhuān)有軟件公司根據(jù)投資回報(bào)比來(lái)投資軟件,一些個(gè)性化的需求往往得不到他們的重視。然而,開(kāi)源流行開(kāi)后,個(gè)人或者企業(yè)可以添加自己想要的功能,這種個(gè)性化的定制往往使得開(kāi)源能夠更好地服務(wù)于個(gè)人或者企業(yè)。

        1.6 開(kāi)源有助于軟件質(zhì)量的分析

        軟件質(zhì)量是軟件產(chǎn)品的靈魂。關(guān)于開(kāi)源和閉源的軟件質(zhì)量的討論一直沒(méi)有停止過(guò)。閉源,相對(duì)來(lái)說(shuō),表面上是安全的,因?yàn)樗拇a是不公開(kāi)的,沒(méi)有高水平編程能力很難去破解,但它的缺點(diǎn)是本身因開(kāi)發(fā)人員思路的局限性會(huì)有很多漏洞,而自己又不知道,這就給了黑客作惡以可乘之機(jī)。

        開(kāi)源軟件由于源碼的開(kāi)放性,使得用戶(hù)和第三方評(píng)測(cè)者能夠直接通過(guò)代碼的分析了解軟件的內(nèi)部質(zhì)量情況,是一種直觀、精確的評(píng)測(cè)方式。此外,開(kāi)源軟件能集中群體的力量做到及時(shí)發(fā)現(xiàn)漏洞修補(bǔ)漏洞,可以集思廣益發(fā)揮群智群力的作用,讓開(kāi)源軟件迅速完善起來(lái)。

        2 源代碼搜索的關(guān)鍵技術(shù)分析

        2.1 基于字符串匹配的搜索技術(shù)

        2.1.1 基于關(guān)鍵詞的搜索

        對(duì)源代碼搜索而言,目前絕大多數(shù)的解決方案都可歸類(lèi)為兩種:一是借助于開(kāi)源代碼搜索工具或平臺(tái)如Github或者Sourceforge等;二是借助于通用搜索引擎。兩者都是基于關(guān)鍵詞的搜索。

        在基于關(guān)鍵詞的搜索中,主要采用了布爾搜索模型的搜索策略[5]。在布爾搜索中,用戶(hù)的查詢(xún)要求用普通的語(yǔ)言敘述,即用戶(hù)可完全按照自己的思維習(xí)慣提問(wèn)。其中的查詢(xún)要求(條件)A、B…可以分別用若干個(gè)標(biāo)引詞來(lái)表示,接著可以用布爾邏輯算符“∨”、“∧”、“﹁”將用戶(hù)的提問(wèn)“翻譯”成系統(tǒng)可以接受的形式。

        一般用tk表示標(biāo)引詞序列,dkn表示與tk有關(guān)的文獻(xiàn),則tk*={dk1,dk2,…,dkn}就可以用來(lái)表示與標(biāo)引詞tk有關(guān)的文獻(xiàn)全體組成的集合。令X(q)表示關(guān)于查詢(xún)q的檢出文獻(xiàn),則:

        (1)q=t,X(q)=t*

        (2)q=﹁t,X(q)=t*=Dt*

        (3)q=t1∨t2,X(q)=t1*∪t2*

        (4)q=t1∧t2,X(q)=t1*∩t2*

        很明顯,布爾邏輯運(yùn)算實(shí)際上就是集合之間的并、交、補(bǔ)運(yùn)算,也就是說(shuō),布爾邏輯檢索系統(tǒng)實(shí)際上是通過(guò)對(duì)若干個(gè)代碼文件集合(代碼文件集D或D的子集)的并、交、補(bǔ)運(yùn)算回答用戶(hù)提問(wèn)的。

        然而,這種方法局限性較大,不能充分利用代碼在語(yǔ)法結(jié)構(gòu)、語(yǔ)義等方面的特性,也無(wú)法保證查詢(xún)到的代碼與用戶(hù)查詢(xún)相關(guān)。

        2.1.2 基于代碼段的搜索

        盡管基于關(guān)鍵詞的搜索也在一定程度上幫助程序員復(fù)用源代碼,但是它還是會(huì)返回給用戶(hù)數(shù)量巨大的搜索結(jié)果,其中包括了很多用戶(hù)并不需要的結(jié)果。這是由于基于關(guān)鍵詞的搜索并未區(qū)分搜索的粒度,比如文件、類(lèi)或者是函數(shù),而僅僅是將匹配到的所有結(jié)果返回給用戶(hù)。因此,代碼搜索技術(shù)需要根據(jù)用戶(hù)需要返回不同粒度的結(jié)果?;谝褟?fù)用代碼的搜索技術(shù)[6]就是返回在過(guò)去曾經(jīng)復(fù)用過(guò)的代碼片段,可以根據(jù)用戶(hù)需求返回粒度較小的函數(shù)或者代碼段。

        在基于已復(fù)用代碼的搜索技術(shù)中,可以認(rèn)為,過(guò)去復(fù)用過(guò)的代碼很有可能會(huì)在將來(lái)再次被復(fù)用,因此返回給用戶(hù)的結(jié)果是在過(guò)去被復(fù)用過(guò)的代碼片段。該方法主要包括了代碼分析部分和代碼搜索部分。代碼分析部分探測(cè)將要被返回給用戶(hù)的重復(fù)代碼片段集合。代碼搜索部分返回給用戶(hù)的是與他們輸入相關(guān)的重復(fù)代碼片段。利用基于代碼段的搜索方法可以搜索得到更小的粒度,而不僅僅是代碼文件,滿足用戶(hù)對(duì)于搜索代碼段的需求。

        2.1.3 源代碼及時(shí)錄入及時(shí)搜索參考技術(shù)

        據(jù)調(diào)查表明,現(xiàn)代軟件開(kāi)發(fā)過(guò)程,開(kāi)發(fā)人員大約有19%的工作是在搜索代碼。開(kāi)發(fā)人員經(jīng)常需要參考Web上的代碼搜索結(jié)果來(lái)學(xué)習(xí)新技術(shù)或者輔助開(kāi)發(fā)工作[7]。通常情況下,開(kāi)發(fā)人員需要從IDE或者代碼編輯器切換到瀏覽器,在某個(gè)代碼搜索網(wǎng)站例如 github上搜索,搜索結(jié)果會(huì)出現(xiàn)很多結(jié)果,每個(gè)結(jié)果對(duì)應(yīng)著一個(gè)鏈接,開(kāi)發(fā)人員不得不一一打開(kāi)鏈接查看結(jié)果是否滿足需求,十分影響程序員的開(kāi)發(fā)效率。因此,源代碼實(shí)時(shí)錄入、實(shí)時(shí)搜索技術(shù)能夠幫助用戶(hù)改善這種狀況。

        源代碼即時(shí)錄入即時(shí)搜索技術(shù)旨在即時(shí)找到與用戶(hù)輸入代碼片段類(lèi)似或者相同的代碼段,并將其實(shí)時(shí)返回給用戶(hù),以幫助用戶(hù)學(xué)習(xí)參考或者復(fù)用。源代碼即時(shí)錄入即時(shí)搜索技術(shù)并非是一種新的代碼搜索技術(shù),它根據(jù)用戶(hù)在編輯器中實(shí)時(shí)輸入的結(jié)果,來(lái)搜索和當(dāng)前用戶(hù)輸入的代碼類(lèi)似的代碼片段返回給用戶(hù),輔助用戶(hù)進(jìn)行開(kāi)發(fā)。

        2.2 基于語(yǔ)法的源代碼搜索技術(shù)

        2.2.1 利用程序結(jié)構(gòu)的搜索方法

        與網(wǎng)頁(yè)文件搜索相比,代碼文件有著自己的特點(diǎn),而在傳統(tǒng)代碼搜索中還只是利用關(guān)鍵字進(jìn)行搜索,忽略代碼本身的特性,因此,有研究人員提出了基于程序結(jié)構(gòu)的源代碼搜索。

        在結(jié)構(gòu)化程序設(shè)計(jì)方法中,任何程序都可以用三種基本結(jié)構(gòu)(順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),如圖2所示)來(lái)表示,可以利用其程序結(jié)構(gòu)輔助搜索。

        圖2 三種基本結(jié)構(gòu)

        一方面,根據(jù)用戶(hù)的查詢(xún)輸入,生成所需的程序結(jié)構(gòu)的特征向量,這些結(jié)構(gòu)特征包括:順序結(jié)構(gòu)數(shù)、分支結(jié)構(gòu)數(shù)、循環(huán)結(jié)構(gòu)數(shù)等。另一方面,分析出開(kāi)源庫(kù)中的源代碼文件,得到程序結(jié)構(gòu)的特征向量,并建立數(shù)據(jù)庫(kù)。若兩個(gè)向量的相似度達(dá)到一定值,則說(shuō)明該向量對(duì)應(yīng)的代碼與用戶(hù)所需的程序結(jié)構(gòu)相似,將其返回給用戶(hù)。

        2.2.2 利用控制流圖的搜索方法

        隨后又有研究人員提出利用控制流圖輔助搜索。在結(jié)構(gòu)化程序設(shè)計(jì)方法中,程序是一系列過(guò)程的集合,而控制流圖是表示一個(gè)過(guò)程內(nèi)所有基本快執(zhí)行的可能流向和每個(gè)基本塊所對(duì)應(yīng)的語(yǔ)句表,能反映一個(gè)過(guò)程的實(shí)時(shí)執(zhí)行過(guò)程。因此,利用控制流圖來(lái)輔助搜索可以幫助提高精確度。

        在該搜索方法中,每個(gè)源代碼由一個(gè)控制流圖來(lái)表達(dá),每一個(gè)節(jié)點(diǎn)表示一個(gè)基本塊。利用從用戶(hù)輸入得到的信息,系統(tǒng)生成一個(gè)控制流圖,如果兩個(gè)控制流圖是同構(gòu)的,則可以認(rèn)為該控制流圖對(duì)應(yīng)的代碼即為用戶(hù)要搜索的結(jié)果[8]。例如圖3(a)中的代碼可以生成圖 3(b)所示的控制流圖。

        圖3 源代碼和對(duì)應(yīng)的控制流圖

        但是在利用控制流圖的搜索方法中,用戶(hù)需要輸入一個(gè)控制流圖,這無(wú)疑加重了用戶(hù)的使用負(fù)擔(dān),如何根據(jù)用戶(hù)簡(jiǎn)單的輸入自動(dòng)生成控制流圖值得研究。

        2.2.3 利用程序語(yǔ)法樹(shù)的搜索方法

        在2.2.1中,利用程序結(jié)構(gòu)進(jìn)行代碼搜索,然而Sourcerer[9]等搜索引擎比較簡(jiǎn)單粗糙地利用程序結(jié)構(gòu)信息(比如 if語(yǔ)句的個(gè)數(shù)、for循環(huán)結(jié)構(gòu)的個(gè)數(shù)等)能使搜索結(jié)果精確一些,但是并沒(méi)有深入全面地利用語(yǔ)法信息來(lái)輔助代碼搜索,而本文可以利用程序語(yǔ)法樹(shù)來(lái)輔助代碼搜索。

        語(yǔ)法樹(shù)是程序代碼的樹(shù)狀表示,它是形式化、規(guī)范化的程序語(yǔ)義表示,是程序設(shè)計(jì)者思想的形式化表示。語(yǔ)法樹(shù)是程序的編譯或者解釋過(guò)程中的一個(gè)中間數(shù)據(jù)結(jié)構(gòu),處于源代碼和中間語(yǔ)言代碼之間。源代碼太具體,中間語(yǔ)言代碼又過(guò)于抽象,而語(yǔ)法樹(shù)介于兩者之間,能夠形象地抽象出程序的結(jié)構(gòu)信息,為代碼的搜索提供更加準(zhǔn)確、全面的信息。例如如下代碼:

        這段代碼的語(yǔ)法樹(shù)如圖4所示。

        圖4 代碼的語(yǔ)法樹(shù)

        黃麗韶等人[10]在 Sourcerer的經(jīng)驗(yàn)上進(jìn)行了基于程序語(yǔ)法樹(shù)的源代碼搜索的研究,從語(yǔ)法結(jié)構(gòu)角度提出一種源代碼的搜索方法,構(gòu)造基于語(yǔ)法結(jié)構(gòu)的代碼過(guò)濾器,通過(guò)遍歷抽象語(yǔ)法樹(shù)來(lái)抽取源代碼的信息建立索引。

        2.3 基于語(yǔ)義的源代碼搜索技術(shù)

        2.3.1利用功能需求的源代碼搜索方法

        1998年夏威夷大學(xué)的 Woods等人提出了基于需求的代碼搜索方法,通過(guò)建立代碼的抽象數(shù)據(jù)描述來(lái)建立索引,之后通過(guò)一種需求描述(Plan)語(yǔ)言來(lái)描述軟件的功能需求。通過(guò)需求描述語(yǔ)言對(duì)功能需求的詳細(xì)描述,可以全面地得到各個(gè)功能的具體實(shí)現(xiàn)方式,代碼搜索引擎將該需求描述和代碼庫(kù)中的抽象數(shù)據(jù)描述進(jìn)行匹配,得到匹配后的代碼,通過(guò)一定的排序和過(guò)濾方式,實(shí)現(xiàn)了基于需求的搜索方法。該方法搜索的輸入比較繁雜,需要用戶(hù)給出各個(gè)過(guò)程的實(shí)現(xiàn)方法,使用起來(lái)會(huì)比較復(fù)雜。

        2.3.2 基于測(cè)試的源代碼搜索方法

        基于測(cè)試的源代碼搜索(TDCS)[11]是以測(cè)試用例作為用戶(hù)搜索的輸入來(lái)進(jìn)行搜索的一種源代碼搜索方法。由于測(cè)試用例可以用來(lái)描述系統(tǒng)中缺失的特征,因此測(cè)試用例對(duì)于代碼搜索來(lái)說(shuō)能夠提供更多的語(yǔ)義信息,也會(huì)讓代碼搜索結(jié)果更加準(zhǔn)確。

        TDCS確保測(cè)試用例描述了要被搜索的代碼的特征。在TDCS中,測(cè)試用例被設(shè)計(jì)用來(lái)描述系統(tǒng)中缺失的特征。開(kāi)發(fā)人員通過(guò)測(cè)試用例來(lái)搜索結(jié)果,該方法會(huì)根據(jù)測(cè)試用例來(lái)構(gòu)造出用戶(hù)的查詢(xún)輸入,根據(jù)該查詢(xún)輸入在開(kāi)源庫(kù)中進(jìn)行搜索,然后,將搜索得到的結(jié)果編織進(jìn)自己的代碼中。

        2.3.3 基于輸入輸出的源代碼搜索方法

        KATHRYN S[12]提出了一種新的代碼搜索方法,基于輸入輸出來(lái)進(jìn)行源代碼搜索。利用該方法,程序設(shè)計(jì)者只需編寫(xiě)輕量級(jí)的需求描述來(lái)定義輸入和期望的輸出。與現(xiàn)有的搜索不同的是,該方法利用 SMT(Satisfiability Modulo Theories)求解,對(duì)設(shè)計(jì)者提供的描述采用符號(hào)分析,自動(dòng)轉(zhuǎn)換為匹配的約束,從而在代碼倉(cāng)庫(kù)中識(shí)別程序或程序片段。

        整套方法的核心在于:對(duì)代碼倉(cāng)庫(kù)在獨(dú)立于用戶(hù)查詢(xún)的情況下進(jìn)行了離線的信息索引,索引使用獨(dú)特的符號(hào)分析,將程序的語(yǔ)義和描述其行為的約束進(jìn)行映射。

        2.4 其他源代碼搜索方法

        2.4.1 利用程序員行為輔助搜索

        程序員始終是軟件開(kāi)發(fā)活動(dòng)的主體,無(wú)論哪種源代碼搜索方法,都離不開(kāi)程序員,對(duì)程序員習(xí)慣進(jìn)行調(diào)查有助于改進(jìn)搜索方法和搜索體驗(yàn)。通過(guò)研究程序員習(xí)慣,然后填補(bǔ)程序員搜索活動(dòng)細(xì)節(jié),能夠輔助源代碼搜索技術(shù),幫助解決程序員搜索代碼面臨的困難。

        例如在沈玲等人[13]對(duì)于程序員搜索習(xí)慣的研究中發(fā)現(xiàn),程序員一般搜索范圍都很廣,產(chǎn)生很多不相關(guān)的結(jié)果?;谒麄兊挠^察,如果能在返回結(jié)果中包含上下文的信息將是非常有價(jià)值的。因此,在代碼搜索時(shí),如果能在搜索結(jié)果中提供上下文的信息,這將能讓程序員更快地做出是否相關(guān)的判斷。

        2.4.2 基于語(yǔ)法結(jié)構(gòu)和輸入輸出的搜索方法

        要提高代碼搜索的精度,不僅要從代碼的表層字符串含義入手,還要挖掘代碼的功能結(jié)構(gòu)和語(yǔ)義信息,這也是當(dāng)前代碼搜索的難點(diǎn)。通過(guò)分析語(yǔ)法樹(shù)和代碼的輸入輸出可以得到非常豐富的信息,進(jìn)而提高代碼搜索的精度。由此產(chǎn)生了結(jié)合語(yǔ)法結(jié)構(gòu)和輸入輸出的搜索方法。

        該方法通過(guò)分析語(yǔ)法樹(shù)得到代碼的邏輯結(jié)構(gòu)特征,通過(guò)分析源代碼的輸入和輸出信息得到程序的語(yǔ)義功能。將語(yǔ)法與語(yǔ)義信息結(jié)合起來(lái),可以提高搜索的精度。該方法結(jié)合了語(yǔ)法語(yǔ)義信息,為代碼搜索方法提供了新的思路。

        3 結(jié)論

        開(kāi)源軟件正在席卷全球,根據(jù)Black Duck公司提供的數(shù)據(jù),在過(guò)去的一年中,他們統(tǒng)計(jì)了5000個(gè)有開(kāi)源項(xiàng)目的網(wǎng)址,包括了1000億源代碼行,發(fā)現(xiàn)開(kāi)源項(xiàng)目的數(shù)目已經(jīng)翻了一番。

        傳統(tǒng)的基于關(guān)鍵字的源代碼搜索方法已經(jīng)不能滿足人們的需求,由此產(chǎn)生了各種其他的代碼搜索方法,希望更快更好地幫助用戶(hù)找到高質(zhì)量代碼。然而目前的源代碼搜索引擎大都是基于文本的搜索,沒(méi)有利用代碼在語(yǔ)法、語(yǔ)義等上的特性,在搜索準(zhǔn)確性方面受到極大的限制。針對(duì)這些現(xiàn)有流行的源代碼搜索引擎存在的問(wèn)題已經(jīng)有越來(lái)越多的學(xué)者投入了該領(lǐng)域的研究。未來(lái)筆者也會(huì)繼續(xù)深入研究開(kāi)源的相關(guān)技術(shù)。

        [1]徐哲,蔡建平.基于開(kāi)源軟件的軟件工程實(shí)施系統(tǒng)研究[J].微計(jì)算機(jī)信息,2009,25(9):178-180.

        [2]HOFFLNANN R,F(xiàn)OGARTY J,WELD D S.Assieme:finding and leveraging implicit references in a web search interface for programmars In proceedings of the 20th annual AC symposium on User interface software and technology[C].Newport,Rhode Island,USA,2007:13-22.

        [3]熊瑞萍,萬(wàn)江平.開(kāi)源軟件的突圍之路——關(guān)于開(kāi)源運(yùn)動(dòng)的若干思考[J].科技管理研究,2009(3):252-255.

        [4]謝世誠(chéng).“開(kāi)源十杰”Michael Tiemann來(lái)華開(kāi)博客[J].微型機(jī)與應(yīng)用,2007,26(11):22.

        [5]劉紅泉,張亮峰.布爾邏輯檢索模型的分析探討[J].現(xiàn)代情報(bào),2004(9):4-6.

        [6]ISHIHARA T,HOTTA K,HIGO Y,et al.Reusing reused code[J].WCRE 2013,Koblenz,Germany:ERA-Track,457-461.

        [7]陸晨.一種基于 Web資源的代碼范例搜索工具[J].科技資訊,2011(33):23-25.

        [8]BAJRACHARYA S,NGO T,LINSTEAD E,et al.Sourcerer:a search engine for open source code supporting structure-based search[C].Proceedings of International Conference on Object-Oriented Programming,2006:25-26.

        [9]陳新.基于程序控制流圖源代碼相似程度分析系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(3):144-147.

        [10]黃麗韶.基于語(yǔ)法結(jié)構(gòu)的源代碼搜索的研究[J].電腦與電信,2013(5):30-33,39.

        [11]LAZZARINI LEMOS O A,CARVALHO de P A,KONISHI G.Using thesaurus-based tag clouds to improve test-driven code search[J].VII Brazilian Symposium on Software Components,2013,46(1):99-108.

        [12]STOLEE K T,ELBAUM S,DOBOS D.Solving the search for source code[J].ACM Transactions on Software Engineering and Methodology,2014,23(3):1-45.

        [13]沈玲,黃熹,李艷陽(yáng).程序員搜索習(xí)慣的研究及對(duì)搜索工具開(kāi)發(fā)的啟示[J].中國(guó)高新技術(shù)企業(yè),2012(27):27-30.

        The role of open source for software engineering and the analysis of the key search technology

        Zhang Kang1,Zeng Guosun2
        (1.Department of Computer Science and Technology,Tongji University,Shanghai 201804,China;2.Tongji Branch,National Engineering&Technology Center of High Performance Computer,Shanghai 201804,China)

        With the rapid development of network technology,open source software is developing rapidly.Open source software has now become the main trend of software development.The success of open source software has played a huge role in the software industry.Meanwhile,with the current sharp increasing in the number of open source software,finding the code you need has become a key issue.Existing code search engines mostly use text-based search technology.However,these search engines don′t take advantage of syntax,semantics.Therefore,the Search results are inaccurate.So,some scholars have proposed to use of the code syntax,semantics and other information to help code search.This article do a more comprehensive description of the role of open source from the many aspects,and make a review of the key open source search technology.

        open source;reuse;search;key words;grammar;semantics

        TP311

        A

        1674-7720(2015)24-0008-05

        張康,曾國(guó)蓀.開(kāi)源對(duì)軟件工程的作用及關(guān)鍵搜索技術(shù)分析[J].微型機(jī)與應(yīng)用,2015,34(24):8-12.

        2015-08-24)

        張康(1991-),通信作者,男,碩士研究生,主要研究方向:程序設(shè)計(jì)方法、并行計(jì)算。E-mail:zkdnfcf@163.com。

        863項(xiàng)目(2009AA012201);國(guó)家自然基金項(xiàng)目(61272107,61202173,61103068);上海市優(yōu)秀學(xué)科帶頭人計(jì)劃項(xiàng)目(10XD1404400);華為創(chuàng)新研究計(jì)劃項(xiàng)目(IRP-2013-12-03);高效能服務(wù)器和存儲(chǔ)技術(shù)國(guó)家重點(diǎn)實(shí)驗(yàn)室開(kāi)放基金項(xiàng)目(2014HSSA10)

        曾國(guó)蓀(1964-),男,博士,博士生導(dǎo)師,教授,主要研究方向:并行計(jì)算,軟件與信息服務(wù)。

        猜你喜歡
        控制流源代碼程序員
        人工智能下復(fù)雜軟件源代碼缺陷精準(zhǔn)校正
        為了讓媽媽看懂地圖,一位“野生程序員”做了個(gè)小程序
        抵御控制流分析的Python 程序混淆算法
        基于TXL的源代碼插樁技術(shù)研究
        工控系統(tǒng)中PLC安全漏洞及控制流完整性研究
        電子科技(2021年2期)2021-01-08 02:25:58
        抵御控制流分析的程序混淆算法
        怎樣成為一名優(yōu)秀程序員
        幼兒100(2020年29期)2020-10-21 06:17:58
        軟件源代碼非公知性司法鑒定方法探析
        程序員之子
        意林(2017年24期)2018-01-02 22:49:14
        加班
        三月三(2016年6期)2016-06-21 10:25:33
        亚洲高潮喷水中文字幕| 在办公室被c到呻吟的动态图 | 亚洲国产精品久久久久久网站| 国产精品国产三级国产一地| 亚洲精品一区二区高清| …日韩人妻无码精品一专区| 中国精学生妹品射精久久| 亚洲精品99久久久久久| 亚洲中文字幕一区精品| 亚洲av成人片无码网站| 又黄又爽的成人免费视频| 亚洲欧美v国产蜜芽tv| 少妇被爽到高潮喷水免费福利| 国产a国产片国产| 99久久婷婷国产综合亚洲91| 精品中文字幕手机在线| 岛国熟女精品一区二区三区| 成人欧美一区二区三区1314| 综合无码一区二区三区四区五区 | 五月丁香综合激情六月久久| 乱子真实露脸刺激对白| 在线观看免费人成视频国产| 婷婷色国产精品视频二区| 久精品国产欧美亚洲色aⅴ大片| 亚洲色成人网一二三区| 成人亚洲av网站在线看| 久久婷婷五月综合色丁香| 婷婷成人基地| 国产av一区二区凹凸精品| 亚洲国产精品久久又爽av| 国产绳艺sm调教室论坛| 亚洲av不卡电影在线网址最新 | 欧美颜射内射中出口爆在线 | 蜜桃在线观看免费高清| 亚洲综合av一区二区三区蜜桃| 精品国产人成亚洲区| 久久天堂av色综合| 麻豆精品在线视频观看| 国产边摸边吃奶叫床视频| 九九在线视频| 少妇人妻一区二区三飞|