19第 10 卷 第3 期 2014 年 3 月行的程序。国内以北京大学梅宏教授为主的学者最近几年提出了一种基于网构件(Internetware)[1]的软件工程方法。这种方法的最大特点就是将分布在互联网上的众多无序的基础资源,通过一定的方式组合成有序的资源,从而实现软件开发和实现的过程。加州大学欧文分校菲利普教授等人基于语义对象(Seman-ticObjectsTM)[2]的思想提出了一种新的语义软件工程方法学(semanticsoftwareengineeringmethodology)[3~8],它完整涵盖了软件开发的整个生命周期:一个语义软件是将用户的需求转换成一套语义元件词汇表,这个词汇表由数据对象和应用工具映射而来,再由语义对象来实现,并根据词汇表的不同组合得到各种不同需求的语义系统。随着系统的不断演化及其复杂程度的提高,新的语义元件也会随之而增加,用于设计更为复杂的语义系统。图1描述了整个语义软件开发过程。大数据的到来使未来的许多应用和程序对数据计算的精度要求并不明显,如针对海量大数据的金融分析、政府舆情监测、大气污染监控等。这些需求并不追求很高的精度,因为这些应用对事务处理要求不高,主要面向分析型的应用,但是对数据的处理能力要求极高。在这种环境下,基于软件工程方法应该一切以数据的处理和计算为目标和宗旨。为了适应大数据时代的各种分析型应用软件的开发,本文给出了一种软件设计模型。基于大数据的软件随着大数据时代的到来,现有的以既定逻辑思路为中心的软件工程方法在一定程度上已不能完全适应现代软件工程发展的需要。传统的软件工程方法主要考虑如何以系统性的、规范化的、可定量的过程化方法去开发、测试与维护软件。它涉及程序设计语言、数据库、标准、设计模式等方面。传统的软件工程方法主要包括:结构化方法、面向对象方法、形式化方法、基于网构件的软件工程方法及其语义软件工程方法等。结构化方法也称为生命周期方法学。它将软件生命周期划分为需求分析、总体设计、详细设计、软件测试及其软件维护等阶段。面向对象方法主要针对的是面向对象程序设计语言而产生的一种将数据和对数据的操作紧密地结合起来的方法。它通过不断的迭代逐步使得软件开发过程不断完善。形式化方法则将软件开发过程演化成为一种数学变换方法,将软件开发过程形式化为数学推理过程,最后演变成为可运张桂刚1,2 张 勇1 李 超1 邢春晓11清华大学2中国科学院自动化研究所一种基于大数据的软件设计模型关键词:大数据 软件工程 BDPL程序设计语言SemanticObjectsTM)图1 语义软件工程软件开发过程20专题第 10 卷 第 3 期 2014 年 3 月设计模型图2展示了基于大数据的软件设计模型。该模型可简单描述如下:1.用户(包括各种非专业程序员)。与脸谱(Facebook)提供的HiveQL查询语言和雅虎提供的PigLatin语言不同,这些语言虽然比写MapReduce函数已经有了很大的改进,但是要去学习HiveQL及PigLatin语言仍然有一定的难度。对于没有任何编程经验和编程概念的人来说,这是一件非常专业的事情。2.编程接口(普通PC机、手机或者任何其他终端)。用户可以在各种能够连接到网络的终端进行编程。3.程序设计语言BDPL(bigdataprogramminglanguage,大数据编程语言)。它是基于大数据的软件工程编程语言,与脸谱的HiveQL语言和雅虎的PigLatin语言类似。与后两者的最大区别是,BDPL是一种更接近人类思维、使用户更容易学习和掌握的说明式的程序设计语言。4.BDPL编译器。它的主要目的是对用户编写的BDPL程序进行编译。5.复杂计算分布式化处理模块。在云环境下,对云数据的处理已经变得越来越重要。而现有的MapReduce只能处理简单的过滤、聚合及统计抽取等计算。对大数据挖掘中涉及到的很多十分复杂的数据挖掘算法,很难用并行处理的MapReduce[9]思想来完成。为了提高数据仓库对复杂应用的处理能力,需要将这些计算进行分布式化处理,让它们能够分解成具有MapReduce并行处理能力的算法。6.各种函数库。包含map函数库、reduce函数库及用户自定义的各种函数库。7.云文件系统。主要指各种云文件系统,最典型的有谷歌的GFS[10]分布式文件系统、Apache的分布式文件系统HDFS[11]等。8.云数据库。主要指各种云数据库系统,最典型的有谷歌的BigTable[12]云数据库系统,Apache的HBase[13]及Cassan-dra[14]云数据库系统等。基于大数据的编程语言BDPL基于大数据的编程语言BDPL是一种说明式的程序设计语言。为了让包括非专业程序员在内的普通用户都能够掌握并使用这种语言,它的设计必须简单易掌握。下面是设计的最初始的基于大数据的编程语言BDPL的语法,它包含四个语句,分别如下。(1)选择语句(SELECT)从云资源中选择满足用户需求的各种资源,其基本语法简述如下:SELECT云资源表达式FROM云资源集合THAT(条件表达式清单,连接符号可以使用OR或者AND)例如:SELECT北京地区微博记录FROM存储在HBASE云数据库中的新浪微博短文本数据THAT短文本中包含“教育”,AND短文本中包含“租房”。(2)搜索语句(SEARCH)从云资源中搜索满足用户需求的各种资源,其基本语法简述如下:SEARCH云资源表达式FROM云资源集合THAT(条件表达式清单,连接符号使用OR或者AND)大数据程序设计语言BDPLBDPL编译器Map函数库Reduce函数库用户自定义函数库云文件系统(GFS,HDFS等)(3)云中大数据(BigData)大数据编程接口(普通PC机,手机或者其他任何终端)用户(包括各种非专业程序员)(1)(2)(8)(9)云数据库(BigTable,Hbase,等)K-means分布式算法关联规则分布式算法其他数据挖掘分布式算法MapReduce并行计算(4)(5)(6)大数据获取/存储大数据获取/存储(7)(7)复杂计算分布式化处理模块图2 基于大数据的软件设计模型21第 10 卷 第3 期 2014 年 3 月例如:SEARCH电影片段FROM存储在HDFS云文件系统中的YouTube视频大数据THAT视频片段包含“结婚场景”。(3)发现语句(FIND)从云资源中发现满足用户需求的各种资源,其基本语法简述如下:FIND云资源表达式FROM云资源集合THAT(条件表达式清单,连接符号使用OR或者AND)例如:FIND地区雾霾和燃煤销售量关系FROM(气象大数据AND燃煤销售大数据)THAT数据资源包含“北京”、“海口”、“南京”等。(4)调用语句(CALL)从云资源(大数据,来自云文件系统或者云数据库)中调用/获取满足用户需求的各种资源,其基本语法简述如下:CALL云资源表达式FROM云资源集合THAT(条件表达式清单,连接符号使用OR或者AND)例如:CALL地图导航信息FROM存储在GFS中的谷歌地图大数据THAT地图标记为清华大学东门。SELECT语句主要针对满足某些条件的具体资源的选择应用,SEARCH语句主要针对满足某些条件的资源的模糊搜索应用,FIND语句主要用于满足某些条件的更高层次的发现某种关系的应用,CALL语句与SELECT语句类似,不过它主要在具体的程序设计中用于调用某些资源,调用之后可能用于SE-LECT、SEARCH或者FIND语句的具体使用。BDPL编译器原理分析基于大数据的编程语言BDPL的程序由用户完成后,用户一旦编译,则编译器将对BDPL程序进行编译。由于BDPL程序是一种说明式的程序设计语言,故它的执行就是通过BDPL来调用一串串的函数,形成一系列函数流的过程。而各种算法最后都是由各种并行的函数组成,这些函数是map函数、reduce函数或者用户自定义的函数UDF。图3展示了BDPL的编译实现原理。BDPL程序编译器的工作流程包括四点:●在map函数/reduce函数/用户自定义函数库UDF中包含了f[a],f[b],f[c],⋯,f[k],f[m],f[n]等各种原子函数。●用户的某个大数据应用所需要的函数数量为F[1],F[2],⋯,F[Q]总共Q个函数。并且按照F[1],F[2],⋯,F[Q]的顺序先后调用。●这些调用的函数中有些是原子函数,如F[2]就是一个原子函数f[c];有些是由原子函数组合成的复杂函数,如F[1]是由f[a]与f[b]两个原子函数组合成的复杂函数,F[Q]是由f[k],f[m]与f[n]三个原子函数组合成的复杂函数。●原子函数的组合由一个组合算法来完成,该组合算法直接采用现有的BPEL的Web服务的组合算法。F[1]F[2]F[Q]f[a]f[b]F[1]f[c]f[k]f[m]组合算法f[n]组合算法F[2]F[Q]原子函数原子函数原子函数原子函数原子函数原子函数Map函数/Reduce函数/用户自定义函数库原子函数复杂函数复杂函数一个基于大数据的程序设计语言BDPL应用所需函数流图3 BDPL编译器工作流程22专题第 10 卷 第 3 期 2014 年 3 月由于所有运行在云中的资源都使用并行编程框架MapReduce来实现,最后的结果是转变成各种map函数、reduce函数及用户自定义函数来实现。图4展示了这种基于map与reduce函数的BDPL编译机制的一个具体案例。1.用户首先要编写好自己所需的BDPL程序,该BDPL程序可能是用户的一个查询计划、分析计划或者其他的复杂需求。2.BDPL编译器会调用两个map函数maptask3与maptask7。而maptask3与maptask7在算法库中没有现成的算法,BDPL将从算法库中调用maptask1和maptask2两个算法,组合成满足条件的算法maptask3。同样,BDPL还将调用maptask4、maptask5和maptask6三个算法,组合成满足条件的算法maptask7。其中maptask3和map task7将从云数据(来自云文件系统GFS,HDFS等或者云数据库BigTable,HBase等)中获取用户所需要处理的数据集(大数据)。当maptask3与maptask7处理完成后,BDPL程序需要调用reducetask3函数。由于reducetask3函数在算法库中没有现成的算法,BDPL会选择reducetask1和reducetask2两个函数进行组合来实现用户所需求的reducetask3的同等功能。当与reducetask3同等功能的两个子函数reducetask1与reducetask2完成后,就可以得到满足用户需求的结果(大数据查询、挖掘及其分析等的结果)。基于大数据的用户查询(分析)计划(BDPL程序)maptask1maptask2maptask3reducetask1maptask4maptask7reducetask2maptask5maptask6大数据查询、挖掘及其分析等的结果Reducetask3云数据(来自云文件系统GFS,HDFS或者云数据库BigTable,Hbase等)组合组合算法库组合图4 BDPL编译器工作流程案例(MapReduce)基于该模型的语意软件应用传统的语义计算技术主要依赖本体(ontology)技术、知识库技术、标签技术及其规则库等,通过它们赋予信息更为丰富的含义。例如语义搜索引擎就比基于关键词的搜索具有更多的语义,它可以将那些具有语义关联的信息作为结果搜索出来。随着技术的不断发展,人们逐渐不满足于基于传统语义计算的需求,更加希望能够按照自己的“意念”得到想要的东西。PhillipSheu等人基于SemanticObjectsTM[2]给出了一种语意计算的定义,可以描述为:语意计算(Semantic+Computing)=语义计算(SemanticComputing)+接近人类思维的人机界面。在传统的语义计算基础上,由于增加了一个接近人类思维的人机界面,因此能够比较好地将人的思维想