版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 畢業(yè)設(shè)計(jì)(論文)</b></p><p> 題 目 基于R語言的測(cè)試 </p><p> 用例聚類選擇程序開發(fā) </p><p> 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p> 班 級(jí) 計(jì)
2、121 </p><p> 學(xué) 生 李鵬宇 </p><p> 指導(dǎo)教師 黑新宏(教授) </p><p> 2016 年</p><p><b> 摘 要</b></p><
3、p> 隨著互聯(lián)網(wǎng)的發(fā)展,軟件質(zhì)量逐步被視為企業(yè)生命,很多企業(yè)都將業(yè)務(wù)建立在軟件系統(tǒng)上,軟件與業(yè)務(wù)密切結(jié)合,高質(zhì)量的軟件系統(tǒng)有助于企業(yè)增強(qiáng)自身實(shí)力,在市場(chǎng)競(jìng)爭(zhēng)中贏得優(yōu)勢(shì),而軟件測(cè)試是確保軟件質(zhì)量的重要手段。并且最近幾年來,由于軟件的復(fù)雜度不斷地增強(qiáng),更由于軟件的工業(yè)化發(fā)展趨勢(shì),軟件測(cè)試得到了廣泛的重視。越來越多的公司開始加大軟件測(cè)試的比例,甚至有的公司軟件測(cè)試占的比重比軟件開發(fā)占的比重還要高。</p><p&g
4、t; 而設(shè)計(jì)測(cè)試用例是軟件測(cè)試中比較高效的一種方法,但隨著軟件規(guī)模越來越大、版本迭代越來越快,每迭代一次版本,測(cè)試用例都要新添一部分。測(cè)試用例的數(shù)量也是迅速的增多,很有可能造成測(cè)試用例的冗余,相應(yīng)的測(cè)試所需要的資源也被大大的浪費(fèi)了。這個(gè)時(shí)候測(cè)試用例的約簡(jiǎn)就顯得尤為重要,而如果不加以分析,又不能判斷哪些測(cè)試用例是過時(shí)的,哪些測(cè)試用例還可以正常找出程序錯(cuò)誤。所以要找一個(gè)好的可以分析測(cè)試用例的程序是非常重要的。</p><
5、;p> 基于R語言的測(cè)試用例聚類選擇程序開發(fā)就是一個(gè)很好的幫助,其中聚類過程是無監(jiān)督的,它可自動(dòng)的進(jìn)行分析那些測(cè)試用例功能是相似的,那些測(cè)試用例功能不同。其中聚類過程用R語言實(shí)現(xiàn),聚類方法采用K中心點(diǎn)聚類的思想。之所以采用R語言,是因?yàn)镽語言有很強(qiáng)大的數(shù)據(jù)分析能力,不止是聚類,可以為后續(xù)機(jī)器學(xué)習(xí)做出很大的幫助。</p><p> 關(guān)鍵詞:R語言實(shí)現(xiàn),測(cè)試用例約簡(jiǎn),聚類分析</p><
6、p><b> ABSTRACT</b></p><p> With the development of the internet, the quality of software gradually regarded as the life of the enterprise, many companies will business established in the sof
7、tware systems, software and service integrated closely, high-quality software systems help enterprises to enhance their own strength, have the advantage in the market competition, software testing is an important means
8、to ensure software quality. And in recent years, due to the complexity of the software is constantly improved, but al</p><p> Designing test cases is a more efficient method in software testing, but with th
9、e increasing scale of software, faster version of the iteration, for each iteration version, test cases have to add some new part. The number of test cases is increasing rapidly, is likely to cause the redundancy in test
10、 cases, the appropriate resources for testing has also been greatly wasted. At this time, the reduction of test cases is particularly important, if not analyze, and can not determine which test is out</p><p>
11、; Test case clustering selection program development based on R language is a good help, which clustering is unsupervised, it can automatically analyze test those features are similar to those different test functions.
12、Wherein the clustering process using R language, thought K clustering method using clustering center. The reason for using the R language, because language R very powerful data analysis capabilities, not just clustering,
13、 can make a great help for the subsequent machine learning.</p><p> KEY WORDS: R language, the test case reduction, cluster analysis</p><p><b> 前 言</b></p><p> 隨著軟件規(guī)
14、模的不斷增大和軟件復(fù)雜性的日益提高,市場(chǎng)對(duì)軟件的質(zhì)量的要求也不斷提高,如何保證軟件的質(zhì)量已成為軟件開發(fā)過程中越來越重要的問題。軟件測(cè)試時(shí)保證軟件質(zhì)量的重要手段,軟件測(cè)試直接決定軟件產(chǎn)品的質(zhì)量。</p><p> 軟件測(cè)試中測(cè)試用例的設(shè)計(jì)是一個(gè)非常高效的方法,可是隨著軟件越來越復(fù)雜,需要的測(cè)試用例數(shù)量也越來越多,這個(gè)時(shí)候測(cè)試用例的冗余也就慢慢的顯現(xiàn),急需一種可以很好的解決測(cè)試用例的冗余的方法又不減少測(cè)試用例的檢錯(cuò)
15、能力,本畢設(shè)就針對(duì)這個(gè)問題提出解決方案。</p><p> 本畢設(shè)是基于R語言的測(cè)試用例聚類選擇程序的開發(fā),主要用到R語言的聚類分析,其中R是一門非常強(qiáng)大的數(shù)據(jù)分析的語言,它可以很好的進(jìn)行聚類分析,通過R語言的聚類分析,可以清晰的看到每個(gè)測(cè)試用例所屬的分類,并進(jìn)行后續(xù)的分析。在分析過程中涉及到的數(shù)據(jù)的問題都是有文件讀取,聚類的結(jié)果也是存放入文件。</p><p> 本論文比較詳細(xì)的寫了
16、從R語言的聚類過程,全論文總共分為5章。第1章介紹了此課題背景與意義還有一些國(guó)內(nèi)外的研究概況,本課題主要研究的內(nèi)容、研究過程中主要的創(chuàng)新點(diǎn)等等。第2章寫的是做此課題的需求分析,主要從系統(tǒng)的需求分析和性能的需求分析兩個(gè)方面展開所寫。深入研究需求,從而確定此需求是真正存在的。第3章寫的是實(shí)現(xiàn)本課題的程序所需要的環(huán)境的搭建以及一些實(shí)現(xiàn)本課題所需要的技術(shù)的積累,有一些R語言的簡(jiǎn)介、聚類分析的名詞解釋等等。第4章是本課題的核心部分,詳細(xì)寫了系統(tǒng)總
17、體的設(shè)計(jì),還包括一些子功能模塊的概要設(shè)計(jì)與實(shí)現(xiàn),包括了前臺(tái)客戶端的實(shí)現(xiàn),還有后端服務(wù)器的實(shí)現(xiàn)。第5章為一些總結(jié)和展望,有一部分我的小結(jié),主要反映我再做此課題所遇到的問題并如何解決的,還有就是做此課題的收獲等等。</p><p> 當(dāng)然真理是相對(duì)的,實(shí)踐是多元的,讀者就是最好的老師,盡管我在寫本論文是算是非常的認(rèn)真對(duì)待,但是由于時(shí)間的倉促,本論文中還是有可能出現(xiàn)錯(cuò)誤之處,希望廣大的讀者批評(píng)改正。</p>
18、;<p><b> 目錄</b></p><p><b> 概述</b></p><p><b> 課題背景與意義</b></p><p> 隨著互聯(lián)網(wǎng)的發(fā)展,軟件應(yīng)用也越來越重要,軟件的質(zhì)量也受到了軟件開發(fā)人員與用戶的重視。而軟件的質(zhì)量就是軟件的生命,它可以直接影響到軟件的使用
19、和維護(hù)。在軟件開發(fā)的過程中,軟件測(cè)試時(shí)保證軟件質(zhì)量的不可缺少的一個(gè)環(huán)節(jié),它能盡可能多的發(fā)現(xiàn)軟件中存在的問題,并且期望通過改錯(cuò)來消除缺陷,最終來提高軟件的質(zhì)量,而軟件測(cè)試所需要的資源又是很大的,所以大部分的企業(yè)都有專門的軟件測(cè)試部門,其根據(jù)固定的步驟測(cè)試軟件從而發(fā)現(xiàn)軟件中的錯(cuò)誤,并把這些錯(cuò)誤反饋給開發(fā)人員進(jìn)行修改,來減少軟件的錯(cuò)誤。而隨著軟件的規(guī)模越來越大,測(cè)試用例的設(shè)計(jì)、執(zhí)行、管理與維護(hù)所要消耗大量的人力、物力,測(cè)試的成本太大,并且測(cè)試
20、資源又是有限的,所以測(cè)試用例的約簡(jiǎn)是非常重要也是必要的。</p><p> 而軟件技術(shù)的不斷發(fā)展與完善,傳統(tǒng)的測(cè)試用例約簡(jiǎn)算法也將面臨新的挑戰(zhàn),既要能夠約簡(jiǎn)測(cè)試用例集,又要能都讓其擁有足夠的檢錯(cuò)能力。進(jìn)行多方面的比較,希望能夠找到一個(gè)合適的平衡點(diǎn)來彌補(bǔ)以前技術(shù)的缺陷。</p><p> 而基于聚類算法的測(cè)試用例的選擇的基本思想是:屬于同一類的測(cè)試用例具有相似的行為,而不同類的測(cè)試用例的
21、行為差異較大。因此,某個(gè)測(cè)試用例可以檢測(cè)某一個(gè)故障,那么屬于同一類的其它的測(cè)試用例也同樣可以檢測(cè)到這一故障。采用基于測(cè)試用例的覆蓋度的測(cè)試用例聚類算法可以有效的對(duì)測(cè)試用例約簡(jiǎn),開始將測(cè)試用例分為不同的分類,然后再分類中抽樣一部分測(cè)試用例,如果這部分測(cè)試用例可以定位缺陷,那就認(rèn)為本類中測(cè)試用例大部分可以檢測(cè)錯(cuò)誤,保留本類中所有的測(cè)試用例。如果本類中大部分測(cè)試用例都不能檢測(cè)錯(cuò)誤,則認(rèn)為本類不具備檢測(cè)錯(cuò)誤的能力,可刪除本類所有測(cè)試用例。<
22、;/p><p> 而數(shù)據(jù)挖掘是處理大數(shù)據(jù)的有效途徑,在軟件測(cè)試?yán)飻?shù)據(jù)挖掘也具有廣闊的應(yīng)用前景,對(duì)于數(shù)據(jù)挖掘的算法的研究也是尤為重要,因?yàn)閿?shù)據(jù)挖掘?qū)ο笫呛A康臄?shù)據(jù),一個(gè)好的算法可以大大的提高計(jì)算的速度,減少計(jì)算機(jī)資源的耗用。數(shù)據(jù)挖掘算法也是一個(gè)非?;钴S的領(lǐng)域,不斷的有新的算法提出。而分類、聚類算法的研究又是數(shù)據(jù)挖掘算法活躍的領(lǐng)域,所以對(duì)分類、聚類的研究也是非常的重要。所以本次畢設(shè)著重算法的研究,應(yīng)用R語言實(shí)現(xiàn)一些聚類
23、算法。</p><p><b> 國(guó)內(nèi)外研究概況 </b></p><p> 目前,國(guó)內(nèi)外的研究人員也提出了許多測(cè)試用例選擇技術(shù)來約簡(jiǎn)測(cè)試用例集,在約簡(jiǎn)測(cè)試用例選擇的領(lǐng)域中也各自都有了突破,也出現(xiàn)了許多成熟并且實(shí)用的技術(shù),這些技術(shù)的目的就是減少測(cè)試用例的數(shù)量,以期望獲得一個(gè)較小的測(cè)試用例集。但是這也不是特別的完美,也有可能刪除了一些真正可以檢測(cè)錯(cuò)誤的測(cè)試用例,而保
24、留了一下不能檢測(cè)錯(cuò)誤的測(cè)試用例,因此,我們要在執(zhí)行測(cè)試用例所需要的資源與測(cè)試用例自己的錯(cuò)誤檢測(cè)能力兩方面做出權(quán)衡,這才是現(xiàn)在所有測(cè)試用例選擇技術(shù)的核心問題。</p><p> 而現(xiàn)在大多數(shù)技術(shù)都沒有很好的權(quán)衡這兩個(gè)方面,有些技術(shù)只關(guān)注測(cè)試用例數(shù)量的減少,初始的測(cè)試用例會(huì)根據(jù)特定的測(cè)試需求來進(jìn)行約簡(jiǎn),使得結(jié)果子集達(dá)到一定的覆蓋度即可。然而一些研究表明,單單的滿足覆蓋度標(biāo)準(zhǔn)的測(cè)試用例雖然能夠顯著的降低測(cè)試的成本,但
25、也會(huì)嚴(yán)重喪失錯(cuò)誤檢測(cè)能力,因此,這種方案在一定程度上不可取。而另一方面,很多的技術(shù)都關(guān)注測(cè)試用例子集的檢錯(cuò)能力,爭(zhēng)取結(jié)果子集與初始測(cè)試用例的檢錯(cuò)能力相同或近似。但這一類技術(shù)過于保守,在回歸測(cè)試過程中,一個(gè)測(cè)試用例可以發(fā)現(xiàn)錯(cuò)誤,那么它必然經(jīng)過程序的修改部分,反之亦然,所以這一類技術(shù)會(huì)不恰當(dāng)?shù)倪x擇一些經(jīng)過程序修改但是結(jié)果正確的測(cè)試用例,這就導(dǎo)致所選擇的測(cè)試用例子集仍然過大,但真正能夠檢測(cè)錯(cuò)誤的測(cè)試用例在其中所占的比例很小,還是要消耗過多的測(cè)
26、試資源,還需要進(jìn)一步的約簡(jiǎn)測(cè)試用例集。</p><p> 所以,自然需要找到一個(gè)平衡點(diǎn),既能夠讓測(cè)試用例子集變小,又要使其能擁有足夠的錯(cuò)誤檢測(cè)能力,為此,希望找到一種算法,既能減少測(cè)試用例的數(shù)量,又要保證足夠的錯(cuò)誤檢測(cè)能力。本文采用數(shù)據(jù)挖掘的聚類的思想,希望在已有的技術(shù)上進(jìn)一步提高測(cè)試的效率。</p><p> 1.3 課題研究?jī)?nèi)容</p><p> 1.3.
27、1 主要內(nèi)容</p><p> (1)根據(jù)原始的測(cè)試用例,分析多種測(cè)試用例的特征,從中選取合適的測(cè)試用例對(duì)數(shù)據(jù)進(jìn)行提取,清洗并標(biāo)準(zhǔn)化。</p><p> (2)利用整理后的測(cè)試用例集,通過SOAP接口,調(diào)用測(cè)試用例的函數(shù)執(zhí)行剖面,并且量化函數(shù)執(zhí)行剖面,選擇R語言進(jìn)行聚類,了解它們執(zhí)行情況的異同。</p><p> ?。?)實(shí)現(xiàn)一個(gè)半自動(dòng)的演示工具,用于可視化展示
28、聚類選擇技術(shù)的思想和具體步驟。</p><p> (4)觀察聚類選擇技術(shù)的結(jié)果,利用實(shí)驗(yàn)驗(yàn)證其有效性,得出結(jié)論:基于R語言的聚類分析思想確實(shí)能夠達(dá)到較為理想的效果。</p><p> 1.3.2 主要?jiǎng)?chuàng)新點(diǎn)</p><p> ?。?)采用數(shù)據(jù)挖掘的思想,將數(shù)據(jù)挖掘技術(shù)用到本次畢設(shè)中。</p><p> ?。?)通過聚類分析技術(shù)的引入,對(duì)原
29、有的測(cè)試用例集進(jìn)行了有效的約簡(jiǎn)。</p><p> (3)對(duì)給定的測(cè)試木匾實(shí)現(xiàn)交大的覆蓋,并能達(dá)到提高錯(cuò)誤檢測(cè)能力的效果。</p><p> ?。?)嘗試采用R語言進(jìn)行聚類分析,也方便聚類的實(shí)施。</p><p><b> 1.4 論文組織</b></p><p> 本論文主要介紹了基于R語言的測(cè)試用例聚類選擇程序
30、的開發(fā),詳細(xì)描述了從測(cè)試用例的獲取到最終的聚類、分析,及之中所貫穿的一些技術(shù)實(shí)現(xiàn)的細(xì)節(jié)。</p><p> 前言:簡(jiǎn)要介紹了本課題的背景與意義,通過查看國(guó)內(nèi)外現(xiàn)狀來思考現(xiàn)有方法的缺點(diǎn)與不足,延伸出本課題,在運(yùn)用所學(xué)知識(shí)去實(shí)現(xiàn)問題。</p><p> 需求分析:通過系統(tǒng)的需求分析和性能的需求分析對(duì)本課題有個(gè)更深入的了解,判斷本課題意義,從而可以更好的實(shí)現(xiàn)所需要的功能。</p>
31、<p> 環(huán)境搭建與技術(shù)簡(jiǎn)介:簡(jiǎn)單介紹做此課題所需要的技術(shù)與名詞,并且了解實(shí)現(xiàn)此技術(shù)所需要的開發(fā)工具和所需要配置的開發(fā)環(huán)境。</p><p> 系統(tǒng)設(shè)計(jì)與功能實(shí)現(xiàn):詳細(xì)解釋本課題實(shí)現(xiàn)的細(xì)節(jié),對(duì)功能進(jìn)行分析,并對(duì)比系統(tǒng)總體流程,達(dá)到滿意的效果。</p><p> 總結(jié)與展望:總結(jié)一下實(shí)現(xiàn)本課題所做的內(nèi)容,進(jìn)一步完善不足的地方并加以修飾,在展望有沒有可能再在現(xiàn)有基礎(chǔ)上進(jìn)行拓
32、展,爭(zhēng)取做得更好。</p><p><b> 第2章 需求分析</b></p><p> 2.1 系統(tǒng)需求分析</p><p> 隨著軟件行業(yè)的成熟,軟件測(cè)試也在不斷的發(fā)展,軟件測(cè)試的工作也由簡(jiǎn)單的測(cè)試發(fā)展成正規(guī)的規(guī)范化測(cè)試。測(cè)試的工具也由原來的純手工慢慢演變成現(xiàn)在半手工、自動(dòng)化工具,也慢慢的演變出第三方的專業(yè)測(cè)試機(jī)構(gòu)。已經(jīng)有統(tǒng)計(jì)資料表明
33、,測(cè)試的工作量已經(jīng)占到整個(gè)項(xiàng)目開發(fā)工作量的40%左右。并且對(duì)于一些人身安全的軟件(如地鐵的自動(dòng)控制駕駛系統(tǒng)),測(cè)試的工作量更是大大的增加。</p><p> 而軟件測(cè)試的一個(gè)重要的環(huán)節(jié)就是設(shè)計(jì)測(cè)試用例,然而隨著軟件的越來越大,測(cè)試用例的數(shù)量也越來越多,為了完成所有的測(cè)試用例,所需要的資源也越來越多,這個(gè)時(shí)候就需要約簡(jiǎn)測(cè)試用例,盡量減少那些不能檢測(cè)出錯(cuò)誤的測(cè)試用例,提高測(cè)試用例的效率,降低測(cè)試的成本。而本課題利用
34、聚類的思想,對(duì)測(cè)試用例進(jìn)行聚類,挑選符合條件的測(cè)試用例,從而約簡(jiǎn)測(cè)試用例。</p><p> 2.2 性能需求分析</p><p> 隨著軟件的日益增大,測(cè)試用例的數(shù)目也是越來越多,對(duì)聚類算法的性能也提出了一大挑戰(zhàn),本次聚類采用K-中心點(diǎn)聚類方法,屬于數(shù)據(jù)挖掘的經(jīng)典算法之一。其基本過程為:</p><p> ?。?)隨機(jī)的選擇K個(gè)代表對(duì)象作為初始的K個(gè)中心點(diǎn),&
35、lt;/p><p> ?。?)指派剩余的每個(gè)對(duì)象給離它最近的中心點(diǎn)所代表的類,</p><p> (3)然后隨機(jī)的選擇一個(gè)非中心點(diǎn)對(duì)象y,</p><p> ?。?)計(jì)算用非中心點(diǎn)y代替中心點(diǎn)x的總代價(jià)s,</p><p> (5)若代價(jià)s為負(fù),則用點(diǎn)y代替中心點(diǎn)x,形成新的中心點(diǎn),</p><p> (6)重復(fù)步驟
36、(2)(3)(4)(5),直到K個(gè)中心點(diǎn)不再發(fā)生變化。</p><p> 其優(yōu)點(diǎn)為:它減輕了K均值算法對(duì)孤立點(diǎn)的敏感性,K中心點(diǎn)算法不采用類中對(duì)象平均值作為類中心,而選用離類平均值最近的對(duì)象作為類的中心。</p><p> 第3章 環(huán)境搭建與技術(shù)簡(jiǎn)介</p><p><b> 3.1 技術(shù)簡(jiǎn)介</b></p><p&g
37、t; 3.1.1 測(cè)試用例</p><p> 軟件測(cè)試的重要性是毋庸置疑的,但是如何以最少的資源投入,用最短的時(shí)間出色地完成測(cè)試,盡可能多地發(fā)現(xiàn)軟件系統(tǒng)的缺陷,以提升軟件的質(zhì)量是一個(gè)恒久不變的課題。這個(gè)課題的本質(zhì)上就是如何為被測(cè)系統(tǒng)建議一套優(yōu)秀的測(cè)試方案。影響軟件測(cè)試的因素有很多,例如需求定義的精度、軟件本身的復(fù)雜度、系統(tǒng)設(shè)計(jì)的合理性以及開發(fā)人員的素質(zhì)等,這些是開發(fā)層面的,那么對(duì)于軟件測(cè)試自身來說不同的測(cè)試方
38、法和技術(shù)的運(yùn)用也會(huì)導(dǎo)致不一樣的測(cè)試效果。如何才能保障軟件測(cè)試質(zhì)量的穩(wěn)定呢?現(xiàn)階段一個(gè)有效的方法就是基于測(cè)試用例的測(cè)試。</p><p> 測(cè)試用例是測(cè)試人員編寫的重要文檔。測(cè)試用例是為某個(gè)特定的目標(biāo)而設(shè)計(jì)的一組測(cè)試輸入數(shù)據(jù)、執(zhí)行條件和預(yù)期輸出結(jié)果,以測(cè)試某個(gè)程序路徑或驗(yàn)證是否滿足某個(gè)特定需求。由于在實(shí)際測(cè)試時(shí)無法達(dá)到窮舉測(cè)試,所以要從軟件輸入域中選擇有代表性或特殊性的數(shù)據(jù)作為測(cè)試數(shù)據(jù),測(cè)試用例就是為了高效率地發(fā)
39、現(xiàn)軟件的缺陷而精心設(shè)計(jì)的少量的測(cè)試數(shù)據(jù),這些少量的有代表性或特殊性數(shù)據(jù)的選擇可根據(jù)白盒及黑盒測(cè)試技術(shù)的不同測(cè)試方法來確定。</p><p><b> 3.1.2 R語言</b></p><p> R是用于統(tǒng)計(jì)分析、繪圖的語言和操作環(huán)境,它是屬于GNU系統(tǒng)的一個(gè)自由、免費(fèi)、開源的軟件,是一個(gè)用于統(tǒng)計(jì)計(jì)算和統(tǒng)計(jì)制圖的優(yōu)秀工具。并且它有積極而活躍的維護(hù)和更新,對(duì)各類數(shù)據(jù)
40、和其它系統(tǒng)良好的兼容性,并且有能力解決多個(gè)領(lǐng)域的各種問題。</p><p> 免費(fèi)且開源:R遵守開源授權(quán),這意味著任何人都可以下載并修改源代碼,這可以確保許多優(yōu)秀的程序員對(duì)R代碼進(jìn)行改進(jìn)與提升,也正是這個(gè)原因,使得R既穩(wěn)定又可依賴。</p><p> 可在任何環(huán)境下運(yùn)行:在R核心開發(fā)團(tuán)隊(duì)的努力下,R可以運(yùn)行在各種不同的硬件和軟件環(huán)境下,比如Windows,UNIX(如Linux),以及
41、Mac等。</p><p> 支持拓展:R本身是一門強(qiáng)大的語言,提供了各種豐富的功能,如數(shù)據(jù)操作、統(tǒng)計(jì)建模以及圖標(biāo)呈現(xiàn)。而R的一個(gè)巨大優(yōu)勢(shì)在于其可拓展性。開發(fā)人員可以很方便地編寫自己的軟件,并以拓展包的形式分發(fā)。由于編寫這些擴(kuò)展包非常容易,因此已有的擴(kuò)展包極為豐富。事實(shí)上,許多最新的(或者比較新的)統(tǒng)計(jì)方法在發(fā)布的時(shí)候都附帶了R包。</p><p> 擁有一個(gè)活躍的社區(qū):R的用戶數(shù)量正
42、在持續(xù)的上漲,許多R的老用戶正致力于保住新人,使他們能夠在自己的工作領(lǐng)域和專業(yè)范圍內(nèi)使用R,他們還積極的為R的郵件列表(www.r-project.org/mail.html)編寫內(nèi)容,或者在諸如Stack Overflow(www.stackoverflow.com/questions/tagged/r)和CrossValidated(http://stats.stackexchange.com/qustions/tagged/r)這
43、樣的網(wǎng)站上回答網(wǎng)友提出的各種問題。除此之外,R用戶還會(huì)通過社交網(wǎng)站,如Twitter(www.twitter.com/search/rstats)以及本地的社交組織傳播自己的知識(shí)和技能。</p><p> 與其他語言的緊密相連:隨著越來越多的人轉(zhuǎn)向使用R進(jìn)行數(shù)據(jù)分析,他們開始嘗試將R融合到之前的工作流中,這就催生了一整套的拓展包,實(shí)現(xiàn)R與文件系統(tǒng)、數(shù)據(jù)庫和其他應(yīng)用程序之間的連接,這些拓展包中的一部分也隨之集成到
44、了R安裝程序中。</p><p> 3.1.3 聚類分析</p><p> 聚類分析是一種無監(jiān)督學(xué)習(xí)方法,目的是捕獲數(shù)據(jù)的自然結(jié)構(gòu),從而將數(shù)據(jù)自動(dòng)劃分為有意義的幾個(gè)群組、類別或者稱之為簇。這些簇的特點(diǎn)在于組內(nèi)的變異較小,而組間的變異較大。聚類方法可以用來探索數(shù)據(jù)的結(jié)構(gòu),還可以用來對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,為進(jìn)一步的數(shù)據(jù)挖掘工作起到壓縮和降維的作用。一般聚類分為層次聚類、動(dòng)態(tài)聚類、基于密度的聚類
45、和自組織映射。</p><p> 本系統(tǒng)采用動(dòng)態(tài)聚類法中的K中心點(diǎn)聚類,動(dòng)態(tài)聚類法亦稱逐步聚類法,屬于大樣本聚類法,具體做法是:先粗略地進(jìn)行預(yù)分類,然后再逐步調(diào)整,直到把類分的比較合理為止,具有計(jì)算量較小、占用計(jì)算機(jī)存貯單元少、方法簡(jiǎn)單等優(yōu)點(diǎn),所以更適合于大樣本的聚類分析。</p><p> 3.1.4 SOAP通信技術(shù)</p><p> SOAP又叫簡(jiǎn)單對(duì)象
46、訪問協(xié)議,它是交換數(shù)據(jù)的一種協(xié)議規(guī)范,是一種輕量級(jí)的、簡(jiǎn)單的、基于XML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)子集)的協(xié)議,它被設(shè)計(jì)在WEB上交換結(jié)構(gòu)化的和固化的信息。其優(yōu)點(diǎn)有:</p><p> 可拓展的。SOAP無需終端已有的應(yīng)用程序,SOAP客戶端、服務(wù)器和協(xié)議自身都能發(fā)展。而且SOAP能極好的支持中間介質(zhì)和層次化的體系結(jié)構(gòu)。</p><p> 簡(jiǎn)單的。客戶端發(fā)送一個(gè)請(qǐng)求,調(diào)用相應(yīng)的隊(duì)形,然
47、后服務(wù)器返回結(jié)果。這些消息是XML格式的,并且封裝成符合HTTP協(xié)議的消息,因此,它符合任何路由器、防火墻或 代理服務(wù)器的要求。</p><p> 完全和廠商無關(guān)。SOAP可以相對(duì)于平臺(tái)、操作系統(tǒng)、目標(biāo)模型和編程語言獨(dú)立實(shí)現(xiàn)。另外,傳輸和語言綁定以及數(shù)據(jù)編碼的參數(shù)選擇都是有具體的實(shí)現(xiàn)決定的。</p><p> 與編程語言無關(guān)。SOAP可以使用任何語言來完成,只要客戶端發(fā)送正確的SOAP
48、請(qǐng)求(也就是說,傳遞一個(gè)合適的參數(shù)給一個(gè)時(shí)間的遠(yuǎn)程服務(wù)器),SOAP沒有對(duì)象模型,應(yīng)用程序可以捆綁在任何對(duì)象模型中。</p><p> 與平臺(tái)無關(guān)。SOAP可以在任何操作系統(tǒng)中廣無需改動(dòng)正常運(yùn)行。</p><p> 3.2 開發(fā)環(huán)境搭建</p><p> 3.2.1 開發(fā)工具介紹</p><p><b> 硬件工具:<
49、/b></p><p> 本地Windows PC一臺(tái),服務(wù)器一臺(tái)。</p><p><b> 軟件環(huán)境:</b></p><p> 操作系統(tǒng):Microsoft Windows 10,</p><p> C++開發(fā)工具:Qt Creator 5.3,</p><p> R語言開發(fā)
50、工具:R for Windows,Rstudio,</p><p> 服務(wù)器系統(tǒng):windows server ,</p><p> 數(shù)據(jù)庫:mysql 5.6</p><p> 3.2.2 R語言環(huán)境變量配置</p><p> 本系統(tǒng)采用R版本為3.3.0,可通過R官網(wǎng)(http://mirror.fcaglp.unlp.edu.a
51、r/CRAN/)下載,進(jìn)入官網(wǎng)選擇Windows版本,下載后選擇默認(rèn)安裝即可。然后配置環(huán)境變量,在計(jì)算機(jī)右鍵選擇屬性,進(jìn)入屬性頁面選擇高級(jí)系統(tǒng)設(shè)置,點(diǎn)擊環(huán)境變量,在Path變量下新建值為R安裝目錄的bin目錄下。然后打開命令提示符界面輸入R,如果顯示R版本號(hào)并進(jìn)入R界面則正確,如果顯示“R”不是內(nèi)部命令或外部命令,也不是可運(yùn)行程序或批處理程序則錯(cuò)誤,請(qǐng)認(rèn)真檢查改正。</p><p> 3.2.3 QT環(huán)境變量的
52、配置</p><p> 本系統(tǒng)采用QT的版本為5.3,在QT下載官網(wǎng)(https://www.qt.io/download/)進(jìn)行下載,安裝基本也是默認(rèn)安裝,安裝完成后設(shè)置系統(tǒng)環(huán)境變量,在計(jì)算機(jī)右鍵選擇屬性,進(jìn)入屬性頁面選擇高級(jí)系統(tǒng)設(shè)置,點(diǎn)擊環(huán)境變量,在Path變量下新建值為QT安裝目錄的bin目錄下。然后打開命令提示符界面輸入qmake,如果顯示一系列參數(shù)則正確安裝,如果顯示“qmake”不是內(nèi)部命令或外部命
53、令,也不是可運(yùn)行程序或批處理程序則錯(cuò)誤,請(qǐng)認(rèn)真檢查改正。</p><p> 第4章 系統(tǒng)設(shè)計(jì)與功能實(shí)現(xiàn)</p><p> 4.1 系統(tǒng)總體設(shè)計(jì)</p><p> 本系統(tǒng)是基于Windows平臺(tái)的一個(gè)應(yīng)用,可通過此應(yīng)用對(duì)測(cè)試用例進(jìn)行聚類分析。采用人性化的設(shè)置,在聚類過程中可選擇聚類的參數(shù),有聚類的個(gè)數(shù)、距離度量的方式,展示效果采用表格聯(lián)動(dòng)的效果,很好的展示所分
54、的類別,每個(gè)類內(nèi)包含的測(cè)試用例,可供后續(xù)繼續(xù)進(jìn)行分析。主要包含的模塊有測(cè)試用例剖面提取模塊,R語言的聚類分析模塊,結(jié)果展示的模塊和軟件集成。</p><p> 4.1.1 測(cè)試用例剖面提取</p><p> 本系統(tǒng)是對(duì)測(cè)試用例進(jìn)行聚類,所以測(cè)試用例的好壞也影響了聚類的結(jié)果,而公司是一個(gè)做測(cè)試軟件的公司,有很多比較好的測(cè)試用例,和公司商量后可以本人可在公司軟件上加一個(gè)接口返回我需要的測(cè)試
55、用例,為了和公司的軟件接口一致,接口部分和公司一樣通過SOAP通信技術(shù),然后本地調(diào)用接口獲取測(cè)試用例數(shù)據(jù)。</p><p> 服務(wù)端接口部分框架圖</p><p> 圖4-1 服務(wù)端接口部分框架圖</p><p> 可在前端界面上登陸后調(diào)用服務(wù)端的此接口,用于獲取測(cè)試用例,把本測(cè)試用例寫入文件保存用于后續(xù)分析,由于是調(diào)用接口獲取的測(cè)試用例,所以本程序使用模擬登
56、陸,以集成到軟件,可直接運(yùn)行會(huì)自動(dòng)登陸的,數(shù)據(jù)已經(jīng)存在可直接獲取。</p><p> 4.1.2 R語言聚類分析</p><p> 本部分通過接口調(diào)用測(cè)試用例數(shù)據(jù),組織成聚類算法所需要的形式,寫入文件,在通過調(diào)用一個(gè)聚類算法的R腳本,R腳本從文件中讀出所需要的參數(shù)進(jìn)行聚類,并把結(jié)果返回給文件,本地在從文件中讀取所需要的結(jié)果,解析成所需要的數(shù)據(jù)形式,等待前臺(tái)的調(diào)用并展示出來。</p
57、><p><b> 聚類過程框架:</b></p><p> 圖4-2 聚類過程框架圖</p><p> 此過程為R語言聚類的過程,其思想基本如上圖所示的一樣,R腳本可讀取文件獲取數(shù)據(jù),并讀取參數(shù)進(jìn)行設(shè)置,然后進(jìn)行R的聚類分析,把分析結(jié)果保存到的文件中,供后續(xù)顯示的界面讀取。</p><p> 4.1.3 結(jié)果展示&
58、lt;/p><p> 結(jié)果展示采用聯(lián)動(dòng)表格的方式,點(diǎn)擊左邊表格某一行會(huì)在右邊表格對(duì)應(yīng)顯示該類的詳細(xì)情況,整體上對(duì)每個(gè)類也由詳細(xì)的信息,包括類別、測(cè)試用例ID、類內(nèi)個(gè)數(shù)、類內(nèi)最大距離、類內(nèi)平均距離、類內(nèi)直徑和類間距離。聯(lián)動(dòng)表格顯示本類的所用測(cè)試用例ID和對(duì)應(yīng)的測(cè)試用例名稱。其具體效果如下:</p><p> 圖4-3 聚類結(jié)果展示圖</p><p> 本展示結(jié)果盡可
59、能多的顯示類內(nèi)與類間的信息,充分挖掘所有類內(nèi)與類間之間的種種聯(lián)系,為以后的分析做好充分的準(zhǔn)備。</p><p> 4.1.4 軟件的集成</p><p> 本課題為公司派發(fā),所以要求最后要集成到公司的軟件中,開始還天真的以為自己做出來就行,集成沒什么難的,到了最后要集成的時(shí)候才發(fā)現(xiàn)我錯(cuò)了,畢竟公司軟件已經(jīng)很復(fù)雜了,要想集成一個(gè)功能可以正常使用又不影響原有的功能真的太難了,沒辦法必須慢慢
60、學(xué)公司軟件框架,慢慢了解后開始動(dòng)手,一個(gè)一個(gè)的小問題慢慢解決,經(jīng)過不懈的努力,最終還是完美解決了。其總體效果如下:(點(diǎn)擊聚類結(jié)果會(huì)彈出結(jié)果展示界面,結(jié)果展示界面如上)</p><p> 圖4-4 產(chǎn)品總體圖</p><p> 本軟件為公司產(chǎn)品,其中測(cè)試用例聚類是本人獨(dú)自完成,并集成到公司產(chǎn)品中去,方便高級(jí)用戶進(jìn)行聚類分析,完成更高級(jí)的測(cè)試。</p><p>
61、4.2 客戶端的實(shí)現(xiàn)</p><p> 4.2.1 前端展示的實(shí)現(xiàn)</p><p> 前端顯示界面采用QT下的C++開發(fā),雖然C++以前學(xué)過,但由于QT為第一次接觸,開始學(xué)起來還是比較困難的,先是在圖書館借的幾本書慢慢的看,一邊看書一邊進(jìn)行實(shí)踐,先學(xué)一些簡(jiǎn)單的界面布局方面的,慢慢上手后就開始做,一步一步的界面的雛形慢慢出來了,但總是感覺不美觀,以至于后來重新設(shè)計(jì)界面然后做出來,這個(gè)過
62、程中也學(xué)了一些QT樣式方面的知識(shí),總感覺學(xué)的越多就越想做的更漂亮一點(diǎn),不停的打磨,最終做出表格聯(lián)動(dòng)的效果,更好的表示了所分的類,每個(gè)類的詳細(xì)情況,其表格聯(lián)動(dòng)的具體實(shí)現(xiàn)為:</p><p> 先new兩個(gè)表格(其中m_tableWidget為主表格,tableWidget為副表格)</p><p> m_tableWidget = new QTableWidget();</p>
63、;<p> tableWidget = new QTableWidget();</p><p> 關(guān)聯(lián)主表格的點(diǎn)擊事件到副表格上</p><p> connect(m_tableWidget,SIGNAL(itemClicked(QTableWidgetItem*)),this,SLOT(showTableWidget(QTableWidgetItem*)));<
64、/p><p> 在showTableWidget()函數(shù)中實(shí)現(xiàn)聯(lián)動(dòng)效果</p><p> void MainWindow::showTableWidget(QTableWidgetItem *widget){</p><p> ClusterLabel->setText(m_tableWidget->item(widget->row(),0)-&
65、gt;text());</p><p> tableWidget->setRowCount(0); //設(shè)置行數(shù)為0</p><p> int row = 0;</p><p> QHash<int,QString> TempHash = Hash.value(m_tableWidget->item(widget->row
66、(),0)->text().toInt());</p><p> QHashIterator<int, QString > i(TempHash);</p><p> while (i.hasNext()) {</p><p><b> i.next();</b></p><p> tableW
67、idget->insertRow(row);</p><p> tableWidget->setItem(row,0,new QTableWidgetItem(QString::number(i.key())));</p><p> tableWidget->setItem(row,1,new QTableWidgetItem(i.value()));</p&g
68、t;<p><b> row++;</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.2.2 模擬登陸獲得權(quán)限</p><p> 由于總體采用SOAP通信,也是第一次接觸,導(dǎo)致還要新學(xué),在客戶端上登
69、陸采用SOAP通信協(xié)議,設(shè)置合適的用戶名、密碼通過登陸接口模擬登陸來獲得權(quán)限,由于一個(gè)用戶可能有多個(gè)版本,所以要在通過一個(gè)設(shè)置版本的接口來設(shè)置一個(gè)版本,接下來獲取數(shù)據(jù)就會(huì)是該版本的數(shù)據(jù),其主要的實(shí)現(xiàn)具體為:</p><p> new一個(gè)SOAP接口的對(duì)象:</p><p> TT = new ThreadingTestProxy;</p><p> 通過log
70、in接口模擬登陸:</p><p> TT->login("http://127.0.0.1:17262",NULL,"user","user",strLoginret);</p><p> 通過setVersion接口設(shè)置版本:</p><p> TT->setVersion("
71、;http://127.0.0.1:17262",NULL,VERID,VersionRet);</p><p> 至此模擬登陸已經(jīng)完成,后續(xù)可直接通過本用戶在獲取測(cè)試用例數(shù)據(jù)的接口直接獲得數(shù)據(jù)進(jìn)行聚類分析。</p><p> 4.2.3 進(jìn)行聚類并獲得聚類結(jié)果</p><p> 前期已經(jīng)獲得了權(quán)限,所以進(jìn)行聚類和獲得聚類結(jié)果也是比較簡(jiǎn)單,稍微復(fù)雜的
72、就是要把結(jié)果解析出來并展示,具體實(shí)現(xiàn)中每個(gè)數(shù)據(jù)用空格隔開,所以提取時(shí)只要以空格分開就行,并把數(shù)據(jù)解析出來放入表格中。其過程大致如下:</p><p><b> 進(jìn)行聚類過程</b></p><p> TT->Cluster("http://127.0.0.1:17262",NULL,VERID,</p><p>
73、 rClusterNumEdit->text().toInt(),rMetricEdit->currentIndex()+1,result;</p><p><b> 獲得數(shù)據(jù)過程</b></p><p> TT->getClusterResult("http://127.0.0.1:17262",NULL,VERID,clu
74、sterResult);</p><p><b> 中心點(diǎn)數(shù)據(jù)的解析</b></p><p> QHash<int,QString> TempHash;</p><p> std::string str1 = clusterResult.Medoids.at(0);</p><p> QString
75、qstr1 = QString(QString::fromStdString(str1));</p><p> TempHash.insert(qstr1.section(' ',0,0).toInt(),qstr1.section('',2,2));</p><p> for(int i= 1;i<clusterResult.Medoids.s
76、ize();i++){</p><p> std::string str2 = clusterResult.Medoids.at(i);</p><p> QString qstr2 = QString(QString::fromStdString(str2));</p><p> if(qstr1.section('',1,1).toInt
77、()==qstr2.section('',1,1).toInt()){</p><p> TempHash.insert(qstr2.section('',0,0).toInt(),qstr2.section(' ',2,2));</p><p><b> }</b></p><p><
78、b> else{</b></p><p> Hash.insert(qstr1.section(' ',1,1).toInt(),TempHash);</p><p> TempHash.clear();</p><p> str1 = clusterResult.Medoids.at(i);</p><
79、p> qstr1 = QString(QString::fromStdString(str1));</p><p> TempHash.insert(qstr1.section(' ',0,0).toInt(),qstr1.section(' ',2,2));</p><p><b> }</b></p>&
80、lt;p><b> }</b></p><p> Hash.insert(qstr1.section(' ',1,1).toInt(),TempHash);</p><p> TempHash.clear();</p><p><b> 類別數(shù)據(jù)的解析</b></p><p
81、> m_tableWidget->setRowCount(0); //設(shè)置行數(shù)為0</p><p> int row = 0;</p><p> for(int i= 0;i<clusterResult.PamResult.size();i++){</p><p> std::string str = clusterResult.P
82、amResult.at(i);</p><p> QString qstr = QString(QString::fromStdString(str));</p><p> m_tableWidget->insertRow(row);</p><p> for(int col = 0; col<qstr.size(); col++){</p
83、><p> QString StrItem ;</p><p> if(col>=3){</p><p> StrItem= QString::number(qstr.section(' ',col,col).toDouble(), 'f', 2);</p><p><b> }else{&
84、lt;/b></p><p> StrItem=qstr.section(' ',col,col);</p><p><b> }</b></p><p> m_tableWidget->setItem(row,col,new QTableWidgetItem(StrItem));</p><
85、;p><b> }</b></p><p><b> row++;</b></p><p><b> }</b></p><p> 中心點(diǎn)與類別數(shù)據(jù)解析完成后就可以進(jìn)行顯示,其中類別數(shù)據(jù)是一邊解析一邊顯示出來,中心點(diǎn)數(shù)據(jù)是根據(jù)類別保存到HashMap里面,供后續(xù)顯示是取得。</p&
86、gt;<p> 4.3 服務(wù)器端的實(shí)現(xiàn)</p><p> 4.3.1 聚類與獲得聚類結(jié)果接口的實(shí)現(xiàn)</p><p> 由于聚類與獲得聚類結(jié)果接口的實(shí)現(xiàn)原理一致,所有放在一起說。先用工具生成SOAP接口,然后寫出接口具體的實(shí)現(xiàn)。其中聚類接口主要是從前端傳來聚類所需要的參數(shù),服務(wù)器端獲取獲取參數(shù)進(jìn)行聚類,主要過程是調(diào)用一個(gè)R的腳本進(jìn)行聚類。獲取聚類結(jié)果的接口是從文件讀出所需
87、要的結(jié)果,組織成一定的格式,然后返回給客戶端。總體來說比較簡(jiǎn)單,主要是在參數(shù)上組織形式與解析時(shí)比較麻煩一點(diǎn),需認(rèn)真一點(diǎn)。</p><p> 4.3.2 R腳本聚類的實(shí)現(xiàn)</p><p> R語言也是我第一次接觸,感覺語法和python差不多,也是解釋性的語言,聽說其數(shù)據(jù)分析與畫圖能力特別強(qiáng)大,本次作為聚類分析選用R語言,充分展示了R語言的便利性,可以用很少的代碼寫出一個(gè)高質(zhì)量的聚類分析
88、函數(shù)。</p><p> 由于在C++中無法直接寫R語句,開始一直是想著怎么建立兩者的連接,等學(xué)到R腳本這個(gè)知識(shí)后,有了新的靈感,就開始動(dòng)手,寫一個(gè)腳本通過C++直接調(diào)用腳本。然后就是傳參數(shù)的問題,這個(gè)問題真是困擾了我好久,一開始想的是用文件進(jìn)行參數(shù)傳遞,但仔細(xì)想想不是那么高效,想了好多辦法,畢竟是兩個(gè)不同的語言,而且語言差別也是有點(diǎn)大,最終也是沒有一個(gè)更好的解決方法,還是下決心就用文件進(jìn)行傳遞參數(shù)。最終成果還
89、可以,算是完成了整體的過程。</p><p><b> 第5章 總結(jié)與展望</b></p><p><b> 5.1 小結(jié)</b></p><p> 經(jīng)過幾個(gè)月的畢設(shè)時(shí)間,從開始的新接觸,到一點(diǎn)一點(diǎn)的熟悉,學(xué)了很多東西,基本上按時(shí)按量完成了要求。在初期時(shí),由于很多知識(shí)都是第一次接觸,必須要先自己學(xué)習(xí)才可以動(dòng)手實(shí)踐,就
90、從圖書館借了好多的書看,一邊看書一邊動(dòng)手實(shí)踐,其中聚類分析,測(cè)試用例,R語言這些都是第一次學(xué)習(xí),還是有點(diǎn)難度,學(xué)習(xí)進(jìn)度也是比較慢的,但這個(gè)期間感覺進(jìn)步還是比較大的,每天學(xué)到新的知識(shí)并加以運(yùn)用。在中期時(shí),現(xiàn)在基本簡(jiǎn)單的應(yīng)用沒什么問題,然后就開始動(dòng)手寫,畢竟從動(dòng)手寫中可以更快的學(xué)習(xí)而且還比單純的學(xué)習(xí)理論知識(shí)有趣很多,這個(gè)時(shí)候就會(huì)發(fā)現(xiàn)自己學(xué)的那個(gè)地方?jīng)]學(xué)懂,那個(gè)地方還是錯(cuò)誤的認(rèn)識(shí),一遍遍試錯(cuò),一遍遍改錯(cuò),程序雛形也慢慢顯現(xiàn)出來了。到后期的時(shí)候
91、,就該認(rèn)真研究那些難點(diǎn),這個(gè)方法不行就換個(gè)方法,一遍遍地找方法,突破了一個(gè)問題,另一個(gè)問題也顯現(xiàn)出來,再堅(jiān)持不懈的努力下,最終終于可以完美運(yùn)行了。如果說前期的學(xué)習(xí)只是一些基礎(chǔ)的知識(shí),后期的突破才是學(xué)習(xí)真正的技術(shù)的時(shí)候。</p><p> 5.2 遇到的問題及解決方法</p><p> 5.2.1 QT下的C++與R語言相互調(diào)用問題</p><p> 這個(gè)問題是
92、我真正動(dòng)手時(shí)想到的第一個(gè)問題,開始查了好多資料都沒有一個(gè)好的方法解決C++下調(diào)用R語言的接口,畢竟是兩個(gè)不同的語言,而R語言又是一個(gè)比較小眾的語言,所以C++也沒有特定的庫直接調(diào)用R語言。就在我要放棄從C++中找方法時(shí),這是我在R這邊找到了希望,R可以作為一個(gè)腳本獨(dú)立存在,然后開始學(xué)習(xí)R腳本方面的知識(shí),簡(jiǎn)單的寫了一個(gè)hello world的腳本,然是就是試著直接從C++程序調(diào)用R腳本執(zhí)行,真的可以了。</p><p&
93、gt; 解決這個(gè)問題我也反思了很多,因?yàn)檎娴睦速M(fèi)了太多時(shí)間。我覺得遇見問題不能單方面的解決,就比如我就一直想著C++怎樣調(diào)用R程序執(zhí)行,單方面從C++這邊找解決方法,可是C++沒有提供這樣的庫,怎么弄都沒有辦法。才會(huì)到R這邊想辦法,最終才解決了問題。</p><p> 5.2.2 R語言參數(shù)傳遞與結(jié)果返回問題</p><p> 其實(shí)R語言參數(shù)傳遞與結(jié)果返回基本是一個(gè)問題,都是R與C+
94、+之間的數(shù)值傳遞問題。等到真正開始寫聚類代碼的時(shí)候才發(fā)現(xiàn)了這個(gè)問題,在hello world這個(gè)腳本是可以順利執(zhí)行的,但是聚類不一樣呀,它是需要參數(shù)的,并在聚類結(jié)果是要把結(jié)果返回的,不像hello world那樣直接在控制臺(tái)給個(gè)輸出就行。解決這個(gè)問題時(shí)我走入了一個(gè)誤區(qū),總是想的是在調(diào)用R腳本時(shí)直接傳入?yún)?shù),可事與愿違,還真沒有一個(gè)好的辦法可以傳遞,當(dāng)然在后面的學(xué)習(xí)中發(fā)現(xiàn)還是可以直接傳值的,但是我需要的參數(shù)與返回的結(jié)果都是大量的數(shù)據(jù),而直
95、接傳值只能是一些基本的數(shù)據(jù)類型。最終選擇了用文件傳遞,畢竟這些數(shù)據(jù)是要保存下來,不能每次需要都重新計(jì)算,這樣想想文件也是一個(gè)不錯(cuò)的方法,然后就開始研究QT下的文件讀寫與R語言下的文件讀寫,這些也不是很難,基本一天也就掌握了,至此,這個(gè)參數(shù)傳遞與結(jié)果返回的問題就徹底解決了。</p><p> 在解決問題的過程中,網(wǎng)上找方法,其中看過一句話:在兩個(gè)語言之間的傳值用文件是一個(gè)萬能的方法。畢竟像在C中直接寫匯編這種兩個(gè)
96、語言混用還是太少,所以當(dāng)你沒有好方法解決兩個(gè)語言之間的傳值問題,就用文件吧。</p><p> 5.2.3 SOAP接口實(shí)現(xiàn)問題</p><p> 以前在做項(xiàng)目時(shí)都是用的socket通信的機(jī)制,SOAP是第一次用,開始只是在網(wǎng)上找資料這看一點(diǎn)那看一點(diǎn)感覺學(xué)的好混亂,沒辦法,先從簡(jiǎn)單的開始學(xué),慢慢的入門了之后再回想起以前看的會(huì)有一些更深的認(rèn)識(shí),然后開始動(dòng)手,結(jié)果真正寫的時(shí)候也不用完全的通
97、信機(jī)制都要自己寫,通信的細(xì)節(jié)是自動(dòng)生成的,自己要寫的就是數(shù)據(jù)的處理,這點(diǎn)還是很方便的,用戶可以不同在乎通信細(xì)節(jié)問題,直接寫代碼。</p><p> 這個(gè)問題告訴我們其實(shí)互聯(lián)網(wǎng)上有好多的工具是可以大大簡(jiǎn)化我們的工作量,一些小的點(diǎn)是完全可以不用考慮的。所以以后嫌一些技術(shù)細(xì)節(jié)比較麻煩時(shí),靜下心來,在網(wǎng)上好好找找,說不定你要做的事情別人已經(jīng)替你做好了。</p><p> 5.3 主要的研究成果
98、</p><p> 通過本次畢設(shè),學(xué)到了很多東西,也有很多技術(shù)像測(cè)試用例、R語言、聚類分析這些都是第一次見,基本上也算是會(huì)用這些技術(shù)了,總體可以聯(lián)系起來完成一個(gè)作品。</p><p> 本次做的是一個(gè)基于R語言的測(cè)試用例的聚類分析程序,通過本程序可以對(duì)測(cè)試用例進(jìn)行聚類,從聚類的結(jié)果中找出一些不好的測(cè)試用例,從而減少測(cè)試用例的數(shù)量,減輕測(cè)試所需要的資源。本程序可定制化程度較高,聚類時(shí)可自
99、主選擇聚類的個(gè)數(shù)和聚類所用的距離度量方式,極大方便了用戶。在顯示效果上也是認(rèn)真研究顯示方式,爭(zhēng)取更高效的顯示出來,最終采用表格聯(lián)動(dòng)的方式,在整體上可以很好的顯示每個(gè)類的大體情況,聯(lián)動(dòng)表格也可以顯示每個(gè)類的細(xì)節(jié)情況。爭(zhēng)取做到一看就知道每個(gè)類的好壞情況,可為后續(xù)分析做好保障。在功能上也是為了發(fā)揮更大的作用,把這個(gè)功能加入產(chǎn)品中,因?yàn)楫a(chǎn)品是做測(cè)試用的,可以新建測(cè)試用例,而這個(gè)功能又可以直接分析測(cè)試用例,更是方便了用戶的選擇。</p>
100、;<p><b> 5.4 展望</b></p><p> 對(duì)測(cè)試用例的聚類分析來減少測(cè)試所需要的資源是一個(gè)很好的想法,但聚類后的分析也是一個(gè)很重要的問題,現(xiàn)在做出來的只能人為的根據(jù)測(cè)試用例的分類情況來進(jìn)一步判斷測(cè)試用例的好壞,從而保留好的測(cè)試用例,刪除不好的測(cè)試用例。</p><p> 所以后期準(zhǔn)備在開發(fā)一個(gè)功能,主要作用就是根據(jù)測(cè)試用例的分類情
101、況自動(dòng)化的分析測(cè)試用例好壞,從而自動(dòng)剔除不好的測(cè)試用例。其主要實(shí)現(xiàn)具體為在每個(gè)類中隨機(jī)抽樣一些測(cè)試用例進(jìn)行測(cè)試,如果本類的大部分測(cè)試用例都可以很好的發(fā)現(xiàn)錯(cuò)誤,則說明這一類測(cè)試用例都能很好的發(fā)現(xiàn)錯(cuò)誤。如果本類的大部分測(cè)試用例都不能發(fā)現(xiàn)錯(cuò)誤,則認(rèn)為這一類的測(cè)試用例質(zhì)量都不高,可整體進(jìn)行刪除。</p><p> 在有余力的情況下,還想做一個(gè)關(guān)于回歸測(cè)試的東西,一個(gè)好的測(cè)試用例要求在老版本上發(fā)現(xiàn)問題,在一個(gè)新的版本上也
102、要能發(fā)現(xiàn)問題,對(duì)測(cè)試用例進(jìn)行回歸測(cè)試是一個(gè)很繁重的工作,而這個(gè)工作如果能自動(dòng)的進(jìn)行將大大減少測(cè)試的工作。當(dāng)然這只是初步的想象,具體的實(shí)現(xiàn)有望以后解決。</p><p><b> 致謝</b></p><p> 隨著畢設(shè)慢慢接近尾聲了,大學(xué)生活也快要結(jié)束了,從剛開始做畢設(shè)到現(xiàn)在的基本完成畢設(shè),這個(gè)過程中學(xué)了很多的東西,也得到了不少人的幫助,現(xiàn)在想想如果沒人這么多人的
103、幫助的話,自己也不一定能按時(shí)完成這次畢設(shè),所以我想在這里感謝一下在這個(gè)過程中幫助我的人。</p><p> 首先要感謝的就是我的導(dǎo)師黑新宏老師。在別人還沒開始做的時(shí)候,他就讓我看了一些關(guān)于數(shù)據(jù)挖掘的東西,我就是從這里找到了我的方向,從此就愛上了數(shù)據(jù)挖掘,以至于后來畢設(shè)做的就是數(shù)據(jù)挖掘算法中的聚類算法。盡管我畢設(shè)是在公司做的,但是在畢設(shè)前期和畢設(shè)后期這段時(shí)間我都在學(xué)校,不管平時(shí)有什么事找他總是能很好的解決,記得在
104、前期在學(xué)校期間和后期從公司回到學(xué)校后,找他說是給我找個(gè)地方做畢設(shè),他就直接帶我去教研室給我找了一個(gè)地方。教研室有很好的學(xué)習(xí)氛圍,可以靜下心來認(rèn)真的學(xué)習(xí),現(xiàn)在想想要是當(dāng)初沒有教研室我在宿舍學(xué)習(xí)不知效率是有多差。</p><p> 然后要感謝的就是我再公司的所有同事和公司的老板,在我做畢設(shè)期間,他們給了我好多技術(shù)上的支持。開始時(shí)由于我對(duì)公司的產(chǎn)品不是很熟悉,學(xué)的比較慢,他們都能耐下心來給我講,對(duì)我的技術(shù)是一個(gè)很大的
105、提升,這也就直接推動(dòng)了我畢設(shè)的進(jìn)度。并且在公司我算是一個(gè)新來的,他們與會(huì)照顧我,在我進(jìn)度慢的時(shí)候主動(dòng)幫助我,整個(gè)公司的氛圍特別好,非常適合去學(xué)習(xí)。</p><p> 還要感謝的就是我的師兄師姐和一些同學(xué),是他們?cè)谖依Щ蟮臅r(shí)候給我?guī)椭?。每?dāng)遇見一個(gè)小的問題第一個(gè)想到的就是同學(xué),不管什么時(shí)候,他們總是可以給你幫助。別看是一些小的問題,有的還真不好解決,他們都能認(rèn)認(rèn)真真的解決,并提出更好的想法??梢哉f沒有這些同學(xué),我
106、的畢設(shè)肯定就是亂七八糟的,一些小的毛病肯定也就留到最后。</p><p> 最后,還要感謝一些在大學(xué)生涯給我?guī)дn的老師,是他們交給我知識(shí),才有了知識(shí)積累去完成畢設(shè)。感謝所有幫助過我的老師,每一個(gè)老師總是在我最需要幫助的時(shí)候來幫助我,讓我重新認(rèn)識(shí)自己。感謝所有幫助我的同學(xué),是他們?cè)谏钌蠋椭覀?,讓我們克服所有的困難。感謝西安理工大學(xué),我的母校提供了優(yōu)良的學(xué)習(xí)環(huán)境,讓我可以認(rèn)真的學(xué)習(xí)。</p>&l
107、t;p><b> 參考文獻(xiàn)</b></p><p> [1] 張良均,云偉標(biāo),王路,劉曉勇.R語言數(shù)據(jù)分析與挖掘?qū)崙?zhàn)[M].北京:機(jī)械工業(yè)出版社.2016</p><p> [2]〔法〕弗里斯,〔法〕邁斯. R語言輕松入門與提高[M].麥稈創(chuàng)智譯.北京:人民郵電出版社,2015</p><p> [3] 王振武,徐慧.數(shù)據(jù)挖掘算法
108、原理與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社.2015</p><p> [4] 黃文,王正林.數(shù)據(jù)挖掘:R語言實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社.2014</p><p> [5] 〔中〕吳信東,〔英〕庫馬爾. 數(shù)據(jù)挖掘十大算法[M].李文波,吳素研譯.北京:清華大學(xué)出版社.2013</p><p> [6] 霍亞菲.Qt Creator快速入門[M].北京:北京航
109、空航天大學(xué)出版社.2014</p><p> [7] 蔡志明,盧傳富,李立夏.精通Qt4編程[M].北京:電子工業(yè)出版社.2008</p><p> [8] 丁林松,黃麗琴.Qt4圖形設(shè)計(jì)與嵌入式開發(fā)[M].北京:人民郵電出版社.2009</p><p> [9] 〔美〕蘭茲. 機(jī)器學(xué)習(xí)與R語言[M].李洪成,徐金煒,李艦澤譯.北京:機(jī)械工業(yè)出版社.2015&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---基于文本的聚類算法
- 畢業(yè)論文(設(shè)計(jì))基于遺傳算法的測(cè)試用例生成方法
- 基于CHAM的類測(cè)試用例生成.pdf
- 基于聚類技術(shù)的面向?qū)ο筌浖y(cè)試用例生成方法研究.pdf
- 2017畢業(yè)論文-基于c語言的掃雷游戲開發(fā)
- 基于r語言在城鄉(xiāng)收支水平差距預(yù)測(cè)的應(yīng)用-畢業(yè)論文
- 基于模糊聚類的物流市場(chǎng)細(xì)分方法探究【畢業(yè)論文】
- 畢業(yè)論文--基于loadrunner的web應(yīng)用程序測(cè)試方法
- 軟件開發(fā)類畢業(yè)論文
- 基于程序切片算法的測(cè)試用例集約簡(jiǎn)方法.pdf
- 回歸測(cè)試用例的優(yōu)化選擇研究.pdf
- 郵件收發(fā)程序的設(shè)計(jì)與開發(fā)——畢業(yè)論文
- 基于模型檢查的程序驗(yàn)證和測(cè)試用例生成.pdf
- 基于動(dòng)態(tài)程序切片技術(shù)的測(cè)試用例自動(dòng)生成研究.pdf
- 模糊聚類理論發(fā)展及研究畢業(yè)論文
- 基于蟻群算法的測(cè)試用例選擇機(jī)制研究.pdf
- 基于java語言的網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與實(shí)現(xiàn)畢業(yè)論文
- 軟件測(cè)試和回歸測(cè)試用例選擇算法的研究.pdf
- 基于.net平臺(tái)的聊天程序畢業(yè)論文
- 回歸測(cè)試用例選擇技術(shù)研究.pdf
評(píng)論
0/150
提交評(píng)論