基于软件工程的GIS 软件过程模型选择
文/李二强 王明 宋军 李善朴
摘要:GIS 从20 世纪60 年代问世以来已经经沥了近60 个春秋的飞速发展。但随着GIS 软件数量的飞速增长和软件规模的扩大,GIS 软件危机情况已日益严重,GIS 设计也将面临更大的挑战。笔者结合软件工程学的理论和思想,通过合理的选用软件过程模型来为GIS设计提供思路。
【关键词】软件工程 GIS 工程学 GIS 设计 软件过程模型
1 GIS工程学与GIS设计
GIS 工程学来源于系统工程学,软件工程学和地理信息科学的结合。系统学、系统工程学、软件工程学、地理信息科学都是其理论基石。GIS 设计是利用软件工程的思想,结合GIS 软件开发的特点和开发目标,制定GIS 软件开发的项目计划,并对软件的用户需求和可行性进行分析,从而设计软件的技术实现方案,最后对软件进行实施和维护。
2 软件工程
在了解软件工程之前先介绍软件危机,它是一种现象,是落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现的一系列严重问题的现象。软件工程是多学科、跨学科的一门学科,它借鉴了传统工程学的原理和方法,同时应用了计算机科学、数学、工程科学和管理科学的很多理论与知识,以求高效地开发高质量软件。从20 世纪60 年代软件工程学的产生到现在,软件工程演变了三代。分别是20 世纪70 年代以结构化分析、结构化设计和结构化编程的第一代软件工程又称传统软件工程;20 世纪80 年代以研究面向对象分析和设计的第二代软件工程又称对象工程;20 世纪90 年代以组件技术的研究发展而来的第三代软件工程又称组件工程。软件工程代与代之间没有鸿沟,他们不仅交叉重叠,也携手并进。
3 软件过程模型以及其在GIS设计的作用
软件过程是按照软件项目的进度、成本和质量要求,开发和维护软件所必需的一系列有序活动的集合。软件工程模型是按照工程化的思想设计提出的指导策略,是一个覆盖整个软件生存周期全部活动和任务的结构框架,这个框架给出了软件开发活动各阶段之间的关系,相应的工作方法与步骤。
3.1 瀑布模型
瀑布模型(Waterfall Model)又称生存周期模型。是由W.Royce 于1970 年提出来的,也称为软件生存周期模型。其核心思想是按工序将问题化简,采用结构化的分析与设计方法,将逻辑实现与物理实现分开。
3.1.1 瀑布模型的原理
瀑布模型是一种线性模型,软件开发的各项活动严格按照线性方式进行,每一项开发活动均以上一项的活动结果为输入对象,实施该项活动应完成的内容,给出该项活动的工作结果作为输出传给下一项活动,对该项活动实施的工作进行评审。若工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工。
3.1.2 瀑布模型在GIS 设计的作用
由于瀑布模型是一种以文档作为驱动的模型;阶段之间存在有序性和依赖性;将逻辑设计与物理设计清楚的划分开,尽可能的推迟程序的物理实现;具有质量保证的观点;清晰的提供了软件开发的基本框架的特点使其在软件工程中占有重要地位。
瀑布模型一般适用于功能完整、性能明确、无重大变化的GIS 软件系统的开发。但同时也应注意瀑布模型因为过早的考虑程序实现,常常导致大量返工;它的阶段间的依赖特征会导致工作中发生“阻塞”状态,如果大的错误在软件生存周期的后期才发现,将导致灾难性的后果;它各阶段之间的大量规范化文档和严密评审增加了项目工作量;缺乏灵活性,特别是无法解决软件需求不明确或不准确的问题,因此其应用具有一定局限性。
3.2 快速原型模型
快速原型模型(Prototyping Model)是在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适用性或人机交互形式等许多情况下,根据用户的一组基本需求,快速建造一个可运行的软件,然后进行评估。同时也使开发者对将要完成的目标有更好的理解,再进一步精化、调整原型,使其满足用户的要求。
3.2.1 快速原型模型基本原理
快速原型模型从需求分析开始,软件开发者和用户一起定义软件的总目标,说明需求,并规划出定义的区域,然后快速设计软件中对用户可见部分的表示。快速设计导致了原型的建造,原型由用户评估,并进一步求精,逐步调整原型使之满足用户需求,这个过程是迭代的。详细过程:第一步,弄清用户的基本信息需求;第二步,开发初始原型系统;第三步,用原型系统完善用户/ 设计者的需求;第四步,修改和完善原型系统。
3.2.2 快速原型模型在GIS 设计的应用
由于快速原型模型使系统更易维护、用户交互更友好;能得到良好的需求定义,比传统的生存周期法好很多,使开发者与用户充分交流,以改进原先设想的、不尽合理的系统;可降低总体开发费用,节约开发时间。快速原型模型比较适合低风险和柔性较大的GIS 软件系统的开发。但同时也应注意避免对于开发者不熟悉的领域把次要部分当作主要框架(模型效应);原型的迭代不收敛于开发者预先的目标;它不太适合嵌入式软件、实时控制软件、科技数值计算软件的开发。
3.3 螺旋模型
螺旋模型(Spriral Model)是B.Boehm 于1988 年提出的。螺旋模型将瀑布模型与原型的迭代特征结合起来,并加入两种模型均忽略了风险分析,弥补了两者的不足。
3.3.1 螺旋模型的基本原理
螺旋模型可以看做是连接的弯曲了的线性模型。螺旋模型沿着螺线旋转,在笛卡尔坐标的四个象限上分别表达了四个方面的活动,即:制定计划,确定软件目标,选定实施方案,弄清项目开发的限制条件;风险分析,分析所选方案,考虑如何识别和消除风险;实施工程,实施软件开发;用户评估,评价开发工作,提出修正建议。
3.3.2 螺旋模型在GIS 设计的应用
由于螺旋模型是一种风险驱动模型,为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险;特别强调原型的可扩充性,原型的进化贯穿了整个软件生存周期,这将有助于目标软件的适应能力;原型可看做形式的可执行的需求规格说明书,易于为用户和开发人员的共同理解。
螺旋模型支持需求不明确,特别是较高风险的大型GIS 软件系统的开发。但同时需要注意要求构造的原型的总体结构、算法、程序、测试方案应具有良好的可扩充性和可修改性;如果每次迭代的效率不高,会导致迭代次数过多,将会增加工作量和成本并有可能推迟提交时间;它要求开发队伍水平较高;它是出现较晚的新模型,不如瀑布模型普及。
3.4 增量模型
增量模型(Incremental Model)融合了瀑布模型的基本成分和原型模型的迭代特征,其实质就是分段的线性模型。
3.4.1 增量模型的基本原理
增量模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。当使用增量模型时,第一个增量往往是核心的产品,也就是说第一个增量实现了基本的需求,但很多补充的特征还没有发布。用户对每一个增量的使用和评估,都作为下一个增量发布的新特征和功能。这个过程在每一个增量发布后不断重复,直到产生最终的完善产品。增量模型强调每一个增量均发布一个可操作的产品。
3.4.2 增量模型在GIS 设计的应用
由于增量模型每次增量交付过程都可以总结经验和教训,有利于后面的改进和进度控制;每个增量交付一个可操作的产品,便于用户建立好模型做出反应,易于控制用户需求;任务分配灵活,将风险分布到几个更小的增量中,降低了项目失败的风险。增量模型适合初期的需求不够确定或需求会有变更的GIS 软件系统开发。但同时需要注意至始至终需要用户亲密配合,以免影响下一步进程;要避免把难题往后推,首先完成的应该是高风险和最重要的部分;要避免退化为边做边改模型,从而使软件的控制失去整体性;由于一些模块必须在另一个模块之前,必须定义良好的接口。
3.5 面向对象的软件过程模型
传统的软件开发过程大多建立在软件生存周期概念的基础上,螺旋模型、原型模型、增量模型等实际上都是从瀑布模型拓展或演变而来的,通常把它们称为传统的软件过程模型。面向对象的软件开发过程的重点放在软件生存周期的定义阶段。这是因为面向对象方法在开发早期就定义了一系列面向问题域的对象,建立了对象模型。整个开发过程统一使用这些对象,并不断地充实和扩展对象模型。
3.5.1 构件复用模型
面向对象技术将事物实体封装成包含数据和数据处理方法的对象,并抽象为类。构件(component,也译为组件)是软件系统中有价值的、几乎独立的并可替换的一个部分,它在良好的定义体系结构语境内满足某项清晰的服务功能,可以通过其他接口访问他的服务。经过适当的设计和实现的类也可以成为构件,在基于构件的软件开发中,软件由构件装配而成。构件复用模型如图1-1 所示,它融合了螺旋模型的特征,本质上是演化的,并且支持软件开发的迭代方法,它是利用预先包装好的软件构件的复用为驱动构造来应用程序。首先标识候选类,通过检查应用程序操纵的数据及实现算法,并将相关的算法和数据封装成一个类。把以往软件工程项目中创建的类存于一个类库或仓库中,根具标识的类,就可搜索该类库。如果该类存在,就从类库中提取出来复用。如果该类不存在,就采用面向对象方法开发它。以后就可以使用从库中提取的类及为了满足应用程序的特定要求而建造的新类。进而完成待开发应用程序的第一次迭代。过程流程后又回到螺旋,最后进入构件组装迭代。
统一过程模型(Rational Unified Process,RUP)具有较高知名度的原因之一恐怕是因为其提出者Rational 软件公司聚集了面向对象领域三位杰出专家Booch、Rumbaugh 和Jacobson,同时它又是面向对象开发的行业标准语言——标准建模语言(Unified ModelingLanguage,UML)的创立者,是目前最有效的软件开发过程模型。
3.5.2.1 统一过程模型的基本原理
统一过程首先建立了整个项目的不同阶段,包括初始阶段、细化阶段、构造阶段、交付阶段。同时每个阶段中又保留了瀑布模型的活动,这里称为工作流,即从需求、分析到设计和实现、测试等活动。所以,可以将其理解为一个二维坐标,工作流是一个竖坐标,阶段构成了横坐标。但是,二维坐标不是统一过程的主要思想,它的主要思想是每个竖坐标表示的活动可能会产生多次迭代,每个迭代会随着横坐标(阶段)的进展而产生变更,最终逐渐减少甚至消失,如图1-2 所示。四个阶段,九个核心工作流,十大要素。3.5.2.2 统一过程模型开发过程各个阶段的里程碑RUP 中软件生命周期在时间上被分解为四个顺序阶段,每个阶段结束于一个主要里程碑。初始阶段结束时是第一个重要里程碑:生命周期目标里程碑。主要成果有:项目蓝图文档、初始的用例模型、初始的项目术语表、业务用例模型。细化阶段结束时是第二个重要的里程碑:生命周期结构里程碑。主要成果有:系统架构基线、UML 静态模型、UML 动态模型、UML用列模型、修订的风险评估、修订的用例、修订的项目计划、可执行的原型。构造阶段结束时是第三个重要的里程碑:初始功能里程碑。主要成果有:可运行的软件系统、UML 模型、测试用例、用户手册、发布描述。在交付阶段的终点是第四个里程碑:产品发布里程碑。主要成果有:可运行的软件产品、用户手册、用户支持计划。RUP十大要素包括:开发前景;项目计划;标识和减小风险;分配和跟踪任务;检查商业理由;设计组件构架;对产品进行增量式的构建和测试;验证和评价结果;管理和控制变化;提供用户支持。
3.5.2.3 统一过程模型在GIS 设计的应用
由于RUP 中的每个阶段可以进一步分解为一次迭代。与瀑布模型比较,统一软件过程模型具有降低了在一个增量上的开支风险;加快了整个开发工作的进度;迭代过程的这种模式使适应需求的变化更容易;它的迭代模型建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。
统一软件过程模型非常适合GIS 软件系统的开发。但是我们需注意的是RUP 只是一个开放过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;没有支持多项目开发结构,这在一定程度上降低了在开放组织内大范围实现重用的可能。
3.6 敏捷开发过程
“敏捷”一词意味着快速、简单、灵活。敏捷开发过程强调以人为本,注重编程中人的自我特长发挥。强调软件开发的主体是程序,文档是为软件开发服务的,不是开发的主体。敏捷开发特别重视客户参与开发,因为开发者不是客户业务的专家,所以一定要客户来阐述实际的需求细节。编制周密的计划是为了最终软件的质量,但是为了要适应客户需求的不断变化,计划和设计要不断调整。敏捷就是“快”,要快就要充分发挥每个人的个性思维,个性思维的增多会造成软件开发规范性、一致性和可复用性的下降,因此把敏捷开发与传统的“瀑布式”开发有机地结合。支持敏捷开发过程的极限编程就是强调交流、简单、反馈和勇气。另外并不是所有的GIS 软件项目都适合敏捷开发,例如,难以分解的大型GIS 应用软件、需要分布式开发的应用GIS软件等不适合敏捷开发。
4 GIS设计的未来展望
至上世纪90 年代GIS 进入产业化的阶段发展以来,GIS 已经是一个全球拥有超过十万开发人员和数十亿美元的产业。世界各国已经设计出大量实用化的地理信息系统,常见的GIS 软件已经超过400 种。当今国内外GIS 的重要发展趋势是将地理信息系统融入国家信息化和知识经济的主体,为资源环境问题的研究提供高技术手段,形成新的经济增长点,提高国家的安全能力。为此在未来仍需要大力发展业务化的GIS 运行系统,提高GIS 的应用水平和效益。
由于GIS 软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加呈指数上升。因此现有的计算机软件工程方法也不完全的适用于GIS 设计,未来还需要工程师和系统分析人员在GIS项目工程实施过程中进行研究与探索,努力发展适用的GIS 软件开发方法。
参考文献
[1] 李满春,任建武,陈刚,周炎坤.GIS 设计与实现[M]. 北京:科学出版社,2006.
[2] 李伟波,刘永祥,王庆春. 软件工程[M].武昌:武汉大学出版社,2010.
[3] 刘光,刘小东. 地理信息系统二次开发实例教程[M]. 北京:科学出版社,2004.
[4] 吴洁明,方英兰. 软件工程实例教程[M].北京:清华大学出版社,2010.
[5] 俎晓芳. 浅析统一软件开发过程与GIS 软件开发[J]. 内江科技,2006,27(6):103-104.
[6] 郭建文,冯敏,李新. 统一软件过程与地理信息系统的应用开发[J]. 遥感技术与应用,2003,18(6)422-428.
[7] 李忠,李爱光. 必须应用软件工程的方法开发GIS 软件[J]. 测绘学院学报,2001,18(1)48-54.
作者单位
四川农业大学 四川省都江堰市 611800