
◆软件工程的概念:试图建立并使用正确的工程方法开发出成本低,可靠性好,并在机器上能高效运行的软件,从而解决或缓解软件危机。
◆GIS软件工程就是在GIS软件的整个开发过程中,遵循一般软件开发的工程化原理和方法,并照顾到GIS软件开发的特殊规律和要求,对GIS软件建设的各个阶段进行工程化规范的一门技术。
◆软件生存周期:一个软件从开始计划,到废弃不用为止的整个时期。一般来讲,软件生存周期包括软件定义、软件开发与运行维护3个时期。
◆软件生存周期模型
⏹概念:软件生存周期模型规定了把生存周期划分成哪些阶段及各个阶段的执行顺序,也称为过程模型。
⏹模型:瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、Rational统一过程、敏捷过程与极限编程等;(熟练掌握一种)
⏹瀑布模型是文档驱动的,快速原型模型适用于用户驱动的系统,螺旋模型是风险驱动的,RUP是用例驱动。
(一)瀑布模型
1.瀑布模型定义
把软件开发过程划分成若干阶段,每个阶段的任务相对,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度。在软件生存期的每个阶段都采用科学的管理和良好的方法与技术,而且每个阶段结束之前,都从技术和管理两个角度进行严格的审查,经确认之后才开始下一阶段的工作。
瀑布模型是文档驱动的,以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导。
(1)问题定义与可行性研究
⏹确定要开发软件系统的总目标。
⏹给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究。
⏹估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度。
⏹制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查。
(2)需求分析
⏹对待开发软件提出的需求进行分析并给出详细的定义。
⏹编写软件需求说明书或系统功能说明书及初步的系统用户手册。
⏹提交管理机构评审。
(3)设计
⏹总体设计 — “如何解决问题”
✓把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块;
✓可以列出多种解决方案进行比较;
⏹详细设计 — 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础;
⏹编写设计说明书,提交评审。
(4)编码
⏹把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”。
⏹写出的程序应当是结构良好、清晰易读的,且与设计相一致的。
(5)测试
⏹ 单元测试
⏹ 综合测试
(6)维护
⏹改正性维护:运行中发现了软件中的错误需要修正。
⏹适应性维护:为了适应变化了的软件工作环境,需做适当变更。
⏹完善性维护:为了增强软件的功能需做变更。
2.瀑布模型的特点
⏹阶段间具有顺序性和依赖性。
⏹推迟程序的物理实现。
⏹质量保证:每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。
⏹易于组织,易于管理:
⏹是一种严格线性的、按阶段顺序的、逐步细化的过程模型(开发模式)。
3.瀑布模型适应场合
⏹在质量需求高于成本需求和进度需求的时候,它尤为出色。
⏹当有一个稳定的产品定义和很容易被理解的技术解决方案时,纯瀑布模型特别合适。
⏹适合于需求很明确的软件项目开发的模型。
⏹…...
4.瀑布模型的缺陷
⏹在项目开始的时候,用户常常难以清楚地给出所有需求;用户与开发人员对需求理解存在差异。
⏹缺乏灵活性:因为瀑布模型确定了需求分析的绝对重要性,但是在实践中要想获得完善的需求说明是非常困难的,导致“阻塞状态”。反馈信息慢,开发周期长。
⏹瀑布模型要保证每个阶段特别是定义阶段是正确的、完整的。
⏹虽然存在不少缺陷,瀑布模型经常被嘲笑为“旧式的”,但是在需求被很好地理解的情况下,仍然是一种合理的方法。
(二)快速原型模型:
主要做法:首先建立一个能够反映用户主要需求的原型,让用户看一看未来系统的概貌,以便判断哪些功能是符合需要的,哪些方面还需要改进。然后将原型反复改进,最终建立完全符合用户要求的新系统。
⏹适用于用户驱动的系统(即需求模糊或随时间变化的系统);
⏹原型化软件开发突出一个“快”字。
优点:
✓从实践中学习(Learning by doing)
✓改善用户参与
✓使部分已知需求清晰化
✓节省开发的投入、缩短整个软件的开发周期
✓提高系统的实用性
缺点:
✓额外的花费:研究结果表明构造一个原型可能需要10%额外花费。
✓为了尽快实现原型,采用了不合适的技术,运行效率可能会受影响。
✓原型法要求开发者与用户密切接触,有时这是不可能的。
✓缺少控制,由于用户可能不断提出新要求,因而原型迭代的周期很难控制。
◆GIS软件分类:
(1)平台软件
平台软件具备比较齐全的获取、组织、存储、访问、处理、分析、表现、发布和在不同地点、不同系统和不同用户之间传输地理空间数据的能力,其功能具有通用性。
(2)桌面软件
桌面软件是一个简易的单用户地理信息系统平台软件,提供一组地理空间数据处理功能。
(3)专业软件
专业软件面向平台软件的某一功能类别,加以强化和扩充,可以完整、高效地适应该类地理空间数据应用的需要。
(4)应用软件
用户有了实际的应用需求与应用领域,为了解决用户实际应用问题的这样一类地理信息系统。
◆软件生存周期:
⏹定义时期:包括问题定义、可行性研究、需求分析;
⏹开发时期:包括总体设计、详细设计、编码和单元测试、综合测试;
⏹运行维护时期:
◆GIS软件生存周期:是指一个GIS软件从提出开发要求开始直到该软件报废为止的整个时期。
GIS软件工程生存周期包括:
⏹前期工程;
⏹设计工程;
⏹数据工程;
⏹工程实施;
⏹维护工程;
◆习题:题1:在下列说法中, D 是造成软件危机的主要原因。
① 用户使用不当 ② 软件本身特点 ③ 硬件不可靠
④ 对软件的错误认识 ⑤ 缺乏好的开发方法和手段 ⑥ 开发效率低
供选择的答案:
A.①③⑥ B.①②④ C.③⑤⑥ D.②⑤⑥
题2:为什么说把整个软件生存周期划分为更小的阶段有助于软件项目管理?
解答:软件是一种逻辑实体,其固有的特点是缺乏可见性,因此,管理和控制软件开发过程相当困难。
把整个软件生存周期划分为更小的阶段后,提高了软件项目的可见性,可以给每个阶段赋予确定而有限的任务,就能够简化软件建设过程中每一步的工作内容,使因为软件规模增长而大大增加了的软件复杂性变得较易控制和管理。
题3:假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算采用哪种软件生存周期模型?为什么?
解答:这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出 3点结论:
第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;
第二,该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;
第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。
综上所述,采用增量模型来完成这个项目比较恰当。
第二章 GIS软件工程的可行性分析
◆可行性分析的目的用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得去开发。
◆可行性分析是对建立系统的必要性和实现目标的可能性,从技术因素、经济因素、社会因素、理论因素等几个方面进行分析。
◆影响因素:技术因素、经济因素、社会因素、理论因素。
◆理论可行性包括:数据结构和数据模型。
系统数据结构、数据模型与应用涉及到的专业数据的特征和结构的合适性分析;
分析方法和应用模型与GIS技术结合的可能性分析。
◆可行性研究的步骤
确定项目规模和目标;研究正在运行的系统 ;建立新系统的高层逻辑模型;进一步定义问题;导出和评价各种方案;推荐可行的方案 ;编写可行性研究报告
可行性研究的任务
⏹首先,需要进一步分析和澄清问题定义;并列举出对目标系统约束和;
⏹然后,分析员应该导出系统的逻辑模型;
⏹从逻辑模型出发,探索出若干种可供选择的主要解法,对每种解决方法都要研究它的可行性;
第三章GIS软件工程的需求分析
◆需求分析基本任务是准确地回答“系统必须做什么?”这个问题。
◆需求分析的任务:建立分析模型;编写需求说明
◆分析模型是描述软件需求的一组模型。这种模型往往包含问题及其环境所涉及的信息流、处理功能、行为模型及涉及约束等。分析模型通常由一组模型组成,其中包括数据模型、功能模型和行为模型。
◆需求分析的步骤:
✓需求获取:全面准确地了解用户的需求,包括功能性需求和非功能性需求。
✓需求提炼:分析建模
✓需求描述:编写 ✓需求验证 ◆占主导地位的两种分析模型:结构化分析模型、面向对象分析模型 结构化分析模型的组成结构 数据字典(DD) : 模型核心,系统所涉及的各种数据对象的总和。 E-R图: ⏹用来描述数据对象间的关系。代表软件的数据模型; ⏹在E-R图中出现的每个数据对象均可用数据对象规约来描述; 数据流图(DFD): ⏹指明系统中数据是如何流动和变换的; ⏹DFD中每个功能的描述包含在加工规约(小说明); ⏹它们一起构成软件的功能模型; 状态变迁图(STD): ⏹用于指明系统在外部事件作用下将会如何动作; ⏹用于行为建模; ⏹关于软件控制方面的附加信息则包含在控制说明中(CSPEC); 结构化分析模型的组成与描述工具 ⏹数据流图(DFD)、数据字典(DD)、加工说明(PSPEC) ⏹E-R图 ⏹控制流图(CFD)、控制说明(CSPEC)、状态转换图(STD) 面向对象分析模型的组成结构 习题 1.需求分析的基本任务是准确的回答(系统必须做什么?) 2. 需求分析应交付的主要文档是( 需求规格说明书 )。 3.可将用户的需求分为两大类:(功能性需求)和(非功能性需求)。 4.传统软件工程:以( 结构化程序设计)为基础; 面向对象软件工程:以(面向对象程序设计 )为基础; 5.需求分析的任务是什么? 6.需求分析的步骤是什么? 第四章 GIS软件工程的分析方法 (结构化分析) ◆SA(Structured Analysis, 结构化分析)是一种面向数据流的分析方法。思想:采用自顶向下、逐层进行功能分解的分析方法来定义系统的需求。 ◆数据流图(Data Flow Diagram,DFD):描述数据在系统中流动和处理的情况,具有直观、形象、容易理解的优点。数据流图用简单的图形记号表示数据流、加工、数据源以及外部实体。数据流图(DFD)是用于揭示系统功能的主要工具;它反映了客观现实问题的工作过程; ◆数据流图的基本符号: 数据源点/终点(外部项或外部实体) 数据处理(加工) 数据流 数据存储 (数据文件或数据库) 注意:在同一幅数据流图中,数据流名尽量不要同名。 ◆为什么画分层数据流图:对于大型的软件系统,如果只用一张数据流图表示所有的数据流、处理和数据存储,那么这张图将十分复杂、庞大,而且难于理解。层次结构的数据流图可以很好地解决这个问题。分层DFD具有下列优点: ⏹便于实现 采用逐步细化的扩展方法,可避免一次引入过多细节,有利于控制问题的复杂度; ⏹便于使用 用一组图代替一张总图,使用户中的不同业务人员可各自选择与本身有关的图形,不必阅读全图; ◆分层数据流图画法:①把一个系统看成一个整体功能,明确信息的输入和输出。 ②找到系统的外部实体;找出外部实体的输入数据流和输出数据流;(3)在图的边上画出系统的外部实体。④从外部实体的输入流(源)出发,按照系统的逻辑需要,逐步画出一系列逻辑处理过程,直至找到外部实体处理所需的输出流,形成数据流的封闭。 ⑤将系统内部数据处理又分别看做整体功能,其内部又有信息的处理、传递、存储过程。⑥如此一级一级地剖析,直到所有处理步骤都很具体为止。 一般情况下,应该遵守“由外向里”的原则。即先确定系统的边界或范围,再考虑系统的内部;先画加工的输入和输出,再画加工内部。 具体实行时可按下述步骤进行: A.识别系统的输入和输出,画出顶层图 B.画系统内部的数据流、加工与数据存储,画出一级细化图C.加工的进一步分解,画出二级细化图D.其它注意事项 ◆加工说明应精确地描述一个加工做什么,包括加工的激发条件、加工逻辑、优先级别、执行频率、出错处理等细节,其中最基本的部分是加工逻辑。 ◆加工逻辑是指用户对这个加工的逻辑要求,即加工的输入数据流与输出数据流之间的逻辑关系。 ◆需求分析建模的方法 ⏹面向信息流向:结构化分析方法 ⏹面向信息内容:面向对象分析方法 ⏹面向信息结构:Jackson分析方法 ◆结构化分析 ⏹DD ⏹ERD ⏹DFD、PSPEC ⏹CFD、CSPEC ⏹STD 习题 1.软件需求规格说明书的内容不应包括( ) ①对重要功能的描述 ②对算法的详细过程描述 ③对数据的要求 ④软件的性能 2.软件需求分析的任务不应包括 ( )。 ① 问题分析 ② 信息域分析 ③ 结构化程序设计 ④ 确定逻辑模型 3.在需求分析中,分析员要从用户那里解决的最重要的问题是( )。 ① 要让软件做什么 ② 要给该软件提供哪些信息 ③ 要求软件工作效率如何 ④ 要让软件具有什么样的结构 4.在软件开发过程中常用图作为描述工具。DFD 就是面向(1)分析方法的描述工具。在一套分层 DFD 中,如果某一张图中有N个加工(process),则这张图允许有(2)张子图。在一张 DFD 图中,任意两个加工之间(3)。在画分层 DFD 时,应注意保持(4)之间的平衡。 (1)(A)数据结构 (B)数据流 (C)对象 (D)构件(component) (2)(A)0 (B)1 (C)1~N (D)0~N (3)(A)有且仅有一条数据流 (B)至少有一条数据流 (C)可以有 0 或多条名字互不相同的数据流 (D)可以有 0 或多条数据流,但允许其中有若干条名字相同的数 据流 (4)(A)父图与子图 (B)同一父图的所有子图 (C)不同父图的所有子图 (D)同一子图的所有直接父图 ◆结构化方法和面向对象方法的比较: 结构化方法数据与过程是分离的: 对象把数据和处理数据的方法封装成一个单元: 面向功能 ,把系统看成一组功能 把系统当作一组相互作用的对象 ◆UML是一种建模语言,是用来为面向对象开发系统的产品进行说明、可视化和编制文档的方法。UML是一种建模语言,不是一种(建模)方法,它于过程。 ◆UML用于描述模型的基本构造块:事物 ,关系 和 图。 ◆事物 (Things) 结构事物(Structure) UML中的静态元素:类、接口、协作、用例、活动类、组件、结点等 行为事物(Behavioral) UML中的动态元素:交互(Interaction)、状态机(State Machine) 组织事物(Grouping) UML的分组元素:包(Package) 注释事物(Annotation) ◆ 关系 (Relationships) 图示符号 关联关系 (Association) 依赖关系 (Dependency) 泛化关系 (Generalization) 实现关系 (Realization) ◆ 图(Diagrams)—— 9种图 ⏹用例图着重于从系统外部角色的角度来描述系统需要提供哪些功能,并且指明了这些功能的角色是谁; ⏹用例图是显示一组用例、参与者以及它们之间关系的图; (1)用例图的组合元素 ⏹用例:是指对系统提供的功能(或称系统的用途)的一种描述; ⏹角色(actor):代表系统的使用者,是与系统进行交互的外部实体; ⏹系统:用于界定系统功能范围; 用例图表示法: (2)角色 ⏹角色是一个群体概念,代表的是一类能使用某个功能的人或事物,角色不是指某个个体; ⏹ (3)用例 ⏹用例代表的是一个完整的功能; ⏹系统角色总是发起用例,系统自己发起的行为不能启动使用用例; ⏹用例强调系统要做什么,即功能需求,不考虑内部如何完成; 在用例图中的图符: (4)用例和角色之间的关系 通信关系是角色和用例之间的关联,它们用于对角色和用例之间的通信进行建模。 (5)用例之间的关系 用例之间存在有泛化、包含、扩展等关系; a.泛化关系:在泛化关系中,子用例继承了父用例的行为和含义,子用例也可以增加新的行为和含义或覆盖父用例中的行为和含义。 b.包含关系 ⏹ 包含关系指的是两个用例之间的关系,其中一个用例(称作基本用例,base use case)的行为包含了另一个用例(称作包含用例,inclusion use case)的行为; ⏹ 包含用例是一种用例的复用技术; c.扩展关系 ⏹ 复用用例的另一种方式——通过对已有用例增加一些额外的步骤来建立新用例; ⏹ 基本用例必须声明若干“扩展点”(extension point),而扩展用例只能在这些扩展点上增加新的行为和含义; (6)用例图中其他常用的图符: 注释体:对UML实体进行文字描述; 注释连接:将注释体与要描述的实体连接,说明该注释体是针对该实体所进行的描述; ◆UML中的通用机制:规格说明,修饰,通用划分,扩展机制 ◆扩展机制包括:构造型(stereotype),标记值(tagged value),约束(constrains) ◆OOA的基本步骤:OOA总是从理解系统的“使用实例”开始。其基本步骤为:定义系统的用例,在领域分析的基础上建立问题域的类-对象模型,然后建立对象-关系和对象-行为模型。 ◆练习一 一、单项选择题 1.用例(Use Case)用来描述系统在对事件做出响应时所采取的行动。用例之间是具有相关性的。在一个“订单输入子系统”中,创建新订单和更新订单都需要核查用户账号是否正确。那么,用例“创建新订单”、“ 更 新 订 单”与用例“核查客户账号”之间是 关系。 A.包含(Include) B.扩展(Extend) C.分类(Classification)D. 聚集(Aggregation) 2.如图所示,类 PaymentController必须实现哪些方法? (A)create,process,reserve,acknowledge,commit (B)process,reserve,acknowledge,commit (C)payment,save (D)payment,create,save 3.序列图(sequence diagram)和交互图(interaction diagram)的关系类似于下面哪种类型的关系。 (A)类和对象(B)类和参与者(actor)(C)Java和高级程序设计语言(D)UML和Java 二、多项选择题 1.在UML中,下面类的命名哪些是有效的? (A)Account(B)Accounting:Account(C)Accounting.Account(D)Accounting;Account 练习二 一、单项选择图 1.用 UML 建立业务模型是理解企业业务过程的第一步。业务人员扮演业务中的角色及其交互方式,例如航空公司的售票员是业务人员,电话售票员也是业务人员,他们之间的关系(1)。在UML中,用(2)表示企业业务的工作流。这中途显示出工作流中的步骤、决策点,以及完成每一步骤的角色和对象。 (1)A. 关联关系(Association) B. 依赖关系(Dependency) C. 聚集关系(Aggregation) D. 泛化关系(Generalization) (2)A. 活动图(Activity Diagram) B. 业务图(Business Diagram) C. 用例图(Use Case Diagram) D. 交互图(Interaction Diagram) 2.在UML中, 把活动图中的活动划分为若干组,并将划分的组指定给对象,这些对象必须履行该组所包括的活动,它能够明确地表示哪些活动是由哪些对象完成的。 A.组合活动 B.同步条 C.活动 D.泳道 3.Coolsoft准备开发一个自动餐卡服务系统Coco,Coco的具体需求如下:Coco将使用三个插槽,第一个插槽用于系统送出新的餐卡,第二个插槽用于在向餐卡中加钱时插入餐卡,第三个插槽用于在向餐卡中加钱时插入纸币。系统运行时会显示一个界面,界面中有3个选项: (1)获取新的餐卡(2)为餐卡加钱(3)打印收条 ☐选项1允许用户获得一张新的餐卡。新的餐卡在使用前必须先加钱。 ☐选项2允许用户为新卡或旧卡加钱,这时要求把餐卡插入第二个插槽中,把纸币插入第三个插槽中。 ☐选项3允许用户打印与加钱活动有关的收据,或打印餐卡最近一次使用情况的收据。 在开发Coco系统完成上述功能时,下面几个图中哪个图是最有用的? (A)构件图(ComponentDiagram) (B)状态图(StatechartDiagram) (C)活动图(Activity Diagram) (D)部署图(DeploymentDiagram) 4.该图为某书店库存管理系统的部分类图,下面几个类中,最有可能负责创建Transaction类的是哪个? A.LineItem B.Station C.Payment D.Sale 二、多项选择题 1.下面哪些陈述是正确的? (A)状态图可以用来描述涉及多个用例的对象的行为 (B)一些高级的状态图可以用来描述多个对象之间的关系 (C)活动图可以用来描述多个用例间多个对象之间的行为 (D)活动图可以用来描述企业中的工作流 2.在组件图中可以包含下面哪些建模元素? (A)接口(interface)(B)包(package)(C)约束(constraint)(D)依赖关系 三、判断对错题 1.一个状态图最多只能有一个初态和一个终态。 2.协作图中的消息必须要有消息顺序号。 3.两个参与者(actor)之间可以有包含(include)关系、扩展( extend)关系或泛化(generalization)关系,而包含关系和扩展关系是依赖(dependency)关系的构造型。 4.参与者(actor)和用例(use case)之间的关系是关联(association)关系。 5.参与者(actor)位于所要建模的系统边界的外部。
用例图(Use case diagram) 图名称 图定义 图性质 1 用例图 一组用例、角色及它们的关系 静态图 2 类图 一组类、接口、协作及它们的关系 静态图 3 对象图 一组对象及它们的关系 静态图 4 序列图 一个交互,强调消息的时间顺序 动态图 5 协作图 一个交互,强调消息发送和接受的对象的结构组织 动态图 6 状态图 一个状态机,强调对象按事件排序的行为 动态图 7 活动图 一个状态机,强调从活动到活动的流动 动态图 8 构件图 一组组件及关系 静态图 9 配置图 一组接点及它们的关系 静态图
