基于PAR的软件服务外包开发过程应用研究

2013-10-15 07:38薛锦云
计算机与现代化 2013年11期
关键词:编码数据库软件

吴 刚,薛锦云

(江西师范大学计算机信息工程学院,江西 南昌 330022)

0 引言

我国软件服务外包正在迅猛发展,根据TPI数据显示,截至2010年底,我国承接软件外包的合同金额和执行金额分别达到274亿美元和198亿美元,分别实现了37%和43.1%的增长率[1]。但由于各种各样的原因,软件外包中依然存在着开发效率低和可靠性不高的问题。

在国内,一些比较知名的软件外包企业如东软集团、中软国际,为了提高软件开发效率,都在积极研发各自的业务基础平台,业务基础平台封装了琐碎的技术细节,提供了预设好的行业套件及业务组件,如ERP、OA、电子政务等,通过对这些套件及组件的重用和组装,可以在业务基础平台上快速灵活地搭建出复杂的应用软件系统[2-3]。业务基础平台有其局限性,只有所构建的系统中包含行业套件或业务组件,才能提高软件开发效率。软件可靠性与所使用的套件或组件及平台的可靠性有关。由美国卡内基梅隆大学研制的Alice,可以自动生成程序,但是只能生成动画电影或简单的视频游戏,目前只用于教学[4-5]。由ARTech公司开发的GeneXus,是一个智能化的、支持多平台应用的模型驱动开发工具。据介绍,GeneXus可以自动化地进行软件设计、开发、维护,提高了软件开发效率,降低开发、维护成本[6]。

许多计算机科学家为了提高软件开发效率和可靠性,一直以来都致力于代码自动生成方面的研究[7]。由薛锦云教授提出的PAR方法及其团队研发的高可靠软件开发平台PAR平台[8-9],利用代码生成技术可以大大加速软件的开发进度,提高软件的质量。本文选取典型软件外包案例,将PAR方法和PAR平台应用到该案例开发过程中,主要用到需求分析、详细设计、编码和测试中,以提高软件外包开发效率和可靠性。

1 PAR方法和PAR平台介绍

PAR方法和PAR平台二者合称PAR,主要由4个部分组成:PAR方法的算法描述语言Radl[10];PAR方法的程序设计语言Apla[11];统一的算法设计和证明方法;系列自动程序转换工具,即PAR平台。PAR方法是通过对现存算法程序设计方法局限性和寻找问题求解序列递推关系的深入研究,进而提出的一种统一的算法程序设计和证明方法。图1是使用PAR进行软件开发的过程。Radl语言是为实现算法程序形式化和半自动化开发的PAR方法而定义的一种基于递推关系的算法设计语言,它是PAR方法的重要组成部分。它主要功能是描述问题的规约、规约变换规则和描述算法以及描述功能需求。Apla是为算法程序形式化开发的PAR方法而定义的一种抽象程序设计语言,充分体现功能抽象、数据抽象等现代程序设计思想,使之简单实用,便于程序开发,使得构成的程序易于阅读、理解和验证,它可以用来描述软件的详细设计,且易于被转换成各种可执行的程序设计语言程序。在此基础上研制了综合性软件开发环境,即PAR 平台[12]。

图1 PAR软件开发流程

2 案例选取及介绍

案例:公交运营调度系统。

该系统选自中软国际实训系列丛书[13],该丛书都是按照软件企业工作要求完成软件开发和软件测试的训练,培养符合企业要求的人才,提高就业竞争力。中软国际是中国大型综合性软件与信息服务企业,在软件外包方面有着杰出的贡献和成绩。

该案例选取的意义在于将PAR平台首次应用到软件外包活动中去,在需求分析、详细设计、编码及测试阶段充分发挥PAR平台的优势,来提高软件外包的开发效率和可靠性,具有一定的现实意义。该系统的主要功能有实时监控、动态调度以及乘车查询。实时监控功能是对运行中的各条线路的公交车辆进行实时的监控,监控的范围包括车速、客流以及故障和事故;动态调度则利用实时监控的结果,在发现道路拥堵、客流量过大或者车辆出现故障事故时,提示公交调度管理员及时调度车辆,保证公交运力的及时调整;乘车查询主要帮助乘客选择乘车线路。

3 案例设计和实现

3.1 需求分析阶段的应用

在软件外包活动中,项目立项之后就开始进入需求分析阶段,在做功能需求分析的时候,最常用的就是用图表方式如:UML活动图和状态图等。这种图表方式有一定的优点,如简单、直观以及很容易理解,但也有明显不足,就是不能保证完全正确。然而用数学规约的方式就可以弥补这个缺点,这种方法是建立在数学概念基础上的,例如谓词逻辑、状态机以及集合等,用这种形式化规约来描述需求是很精确清晰的。

用PAR平台来做需求分析就是使用数学规约的方式,使用的规约语言是Radl语言。

首先要先深入了解Radl语言,用Radl语言主要是描述功能需求,其格式如下:

共分为5个部分:USER是指这个功能的使用者是谁,这个使用者可以是某个人,也可以是某物,甚至是一个系统或一段程序;第二行就要说明所用到的标识符,主要说明FQ和FR中出现的变量和函数的属性及类型,其中属性有3种:(1)输入变量,用关键字in标识;(2)输出变量,用关键字out标识;(3)辅助变量,用关键字aux标识,类型可以是Radl语言中的标准数据类型(integer,real,boolean,char,string)、自定义简单类型(记录类型、数组类型、枚举类型、子界类型和结果集类型)、预定义ADT类型(集合类型、序列类型、树类型、图类型、数据库表类型)和自定义ADT类型;第三行FQ,可以解释为此功能点的前置断言,用于表示使用者输入参数必须满足的条件;第四行FR是此功能点的后置断言,用于表示使用者所要获得的功能目标;最后一行就是对整个功能点做文字性的说明,更有利于对此功能点进行检查和维护。以乘车查询为例:

说明:对公交线路的查询,输入起始站点和终止站点,可以查询可以到达的线路,当brt1.bus_road=brt2.bus_road 时,是可以直达的;当 brt1.bus_road≠brt2.bus_road时,需要换乘才可以到达终点。

3.2 详细设计阶段的应用

在外包软件活动中,详细设计和编码都是很重要的步骤,详细设计的好坏会直接影响到后续的编码工作,因为一般来讲编码工作是以详细设计为参考依据,其正确性和可靠性势必会影响到整个软件的质量。详细设计就是对概要设计的一个细化,就是详细地设计每个模块实现算法,所需的局部结构。其主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有2个:实现模块功能的算法要逻辑上正确和算法描述要简明易懂。详细设计的表示工具有图形工具和语言工具。图形工具有业务流图、程序流程图、PAD(Problem Analysis Diagram)图、NS(由Nassi和Shneidermen开发,简称NS)图。语言工具有伪码和PDL(Program Design Language)等。

在PAR平台下是使用Apla语言进行详细的设计,Apla语言的主要特色是充分体现功能抽象,数据抽象等现代程序设计思想,使之简单实用,便于程序开发,使得构成的程序易于阅读理解和验证,且易于被转换成各种可执行的程序设计语言程序。用它可以描述每个模块详细的算法设计,也可以描述每个模块内的数据结构,还可以用于数据库设计等,这些都是详细设计的基本任务,Apla语言可以胜任这些任务。并且还可以验证其正确性,这一点对程序的可靠性非常重要。下面概述使用Apla语言是怎样描述详细设计的。

首先介绍总体结构,包括3部分:设计名称、数据结构设计(含数据库设计)以及算法和其它功能设计如下:

Apla语言中除包含标准数据类型外,还有自定义简单类型如记录类型、数组类型等,还有预定义的抽象数据类型如集合、表、树、图等,并且还可以自定义抽象数据类型,可以很好地用于数据结构设计;PAR方法中内置关系数据库机制,使用关系代数符号描述数据库操作,用记录类型来存储数据库表设计;算法的设计是PAR方法的强项,不但可以形式化推导出高效算法还可以对算法进行正确性证明[7]。以乘车查询为例,算法和其它功能设计如下:

这里只给出了乘客乘车查询的功能设计,并详细给出了从哪个数据库表中取数据,取出数据后怎样操作才能满足乘客的要求。

3.3 编码阶段的应用

一般来讲编码阶段就是程序员依照详细设计的具体手工实现,是模块化的实现,所以也称实现阶段。而在PAR平台中对详细设计的实现是完全自动的,即用Apla语言描述的详细设计可以在PAR平台中自动转换为可运行的具体语言程序,如C++、Java等,所依托的是PAR平台中的一系列程序自动生成工具。图2是使用C++生成工具[14],将乘车查询的Apla描述自动生成C++代码,图左侧是用Apla语言描述乘车查询详细设计,图右侧是自动生成的C++程序代码。

图2 乘车查询C++代码自动生成

4 应用效果

4.1 开发效率提高

PAR平台中进行详细设计时,Apla语言中含有丰富的抽象数据类型,如树、图、链表和集合等,对数据结构的设计有很大的帮助。另外,在对数据库功能设计时,直接使用关系代数符号描述操作过程,例如在案例中要实现2个表的连接,并且从连接后的结果中筛选出想要的字段,用关系代数表达式是这样实现的:

用标准SQL语句实现:

比较以上两者的实现,可以很直观地看出,用关系代数实现简单、易写、不容易出错,而SQL语句显得冗长,且易出错。目前国内没有哪个平台可以做到这一点,大多数还是使用嵌入式SQL语句的形式,稍微简化一点的就是把数据库的连接封装成一个接口,把某一类查询问题也封装成一个接口来使用,但是还是避免不了编写复杂的SQL语句。PAR平台中这样做的优势非常明显,在平台中可以直接使用关系代数符号来进行数据库的操作,实现了标准SQL语句功能,并且可以转换为嵌入的SQL语句,关系代数的优势是编写简单,容易纠错,因此可以提高开发效率。

一般来讲编码阶段就是程序员依照详细设计的具体手工实现,是模块化的实现,所以也称实现阶段。而在PAR平台中对详细设计的实现是完全自动的,即用Apla语言描述的详细设计可以在PAR平台中自动转换为可运行的具体语言程序,如C++、Java等。这所依托的是PAR平台中的一系列程序自动转换工具。PAR平台中编码的方式由手工变成了机械地转换,从而节省了编码的强度和编码的时间,如果将PAR平台应用与软件外包活动中,会大大提高软件的开发效率,节约开发成本。这将会对软件服务外包在技术上和经济上带来深远的影响。

4.2 可靠性提高

用Radl语言描述功能点的设计,将形式化方法应用于需求建模,而不追求完全形式化,以达到轻量化的目标,同时保证了系统的清晰性、正确性和可靠性,并降低了系统的开发成本。依照Radl描述,用Apla语言做详细设计可以很容易快速地实现。在Radl描述中给出了要达到这一功能所需要的标识符、要具备的条件以及所要达到的目标,这些为详细设计做了很好的铺垫,并且可以作为标准来验证详细设计是否符合用户需求。

5 结束语

本文将PAR方法和PAR平台应用到软件外包开发过程中,在需求分析阶段应用过程中,用Radl语言描述功能点的设计,将形式化方法应用于需求建模,而不追求完全形式化,以达到轻量化的目标,同时保证了系统的清晰性、正确性和可靠性,并降低了系统的开发成本。Dianel Jackson说过,比起传统的形式化方法,部分形式化方法在表达能力和应用领域上都还有差距,但其使用效率更高,效果更显著。在详细设计应用的过程中,用Apla语言来描述详细设计,Apla语言中包含除简单数据类型外,还包含了许多复杂的抽象数据类型,并能自定义数据结构,因此能够胜任模块中数据结构的设计;算法设计和其它设计的任务,利用PAR方法可以设计出高效高可靠的算法,在PAR平台中利用简便的关系代数符号进行数据库操作,在数据库处理方面有非常大的优势;在PAR平台中基本能完成数据库表的设计,用来进行模块中数据库操作功能的设计。在编码方面用的过程中,PAR平台可以将Apla语言描述的详细设计自动转换为可运行的语言程序,如C++、Java等。PAR平台自动转换的特性会大大增加软件的开发效率。

[1]中国服务外包网.中国服务外包网主页[EB/OL].http://chinasourcing.mofcom.gov.cn/,2013-06-17.

[2]Neusoft.东软集团软件产品与平台[EB/OL].http://www.neusoft.com/cn/products&platform/index.html,2013-06-17.

[3]中软集团.中软集团外包服务[EB/OL].http://www.chinasofti.com/superWebCMS/pages/sites/MainSite/html/zh/outsourcing-services/index.shtml,2013-06-17.

[4]Alice.Alice主页[EB/OL].http://www.alice.org/,2013-06-17.

[5]Charles W Herbert.An Introduction to Programming Using Alice 2.2(2nd Ed)[M].Cengage Learning,2010.

[6]GeneXus.GeneXus官方网站[EB/OL].http://www.genexus.com/,2013-06-17.

[7]徐家福,陈道蓄,吕建,等.软件自动化[M].清华大学出版社,1994.

[8]Xue Jinyun.A unified approach for developing efficient algorithmic programs[J].Journal of Computer Science and Technologies,1997,12(4):314-329.

[9]薛锦云.新型软件开发方法PAR及其支撑平台[R].江西师范大学省高性能计算技术重点实验室技术报告,2005.

[10]薛锦云.算法设计语言Radl报告[R].江西师范大学计算机软件研究所技术报告,2001.

[11]薛锦云.抽象程序设计语言Apla报告[R].江西师范大学计算机软件研究所技术报告,2001.

[12]石海鹤,薛锦云.基于PAR的算法形式化开发[J].计算机学报,2009,32(5):982-991.

[13][美]Andy Yue,骆力明,徐建民.软件开发技能实训教程[M].北京:科学出版社,2010.

[14]赖勇.Apla一C++自动程序转换系统的研制[D].南昌:江西师范大学,2002.

猜你喜欢
编码数据库软件
禅宗软件
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
软件对对碰
Genome and healthcare
数据库
数据库
数据库
数据库