汪珏 龚建伟 柏鹏 贾颖
【摘要】随着IT应用的推广和Web 2.0的兴起,用户的个性化应用需求越来越多,如何迅速地满足用户大量的开发和维护需求成为软件开发面临的一个重要问题。能否让最终用户也能开发软件?选择中职院校Web信息系统为研究领域,研究最终用户编程技术,设计了一个面向最终用户的Web信息领域特定语言VUDSL,并开发了相应的编程工具,让不具有软件工程知识的最终用户能使用可视化编程的方式开发出信息系统。VUDSL目前已在实际中成功试用。
【关键词】最终用户编程;可视化编程;领域特定语言
An end-user programming language for college information domain
Wang Jue1 Gong JianWei1 Bai Peng1 Jia Ying2
(1.Zhejiang Traffic Technician College,Zhejiang 321015;2.School of Software,Shanghai Jiao Tong University,Shanghai 200240)
Abstract:With the promotion of IT applications and the rise of Web 2.0,mass users'individual requirements continue to emerge.How to quickly meet usersdevelopment and maintenance requirements has been a critical problem of software development.Is it possible for end-users to develop software?This paper chooses college Web information systems as the research field,studies the end-user programming technology,designs an end-user oriented domain-specific language for college Web information system-VUDSL,and develops appropriate programming tools.The tools support end-users without the knowledge of software engineering to develop target information systems by visual programming.VUDSL has been successfully tested in practice.
Key word:End-user programming;Visual Programming;DSL
1.引言
軟件技术发展至今,软件供不应求的现象依旧很严重,如何缓解这一矛盾一直是软件工程领域面临的一个重要问题。除了模型驱动开发、代码自动生成、敏捷开发过程等,最终用户编程(End-user Programming)可能将是有效解决上述问题的方法之一。最终用户编程不仅可以利用数量巨大的最终用户资源,而且可以解决传统的应用开发方法中IT人员对业务需求理解不足的问题,从而能更加快速高效地开发出满足实际需要的软件产品。至今,最终用户编程在一些商业软件的应用中得到了普及,比如在文字处理器中录制宏,电子表格计算和定义电子邮件过滤器等[1]。另外MIT多媒体实验室和谷歌等也在最终用户编程领域做了大量研究工作,并取得了一定的研究成果。
Ko、Myers和Aung等人描述了最终用户在试图学习和使用编程语言的过程中可能存在六个障碍:设计障碍、选择障碍、协调障碍、使用障碍、理解障碍和信息障碍[2],最终用户直接编程是很困难的。因此,在面向最终用户的编程中,提供可视化的图形化编程方式将减少用户编程的障碍,大大提高用户的编程效率。
本文以中职院校Web信息系统领域为研究的对象,研究设计了面向最终用户的可视化的Web信息领域特定语言VUDSL,并开发了VUDSL的可视化编程工具,用户只需通过拖拉可视化的图形块的“搭积木”方式即可完成编程的工作。
2.院校信息领域特定语言VUDSL的研究
2.1 VUDSL的设计目标
中职院校Web信息系统领域特定语言VUDSL的设计目标如下:
(1)面向最终用户:VUDSL的主要设计目标是解决文献[2]中提到的六个障碍,将IT领域与中职院校业务领域融合起来,解决中职院校Web信息系统领域业务需求复杂多变、软件产品供不应求的问题。
(2)覆盖中职院校Web信息系统领域的应用功能:应用功能主要包括教务管理、学生管理、教学管理等,为了覆盖这些功能VUDSL应该有足够的表达能力,能够完成这些应用的定义。
(3)目标语言无关性:VUDSL能够转化成多平台、多解决方案的目标代码,比如J2EE、ASP和PHP等。
2.2 VUDSL的总体设计
中职院校Web信息系统是一个典型的信息系统,适合采用MVC的架构,结合目前Web领域一些比较流行的MVC框架(如SSH)和中职院校Web信息系统的领域特性,本文将VUDSL设计为四个部分:模型(Model)、逻辑(Logic)、页面(View)、页面动作流(Page Action Flow,简称PAF)。VUDSL的元模型如图1所示。
图1 VUDSL元模型
(1)模型用于定义应用的持久化数据,它有若干实体类(entity)组成,每一个实体类拥有多个属性以及多个方法,每个实体类在数据库中有一个对应的表,用于长久存放数据,表格的字段和实体类的属性是一一对应的。
(2)逻辑用于定义应用的处理逻辑,它由若干逻辑动作组成,逻辑动作能够对数据实体进行操作,逻辑动作和数据实体一起可以表示出复杂的处理逻辑,逻辑动作可以通过跳转到一个逻辑动作或者页面而和其他逻辑动作或页面关联起来。
(3)页面用于定义应用的展现方式,它由多个页面节点组成,一个页面节点由多个页面元素组成。页面与逻辑动作之间的参数传递通过Web应用中的session实现,即页面或者逻辑动作需要传递参数时,它将参数保存于session当中,在传递的目标页面或者逻辑动作中,该参数将被读取到。
(4)页面动作流用于定义目标信息系统的业务处理逻辑的流程,业务逻辑的流程主要通过页面和逻辑动作之间的跳转关系的定义来体现。
以下各节将分别对VUDSL的四个组成部分进行详细描述。
2.3 页面动作流
中职院校Web信息系统领域包括的主要应用有学生管理、教学管理、考试管理、成绩管理等,分析该领域的特点发现该领域中的应用有很强的流程化特性,因此在VUDSL的设计中定义了PAF来表示该领域的流程。
最终用户在编程时,可能存在程序设计障碍和协调障碍(即不知道组件间如何协调工作),本文在VUDSL中设计PAF能解决最终用户编程时的设计障碍问题,最终用户只需要定义好业务流程,围绕这个业务流程定义就能很轻松地搭建目标信息系统。
中职院校Web信息系统是由一系列的并列的业务流程Bi(i=1,2,3,...,n)组成,一个业务流程Bi可以用一系列有组织的业务节点来表示Bi=
表1 页面动作流图符
名称 图符
开始节点
页面节点
动作节点
有向连线
2.4 模型
最终用户在编程时,可能存在理解障碍和使用障碍,因此在VUDSL设计了模型,通过对模型中数据实体的定义,来引导最终用户完成概念模型到数据模型的转换。
VUDSL模型的每个属性拥有一种数值类型,每个实体由多个属性构成。数据实体本身也是一种属性类型,这样数据实体间就存在了关联关系。模型的可视化图符如表2所示:
表2 模型图符
名称 图符
实体名称
属性
2.5 逻辑
VUDSL的逻辑动作节点Bai由多个有组织的程序语句块组成,这些语句块可以是顺序拼接也可以是内部嵌入。用户将相应的语句块拖拽拼接起来即可完成业务逻辑的定义。VUDSL的语句块可以分为三类:值语句块(ValueBlock)、可嵌套语句块(NestableBlock)和可测试语句块(TestableBlock)。
值语句块用于定义变量或获取变量,代表了一个有值返回的一个操作。VUDSL中定义的值语句块有获取全局变量语句块(GetBlobal-Block)、字符串语句块(StringBlock),如图2所示,其中varName为变量名称,类型为字符串,語句块返回的是该全局变量的值。字符串语句块中value为字符串语句块的值,类型为字符串。
图2 值语句块的成员
图3 可嵌套语句块的成员
可嵌套语句块用于表示业务逻辑的程序结构,包括顺序结构、分支结构、循环结构等。一个逻辑动作节点有一个作为入口的根语句块,该语句块即为一个可嵌套语句块,表示业务逻辑从这个语句块开始。VUDSL中定义的可嵌套语句块有:条件语句块(IfBlock)、循环语句块(WhileBlock)、跳转语句块(OutputBlock)、设置全局变量语句块(SetGlobalBlock)、更新变量语句块(UpdateBlock)等,如图3所示。
其中条件语句块由三个嵌套进去的语句块组成,condition为一个可测试语句块,如果该语句块的测试条件成立则逻辑进入有一些顺序组成的可嵌套逻辑块集合content集合中。可嵌套语句块的顺序组合的集合也是一个可嵌套语句块。循环语句块中condition为可测试语句块,如果测试条件成立则循环执行content集合中的可嵌套语句块。跳转语句块中的name表示一个跳转名称。设置全局变量语句块设置变量名为varName的全局变量,变量的值为value值语句块的返回值。更新变量语句块更新变量名为varName的值为value值语句块的返回值。
可测试语句块表示条件分支和循环分支的测试条件,典型的可测试语句块包括相等语句块(EqualsBlock)、大于(GreaterThanBlock)、小于(LessThanBlock)、并且(AndBlock)和或者(OrBlock)等语句块,其定义都是一个二元的可测试语句块:相等语句块中,当左右值相等时语句块返回真,大于、小于与此类似。并且语句块中当左右可测试语句块的返回都为真的时候返回真,否则返回假,或者语句块与此类似。如图4所示。
图4 可测试语句块的成员
逻辑部分的可视化图符,如表3所示。
表3 逻辑图符
名称 图符
如果—则
循环
等于
大于
小于
或者
并且
保存
变量
查找
跳转
2.6 页面
VUDSL的页面节点Bpi有三类元素组成:控件、页面绑定的实体、绑定关系,可以表示为Bpi=
页面节点和逻辑动作节点一般(除了只用于显示的页面和只更新数据的动作)都有数据实体输出。页面节点的输出由页面中的按钮元素和链接元素定义,这二者都会定义一个输出的标志字符串;在逻辑动作节点中,这样的标志字符串有跳转语句块定义。页面节点和逻辑动作节点的输出实体都为该节点使用或定义的数据实体。在VUDSL中,参数传递通过Web应用的session来实现,每个节点的数据实体都会被存入session中。
页面的可视化图符如表4所示。
表4页面图符
名称 图符
表单
数据表
3.VUDSL编程工具的实现
在采用2个中职院校Web信息系统(选课系统和导师申请招生系统)对VUDSL语言进行案例手工验证后,我们设计和实现了VUDSL编程工具,以更好地支持VUDSL编程,生成可执行的代码。
3.1 总体架构
VUDSL编程工具的架构如图5所示,它由VUDSL可视化编辑器和UDSL到J2EE的代码转换器组成。最终用户使用VUDSL可视化编辑器进行应用的定义,编辑器可以将信息系统的VUDSL代码表示序列化为一种中间DSL代码——UDSL。UDSL代码作为UDSL到J2EE代码转换器的输入,最终被转换成可编译部署的J2EE代码。UDSL代码删除了VUDSL代码的可视化特性,使得目标代码的转换更直接和方便。虽然,工具目前仅实现了Java代码的生成,但VUDSL本身和目标代码是无关的,完全可以生成其他语言的代码。
图5 VUDSL编程工具的架构
3.2 VUDSL编程工具的设计与实现
VUDSL可视化编程器分为三个模块:定义模块、错误检测模块和UDSL转换器模块,如图6所示。定义模块主要用于定义页面动作流、页面、模型和逻辑,错误检测模块主要是对最终用户在定义模块中定义的内容进行实时检测,如果存在错误会及时提醒用户。用户完成VUDSL模型的定义后,UDSL转换器会根据用户的操作及时地生成相应的UDSL,用户可以导出生成的UDSL。
VUDSL可视化编辑器采用Java来实现,其中VUDSL的可视化通过使用Swing工具包实现。VUDSL每个部分在定义器中都有对应的表示,错误检测模块通过监测用户的输入,对用户定义的内容进行检测,UDSL转换器根据UDSL的语法以及该语法和VDUSL的对应关系,将信息系统的VUDSL表示转化为UDSL代码。
图6 VUDSL可视化编辑器的结构
3.3 UDSL到Java的代码转换器的设计与实现
程序转换技术目前比较成熟的有基于转换器的代码生成、模板化生成器和基于重写规则的程序转换。经过分析UDSL语言的特点,本文选取了基于重写规则的转换技术,研究和开发从UDSL代码到J2EE代码的转换工具。本文采用了基于Eclipse插件的体系结构来实现该转换工具,选取Stratego/XT框架作为程序转换的核心框架,并选择了开源项目Spoofax作為平台。
基于重写规则的程序转换流程如图7所示,第一步,在管道的源端,读入输入的程序文本,并将其转换为解析树或抽象语法树;第二步,将语法树作修改变换,达到目标语言的抽象语法树;最后,将输出树再转换为程序文本。
图7 程序转换的流程
4.应用实践
本文所设计的VUDSL语言及工具在浙江交通技师学院进行了试用。为了验证语言及工具的有效性,本文采用了A组和B组对比实验的方法,两组分别独立开发招生系统。A组由浙江交通技师学院的3个老师来开发,经过一个星期的培训学习,他们使用了4天时间开发了系统。图8和图9分别是由A组使用VUSDL定义的导师申请招生的页面动作流和申请招生逻辑。B组由一年J2EE开发经验的大二的学生来进行开发。
图8 导师申请招生页面动作流
图9 导师申请招生逻辑
由于使用了最终用户编程的思想,开发工作量有了明显的变化,A组和B组的开发情况对比如表5所示。
表5 开发情况对比
A组最终用户开发(VUDSL) B组程序员开发(J2EE)
培训时间 7天 0天
开发时间 4天 10天
开发工作量 8人天 28人天
上述应用实践表明:
(1)VUDSL能支持最终用户的应用开发,开发更简单。VUDSL针对特定领域,领域的共性部分语言有预定义的模型、页面、逻辑,最终用户在开发时只需对目标信息系统的个性业务流程的部分进行定制。
(2)VUDSL开发更快,最终用户直接编程的总工作量和程序员开发相比,工作量大大降低。主要表现在:由于程序员和最终用户间可能存在对业务需求理解不一致的问题,最终用户对需求的理解更准确到位;两组使用的编程语言的不同,A组使用的VUDSL特定领域相关语言比B组使用的通用编程语言有更高的抽象层次。
(3)VUDSL的表达能力较强,能支持中职院校Web信息系统的常规功能的开发。本文实验时选取的应用案例有一定的代表性,覆盖了中职院校Web信息系统中常用的功能,包含很多较为复杂的业务流程。
5.相关工作
最终用户编程已经存在很多具有代表性的DSL语言及相应的开发环境。文献[3]综述了最终用户编程的不同的方法,包括演示编程、脚本编程、电子表格编程、及时编程等。文献[4]综述了最终用户编程时面临的挑战以及设计一个最终用户编程工具时需要注意的一些关键问题。目前最终用户编程主要是针对儿童游戏、手机、电子表格等领域。在儿童编程领域,MIT多媒体实验室做了大量的研究工作。Logo是Papert和他的同事提出的一种面向儿童的图形化的编程语言[5]。LogoBlocks是对Logo语言的一种扩展,儿童可以通过操作不同大小和形状的彩色编程块来编程[6]。和Logo语言相比,该语言使得编程对于儿童来说更为简单和有趣。Scratch是一个优秀的儿童编程语言,它是由MIT多媒体实验室的研究组成员共同开发完成的一套新的程序语言,Scratch语言是专门为八岁以上儿童设计,通过Scratch语言儿童可以通过可视化的方式创造性地设计出属于自己的程序[7]。为了满足儿童的编程需要,文献[8]为儿童设计一款图形化的编程工具,设计了事件、动作、状态等不同的编程块。文献[9]结合儿童用户的使用体验及文献[8]的编程块的思想,为儿童设计了一款笔交互方式编程的工具。
以上的研究主要是针对儿童领域的,在电子表格领域,为了满足最终用户进行复杂电子表格设计的需要,文献[10]设计了一款面向终端用户的笔式表单应用开发工具,该工具提供了统一的笔式表单界面和典型应用开发模板,可以帮助用户快速开发满足需求的表单应用。
在手机领域,谷歌的Google有一款支持最终用户定制手机应用的工具软件App Inventor。App inventor是一个可视化的“编程块”语言,支持最终用户通过拼接模板的方式来创建手机应用[11]。
目前,针对中职院校Web信息系统领域的DSL的研究不是很多,已经比较成熟的研究比如WebDSL,WebDSL定义了丰富的数据模型,它是一个用来构建Web应用的DSL语言[12]。该语言不是面向最终用户的,它不支持可视化,语言本身的语法复杂。相对于通用编程语言而比,该语言的抽象层次也不高,另外由于该语言的领域特性不够,不能很好地满足最终用户编程的需求。本文的主要贡献是针对最终用户领域,提出了一种可视化的编程方案,允许最终用户通过拖拉“积木”的可视化的方式,快速地搭建出满足实际应用需求的Web信息系统。
6.总结和展望
本文以中职院校Web信息系统为研究领域,研究最终用户编程技术,设计了一个面向最终用户的可视化的中职院校Web信息领域特定语言VUDSL,并开发了相应的编程工具。文中详细描述了VUDSL语言的设计及其可视化编程工具的开发。最后通过对浙江交通技师学院的老师进行培训,选取了典型的应用实例,并通过A组和B组对比实验,对本文的可视化最终用户编程方案进行检验。通过实验论证了该可视化编程语言有足够的表达力,使用本文的可视化编辑工具可以帮助最终用户高效的开发Web应用。今后还将对该工具的易用性、稳定性、完整性等方面进行进一步的完善和改进。
参考文献
[1]H.Lieberman,F.Paternó,M.Klann,V.Wulf.End-User Development:an Emerging Paradigm[M].End User Development,Springer,2006.
[2]Ko A J,Myers B A,Aung H H.Six Learning Barriers in End-
User Programming Systems[C].2004 IEEE Symposium on Visual Languages and Human Centric Computing,2004:199-206.
[3]Dao A T N,B?g P H.End-user Programming[D].Aalborg University,2010.
[4]Andrew J.Ko,Robin Abraham,et al.The state of the art in end-user software engineering[J].ACM Computing Surveys.2011,43 (3):Article No.21.
[5]Kelleher C,Pausch R.Lowering the barriers to programming:a taxonomy of programming environments and languages for novice programmers[J].ACM Computer Survey,2005,37(2):83-137.
[6]Ramos,J.J.G.;Silva,F.A.;V.Oliveira;Alves,L.T.;DAbreu,J.V.V.Development of open hardware and software components for low cost pedagogical robotics programs.In:Anais do IX Simpósio Brasileiro de Automa??o Inteligente(SBAI 2009),Brasília,DF.In Portuguese.
[7]Maloney J,Resnick M,Rusk N,et al.The scratch programming language and environment[J].ACM Transactions on Computing Education(TOCE),2010,10(4):16.
[8]Xiajian C,Danli W,Hongan W.Design and implementation of a graphical programming tool for children[C].2011 IEEE International Conference on Computer Science and Automation Engineering(CSAE).IEEE,2011,4:572-576.
[9]王婷婷,王丹力,路璐,等.面向兒童的图形化编程语言和工具[J].计算机辅助设计与图形学学报,2013,25(4):584-591.
[10]樊银亭,滕东兴,马翠霞,等.EUDTPFA:一个面向终端用户的笔式表单应用开发工具[J].计算机辅助设计与图形学学报,2011,23(10):1629-1640.
[11]Wolber D.App inventor and real-world motivation[C].Proceedings of the 42nd ACM technical symposium on Computer science education.ACM,2011:601-606.
[12]Hemel Z,Groenewegen D M,Kats L C L,et al.Static consistency checking of web applications with WebDSL[J].Journal of Symbolic Computation,2011,46(2):150-182.
项目名称:交通中职院校数字校园建设研究与实践(计划编号:2013T08)。
作者简介:
汪珏,硕士,浙江交通技师学院讲师,主要研究方向:软件工程。
龚建伟,浙江交通技师学院高级讲师。
柏鹏,浙江交通技师学院讲师。
贾颖,上海交通大学软件学院在读研究生。