第三个例子,TopCoder,采用竞争性群体软件开发模式,25万名开发人员加入。美国在线委托TopCoder开发通信后端系统,他任命了两名职员做设计师和项目经理,他们组织了少数人员把这个系统分成52个部分,按照传统软件工程的来法要一年完成,但是TopCoder仅仅用了五个月就完成了,而且质量还很高,最终产品完全达到客户要求,并且程序中每一千行代码平均只有0.98个漏洞,低于业内要求他们每千行六个漏洞标准。所以做的很好,很成功。
既然物联网和在云计算的思想指导下实现的软件系统是超量的信息系统,咱们能不能够借鉴在Facebook,在APPStore,在TopCoder这些东西,从Facebook的应用数据处理,APPStore的应用程序到TopCoder简单服务系统,这种软件开发能不能进入在云计算模式下的超量的复杂系统,全面开花,使用群体方式来开发一个复杂系统。
这就是我这次想跟大家讨论的问题。因为群体一进入之后大家马上就会想到,解决超量的问题是不假,但是产生了新问题,什么问题?安全问题,安全问题成了大问题。所以我认为群体软件工程这么样一种新的软件工程,面对超量的信息系统,采用群体的研发,群体竞争的研发方式,产生安全可靠软件的这样一种新的工程,这就是群体软件工程。这是它的目标。
群体软件工程的核心理论是什么?就是刚才我们所克服的传统软件工程的几点。开发过程从封闭走向开放,就像TopCoder这些,都是从封闭走向开放。开发人员从精英走向大众,像APPStore调查的一样,80%以上的开发人员都是13岁-28岁的青年,精英是指受过严格的高等教育,他们28岁-13岁怎么可能受到这种高等教育。所以从精英走到大众,另外从工厂走向社区。三是从机械工程走到社会工程。看我们现在开发一个系统,跟我们研制一个大型客机一样,从自顶向下的设计,专业人士研究制造,训练有素,现在开发面向群社会服务的这样一些系统,就像建设城市一样,我们所有的城市建设都是在过去的基础上逐渐的堆垒起来的。把所有整个区域都消灭掉,然后重新建设,这也不可能。所以社会工程更多的思想将渗入到超量信息的研究,特别是在云的思想指导下的超量信息系统的构造的东西。
开发体系是两个都要,既要群体性,也要精英,两面都需要的。群体性和大众化解决软件超量开发的问题,群体性竞争机制对软件资源的形成、组合、测试、维护和服务的生产具有基础性的作用。精英做什么呢?计划性和精英化的整体规划和管理,精英化的管理机制对软件的构架、组织的法则、社会规范的形成具有宏观的决策作用,这是咱们中国特色的两点。市场是起着基础作用,政府起着宏观调控作用,一方面是大众,另一方面是精英,这两个优势都可以发挥出来,这是需要的体制。
群体软件工程的开发原则
开发原则我认为应该是使用者即设计者,使用者即开发者,使用者即维护者。这个在APPStore应用程序做到了,所有开发设计这些应用的,同时自己也是使用者。所以他的原则是这样。他的基本内容我认为至少要包括下面几个方面:
因为要群体参加,又要保证安全,所以整个的体系结构必须是多层的体系结构。屏蔽原理,群件组合服务原理,用户身份的多重性原理,开发者的竞争选择原理,竞争性测试和对抗性安全。我觉得至少应该包括这几个方面。
第一个方面,为什么变成了多层结构?咱们传统的软件系统,比如说以前Windows,我不是说Windows不好,我天天都在用,我是指对他们在过去这一阶段,实际上就是两层:一层是操作系统本身,另外一层是用户,用户我拿了操作系统之后,我拿了Windows之后,按照Windows的各种规定咱们来操作。说我今天觉得这个不好,我想修改修改,进到里面修改某部分,这是不可以的。所以一共就两层,这两层之间是不开放的。到了Android和APPStore为什么能够把群体这个事整进来呢?这是我个人的看法。第一步是在应用程序这方面把整个群体的积极性给调动起来。从软件结构看,它变成三层了,最下面这一层是操作系统,第二层是一个开发环境,第三层上是用户。那么用户怎么样呢?用户在操作系统中间增加了一层,整个开发环境是对用户都开放的。所以用户是个设计者是指我可以设计我的应用软件,但是我在开发环境里头进行设计。再深一步,从理论上说,这三层实际上的作用是什么呢?就是临层开放,隔层屏蔽,操作系统不是每个人都可以开放的,这样的话至少他在应用程序这一层面动员了千千万万的应用程序的爱好者,调动起群众的铜墙铁壁。但是同时操作系统这块他还能够保证安全,这是第一个基本的思想。
所以我们把这个想法再推广一下,如果我们想把群体软件、群体的开发深入到整个云计算的开发里面去,那么我们就应该把整个超量信息的云计算的系统分成很多个层次,使得每一个层次里面都遵从临层开放、隔层封闭,这样的话安全性问题就解决了,这是多层次。每一层怎么样?每一层就三样东西:一是群件库,函数库,给上层应用的。二是我的开发环境。三是数据库,在我这一层次里,这个已经都对我的上层、临层开放了,对我的上上层封闭。所以屏蔽原理我也讲了,临层开放,隔层屏蔽的原理。群件怎么样呢?每一层有基本群件和组合群件,组合群件为了云计算里的组合服务,但是我们仔细有一想Android之后会发现,组合服务其实就是一个基本的程序。怎么来组合这个层次里的服务呢?首先它基本的服务是从下一层提供的,比如说函数库。基本的组合是通过顺序语句组合,通过发收并存语句组合,这是核心的,比如Android领域用的Java,但是真正核心的就是这些东西。每一个层次都是这样,只是不同的层次里的基本群件是由下一层提供的。这是组合群件。
所以每一个层次既然都是这样,都类似JAY信息机一样,所以它是多态的层次。什么是多态?比如说我们在运用函数的时候,整形的除和实数的除法类型是一样的,但是态不同,一个是实数,一个是自然数,是整数,这个就是多态。我不详细讲了。
另外,什么叫群件基本达标呢?每层开发者的数量和该层群件的直接数量遵从二八律,遵从二八律我们才认为他达到了群体参与开发的要求。比如说咱们讲TopCoder,它实际上是25万人,但实际开发者只有48850人,占注册用户的19.6%,来自204个国家,中国的选手为11541个人。我在杭州讲的时候,浙江大学院长告诉我了,他们学院大概有几十个学生都从中国直接参与TopCoder的开发,而且很多同学就是因为TopCoder的开发解决了自己的学费、住宿所有的问题。说明这个群体软件适合我们中国。
怎么组织?要有执委会和协委会,像社会工程一样,有政府和人大的性质。另外很重要的一点,为什么TopCoder的开发质量还比原来的专业队伍还好,原因在哪里呢?就是把竞争性测试“引进来”,实战胜于沙盘。
总结一下,物联网是什么呢?物联网是为工业信息化和国防信息化服务的基础设施。云计算是什么呢?云计算是实现物联网的一种软件解决方案。群体软件工程是什么呢?是实现云计算服务的有效开发方法。
我就讲到这里,谢谢大家。