挖土源碼
❶ 數據挖掘源代碼
基本Kmeans演算法實現 C++代碼
#include<iostream>
#include<sstream>
#include<fstream>
#include<vector>
#include<math.h>
#include<stdlib.h>
#definek3//簇的數目
usingnamespacestd;
//存放元組的屬性信息
typedefvector<double>Tuple;//存儲每條數據記錄
intdataNum;//數據集中數據記錄數目
intdimNum;//每條記錄的維數
//計算兩個元組間的歐幾里距離
doublegetDistXY(constTuple&t1,constTuple&t2)
{
doublesum=0;
for(inti=1;i<=dimNum;++i)
{
sum+=(t1[i]-t2[i])*(t1[i]-t2[i]);
}
returnsqrt(sum);
}
//根據質心,決定當前元組屬於哪個簇
intclusterOfTuple(Tuplemeans[],constTuple&tuple){
doubledist=getDistXY(means[0],tuple);
doubletmp;
intlabel=0;//標示屬於哪一個簇
for(inti=1;i<k;i++){
tmp=getDistXY(means[i],tuple);
if(tmp<dist){dist=tmp;label=i;}
}
returnlabel;
}
//獲得給定簇集的平方誤差
doublegetVar(vector<Tuple>clusters[],Tuplemeans[]){
doublevar=0;
for(inti=0;i<k;i++)
{
vector<Tuple>t=clusters[i];
for(intj=0;j<t.size();j++)
{
var+=getDistXY(t[j],means[i]);
}
}
//cout<<"sum:"<<sum<<endl;
returnvar;
}
//獲得當前簇的均值(質心)
TuplegetMeans(constvector<Tuple>&cluster){
intnum=cluster.size();
Tuplet(dimNum+1,0);
for(inti=0;i<num;i++)
{
for(intj=1;j<=dimNum;++j)
{
t[j]+=cluster[i][j];
}
}
for(intj=1;j<=dimNum;++j)
t[j]/=num;
returnt;
//cout<<"sum:"<<sum<<endl;
}
voidprint(constvector<Tuple>clusters[])
{
for(intlable=0;lable<k;lable++)
{
cout<<"第"<<lable+1<<"個簇:"<<endl;
vector<Tuple>t=clusters[lable];
for(inti=0;i<t.size();i++)
{
cout<<i+1<<".(";
for(intj=0;j<=dimNum;++j)
{
cout<<t[i][j]<<",";
}
cout<<") ";
}
}
}
voidKMeans(vector<Tuple>&tuples){
vector<Tuple>clusters[k];//k個簇
Tuplemeans[k];//k個中心點
inti=0;
//一開始隨機選取k條記錄的值作為k個簇的質心(均值)
srand((unsignedint)time(NULL));
for(i=0;i<k;){
intiToSelect=rand()%tuples.size();
if(means[iToSelect].size()==0)
{
for(intj=0;j<=dimNum;++j)
{
means[i].push_back(tuples[iToSelect][j]);
}
++i;
}
}
intlable=0;
//根據默認的質心給簇賦值
for(i=0;i!=tuples.size();++i){
lable=clusterOfTuple(means,tuples[i]);
clusters[lable].push_back(tuples[i]);
}
doubleoldVar=-1;
doublenewVar=getVar(clusters,means);
cout<<"初始的的整體誤差平方和為:"<<newVar<<endl;
intt=0;
while(abs(newVar-oldVar)>=1)//當新舊函數值相差不到1即准則函數值不發生明顯變化時,演算法終止
{
cout<<"第"<<++t<<"次迭代開始:"<<endl;
for(i=0;i<k;i++)//更新每個簇的中心點
{
means[i]=getMeans(clusters[i]);
}
oldVar=newVar;
newVar=getVar(clusters,means);//計算新的准則函數值
for(i=0;i<k;i++)//清空每個簇
{
clusters[i].clear();
}
//根據新的質心獲得新的簇
for(i=0;i!=tuples.size();++i){
lable=clusterOfTuple(means,tuples[i]);
clusters[lable].push_back(tuples[i]);
}
cout<<"此次迭代之後的整體誤差平方和為:"<<newVar<<endl;
}
cout<<"Theresultis: ";
print(clusters);
}
intmain(){
charfname[256];
cout<<"請輸入存放數據的文件名:";
cin>>fname;
cout<<endl<<"請依次輸入:維數樣本數目"<<endl;
cout<<endl<<"維數dimNum:";
cin>>dimNum;
cout<<endl<<"樣本數目dataNum:";
cin>>dataNum;
ifstreaminfile(fname);
if(!infile){
cout<<"不能打開輸入的文件"<<fname<<endl;
return0;
}
vector<Tuple>tuples;
//從文件流中讀入數據
for(inti=0;i<dataNum&&!infile.eof();++i)
{
stringstr;
getline(infile,str);
istringstreamistr(str);
Tupletuple(dimNum+1,0);//第一個位置存放記錄編號,第2到dimNum+1個位置存放實際元素
tuple[0]=i+1;
for(intj=1;j<=dimNum;++j)
{
istr>>tuple[j];
}
tuples.push_back(tuple);
}
cout<<endl<<"開始聚類"<<endl;
KMeans(tuples);
return0;
}
❷ E0020是徐工265C挖掘機的什麼故障
可能,是挖掘機買的時候是分期付款。只是可能。
❸ 基於數據挖掘的知識管理系統的源代碼
要求這么多,連個懸賞都沒有
就算有懸賞,估計也沒人給你
起碼要給人民幣吧,少了也不行
市場經濟時期了,有病才給你
而且你這應該叫,剽竊他人成果
誰給你,誰傻蛋。
這個回答絕對是標准答案,lz不用考慮其他回答了。
❹ 數據挖掘RAINFOREST演算法
上面演算法講的很清楚了,我來舉個例子:
Training data:
Id age income class
1 young 65 G
2 young 15 B
3 young 75 G
4 senior 40 B
5 senior 100 G
6 senior 60 G
AVC set „age「 for N1:
value class count
young B 1
young G 2
senior B 1
senior G 2
AVC set „income「 for N1:
value class count
15 B 1
40 B 1
60 G 1
65 G 1
75 G 1
100 G 1
AVC set „income「 for N2:
value class count
15 B 1
65 G 1
75 G 1
AVC set „age「 for N2:
value class count
young B 1
young G 2
最後推出雨林: N1
age=young / \ age=senior
/ \
N2 N3
最後提醒一點,對於雨林演算法,訓練樣本集不要大於3百萬。否則改用SPRINT。
❺ 急求!數據挖掘聚類、分類、關聯演算法java源碼,大神幫幫忙。麻煩傳個
首先自己確定用什麼演算法,然後自己去網上找對應的實現。思路是相通的
❻ 挖掘雞7.0如何入侵指定網站
我建議你不要用這款工具,我推薦你使用 黑客動畵吧 他們發布的明小子旁註
很經典的一款功能豐富的工具
❼ 小白想轉行做大數據,怎麼入行
大數據技術專業屬於交叉學科:以統計學、數學、計算機為三大支撐性學科;生物、醫學、環境科學、經濟學、社會學、管理學為應用拓展性學科。
此外還需學習數據採集、分析、處理軟體,學習數學建模軟體及計算機編程語言等,知識結構是二專多能復合的跨界人才(有專業知識、有數據思維)。
大數據時代則對從業人員素質的要求越來越高,因為數據處理變得越來越復雜,數據人才的競爭也越來越激烈,很多大公司都在尋找尖端人才。而且,大到國防、金融,小到跟生活息息相關的物流、購物、醫療、交通等,都日益需要大數據的支撐。大數據正在成為一門「顯學」。
對於大數據開發的學習,重在掌握基本知識以及實踐應用,合理安排基礎知識的學習,可以起到事半功倍的效果,以下是比較經典的大數據開發學習路線:
第一階段:JavaSE+Mysql+Linux
Java語言入門 → OOP編程 → Java常用Api、集合 → IO/NIO → Java實用技術 → Mysql資料庫 → 階段項目實戰 → Linux基礎 → shell編程
第二階段:Hadoop與生態系統
Hadoop → MapRece → Avro → Hive → Hbase → Zookeeper → Flume → Kafka → Sqoop → Pig
第三階段:Storm與Spark及其生態圈
Storm → Scala → Spark → Spark SQL → Spark Streaming → Spark機器學習
第四階段:其他
Mahout機器學習 → R語言 → python
第五階段:項目實戰、技術綜合運用
希望對您有所幫助!~
❽ 求助高手,數據挖掘相關的程序源代碼,跪求啊!!!
.........\Ada_Boost.m
function D = ada_boost(train_features, train_targets, params, region);
% Classify using the AdaBoost algorithm
% Inputs:
% features - Train features
% targets - Train targets
% Params - [NumberOfIterations, Weak Learner Type, Learner's parameters]
% region - Decision region vector: [-x x -y y number_of_points]
%
% Outputs
% D - Decision sufrace
%
% NOTE: This algorithm is very tuned to the 2D nature of the toolbox!
[k_max, weak_learner, alg_param] = process_params(params);
[Ni,M] = size(train_features);
D = zeros(region(5));
W = ones(1,M)/M;
IterDisp = 10;
%Find where the training features fall on the decision grid
N = region(5);
mx = ones(N,1) * linspace (region(1),region(2),N);
my = linspace (region(3),region(4),N)' * ones(1,N);
flatxy = [mx(:), my(:)]';
train_loc = zeros(1,M);
for i = 1:M,
dist = sqrt(sum((flatxy - train_features(:,i)*ones(1,N^2)).^2));
[m, train_loc(i)] = min(dist);
end
%Do the AdaBoosting
for k = 1:k_max,
%Train weak learner Ck using the data sampled according to W:
%...so sample the data according to W
randnum = rand(1,M);
cW = cumsum(W);
indices = zeros(1,M);
for i = 1:M,
%Find which bin the random number falls into
loc = max(find(randnum(i) > cW))+1;
if isempty(loc)
indices(i) = 1;
else
indices(i) = loc;
end
end
%...and now train the classifier
Ck = feval(weak_learner, train_features(:, indices), train_targets(indices), alg_param, region);
Ckl = Ck(:);
%Ek <- Training error of Ck
Ek = sum(W.*(Ckl(train_loc)' ~= train_targets));
if (Ek == 0),
break
end
%alpha_k <- 1/2*ln(1-Ek)/Ek)
alpha_k = 0.5*log((1-Ek)/Ek);
%W_k+1 = W_k/Z*exp(+/-alpha)
W = W.*exp(alpha_k*(xor(Ckl(train_loc)',train_targets)*2-1));
W = W./sum(W);
%Update the decision region
D = D + alpha_k*(2*Ck-1);
if (k/IterDisp == floor(k/IterDisp)),
disp(['Completed ' num2str(k) ' boosting iterations'])
end
end
D = D>
❾ 初學python數據挖掘,代碼報錯求解!
這個你可以加一些QQ群,然後在群里找一些高手為你解答。
❿ 智能軟體對於未來數據挖掘影響的文獻
智能軟體:數據挖掘的未來
Ahmed E. Hassan
皇後大學
計算機學院
金士頓(Kingston), 安大略(Ontario), 加拿大(Canada)
[email protected]
Tao Xie
北卡羅來納州立大學
計算機科學系
羅利(Raleigh),北卡羅來納州(NC),美國(USA)
[email protected]
摘要
在過去的十年中,軟體工程數據挖掘已經成為了一個成功的研究方向。站在本文的立場,我們主張把智能軟體(SI)作為未來軟體工程數據挖掘的發展方向,並同時應用在現代軟體工程的研究,實踐和教學當中。我們提出智能軟體這個名詞,來源於基於事實的提供創新理念,技術支持和商業決策的商務智能系統(BI)的靈感。同樣,智能軟體為軟體從業人員(不只是開發人員)提供實時的相關信息,以支持他們的日常決策。智能軟體應該在軟體系統的整個生命周期提供決策支持,而不僅僅是在開發階段。
智能軟體在現代軟體工程實踐中對軟體工程的研究造成巨大影響的願景並沒有實現。然而,智能軟體在軟體庫數據挖掘(MSR)領域所展現出的優勢對未來對於智能軟體的認可提供了極大的保證。本文總結了智能軟體在研究和實踐中的現狀,並且陳述了應用智能軟體進行數據挖掘的未來研究方向。
分類和主題描述
[軟體工程]:分布,維護和提高
通用術語
文件,經濟學,實驗,人為因素,管理,衡量,可靠性,核實
關鍵詞
智能軟體,軟體工程數據挖掘,軟體檔案庫挖掘
1. 簡介
許多軟體中心都被一些日常的問題和決策所困擾(比如:什麼時候發布一個軟體系統?軟體系統的哪些部分需要修改?系統的哪些部分需要測試?誰會用到這些功能?誰了解這些功能?)。不幸的是,現如今許多關於軟體系統的決定都是基於直覺。決定軟體系統什麼時候發布,系統的某個部分是否要修改或重新編寫,或者軟體的哪個部分需要徹底的測試是一種藝術,而不是一門學科。隨意的決策導致了資源的浪費,以及大型復雜軟體系統構建和維護的費用增加。
軟體從業人員迫切地需要我們所提到的智能軟體。商業智能通過基於實際的系統提供理念和技術來提高商務決策的質量,智能軟體為軟體從業人員提供實時的相關信息,來支持他們的日常決策。智能軟體為軟體從業人員具體的有依據的觀點,以讓他們可以回答關於軟體系統的關鍵問題。使用人員,維護人員和軟體的開發人員可以通過智能軟體做出長期或者短期的戰略規劃。此外,智能軟體能讓公司對他們軟體的潛力和限制有一個更好的了解。
在過去的十年中,軟體工程數據挖掘已經成為了一個研究方向。這項研究已經在探索和實踐上取得了大量的成功。站在本文的立場,我們主張把智能軟體(SI)作為未來軟體工程數據挖掘的發展方向,並同時應用在現代軟體工程的研究,實踐和教學當中。
智能軟體的願景並沒有變為現實。然而,因為軟體工程的研究目的在於它對現代軟體系統的聯系和影響,智能軟體在軟體庫數據挖掘(MSR)領域所展現出的優勢對未來對於智能軟體的認可提供了極大的保證。本文總結了智能軟體在研究和實踐中的現狀,並且陳述了應用智能軟體進行數據挖掘的未來研究方向。
2. 現狀
以前的經驗和主導模式,極大地影響著現代軟體組織的決策。軟體從業人員在作出重大決策時經常依靠他們的經驗和直覺。管理者在分配開發和測試的資源時同樣基於他們在之前項目中的經驗,以及直覺上對於當前項目和以前項目復雜性的對比。開發人員通常依據他們的經驗增加新功能或者修復漏洞。測試人員經常根據欄位和錯誤報告對已知容易出現錯誤的部分優先測試。
由於許多高級工程師根據直覺作出決策,智能軟體在實際中的應用甚少。然而,這樣的開發人員的職業發展道路具有局限性,而且隨著系統使用年限的增加和人員的流動,這種局限性將顯現的更加明顯。此外,目前對於文獻信息的努力在實踐中非常有限。根本上來講,非專業的維基網站被當作知識庫來使用,電子表格和幻燈片被作為做出決策的依據。
3. 研究的現狀
在過去的十年中,軟體庫數據挖掘已經成為一個研究方向。這項研究在科研和實踐上都取得了實質性的成功。軟體庫數據挖掘(MSR)[16,14,17,19,29,31]領域是這項研究的一個實例。軟體庫數據挖掘通過對軟體庫中海量數據的分析,來發現對系統和項目有用的信息。以下是軟體庫的例子:
歷史信息庫:比如源代碼控制庫,錯誤記錄庫,項目進行過程中的信息記錄
實時庫:比如包含一個軟體系統在單個站點或者多個站點執行的有效信息的日誌
代碼庫:比如Sourceforge.net, Google code, 和 Codeplex.com,這些網站包含了一個開發團隊所開發的多個軟體系統的源代碼。
軟體庫包括了大量有用的項目信息。在使用這些信息的時候,軟體從業人員可以較少的依賴自己的直覺和經驗,較多地依靠歷史數據。歷史資料庫擷取項目產品之間重要的歷史依賴關系,比如函數,文檔文件和配置文件。開發人員可以把這些信息延伸到相關的產品,而不僅僅是使用靜態和動態代碼間的依賴關系。後者可能無法獲得重要的依賴關系。例如,把數據寫入文件的代碼的變化,可能會引起從文件讀出數據的代碼的變化,雖然這兩段代碼之間沒有傳統意義上的依賴關系(例如數據和工作流)。運行時庫可以通過對首要執行模式和部署模式是否偏離的確認,用來指出執行的異常。代碼庫可以通過對多個項目API使用模式或者資料庫的挖掘,來確認正確的框架和API的使用模式。
然而軟體庫在實際應用中通常被用作保存記錄,很少用於決策支持。例如,歷史資料庫通常用來跟蹤一個錯誤或者一個功能的歷史,但是很少基於以往對於錯誤修復的時間對現有問題需要修復的時間做出判斷。
軟體庫數據挖掘領域是在眾多應用智能軟體的領域中,發展前景最為廣闊的領域之一。我們可以通過把這些靜的記錄轉變為「活」的信息,為現代軟體項目做出決策指導。例如,傳統上把代碼存檔的源代碼控制庫,可以與錯誤記錄庫相關聯,用來幫助從業人員記錄和交流復雜的變化,並且基於之前的修改和錯誤,當出現有風險的代碼時對他們進行警告。
智能軟體在軟體庫數據挖掘領域的應用要歸功於豐富,廣泛和隨時可用的軟體庫。表1列出了幾個可能用於數據挖掘的軟體庫的描述。圖1展示了可以被挖掘的數據的例子(第一列),通過對第一列中列出的每種軟體工程數據應用數據挖掘演算法(第三列)的軟體工程任務(中間列)的例子。
4. 智能軟體的實現
接下來我們著重提出需要軟體庫數據挖掘研究人員和軟體工程研究人員共同注意的一些領域,以確保軟體庫數據挖掘領域能夠為智能軟體的發展作出充分的貢獻。對每個我們認為有巨大潛力的領域,我們簡單地描述它的現狀和發展前景。
4.1 項目生命周期中的智能軟體
現狀 在2004至2008年間的軟體庫數據挖掘工作會議和研討會上對於當前出版物的分析顯示,大部分的出版物(大於80%)把注意力集中於源代碼和錯誤關聯庫。部分原因可能是由於舊的錯誤記錄庫和源代碼控制庫仍然可用,而且源代碼和錯誤報告結構合理,易於用來做自動分析和處理。對於軟體庫數據挖掘出版物的研究也表明,由於可用性的局限性,文檔資料庫很少被用來研究。總之,過去的軟體工程數據挖掘出版物著重挖掘源代碼和錯誤關聯庫,通常致力於促進軟體項目生命周期編碼階段的任務,受益的主要是開發人員。
未來方向 要實現智能軟體,未來軟體庫數據挖掘的工作應該著眼於更高的位置,而不僅僅局限於作為軟體項目生命周期中一小部分的編碼階段。項目經理,測試人員,部署人員和技術支持團隊,都是軟體系統的涉眾,他們都需要智能軟體的支持。以往的過分注重於開發階段的軟體庫數據挖掘工作是不正確的,並且限制了智能軟體對整個軟體產業的影響。此外,軟體庫數據挖掘的研究成功和創新應該納入涉眾日常的工作環境中,包括但不僅僅局限於集成開發環境。
4.2 智能軟體在非歷史資料庫中的應用
現狀 軟體庫數據挖掘領域開始於對歷史資料庫,如源代碼控制庫和錯誤記錄庫的研究。因此,似乎有一個錯覺,認為所有的軟體庫數據挖掘都是針對歷史數據源(或資料庫)的。這個錯覺需要被解決,來幫助智能軟體實現其全部潛力。我們認為:軟體庫數據挖掘和軟體工程數據挖掘的意義是相同的:軟體庫數據挖掘是關於挖掘軟體工程中任何類型的數據的(例如,執行日誌[18],整個互聯網上散落的代碼段[23,24,20],和API文檔資料[32]),即使這些數據沒有明確地存在於某個「庫」中。
未來方向 要實現智能軟體,未來軟體庫數據挖掘的工作應該著眼於更高的位置,而不僅僅局限於儲存在庫中的傳統類型的軟體工程數據。一些新興的數據類型,包括集成開發環境下的交互數據和工具,開發會議記錄(甚至是錄音和對口語的識別),技術支持電話記錄,和網上軟體產品發布信息。這些類型的數據可能是實時流的數據,而且由於過大或者隱似問題而不能儲存在庫中。事實上,由於越來越多的相對私人的信息正在變的可用,隱私問題需要引起整個軟體工程研究的關注。
此外,需要特別注意在研究和實踐中提高數據收集。現有的數據收集方法主要依賴於大數搜索,這將可能導致雜訊數據的出現。未來軟體庫數據挖掘的工作應該致力於提高庫和集成開發環境的設計,以便更容易地收集數據。一些現代的集成開發環境,如IBM Jazz[3] 和Microsoft Visual Studio Team Foundation Server [4],都在引領著正確的發展方向(允許在明確的產品中查找,而不是在雜訊數據中挖掘)。然而,為數據挖掘創造更高質量的數據需要大量的工作。然而,隨著智能軟體領域的成熟,我們希望創造一種新的角色,來負責維護和規劃軟體項目庫中的各種類型的數據。這些人員將確保高質量的數據存儲在這些庫中,並且可以使用多年。
最後,同時在多個數據源中挖掘數據是一個機遇,即使在異構數據,比如錯誤報告的文本數據,和測試失敗的執行數據之間執行。
4.3 智能軟體被用作高效的數據挖掘技術
現狀 以往的軟體庫數據挖掘工作主要是採用現成的數據挖掘(DM)演算法(比如關聯規則挖掘演算法和頻繁項集挖掘演算法[15]),或工具(比如Weka [18])。當這些軟體庫數據挖掘的研究人員在軟體工程的數據上應用這些挖掘演算法的時候,他們經常不得不降低他們的需求,以迎合現有的挖掘演算法和工具所能提供的服務。
未來方向 要實現智能能軟體,未來的軟體庫數據挖掘工作在如下領域要遵循問題驅動的方法:(1)實地調查在軟體工程領域的問題,(2)找出解決這些問題的數據挖掘需求,(3)從數據挖掘組織採納或接受高級的挖掘演算法[9],或者開發新的挖掘演算法[26,25]來滿足數據挖掘的需求。事實上,為軟體庫數據挖掘的需求開發一種新的演算法,對於軟體工程的研究人員是一項很大的挑戰。一種可能的解決方法是與數據挖掘的研究人員合作。另一種可能的解決辦法是通過預處理輸入數據,或者後置處理數據挖掘模式,來適應現有的數據挖掘演算法。
4.4 智能軟體在實踐中的應用
現狀 Coverity公司[1]和Pattern Insight公司[5]的一些成功的產品已經集成了基於軟體工程數據挖掘的思想和創新。這些產品被世界各地的從業人員所使用。使智能軟體依賴於現有的可用的庫(比如歷史變更庫,代碼執行日誌),在智能軟體創新實驗上的花費和阻礙相對於其他軟體工程技術創新(比如便捷開發和極限編程)要低得多。總之,如果公司有一個這樣的庫,可以非常容易地進行數據挖掘。
未來方向 為了使智能軟體得到廣泛的接受,我們必須首先考慮智能軟體將在什麼層面提供支持。例如,智能軟體可以幫助從業人員在小的問題上做出決策(審查某個特定的變更),或者大的問題(比如系統某個部分的重新設計)。智能軟體所提供的支持越具體,越有針對性,就越容易被採納。在整個管理鏈條中,需要越少的許可和花銷,智能軟體的提議就越容易被遵循(比如,審查修改還是重新設計某個組件)。
其次,我們要確保智能軟體技術是直觀的,並且智能軟體的結果要易於描述。直觀和易於理解是關鍵,甚至比高性能更為重要,因為一個主要的障礙是:沒有人希望他們的業務在一個未知的系統里運行。雖然一些數據挖掘技術[15]已經提供了易於理解的挖掘結果,公司仍然希望結果能夠變得更加詳盡。此外,在理解數據挖掘的結果和挖掘出的數據上使用有效的工具,將有利於智能軟體的結果在開發人員和管理者之間的交流。
5.結論
利用在商務智能領域取得的成就和經驗教訓,更多的理論需要被提出。在許多方面,智能軟體就是軟體公司的商務智能。我們應該深入探索,是否可以將出售軟體決策作為傳統商務智能平台的一部分,因為軟體正在越來越多的商務中扮演一個重要的角色,而且軟體商務也是商務的一種。我們可以探討,我們是否能用利用傳統的商務智能平台。例如,IBM當前的產品Rational Insight[2],就是利用Cognos商務智能平台為項目管理者提供智能軟體。在商務智能的基礎上構建智能軟體體系將更易於被接受,因為商務智能的基礎更為成熟和高級,而且已經被許多大型組織所認可。
我們認為,智能軟體不只對軟體從業人員,也為軟體工程研究人員提供支持。例如,智能軟體可以為現有的研究方向提供支持,並有助於實現軟體工程的自動化。我們設想,數據選擇(基於數據挖掘的結果)和數據挖掘(基於產生的數據)之間有一條協同的反饋迴路。當前的軟體測試工作[30,11]已經在開始研究這個迴路的概念,也就是所說的機器學習中的主動學習[12]。
智能軟體將在研究結果的評估上擔當越來越重要的角色。研究項目和論文可以而且應該根據他們對智能軟體的應用能力進行評估。而且他們必須向從業人員展示真實的價值。在軟體庫數據挖掘領域,一些新興的公司(在軟體庫數據挖掘的學術研究上成立的),比如Coverity[1],Pattern Insight[5],和Tasktop[7],已經展示了智能軟體在生產實踐中的巨大價值。我們期待著出現更多這種技術交流和智能軟體的成功案例。
我們強調智能軟體在實際中的應用,而不應該停滯在長遠的研究上面。例如,智能軟體將為研究人員和從業人員提供事實的依據,來幫助他們尋找先進的途徑,比如新的編程語言和工具,並且根據事實決定是否採納他們,而不是根據直覺。我們設想,智能軟體將成為一個各種軟體工程研究理論的通用平台。
致謝
Ahmed E. Hassan is the NSERC RIM Instrial Chair in Software Engineering. Tao Xie』s work is supported in part by NSF grants CNS-0716579, CCF-0725190, CCF-0845272, CCF-0915400, CNS- 0958235, an NCSU CACC grant, ARO grant W911NF-08-1-0443, and ARO grant W911NF-08-1-0105 managed by NCSU SOSI.
圖1-數據,數據挖掘演算法,和軟體工程任務[31]
軟體工程數據—
程序段:執行/靜態線程,協同變更等
圖:動態圖/靜態調用圖,依賴圖等
文本:錯誤報告,郵件,代碼注釋,文檔資料等
挖掘演算法—
關聯演算法,頻繁項集演算法/子序列法/偏序挖掘法,欄位匹配法/聚類法/分類法等
頻繁子圖挖掘演算法,圖匹配法/聚類法/分類法等
文本匹配法/聚類法/分類法等
軟體工程任務—
編程,維護,錯誤檢測,調試等
錯誤檢測,調試等
維護,錯誤檢測,調試等
表1:軟體庫的例子
源代碼控制庫:這些庫記錄項目的開發歷史。它們跟蹤與所有改變相關聯的源代碼的變化,例如,做出變更的開發人員的姓名,更改的時間,和一個簡短的描述。源代碼控制庫是軟體項目中最常用的庫。CVS, subversion, Perforce, ClearCase, 和 Git,都是實踐中被用到的源代碼控制庫的例子。
錯誤記錄庫:這些庫跟蹤大型軟體項目中開發人員和用戶提出的錯誤報告以及功能需求的解決方案。
通訊記錄庫:這些庫記錄軟體生命周期中所有關於軟體項目的討論。郵件列表,電子郵件,網路會議,即時信息,都是一個項目通訊記錄的例子。
部署日誌:這些庫對一個軟體系統或不同系統的單一部署信息進行記錄。例如,部署日誌可以記錄一個系統在不同站點的錯誤信息。部署日誌的使用仍在快速地增長,因為它在遠程問題解決上的使用(遠程上傳工具的沖突),和現代法律的規定。例如,2002年,塞班斯法案規定,電信和金融業的活動信息必須要進行記錄。
代碼庫:這些庫把大量項目的源代碼進行存檔。Sourceforge.net 和Google code都是大型代碼庫的例子。