1GIS软件工程实验指导书前言《GIS软件工程》是一门实践性较强的专业必修课程。软件工程实验是验证、巩固和补充课堂讲授的理论知识,是课程中一个重要的、不可或缺的实践环节。其目的是使学生能够针对具体GIS软件工程项目,全面掌握GIS软件工程管理、软件需求分析、软件初步设计、软件详细设计等阶段的方法和技术,通过该课程实验使学生进一步理解和掌握软件开发模型、软件生命周期、软件过程等理论在软件项目开发过程中的意义和作用,培养学生按照软件工程的原理、方法、技术、标准和规范,进行软件开发的能力,培养学生的合作意识和团队精神,培养学生对技术文档的编写能力,从而使学生提高软件工程的综合能力,提高软件项目的管理能力。通过实验训练,达到以下目的:使学生进一步了解和掌握GIS软件工程原理,提高对实际项目的分析和设计能力,通过实验课程,熟悉和基本掌握软件工程方法学、软件开发的过程,文档资料的编写格式及规范,全面领会和贯通所学习的理论知识,从而培养学生综合运用所学课程知识,分析解决问题的能力,培养学生理论联系实际作风,实事求是,严肃认真的科学态度和良好的工作作风,为今后从事开发工作打下基础。实验总体要求GIS软件工程实验要求学生采用“项目小组”的形式,结合具体的开发项目进行设计。具体要求如下:1.按项目小组进行分组,每组不得超过6人。2.每个项目小组选出项目负责人或项目经理,由项目经理召集项目组成员讨论、选定开发项目。3.项目中的每项任务要落实到人且规定该任务的起止日期和时间。4.题目自定或采用附录A中的题目。5.文档的编写参照“GBT8567-2006计算机软件文档编制规范”和“项目示例”。6.每个项目组统一提交一本完整的文档,在提交的文档中必须注明各成员完成了哪些部分。2实验一:软件开发的过程计划(2课时)一、实验目的项目计划的目的是为项目的研发和管理工作制定合理的行动纲领,以便所有相关人员按照计划有条不紊地开展工作。⑴估计项目的总体规模、工作量和成本。⑵制定项目计划,重点放在产品生命周期中的主要关键任务。⑶制定项目时间表和预算。二、实验要求、实验内容与安排方式1、实验要求:在进行实验之前,必须掌握软件开发过程的一些基础知识,准备参考资料和阅读相关的过程模型的文档。根据各组选择的课题,实行项目经理制,各组推荐一名组长,统一管理整个项目的实施过程,并合理调整资源和负责项目全局;根据项目的难易合理分配组员的任务,对问题达成一直的看法;针对项目的实施,熟悉相应的软件开发工具的使用环境,并写出一份软件开发计划文档。2、实验内容熟悉RUP(RationalUnifiedProcess)软件开发统一过程的思想,RUP(RationalUnifiedProcess)是由Rational公司(现已是IBM公司的一部分)提出的过程模型,它软件工程史上最完整、最成熟、最优秀的过程模型之一。学习软件开发的组织和管理,将项目开发各阶段(Inception,Elaboration,Construction,andTransition)的任务明确,掌握各阶段的里程碑,并熟悉相应的工具。3、实验安排方式:本实验为设计性实验,各组可同时进行实验。三、思考题1、项目开发首先要做的事是什么?2、你认为该软件应具备的最重要的特性是什么。3、你认为怎样分工是最合理的?4、软件开发过程需要经历哪些阶段?5、软件开发过程各阶段的里程碑是什么?3实验二:系统分析(3课时)一、实验目的确定各组所开发项目的需求,在此基础上完成系统的用例分析模型和用例文档。可以采用不同的分析工具(如Rose或Visio),完成对项目的分析过程,给出系统的需求分析文档。二、实验要求、实验内容与安排方式1、实验要求⑴实验之前学生应了解本项目的业务流程。⑵学生基本掌握MicrosoftVisio和RationalRose建模工具。2、实验内容:熟悉UML(UnifiedModelingLanguage)统一建模语言,它融入了软件工程领域的新思想、新方法和新技术。分析项目的业务流程图,掌握用MicrosoftVisio及RationalRose工具进行功能分析和建模,并绘制用例图、类图、顺序图等。3、实验安排方式:本实验为设计性实验,各组可同时进行实验。三、思考题1、需求分析在软件开发中真的有那么重要吗?2、针对所开发项目的用例模型,谈谈识别Actor和UseCase的方法。3、用例之间有哪几种关系?怎样表示?4、怎样组织对该工作的评审?4实验三:软件开发系统设计(3课时)一、实验目的⑴掌握体系结构设计的方法。⑵了解用户界面设计的方法。⑶了解数据库设计的方法。⑷了解模块设计的方法。二、实验要求、实验内容与安排方式1、实验要求在实验之前要求学生掌握SQLServer2000等关系数据库的数据库设计知识。在实验二基础上完成系统的体系结构的建立和系统详细设计,并给出相应的规格说明书。2、实验内容系统设计过程是软件工程的重要组成部分。系统设计是指设计软件系统的体系结构、用户界面、数据库、模块等,指导编程人员去实现能满足用户需求的软件产品。认真分析实验二的结果,给出系统合理的体系结构,描绘系统结构图,合理分工,安排角色与任务分配,并合理划分系统的各组成模块,最后给出系统的各部分设计规格说明书。3、实验安排方式:本实验为综合性实验,各组可同时进行实验。三、思考题1.系统设计和需求分析的关系是什么?两者必须先后关联吗?2.怎样描绘系统的体系结构?3.怎样绘制符合规范的类图?4.怎样组织对设计阶段工作的评审?5附录A实验题目题目一:公交线路管理及查询系统题目二:基于GIS的房地产管理及查询系统题目三:旅游景点管理及导游系统题目四:城市教育资源管理系统题目五:传输资源管理系统题目六:公路管理系统题目七:人口分布分析查询系统题目八:城市自来水管网管理系统6附录B项目示例:宠物商店(系统设计阶段)1界面1.1欢迎窗口Sun的宠物商店例子的首页如下图。这个屏幕允许用户浏览大类,登录,维护帐户信息(如果用户已经登录),改变语言设置。语言切换是通过一个美国,日文国旗图标链接实现的。动物图标代表了种类,如狗的链接是”/product.screen?product_id=DOGS”。1.2种类窗口下图列出某个类别的宠物下,都有哪些产品。71.3货架/产品窗口下图显示所有的产品内容,右面列出了单价,并且有一个AddtoCart的加入购物车的链接。1.4货物item窗口下图显示每个内容(item)的详细信息,有个链接可以让用户把它放入购物车。1.5购物车窗口允许用户更改item数量,还有个remove,可以删除item,“ProceedtoCheckout”链接带领用户去订单屏幕,当然,如果用户没有登录,登录窗口会在用户点击之后出现。81.6登陆窗口登录窗口允许存在的用户登录,或者创建一个新的帐户和客户。1.7账户信息窗口用来填写新创建的账户的详细信息,同时也用来维护某个帐户的详细信息。91.8订单信息窗口用来让用户填写订单的发送信息,默认值是当前登录的用户的客户信息中的地址信息,当然你可以修改。一旦点submit,就会创建一个订单,发送到订单处理中心。1.9订单完成窗口102系统设计2.1架构设计策略(J2EE)使用应用框架小的应用经常不使用应用框架,管理简单的请求转发,凌乱的编码习惯.大的应用常常使用MVC应用框架,譬如WAF.这样的架构和MVC的功能分离使得应用程序具有更好的重用性,和可维护性.WEB层处理商业逻辑vsEJB层处理许多应用把商业处理逻辑放到了web层.而更大规模的应用常常把处理逻辑放到EJB层,来提供一个稳定的,大规模的,基于组件的开发模式,以及各种稳定的企业特性,如,持续性管理,安全管理,异步通讯,事务处理等特性.本地vs分布处理.企业EJB在一个分布架构中通过远程接口来访问EJB.远程EJB提高了稳定性和性能,同时因为是远程调用,要求EJB必须是粗粒度的。而本地EJB和客户端再同一个虚拟机上,由于速度快,可以做到细粒度。petstore大量采用了localEJB来提高性能。声明的或者是编程实现事务控制声明的方式,使得管理更容易,但是呢,编程的方式提供了更高的控制。宠物店在显示数据的时候使用了程序控制,而在更新数据的时候,采用了声明方式。同步和异步通讯同步应用适用于适当的时间完成一个特定结果。异步管理起来比较复杂,但对于松耦合以及可信度不是很高的,并行的操作,很适合。大多数应用使用同步异步结合的方式。例如,宠物店使用同步方式读取货品的目录-catalog。而对于发送订单,使用了异步方式,因为这需要很长时间,而且,订单处理中心不一定在运作过程中。2.2宠物店的结构宠物店的服务从上而下。最上层是WAF(webapplicationframework),来控制应用的屏幕跳转,产生视图,调用商业组件来完成商业处理。图11WAF提供了许多WEB应用所需的服务,包括,请求的过滤和分发,模板视图的产生,一系列可重用的taglib,以及屏幕流程控制。11应用的组件封装了处理的逻辑,他们代表了商业的数据,并且操作这些商业数据,实体EJB代表了商业实体,如,Customer,Address,Account。SessionEJB提供了一些方法,如登陆一个用户,登出一个用户,管理购物车等。别的sessionejb提供了一些共同的方法,如产生唯一identifier。传统的JavaBean组件变成了值对象,用来在EJB组件和应用间传递数据。XML文档类则用来处理订单信息。2.3宠物店模块设计宠物店是一堆接口定义清晰的独立模块组成..控制模块它来分发请求到各个业务处理逻辑,屏幕跳转控制,对应的组件处理,以及用户的登录和注册.控制模块由WAF实现和扩展..购物车模块-购物车跟踪用户购物过程.登录模块-需要用户登录在某些页面登录.消息模块-从宠物店到等单中心用来异步传输订单.类别模块-根据用户查询需求提供一个类别视图.客户模块-表示客户信息:地址,信用卡,联系方式等上图所示,控制模块总控所有的交互和执行,每个用户session有一个购物车对应.2.4各个模块详细设计每个都分为需求,设计,实现来描述122.4.1控制模块控制模块由WAF组成,并且加上用户定义的类和一些相关文件.它协调别的模块的动作.控制模块需求控制模块组成了应用的框架,所以,它自然需要一个很高层次的设计/抽象.扩展性和可维护性应该首要考虑.模块必须能处理所有的HTTP请求这个模块控制web应用,能于请求用户交互,控制模块负责分类和分发这些请求给其他模块处理HTTP响应输出可以是任何的Content-Type控制模块不仅仅可以输出text类型的内容,还有其他的字节类型的内容.商业逻辑可以容易扩展当商业处理逻辑改变时候,企业应用可以容易改变和扩展.开发者需要改动最小来满足新的变化.新的视图应该容易添加大多数商业逻辑改变都会引起用户的视图变化,这要求,用户者可以容易添加新的视图.模块必须提供灵活的外观控制手工修改成百上千的用户视图太费劲了.必须提供一个对外观的统一的全局控制..当应用变大时候,必须容易维护控制模块结构化,随着时间流逝,新功能不断加入,不应该产生庞大的不可维护的情况.每个部分应该容易阅读和维护..模块的颗粒必须很好的权衡每个model和视图组件需要访问j2ee服务,要很好的权衡好他们的力度.新功能必须容易添加新的需求可能常常影响每个操作和视图,控制模块必须气送满足需求的变化控制模块的设计这个宠物店例子的WebApplicationFramework(WAF)是对j2ee蓝图的web层规范的实现.一个web层处理一般可以划分成四步:解释一个请求,说白了就是读参执行一个商业逻辑处理路由,选择下一个视图产生这个视图看看下面这张图巴,画的真好:)图1313WAF从客户端受到请求,处理,选择和装配下个视图来回应,每个请求执行下列操作:.请求过滤可选的过滤器来进行统一的服务(安全,日志,编码).映射请求到某个HTMLAction