挖土源码
❶ 数据挖掘源代码
基本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都是大型代码库的例子。