基于构件的管理信息系统云开发平台研究*
2016-10-18王天楠
周 伟,蔡 莹,王天楠,陈 平
(1.北京师范大学研究生院,北京100875;2.联想(北京)有限公司 销售支持部,北京100085;3.微软(中国)有限公司亚洲搜索技术中心,北京100080;4.北京师范大学 信息网络中心,北京100875)
基于构件的管理信息系统云开发平台研究*
周伟1,蔡莹2,王天楠3,陈平4
(1.北京师范大学研究生院,北京100875;2.联想(北京)有限公司 销售支持部,北京100085;3.微软(中国)有限公司亚洲搜索技术中心,北京100080;4.北京师范大学 信息网络中心,北京100875)
本文研发了一种基于构件的管理信息系统开发平台,以平台即服务(PaaS)的模式提供管理信息系统的开发服务。文章首先分析管理信息系统的基本功能,研发了一系列高效可靠的可复用构件,使管理信息系统的关键功能可以通过直接组装构件的方式实现;接着研发了一种开发平台,让开发者可通过浏览器在云端组装构件,以迭代的方式快速构建和部署系统功能。对于不能用现有构件直接组装而成的业务,开发者可利用开发平台提供的新构件进行开发服务构建。北京师范大学研究生学位系统、研究生质量监控系统等管理信息系统的敏捷开发实践表明,基于构件的PaaS开发模式,能够很好地契合敏捷软件开发理念,大幅提高系统的开发效率,减轻系统的维护负担,提升系统的构建质量,降低系统整体成本。
云计算;敏捷开发;权限管理;混合编程;平台即服务
一、引言
管理信息系统是一个具有高度复杂性、多元性和综合性的人机系统,它全面使用现代计算机技术、网络通信技术、数据库技术,以及管理学、运筹学、统计学、模型论和各种最优化技术,为经营管理与组织决策服务。[1]管理信息系统的研发团队不仅要有多个学科的背景知识,而且也要熟悉相关管理领域的业务流程。因此相比于一般的软件开发,管理信息系统的开发尤其具有学习难度大、开发周期长、开发成本高、缺陷查到难、维护代价大的特点。
业界一直试图开发新的技术、使高质量计算机程序的开发和维护更容易、更快捷、成本更低廉。[2]人们一直在研发更能表达编程中各种概念的高级语言和应用程序框架以提高生产率。现代高级语言在命令式的面向对像编程基础上,发展了声明式、函数式和动态的特性,使其表达能力更接近人类的思考能力,方便开发者集中精力解决业务本身的细节。[3]人们也一直在归纳设计经验,精练解决方案,总结能解决软件开发中最常见问题的设计模式,通过现成的抽象,把常见错误解决方案的细节予以制度化来减少缺陷。[4]在各行业的管理需求的驱动下,涌现出了各种管理信息系统。[5-6]
为了进一步提高某些领域的软件开发生产率,人们提出了基于构件的软件工程(CBSE)。CBSE强调用可复用的“构件”来设计和构造软件系统,把构建重点从编码转移到组装,改变着大型软件系统的开发方式。[2]一些大型企业,如SAP,提供的企业资源管理(ERP)的解决方案,正是采用了这种过程模型。一些学者也开始在相关管理领域尝试基于构件的实践。[7]然而在管理信息系统领域广泛使用CBSE之前,必须分析对应管理领域,寻找重复模式。这就要求系统分析师不仅是软件构建专家,而且也要对管理领域有深入的了解。云计算时代的来临,为解决这个问题提供了契机。一些学者开始尝试软件即服务(SaaS)的应用模式。[8-10]一个领域的SaaS很难能为其他领域提供服务,因此人们又提出了平台即服务(PaaS)的理念,即把软件研发的平台作为一种服务,以SaaS的模式提交给用户。软件行业的领导者纷纷推出了PaaS,如Google App Engine、Amazon EC2、Windows Azure等。PaaS的出现提高了应用的开发速度,加快了SaaS的发展。然而这些服务的出现,缩短了开发周期,降低了开发成本,同时也增加了学习难度和缺陷查找成本。
本文结合CBSE和PaaS的优势,研发了一种基于构件的管理信息系统云开发平台。第二部分论述通过分析管理信息系统的基本功能,研发的一系列高效稳定可复用的构件。这些构件使开发者可以用组装的方式实现基本功能。第三部分论述云开发平台。该平台使开发者只要通过Web浏览器即可组装和开发新构件。第四部分为敏捷开发实践,介绍基于此平台开发管理信息系统的成功案例。第五部分为总结。
二、构件设计与开发
基于构件的软件工程(CBSE)正在改变大型软件的开发方式,其考虑的重点从编码转移到组装软件系统,考虑的焦点是“集成”,而不再是“实现”;基于构件开发缩短了70%的开发周期,减少了84%的项目开销,生产率指数可达26.2,而工业标准值为16.9。[2]管理信息系统虽然涉及的学科多,而且相关的管理领域千差万别,但是其基本功能相对明确,主要包括数据处理、预测、计划、控制以及辅助决策。这些功能存在很多共性,可对这些共性建模。我们通过分析管理信息系统应用领域,开发了关系数据库管理、表单和CRUD网格、报表分析、权限管理、新构件开发五大可复用构件,如图1所示。
图1 管理信息系统云开发平台构件
1.关系数据库管理
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它是管理信息系统的核心部分,是进行科学研究决策的前提条件。关系数据库建立在关系数据模型基础上,适合作为管理信息系统的主数据库。人们已经开发了功能非常强大的数据库设计和管理工具,如PowerDesigner、Navicat、SQLyog等,但这些工具是作为一个独立的产品发布的,很难与其他构件集成。
我们开发了一种基于Web的轻量级数据库管理工具,通过分析关系数据库系统的元数据,识别各种实体和联系,实现在线数据管理、创建数据结构文档、生成ORM实体类及创建表单等功能。在数据库设计之后,此工具可根据数据表结构自动生成表单,用表单和CRUD网格工具对所生成的表单进行配置,即可实现数据的采集和存储。
2.表单和CRUD网格
表单是利用网页进行数据采集的基本单位。表单允许用户通过文本域、单选按钮、复选按钮等控件输入数据,提交信息,是用户和服务器之间进行信息交互的重要手段。表单开发是整个管理信息系统开发的重要基础,其过程是根据采集数据的结构,对数据项设计合适的表单域,并在用户提交时进行数据合法性校验,将合法的数据存入数据库。传统的表单开发需要前端工程师、后端工程师和数据库工程师的协作,开发成本较高。
我们的表单和CRUD网格构件极大地减少了上述过程的复杂度,只需通过配置就可以实现数据的增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。CRUD网格工具既能分析表单对应数据表的结构,也能分析结构化查询语言(SQL)脚本,根据分析结果自动生成支持排序、分页、查找、导入、导出等功能的CRUD网格。表单工具可配置各个表单域的控件类型、数据类型和验证规则,并可通过配置数据触发器实现实体之间的逻辑验证。表单和CRUD网格工具还支持自定义操作按钮,按钮通过引用一段SQL或Python脚本,实现个性化的功能。我们还实现了一种基于有限状态机的工作流引擎,使基于角色逐级审核的业务需求,只要通过表单和有限状态机的配置就可以实现。[12]而对于实体之间联系的管理,我们构建了一种通用模型,开发者按照约定编写已选、可选、增加、删除和权限检测五条SQL脚本即可实现实体之间多对多联系的管理。
通过关系数据库管理构件、表单和CRUD网格构件的组装,就可以实现数据采集、转换、存储、检索等功能。接下来,我们开发了报表分析构件。
3.报表分析
报表就是用表格、图表等格式来动态显示数据。根据数据特征不同生成不同类型的报表可挖掘数据中信息。报表分析工具是管理信息系统进行计划、预测和辅助决策的重要组成部分。一些数据库管理工具,如Foxpro、Navicat等均支持报表的开发,但它们很难与Web系统集成起来。水晶报表等工具能够很好地与Web系统集成,但是其商业授权费用非常高。
我们开发的报表分析工具用HTML、CSS和JavaScript作为报表定义语言,SQL和Python作为数据源脚本。这些语言均是行业的开放标准,容易学习,没有商业授权费用。表格工具实现了Model-View-View-Model(MVVM)模式,使开发人员可以把视图和逻辑分离出来,通过数据绑定的方法生成视图。[14]SQL和Python是被广泛使用的脚本语言,特别适用于混合语言编程的软件开发。[15]图表工具的可视化引擎是基于开源的数据可视化产品,开发人员可以用脚本生成数据,直接生成直观、生动、可交互、可个性化定制的数据可视化图表。[16]我们还针对常用的图表类型,如条形图、饼图、拆线图、散点图、雷达图等,构建了表格转图表模块,这样只需一条SQL脚本即可生成图表。
运用报表分析构件可实现预测、计划和辅助决策的功能。为实现管理信息系统的控制功能,我们构建了一个开放灵活的权限管理构件。
4.权限管理
权限管理是根据设置安全规则或策略,让用户能且只能访问被授权的资源。首先我们实现了一个基于角色的访问控制(RBAC)引擎。所有表单和CRUD网格的增删改查、表单域的选取和更新、按钮、SQL和Python脚本、报表、页面等都实现了RBAC。[17]RBAC实现了功能级权限的访问控制。
数据级权限在管理信息系统中也非常重要。数据级权限指在功能模块内控制用户的数据访问,如学生信息模块中,学院只能管理本学院学生,学校则能管理所有学生。传统数据级权限管理一般采用硬编码的方式,把权限逻辑用条件的形式与业务代码耦合在一起,难以测试,开发维护成本高。一些学者研究基于属性规则的数据权限模型,但其规则引擎配置复杂,而且不能适应更加复杂的权限控制。[18]我们用过滤器、触发器、控制脚本相结合的形式,实现了较为灵活的数据级权限控制。过滤器用一种轻量级的数据交换格式(JSON)定义,配置简便灵活。[19]规则引擎对资源进行过滤,用户只能得到经过滤器过滤后的信息。触发器和控制脚本用SQL脚本或Python脚本定义,能够在用户进行操作之前进行自定义验证,并能在操作之后进行数据加工。
表单、网格、报表与权限管理的集成,能灵活地实现管理信息系统的数据处理功能、预测功能、计划功能、控制功能和辅助决策功能。我们还开发了一个新构件开发工具,可实现更加个性化功能。
5.新构件开发
对于不能用现有构件实现的系统需求,要构造满足这些需求的新构件。新构件开发模块在服务器端实现了MVC模式,有效地分离了应用的业务逻辑、数据和界面,提高了应用的可扩展性、可维护性和可复用性;[20]在客户端实现了MVVM模式[14],不仅使视图可以独立于模型的变化和修改,降低了耦合度,而且让业务逻辑和数据的开发与页面设计彻底独立开来。我们在开发的前端和后端均采用了模板引擎,能更加合理地分离前后端,不仅能提高开发人员的协同效率,而且可以降低Web应用服务的资源消耗,提高系统吞吐量。[21]
新构件开发采用了混合编程的开发模式。程序设计语言有各自的优势和不足,混合编程可以充分利用各种程序设计语种的优势,只要解决各种语言间参数传递的问题,就可以极大地提高开发效率。[22]我们采用了C#和Python混合开发模式,对浏览器、应用服务器、数据库服务器的数据交换定义了一套完整的规则,把HTTP的请求和响应数据均封装在两种程序设计语言都识别的字典和数组中,打通了混合开发的关键环节。
三、云开发平台
平台即服务(PaaS)是指将软件研发的平台作为一种服务,以SaaS的模式提交给用户,它不但可以为更高的可用性、更具扩展性的应用提供基础平台,还可以提高硬件资源利用率,降低业务运营成本。[23]PaaS平台提供应用程序的开发和运行环境,使开发者不需要维护软硬件设备,又免去了繁琐复杂的应用部署过程。但是现有的PaaS平台一般仅提供特定的编程语言的运行环境,且难以提供像集成开发环境(IDE)那样强大的功能,反而会增加开发者编码和测试成本。[3]本文平台不仅提供应用程序开发和运行环境,而且支持构件组装,实现CBSE过程,大幅提高生产率。
1.开发环境
我们实现了在线应用开发服务,支持HTML、CSS、Javascript、Python、SQL的开发。为了保证云端编码效率的质量,我们基于CodeMirror(一种开源的源代码编辑器)进行二次开发,实现了一个基于Web的集成开发环境(IDE),实现了源代码的编辑、版本控制、编译、执行,支持代码折叠、格式编排、括号匹配、智能缩进、自动完成、代码美化、错误检测等功能,符合现代化IDE的特性。版本控制通过数据保存事件处理程序,自动保存了源代码的历史版本,并支持一键查看。编译功能实现了对Python脚本的动态编译,能够识别脚本中的语法错误。编码完成后,开发者可直接访问资源对应的统一资源标识符(URI)查看代码执行结果。
2.构件组装
我们研发了基于Web的构件组装工具。我们是基于资源的设计研发的云开发平台,可引用功能和数据都通过简明的URI被访问。[24]因此开发者只需通过开发环境组织资源URI的拓扑结构就可实现构件的组装。我们还设计了一种以数据为中心的构件快速组装框架,其用户界面是一个带工具栏的支持查找和分页的CRUD网格。开发者可定义网格中显示的数据和工具栏中的按钮。我们定义了常用的按钮点击事件处理程序,如需要确认后才执行、直接访问URI、访问选中数据格式化后的URI、访问以选中数据为参数的URI、把选中数据以AJAX形式提交、输入参数并把选中数据以AJAX提交等操作。开发者只用关注构件的组装,而不用关注界面的设计。另外,我们还开发了一个URI分析工具。该工具能够分析URI的格式和参数,匹配URI对应构件的配置脚本或源代码,从而使开发者可以更快速地组装和维护构件。
下面介绍基于本文开发方法的敏捷开发实践案例。
四、敏捷开发实践
2001年,Kent Beck和其他软件专家共同签署了“敏捷软件开发宣言”,声明个体和交互重于过程和工具,可以工作的软件重于面面俱到的文档,客户合作重于合同谈判,随时应对变化重于遵循计划。[25]敏捷理念强调4个关键问题——小而高度自主的团队、项目共同利益者的交流合作、有效支持变化及快速交付满意的软件。下面介绍基于构件的PaaS模式下,管理信息系统的开发实践。
1.研究生学位管理系统
随着研究生教学规模的扩大、学位授予类型的增加以及研究生教育改革的深化,研究生学位管理工作的需求也不断变化。学位管理系统在研究生管理过程中具有业务流程清晰、数据严谨规范、权限要求严格等特点。[26]
学位授予工作,主要有两条工作流。一是论文评阅,即学生提交申请信息(科研成果、导师评语、论文等),教务员进行审核,经专家评阅合格方可进行答辩申请;二是答辩申请,即学生提交根据专家意见修改后的论文信息进行答辩,答辩秘书录入答辩结果,教务员审核答辩信息并确定分会名单,分会讨论录入分会结果,校会审议。
我们组织了三人的开发团队,遵循Scrum方法,对两条工作流设计了三个5天周期的迭代计划实现主要功能。信息采集功能通过表单、CRUD网格构件和报表构件直接组装实现。利用工作流构件,通过把有限状态机与表单和CRUD网格构件集成的方式,实现了论文评阅和答辩申请两条工作流。学位授予数据的汇总和统计分析通过配置报表分析构件实现。迭代周期结束之后,再根据业务的变化调整构件的配置或重新组装构件,灵活响应变化,优化系统。
利用本文方法开发的北京师范大学学位管理系统,具有架构先进、功能完备、数据准确、扩展灵活的特点,为我校学位管理工作提供有力支撑。
2.研究生质量监控与评估系统
教学质量是教育永恒的主题。为了保证高等教育教学质量,使规模、质量、效益协调发展,应当构建一套科学可持续的质量监控与评估体系。[27]研究生质量监控与评估系统主要以学生评教、专家督导、论文外审、公开答辩、毕业生满意度调查等措施为基础,监控教学过程的质量,构建评估与反馈系统。信息系统主要实现数据的采集、公示和分析。
学生评教数据、排课数据位于第三方开发的教务管理系统中,需要跨数据库集成;外审、答辩数据位于自主开发的学生管理系统中,可直接引用;专家督导信息采集、答辩信息公开功能、满意度调查可用现有构件组装。
我们组织了二人研发团队,设计了两个5天周期的迭代计划快速构建信息采集、公示功能。我们用Python编写了数据同步的脚本,从第三方教务管理系统读取排课信息;用CRUD网格构件实现了督导信息采集功能;读取答辩信息用模板引擎生成了答辩信息公开的网页;用问卷构件生成了满意度调查问卷。此处要分析的数据维度大,采用SPSS统计软件辅助分析数据。反馈功能主要通过学院教学经费、招生计划的调节实现。
利用本文方法开发的北京师范大学研究生质量监控与评估系统,为北京师范大学研究生质量监控和评估提供了基础数据,有利于提高监控和评估工作的质量和效率。
3.本文方法优势分析
本文方法结合了CBSE和PaaS,与传统方法相比,具有如下优势。
首先,本文方法进一步改善了质量。传统的CBSE过程的构件合格性检验要考虑运行时需求、资源使用等因素的影响,而PaaS则使开发者不必考虑这些因素。传统的PaaS模式具有较高的缺陷查找成本,而利用CBSE,随着构件的每一次复用,缺陷被发现并被消除,构件质量也随之改善,使缺陷一般出现在构件的集成中,极大提高了缺陷消除的效率。
其次,本文方法进一步提高了生产率。软件开发过程一般为沟通、策划、建模、构建、部署的迭代过程。CBSE降低了计划、模型、文档、代码和数据的创建工作花费的时间,同时PaaS无需配置复杂的开发和运行环境,使开发团队都可以在线实时协同,提高了开发效率。
最后,本文方法进一步降低了成本。少构建多复用的CBSE肯定是成本合算的。本文开发的平台以PaaS模式大幅降低了构件合格性检验、适应性修改与组装的成本。同时,本文核心方法采用的是开放标准技术,没有商业授权成本,且相对容易学习,能减少开发团队磨合成本。
五、总结
本文研发了一种管理信息系统开发平台,以基于构件的PaaS模式提供管理信息系统开发服务。该服务能改变管理信息系统的开发方式,让开发者在云端即可完成开发工作,把开发者考虑的重点从“编码”转移到“组装”,考虑的焦点从“实现”转移到“集成”。北京师范大学研究生学位系统和研究生质量监控与评估系统的敏捷开发实践表明,本文的开发模式能够很好地契合敏捷软件开发理念,大幅提高系统的开发效率,减轻系统的维护负担,提升系统的构建质量,降低系统整体成本。
[1]张金城.管理信息系统[M].北京:北京大学出版社,2001.
[2]Roger S.Pressman.Software Engineering:A practitioner’sApproach[M].Beijing:ChinaMachinePress,2009.
[3]Steve M cConnell.Code Complete[M].Beijing:Publishing House of Electronics Industry,2006.
[4]ErichGamma.DesignPatterns:Elements of Reusable Object-O riented Software[M].Beijing:China M achine Press,2007.
[5]赵仁铃,余洋.Web2.0环境下的研究生管理信息平台建设[J].学位与研究生教育,2013(5):41-45.
[6]田媚,黄雅平,赵宏伟.毕业设计(论文)管理系统研究与实践[J].中国教育信息化,2015(1):65-67.
[7]于海军,朱明,苏厚勤.基于组件的轨道交通AFC设备运营管理系统的设计与实现[J].计算机应用与软件,2010(12):161-163,201.
[8]向坚持,陈晓红.SaaS模式的中小企业客户关系管理研究[J].计算机工程与应用,2009(19):232-235.
[9]谭健欣,刘宗妹.基于云计算的高校信息化建设思路与实现路径[J].中国教育信息化,2015(5):15-18.
[10]陈展荣,全渝娟,何万宁.大学计算机实验教学平台建设与资源共享研究[J].中国教育信息化,2015(5):41-43.
[11]邓超,周文平,申新鹏,杨刚.企业云开发平台研究[J].微电子学与计算机,2012(7):162-166.
[12]徐小良,汪乐宇,周泓.有限状态机的一种实现框架[J].工程设计学报,2003(5):251-255.
[13]Abraham Silberschatz.Database System Concepts [M].Beijing:ChinaMachine Press,2008.
[14]陈明,李猛坤,张强.一种基于扩展MVVM模式的SaaS面向服务计算模型[J].微电子学与计算机,2010(8):27-30.
[15]罗霄,任勇,山秀明.基于Python的混合语言编程及其实现[J].计算机应用与软件,2004(12):17-18,112.
[16]任磊,杜一,马帅,张小龙,戴国忠.大数据可视分析综述[J].软件学报,2014(9):1909-1936.
[17]夏榆滨,宣明付.基于RBAC的统一权限管理系统研究[J].微计算机信息,2006(30):75,114-116.
[18]欧阳荣彬,王倩宜,李丽,刘云峰.基于属性规则的数据权限模型研究与实现[J].大连海事大学学报,2010(2):81-83.
[19]刘文,甘志春,李文,王更辉.基于XML和JSON的格式化网络参数文件研究[J].计算机与网络,2013(24):54-57.
[20]刘亮,霍剑青,郭玉刚,袁泉,王晓蒲.基于MVC的通用型模式的设计与实现 [J].中国科学技术大学学报,2010(6):635-639.
[21]姬一文,吴庆波,杨沙洲.一种服务器端模板引擎的改进与实现 [J].计算机应用研究,2011(3):1077-1079,1087.
[22]阳康,黄长清.MATLAB与C#混合编程在轧制力预报中的应用[J].计算机工程与设计,2013(5):1885-1888,1901.
[23]徐鹏,陈思,苏森.互联网应用PaaS平台体系结构[J].北京邮电大学学报,2012(1):120-124.
[24]潘冰.面向资源的RESTfulWeb应用研究[J].微计算机应用,2010(7):38-43.
[25]Robert C.Martin.Agile Principles,Patterns,and Practices in C#[M].Beijing:Posts&Telecom Press,2010.
[26]王素美,黄宗英,来天平.基于业务流程的学位管理系统的设计与实现[J].华东师范大学学报(自然科学版),2015(S1):330-334.
[27]王轶,陈敏.美国普通高校教学质量监控体系的特点及启示[J].首都师范大学学报(社会科学版),2015(1):135-140.
(编辑:王天鹏)
TP315
A
1673-8454(2016)07-0028-05
北京师范大学自主科研经费(310400061)。