聪鱼偷偷来袭

  晚上在宿舍正郁闷着,鸟江突然过来叫说要出去,也不知道咋回事。路上鸟江说聪鱼低调的回来,让我诧异了一下。好久没碰面了,听到兄弟回来,有一种亲切的感觉,那种感觉说不出来,大学四年的情谊无可比拟。大家坐在一起可以交心的畅谈,没有丝毫的隔阂,虽然平时没有太多联系,但一见面都仿佛回到了大学的时光,让人很是怀念。
  认识了一个新朋友,吉日,内蒙大汉,聪鱼的哥们,感觉不错,大我们两年,感觉比我成熟好多,听了他的一些见解,收益不少。
  今天老板找了两个朋友说要做我们项目的产业化,产业化很好,可是我一直对我们做的东西没什么信心,我们做的东西架构和思路都不错,但是实现起来很难,主要问题就是项目管理经验欠缺,开发人力资源匮乏,整个项目战线拉的很长。跟着两个朋友交流过程中,让我也学到不少:
  首先是我们项目的核心技术在哪里。是的我们项目涵盖了多个方面,融合了统计业务、数据挖掘、地理信息系统等多项关键技术,但是说实在,在任何一个方面我们都没有做精,该出彩的东西没办法出彩,该实现的功能没有落实,再好的构思也只是空谈。
  其次是软件项目的估值,我们花了这么长时间,换了几批人马,在做这个东西,有了一定的成果,如何合理的评估我们这个项目的价值。使用工时来衡量,还是有超越工时的价值的提升。实现了核心的功能,如何升华到应用领域?怎么把高深的算法应用到实际的案例当中,体现出这些算法的价值,进而提高我们系统的价值,值得思考。
  还有知己知彼,在和客户接触的时候,忽略了了解用户现在使用的系统和工具,没有了解好这些工具的特点,这些应该都是在早期调研阶段,深入的了解获取需求,但是在项目的一开始我们像没头的苍蝇,没有意识到这些问题,那么在这个时候到了,如何补救,还来得及吗?在这里,除了了解用户现在使用的系统,还要调查国内外相关领域现有的进展,相应的系统和工具,做到知己知彼。
  想到这些,难免会想为什么我们会走到这个境地,如何摆脱这样的困境?是该停下来思考,还是继续埋头做,我想还是停下来思考一下,整个项目的方向,建立一个共同的愿景,埋头苦作不可取,虽然赶上了一时的进度,但从全局上看只会导致战线越拉越长,所以还是停下来好好思考一下。

选择正确的挖掘工具

蔡伟杰 caiweijie528@yahoo.com

选择数据挖掘技术的两个步骤:

1)        将商业问题转化成一系列数据挖掘的任务。

2)        理解可以获得的数据的信息:内容、字段类型、记录之间的关系。

将商业问题转化数据挖掘的任务

       主要是六种任务:分类,估值,预测,篮子分析,聚集,描述。

       一个例子:分析客户流失的原因。任务就是分类,但是可以采用的技术有很多:MBRGA,连接分析,决策树,神经元网络。从中选择了决策树,是因为分完类之后,我们需要知道每个类的流失的原因。

技术

分类

估值

预测

篮子分析

聚集

描述

统计技术

关联规则

   

MBR

 

GA

 

     

聚集检测

       

 

连接分析

 

   

决策树

 

 

神经元网络

 

 

对可以挖掘的数据进行分析:

可能影响技术选择的一些数据性质

1)是种类字段占优势

2)是数值字段占优势

3)每个记录都有大量的字段(独立)

4)多个目标字段(非独立)

5)记录是变长的

6)有时间顺序的数据

7)自由文本数据

种类字段:

       关联分析和连接分析只适用于种类字段。

       决策树也可以很容易的用于种类字段。但是有一个忠告:就是当种类的值较多的时候,效果可能就会比较的差,当然如果限制分支的个数的时候,决策树的效果还是不错的。

       神经元网络:可以将种类字段转化成数值字段,但是这样就给种类字段强加了一个先后次序。也可以将种类字段作为多个输入,但是当值很多时,这种方法就成问题了。

数值字段:

       神经元网络将所有输入转化到0—1之间。

       MBR和聚集检测通过距离函数来处理数值字段。

决策树可以通过splitter数值来处理。

       对于关联分析,必须将数值变量区间化成种类变量。但是区间的选择是一个很困难的问题。

记录中的字段很多:

       神经元网络和MBR技术会受其影响,关联规则挖掘也会受影响。

       而决策树受其影响的程度就比较的小。

多个依赖变量:

       神经元网络是最佳的选择。

变长记录:

       只有关联规则和连接分析可以直接处理。

       对于其他的技术,数据需要一些处理。可以生成一些统计字段;将一条记录拆分成几条记录,每个含有记录号。

有时间顺序的数据:

       神经元网络,关联规则对时间顺序的数据的处理能力比较的好。

       决策树也能处理时间顺序,但是需要的数据准备就相对的比较的多一点。

自由文本:

       MBR

数据挖掘技术卡:

 

模型易理解性

模型易训练性

模型易实施性

通用性

有用性

产品可获得程度

统计

B

B

B

B

B

B

关联规则

A

A

A+

D

B

B

MBR

A-

B

B

A-

A-

C

GA

B-

C-

A-

B+

C

C

聚集检测

B+

B+

A-

A-

B-

B

连接分析

A-

C

B

D

B

C+

决策树

A+

B+

A+

A

A

B+

神经元网络

C-

B-

A-

A

A

A

几种方法的混合使用:

如何选择数据挖掘软件包:

1)    卖主提供有哪些数据挖掘技术

2)    在数据大小,用户数,字段数,硬件方面的伸缩能力

3)    有哪些硬件、软件平台的产品是现在就有的?

4)    是否提供对数据库和文件的透明访问?

5)    是否能有效的利用您的网络能力?

6)    是否提供多层的用户界面?

7)    是否对生成的结果有一个很好的解释?

8)    是否支持是图形化、可视化的,有没有报表工具?

9)    是否能处理不同的数据类型?

10) 是否容易使用?

11) 产品支持和顾问的方便程度?

12) 是否容易整合在一起?

13) 卖主的信用度如何?

统计学和数据挖掘:交叉学科

统计学和数据挖掘:交叉学科

摘要:统计学和数据挖掘有很多共同点,但与此同时它们也有很多差异。本文讨论了两门学科的性质,重点论述它们的异同。

关键词:统计学 知识发现

1、简介

统计学和数据挖掘有着共同的目标:发现数据中的结构。事实上,由于它们的目标相似,一些人(尤其是统计学家)认为数据挖掘是统计学的分支。这是一个不切合实 际的看法。因为数据挖掘还应用了其它领域的思想、工具和方法,尤其是计算机学科,例如数据库技术和机器学习,而且它所关注的某些领域和统计学家所关注的有 很大不同。

统计学和数据挖掘研究目标的重迭自然导致了迷惑。事实上,有时候还导致了反感。统计学有着正统的理论基础(尤其是经过本世纪的发展),而现在又出现了一个新的学科,有新的主人,而且声称要解决统计学家们以前认为是他们领域的问题。这必然会引起关注。更多的是因为这门新学科有着一个吸引人的名字,势必会引发大家的兴趣和好奇。把“数据挖掘”这个术语所潜在的承诺和“统计学”作比较的话,统计的最初含义是“陈述事实”,以及找出枯燥的大量数据背后的有意义的信息。当然,统计学的现代的含义已经有很大不同的事实。而且,这门新学科同商业有特殊的关联(尽管它还有科学及其它方面的应用)。

本文的目的是逐个考察这两门学科的性质,区分它们的异同,并关注与数据挖掘相关联的一些难题。首先,我们注意到“数据挖掘”对统计学家来说并不陌生。例如,Everitt定义它为:“仅仅是考察大量的数据驱动的模型,从中发现最适合的”。统计学家因而会忽略对数据进行特别的分析,因为他们知道太细致的研究却难以发现明显的结构。尽管如此,事实上大量的数据可能包含不可预测的但很有价值的结构。而这恰恰引起了注意,也是当前数据挖掘的任务。

2、统计学的性质

试图为统计学下一个太宽泛的定义是没有意义的。尽管可能做到,但会引来很多异议。相反,我要关注统计学不同于数据挖掘的特性。

差异之一同上节中最后一段提到的相关,即统计学是一门比较保守的学科,目前有一种趋势是越来越精确。当然,这本身并不是坏事,只有越精确才能避免错误,发现真理。但是如果过度的话则是有害的。这个保守的观点源于统计学是数学的分支这样一个看法,我是不同意这个观点的(参见【15】,【9】,【14】,【2】,【3】)尽管统计学确实以数学为基础(正如物理和工程也以数学为基础,但没有被认为是数学的分支),但它同其它学科还有紧密的联系。

数学背景和追求精确加强了这样一个趋势:在采用一个方法之前先要证明,而不是象计算机科学和机器学习那样注重经验。这就意味着有时候和统计学家关注同一问题的其它领域的研究者提出一个很明显有用的方法,但它却不能被证明(或还不能被证明)。统计杂志倾向于发表经过数学证明的方法而不是一些特殊方法。数据挖掘 作为几门学科的综合,已经从机器学习那里继承了实验的态度。这并不意味着数据挖掘工作者不注重精确,而只是说明如果方法不能产生结果的话就会被放弃。

正是统计文献显示了(或夸大了)统计的数学精确性。同时还显示了其对推理的侧重。尽管统计学的一些分支也侧重于描述,但是浏览一下统计论文的话就会发现这些文献的核心问题就是在观察了样本的情况下如何去推断总体。当然这也常常是数据挖掘所关注的。下面我们会提到数据挖掘的一个特定属性就是要处理的是一个大数 据集。这就意味着,由于可行性的原因,我们常常得到的只是一个样本,但是需要描述样本取自的那个大数据集。然而,数据挖掘问题常常可以得到数据总体,例如关于一个公司的所有职工数据,数据库中的所有客户资料,去年的所有业务。在这种情形下,推断就没有价值了(例如,年度业务的平均值),因为观测到的值也就是估计参数。这就意味着,建立的统计模型可能会利用一系列概率表述(例如,一些参数接近于0,则会从模型中剔除掉),但当总体数据可以获得的话,在数据挖掘中则变得毫无意义。在这里,我们可以很方便的应用评估函数:针对数据的足够的表述。事实是,常常所关注的是模型是否合适而不是它的可行性,在很多情形下,使得模型的发现很容易。例如,在寻找规则时常常会利用吻合度的单纯特性(例如,应用分支定理)。但当我们应用概率陈述时则不会得到这些特性。

统计学和数据挖掘部分交迭的第三个特性是在现代统计学中起核心作用的“模型”。或许“模型”这个术语更多的含义是变化。一方面,统计学模型是基于分析变量间的联系,但另一方面这些模型关于数据的总体描述确实没有道理的。关于信用卡业务的回归模型可能会把收入作为一个独立的变量,因为一般认为高收入会导致大的 业务。这可能是一个理论模型(尽管基于一个不牢靠的理论)。与此相反,只需在一些可能具有解释意义的变量基础上进行逐步的搜索,从而获得一个有很大预测价 值的模型,尽管不能作出合理的解释。(通过数据挖掘去发现一个模型的时候,常常关注的就是后者)。

还有其它方法可以区分统计模型,但在这里我将不作探讨。对此可参见【10】。这里我想关注的是,现代统计学是以模型为主的。而计算,模型选择条件是次要的,只是如何建立一个好的模型。但在数据挖掘中,却不完全是如此。在数据挖掘中,准则起了核心的作用。(当然在统计学中有一些以准则为中心的独立的特例。Gifi的关于学校的非线性多变量分析就是其中之一。例如,Gifi说,在本书中我们持这样的观点,给定一些最常用的MVA(多变量分析)问题,既可以从模型出发也可以技术出发。正如我们已经在1.1节所看到的基于模型的经典的多变量统计分析,……然而,在很多情形下,模型的选择并不都是显而易见的,选择一个合适的模型是不可能的,最合适的计算方法也是不可行的。在这种情形下,我们从另外一个角度出发,应用设计的一系列技术来回答MVA问题,暂不考虑模型和最优判别的选择。

相对于统计学而言,准则在数据挖掘中起着更为核心的作用并不奇怪,数据挖掘所继承的学科如计算机科学及相关学科也是如此。数据集的规模常常意味着传统的统计 学准则不适合数据挖掘问题,不得不重新设计。部分地,当数据点被逐一应用以更新估计量,适应性和连续性的准则常常是必须的。尽管一些统计学的准则已经得到 发展,但更多的应用是机器学习。(正如“学习”所示的那样)

很多情况下,数据挖掘的本质是很偶然的发现非预期但很有价值的信息。这说明数据挖掘过程本质上是实验性的。这和确定性的分析是不同的。(实际上,一个人是不 能完全确定一个理论的,只能提供证据和不确定的证据。)确定性分析着眼于最适合的模型-建立一个推荐模型,这个模型也许不能很好的解释观测到的数据。很 多,或许是大部分统计分析提出的是确定性的分析。然而,实验性的数据分析对于统计学并不是新生事务,或许这是统计学家应该考虑作为统计学的另一个基石,而 这已经是数据挖掘的基石。所有这些都是正确的,但事实上,数据挖掘所遇到的数据集按统计标准来看都是巨大的。在这种情况下,统计工具可能会失效:百万个偶 然因素可能就会使其失效。(【11】中包含例子)

如果数据挖掘的主要目的是发现,那它就不关心统计学领域中的在回答一个特定的问题之前,如何很好的搜集数据,例如实验设计和调查设计。数据挖掘本质上假想数据已经被搜集好,关注的只是如何发现其中的秘密。

3、数据挖掘的性质

由于统计学基础的建立在计算机的发明和发展之前,所以常用的统计学工具包含很多可以手工实现的方法。因此,对于很多统计学家来说,1000个数据就已经是很大的了。但这个“大”对于英国大的信用卡公司每年350,000,000笔业务或AT&T每天200,000,000个 长途呼叫来说相差太远了。很明显,面对这么多的数据,则需要设计不同于那些“原则上可以用手工实现”的方法。这意味这计算机(正是计算机使得大数据可能实 现)对于数据的分析和处理是关键的。分析者直接处理数据将变得不可行。相反,计算机在分析者和数据之间起到了必要的过滤的作用。这也是数据挖掘特别注重准 则的另一原因。尽管有必要,把分析者和数据分离开很明显导致了一些关联任务。这里就有一个真正的危险:非预期的模式可能会误导分析者,这一点我下面会讨论。

    我不认为在现代统计中计算机不是一个重要的工具。它们确实是,并不是因为数据的规模。对数据的精确分析方法如bootstrap方法、随机测试,迭代估计方法以及比较适合的复杂的模型正是有了计算机才是可能的。计算机已经使得传统统计模型的视野大大的扩展了,还促进了新工具的飞速发展。

    下面来关注一下歪曲数据的非预期的模式出现的可能性。这和数据质量相关。所有数据分析的结论依赖于数据质量。GIGO的 意思是垃圾进,垃圾出,它的引用到处可见。一个数据分析者,无论他多聪明,也不可能从垃圾中发现宝石。对于大的数据集,尤其是要发现精细的小型或偏离常规 的模型的时候,这个问题尤其突出。当一个人在寻找百万分之一的模型的时候,第二个小数位的偏离就会起作用。一个经验丰富的人对于此类最常见的问题会比较警 觉,但出错的可能性太多了。

    此类问题可能在两个层次上产生。第一个是微观层次,即个人记录。例如,特殊的属性可能丢失或输错了。我知道一个案例,由于挖掘者不知道,丢失的数据被记录为99而 作为真实的数据处理。第二个是宏观层次,整个数据集被一些选择机制所歪曲。交通事故为此提供了一个好的示例。越严重的、致命的事故,其记录越精确,但小的 或没有伤害的事故的记录却没有那么精确。事实上,很高比例的数据根本没有记录。这就造成了一个歪曲的映象-可能会导致错误的结论。

    统计学很少会关注实时分析,然而数据挖掘问题常常需要这些。例如,银行事务每天都会发生,没有人能等三个月得到一个可能的欺诈的分析。类似的问题发生在总体随时间变化的情形。我的研究组有明确的例子显示银行债务的申请随时间、竞争环境、经济波动而变化。

    至此,我们已经论述了数据分析的问题,说明了数据挖掘和统计学 的差异,尽管有一定的重迭。但是,数据挖掘者也不可持完全非统计的观点。首先来看一个例子:获得数据的问题。统计学家往往把数据看成一个按变量交叉分类的 平面表,存储于计算机等待分析。如果数据量较小,可以读到内存,但在许多数据挖掘问题中这是不可能的。更糟糕的是,大量的数据常常分布在不同的计算机上。 或许极端的是,数据分布在全球互联网上。此类问题使得获得一个简单的样本不大可能。(先不管分析“整个数据集”的可能性,如果数据是不断变化的这一概念可 能是不存在的,例如电话呼叫)

    当描述数据挖掘技术的时候,我发现依据以建立模型还是模式发现 为目的可以很方便的区分两类常见的工具。我已经提到了模型概念在统计学中的核心作用。在建立模型的时候,尽量要概括所有的数据,以及识别、描述分布的形 状。这样的“全”模型的例子如对一系列数据的聚类分析,回归预测模型,以及基于树的分类法则。相反,在模式发现中,则是尽量识别小的(但不一定不重要)偏 差,发现行为的异常模式。例如EEG轨 迹中的零星波形、信用卡使用中的异常消费模式,以及不同于其它特征的对象。很多时候,这第二种实验是数据挖掘的本质-试图发现渣滓中的金块。然而,第一类 实验也是重要的。当关注的是全局模型的建立的话,样本是可取的(可以基于一个十万大小的样本发现重要的特性,这和基于一个千万大小的样本是等效的,尽管这 部分的取决于我们想法的模型的特征。然而,模式发现不同于此。仅选择一个样本的话可能会忽略所希望检测的情形。

    尽管统计学主要关注的是分析定量数据,数据挖掘的多来源意味着 还需要处理其它形式的数据。特别的,逻辑数据越来越多-例如当要发现的模式由连接的和分离的要素组成的时候。类似的,有时候会碰到高度有序的结构。分析的 要素可能是图象,文本,语言信号,或者甚至完全是(例如,在交替分析中)科学研究资料

    4、讨论

    数据挖掘有时候是一次性的实验。这是一个误解。它更应该被看作是一个不断的过程(尽管数据集时确定的)。从一个角度检查数据可以解释结果,以相关的观点检查可能会更接近等等。关键是,除了极少的情形下,很少知道哪一类模式是有意义的。数据挖掘的本质是发现非预期的模式-同样非预期的模式要以非预期的方法来发现。

与把数据挖掘作为一个过程的观点相关联的是认识到结果的新颖性。许多数据挖掘的结果是我们所期望的-可以回顾。然而,可以解释这个事实并不能否定挖掘出它们 的价值。没有这些实验,可能根本不会想到这些。实际上,只有那些可以依据过去经验形成的合理的解释的结构才会是有价值的。

显然在数据挖掘存在着一个潜在的机会。在大数据集中发现模式的可能性当然存在,大数据集的数量与日俱增。然而,也不应就此掩盖危险。所有真正的数据集(即使 那些是以完全自动方式搜集的数据)都有产生错误的可能。关于人的数据集(例如事务和行为数据)尤其有这种可能。这很好的解释了绝大部分在数据中发现的“非 预期的结构”本质上是无意义的,而是因为偏离了理想的过程。(当然,这样的结构可能会是有意义的:如果数据有问题,可能会干扰搜集数据的目的,最好还是了 解它们)。与此相关联的是如何确保(和至少为事实提供支持)任何所观察到的模式是“真实的”,它们反应了一些潜在的结构和关联而不仅仅是一个特殊的数据 集,由于一个随机的样本碰巧发生。在这里,记分方法可能是相关的,但需要更多的统计学家和数据挖掘工作者的研究。

数据挖掘科学正在萌芽。Fayyad et al做了重要的基础工作【6】,目前的研究范围可以参考国际知识发现和数据挖掘系列学报和《数据挖掘和知识发现》杂志所列的主题和领域(两个最重要的学报是【12】和【11】)。关于统计学和数据分析的论文包括【8】,【4】和【10】。

 

参考文献目录见原文。

国内外数据挖掘软件发展现状

国外产品

数据库与数据挖掘

Microsoft SQL Server

IBM DB2 Intelligent Miner

Oracle

Sybase

专业分析工具
  
SPSS

        SPSS offers software and solutions that help organizations direct and automate decisions to meet their goals and achieve measurable competitive advantage.

SAS

        SAS is the leader in business intelligence and predictive analytics software. With 31 years’ experience and 43,000 customer sites worldwide, we can help you manage performance by transforming your data into predictive insights.

I
nsightful

        Insightful Miner is a powerful, scalable, data mining and analysis workbench that enables organizations to deliver customized predictive intelligence where and how it is needed. Its easy-to-use interface is specifically designed for statisticians and business analysts without specialized programming skills. With Insightful Miner, you can quickly find the answers you need to solve specific business issues and easily communicate your results to colleagues across the organization.

unica

Statsoft

国内产品

复旦德门  (上海)

天才博通  (天津)

马克威 (天津) 

产品特点:
  
   数据模型
   支持算法
   应用领域
   特色

connecting string

Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Registry Path=;
Jet OLEDB:Database Locking Mode=1;
Jet OLEDB:Database Password=;
Data Source="dbpmm.mdb";Password=;
Jet OLEDB:Engine Type=5;
Jet OLEDB:Global Bulk Transactions=1;Provider="Microsoft.Jet.OLEDB.4.0";
Jet OLEDB:System database=;
Jet OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;
Jet OLEDB:New Database Password=;
Jet OLEDB:Create System Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;User ID=Admin;Jet OLEDB:Encrypt Database=False

软件工程的一些思考

软件工程的一些思考

两个人以上的项目,就需要有管理。为什么这么说呢?因为有两个人,就需要交流;有交流,就必然会有合作;有合作,就需要有分工;有分工,就需要有协调;有所有这些,就需要有管理。但此刻的管理,我们说,杀鸡用牛刀,高射炮打蚊子,都是不智的。但还是需要管理。

然而一个人的项目是否不需要管理?当然不是,因为有文档,有代码,有灵感,有经验,等等都需要管理。只是此刻的管理是自己完成的,可以更简单一点。我们已经有过一遍又一遍的调试以前已经fix过的bug体验,也有过一遍又一遍的查找以前自己实现过的技术的经历。软件工程的理论,在开发过程中的作用,就是指导如何做好管理,以取得软件的可用性、正确性和合理性。如果我们清楚知道这是它的目标,就可以抛开一些对自己不适用的枝节。

那么它是如何做到这一点的?

我认为软件工程中最重要的,最有实际意义的,是它界定了工作职能,从而也确定了责任归属。什么意思?说白了,就是什么人做什么事,出了问题谁负责。那么它是怎么界定工作职能的?是通过对软件开发流程的划分来实现的。软件工程把软件的开发划分成很多个相对独立的阶段,每一个阶段都有相关的人员来实现,也就有相关的人员来负责。分工不清,责权不明,是导致管理混乱的最主要的因素。所以即使是两个人的项目,也是需要软件工程来指导的,因为通过它,可以更好的知道如何可以合理分工,划分工作职权以取得最终的成果。当然,走教条主义的道路是非常愚蠢的。

那么软件工程到底是什么?

软件工程是针对“软件危机”提出来的。它是一种工程,把经验和理论应用到实践中来,解决软件开发中出现的各种问题。
这是什么意思?就是说,软件工程是用来解决实际问题的。如果软件开发中没有遇到管理问题,软件工程就不需要管理的内容;如果软件开发中没有遭遇文档混乱,软件工程就不需要文档的部分。但是如果很幸运的遭遇到了这些,那么这一切都是不可或缺的。软件工程不是一个固定的呆板的框框,而是一个有弹性的概念。所以,如果不是要去申请iso或是cmm认证,完全不必要一板一眼的按照iso或是cmm的规范去做。所谓“有企业特色的软件工程”,完全可以从吸收现有的模式和规范中完善起来。
但这并不是说所有在开发过程中出现的都是软件工程,只有那些能引导开发走向成功的才是真正有意义的软件工程。其他的,最多只是失败的尝试。

那么应该什么时候开始实施软件工程?

软件工程一定要在一个项目开始之前开始吗?一定要贯穿整个项目吗?为什么?
不是的,软件工程可以在项目进行中的任何时候开始,也可以在任何不再需要的时候结束。因为软件工程把开发流程划分成不同的阶段,所谓“生命周期”,在不同的生命周期,软件工程提供了不同的模式可以参考。

那么软件公司如何实施软件工程?

首先要知道软件工程,理解软件工程;然后要了解现有的软件工程的模式和规范。ISO、CMM或是Agility,都定义了一套规范。这些规范是经验与技术,以及理论的积累。它们存在很多合理的、可行的模式,可以引用和参考;但银弹是没有的。当然,我们可以重头再来,造他们造过的轮子,摔他们摔过的跤;但很明显,这是不必要的。

实施的最好方法,也是最可行的方法,成本最小的方法,是根据开发的客观的因素,修改那些规范,以符合我们的开发过程;但是最主要的,是修改我们的主观认识,以符合那些规范;而最重要的,是在实施中发现那些规范不合理的地方,并改正它。

那是否会变得无法适从,从而陷入混乱?

是的,有这可能,所以任何的修正都应该是谨慎的。所有的修改提议都应该是自上而下的,而决定都是自下而上的。

软件工程对项目的规模有要求吗?

我们担心过小的项目应用软件工程是否会陷入官僚主义,从而加重项目的负担?
我们再来看什么是软件工程?软件工程并没有定义什么才是软件工程!也没有定义软件工程自身的规模。软件工程的意义在于对开发阶段的划分,以及分工和责任归属。这与项目的规模没有什么冲突。相反,越是小的项目越是需要软件工程的管理。软件开发的一个共识,是把一个大的项目划分成一些小的模块,再把小的模块划分成更小的模块。如果这些小模块是独立的(或者原来就是一个独立的项目),那么软件工程至少可以提高它的重用性。

对于一个软件工程观念不深的团队,不要期望他们在接手大的项目的时候可以使用软件工程,如果他们在小项目中不愿使用的话。前者的复杂度不是他们可以想象和承受的。

应用软件工程会增加工作量吗?

是的,但只是针对那些在不使用软件工程管理的项目中很轻松的人而言的。软件工程会使他们要么失业,要么负起责任来。相对工程师而言,他们会从混乱的毫无头绪的状态中解放出来,他们的工作会变得有效率。损失的是以前尸位素餐的人将暴露出来——这可能是它的唯一的缺陷,同时也是它受到很多企业/个人抵制的可能原因之一。

我们应该怎么做?

学习!如果我们不想重头发明一个轮子的话。

尝试!如果我们希望改变的话。