软件工程培训讲义(上).ppt_第1页
软件工程培训讲义(上).ppt_第2页
软件工程培训讲义(上).ppt_第3页
软件工程培训讲义(上).ppt_第4页
软件工程培训讲义(上).ppt_第5页
已阅读5页,还剩271页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件工程培训讲义(上),1、软件工程概念 2、软件开发模型 3、系统建模技术-结构化方法 系统建模技术-面向对象方法 4、软件测试 5、软件过程 ISO9000-3与CMM简介 6、软件工具、平台与环境,第一章、软件工程及软件工程框架 软件计算机系统中的程序及其文档。程序是计算任务的处理对象和处理规则的描述;文档是为了便于了解程序所需的阐明性资料。细言之, 工程将理论和所学的知识应用于实践的科学。 软件工程应用计算机科学、数学及管理科学等原理,开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成

2、本及确定权衡,管理科学用于用于计划、资源、质量、成本等管理。 软件工程是一门交叉性学科。,软件工程框架,软件工程可定义为三元组: 目标,原则,活动 给出了软件工程所涉及的工程要素 给出了各要素之间的关系 给出了软件工程学科所研究的主要内容,软件工程的基本活动 1)、需求 定义问题,即建立系统模型 主要任务包括: 1需求获取 需求定义 系统功能的一个正确的陈述 2需求规约系统需求规格说明 主要成分:系统模型 系统功能的一个精确、系统的描述 3需求验证,2)、设计 在需求分析的基础上,给出系统的软件解决方案。 1总体设计 系统的软件体系结构 C/S结构 以数据库为中心的结构 管道结构 面向对象的结

3、构 2详细设计 针对总体设计结果,给出每一构件的详 细描述,3)、实现 选择可用的构件;或 以一种选定的语言,对每一构件进行编码 4)、确认 贯穿软件开发的整个过程 主要任务是:软件测试 5)、支持 完善性维护 纠错性维护,第二章、软件开发模型 1、软件开发模型 软件过程、活动、任务的结构框架。 瀑布模型 演化模型 增量模型 螺旋模型 喷泉模型 外征:软件开发活动的组织 内涵:求解软件的计算逻辑,分 析,编 码,(1)瀑布模型 50年代末:二级模型 “做什么” “编程-实现”,需求分析,设 计,编 码,测 试,运 行,瀑布模型雏型,系统需求,软件需求,需求分析,设 计,编 码,测 试,运 行,

4、1970年,W.Royce 将雏型进一步精化 其中:每一阶段具有以下特征: 从上一阶段接受工作对象,即输入; 对这一输入实施本阶段的工作 给出本阶段的结果作为输出。,系统需求,软件需求,需求分析,设 计,编 码,测 试,运 行,归纳逻辑: P Q PQ,瀑布模型 活动如瀑布流水式的组织 规定每一活动的工作对象和输出 评审、确认和反馈,问题:无法通过开发活动 澄清本来不确切的软件需求 维护、甚至返工的代价,需求,设计,编码,测试,集成,需求,设计,编码,测试,集成,开 发,反 馈,开 发,反 馈,.,核 心 系 统 开 发,第 二 次 迭 代,(2)演化模型 针对事先不能完整地定义需求 针对用户

5、的核心需求,开发核心系统 根据用户的反馈,实施活动的迭代,1,3,2,5,9,10,11,6,7,12,13,8,4,增量1 1,2,5,9 增量2 3,6,7,4,10,11 增量3 8,12,13 ,管理,增量规约,增量设计,纠错性分析,增量实现,增量1,增量2,增量3,(3)增量模型,微软“同步-稳定的产品开发模型” 将项目分为若干个里程碑阶段 定义稳定、灵活的体系结构,并为构件 和子系统的开发提供统一的接口 开发构件,维持一个可发布的系统版本 可以准确把握项目进展情况 增强开发人员的信心和成就感 可以随时根据市场情况及时作出调整,演化,维护,确认,实现,设计,分析,喷泉模型 特征:迭代

6、 无缝 与面向对象技术 的关系,第三章 系统建模技术-结构化方法 (一)结构化分析方法 要回答:如何定义问题? 涉及: 如何获得需求 如何规约需求 如何验证需求 1、关于需求获取 1)需求的目标:简洁而精确地说明所要解决的问题。 2)需求面临的挑战 问题空间理解 人与人之间的通信 需求的不断变化,3)需求的重要性 Standish-Group对350家公司的8000个软件项目作过一次调查 其中,31%的项目的结局是被取消。 引致这些项目失败的原因是: 13.1% 不完整的产品要求; 12.4% 缺乏用户的参与; 10.6% 缺少资源(人力、财力); 9.9% 不现实的期望; 9.3% 高层领导

7、支持不足; 8.7% 产品要求与指标的改变; 8.1% 没有订计划; 7.5% 不再需耍该开发中的系统。 其中,与产品需求有关的(1,2,4,和6项)占了44.1%。这些数据突出地显示了软件产品需求在软件开发中的重要性。,重要性之一 软件需求工程直接关系到“成本、质量和按时交付” 等问题-它们是项目成败的关键因素。 项目的五维:进度,特性,质量,成本,人员。 重要性之二 软件需求-这种发生在软件生命周期的初始阶段 的错误是非常难于改正,并且是代价极高的。 最新的研究兴趣聚焦于“需求引出”, 因为它涉及到 软件开发人员与非软件专业人员合作的问题。,4)需求的原则 分析问题和需求的能力取决于分析人

8、员的思维和经验。 其中:好的思维包括: 抽象:捕获问题空间的“一般/特殊”关系 是认识 、构造问题的一般途径。 划分:捕获问题空间的“整体/部分”关系 是降低问题复杂性的基本途径之一 投影:捕获问题空间的多维“视图” 是描述问题的基本手段之一 ,好的思维来源于: 严谨、逻辑和“活跃”的思考习惯。 严谨要求思考的对象应该是不放过任何一个“小” 问题 逻辑要求思考的过程应该是一种符合规则的 推导过程 活跃思维要求思考的方式应该是并行的,即 不是仅一个角度,而是多个角度来思考问题 经验来源于: 开发了一些软件并善于总结-创新与教训 跟踪最新技术。,5)需求获取技术特征 由上可见,需求获取技术特征:

9、方便通讯(使用易于理解的语言) 提供定义系统边界的方法 提供划分、抽象、投影等方法 允许采用多种可供选择的设计方法 适应需求的变化 支持使用问题空间的术语,思考问题和编制文档 ,需求获取技术示例- Use Case (Ivar Jacobson,1994) 1)、引言 Use Case主要用于促进和用户的交流、沟通。为此使用了一种用户和开发人员都能理解方式描述系统功能和行为。 Use Case可以划分系统与外部实体的界限,是系统开发的起点,而最终应该落实到类和实现代码上。 Use Case既然是对系统行为的动态描述,因此它是类、对象、操作的来源,是系统分析和设计阶段的输入之一,是分析和设计,制

10、定开发计划,测试计划,设计测试用例的依据之一。 Use Case Model是系统需求分析阶段的成果之一。 Use Case不但有助于帮助分析员理清思路;验证用户需求。而且,也是开发人员之间进行交流的重要手段。,2)、语义与表示 USE CASE语义 一个USE CASE是系统或其它语义实体(例如子系统或一个类)所提供的一块(unit)高内聚的功能,显露该系统和一个或多个外部的交互者(称为操作者)交替出现的消息序列,以及该系统所执行的动作。 可见,一个USE CASE捕获了参与交互的各方关于其行为的一个约定。通过这一约定,描述了该语义实体在不同条件下的行为对参与者一个要求的响应,以实现某一目的

11、。不同的行为序列,依赖于所给出的特定要求以及与这些要求相关的条件。, 表示与描述 USE CASE通常被表示为: USE CASE包含一组操作和属性,这些操作和属性 规约了该USE CASE的实例所执行的那个动作序列。动作 包含状态的改变以及该USE CASE与其环境的通讯。 为了表明USE CASE所包含的具体内容,还应给出它 的正文描述。即:,USE CASE 中包含的信息 名称(Name) 标识(Identifier) 描述(Description) 角色(Actor) 状态(Status) 活动及时序 频度(Frequency) 注:具体例子请参见P16-17。,3)、操作者语义与表示

12、 一个操作者定义了一组高内聚的角色,当用户与该 实体交互时,用户可以扮演这一角色。 对于每一USE CASE,一个操作者有一种角色,即每 一USE CASE与具有一种角色的操作者进行通讯。 通常,一个操作者被表示为:,4)、USE CASE获取 仿真法(Simulation) 掌握用户的所有输入与输出的数据种类,通过仿真的方法,找出它们之间的对应关系,与及相应的数据处理过程。包括任何计划中将要新增加的数据类型与处理过程。 原型法(Prototyping) 从用户处取得一组基本的USE CASE产品要求之后, 立即建造USE CASE产品的原型(这个原型可以是实际可运行的软件(外壳),或是一个用

13、描述来表达的产品),然后让用户去模拟使用这个原型,提出修改的意见。其中,值得注意的是,不要忽略将要新增加的数据类型与处理过程。 场景法(Scenario Generation) 让用户穷举他们现有的所有的数据处理实践以及任何计划中将要新增加的数据类型与处理过程。 从以上三中方法中可以看出,Use Case 的功能划分均要以角色为主体,行为是角色触发的。,5)、关系 在USE CASE之间,或在操作者与USE CASE之间,存在一些标准的关系: 关联:参与关系,即操作者参与一个USE CASE。例如,操作者的实例与USE CASE实例相互通讯。关联是操作者和USE CASE之间的唯一关系。 扩展

14、:USE CASE A到USE CASE B的一个扩展关系,指出了USE CASE B的一个实例可以由A说明的行为予以扩展(根据该扩展所说明的特定条件),并依据该扩展点定义的位置,A说明的行为被插入到B中。 包含:USE CASE A到USE CASE B的一个包含,指出A的一个实例将包含B说明的行为,即这一行为将包含在A定义的那部分中。 泛化:USE CASE A到USE CASE B的泛化,指出A是B的特殊情况。,1 *, the salesperson asks for the catalog,Place Order extension points additional request

15、s: after creation of the order,Supply Customer Data,Order Produck,Arrange Payment,Request Catalog,salesperson,例:USE CASE 关系 Actor 关系,Supervisor,Establish Credit,1 *,6)、USE CASE图 USE CASE图给出了操作者和USE CASE以及它们之间的关系。即图中给出了一些操作者、一组关系、一些接口和这些元素之间的关系。 (关系是操作者和USE CASE之间的关联 是操作者之间的泛化 是USE CASE之间的泛化、扩展和包含) 可

16、以将一些USE CASE用一矩形括起,以表示所包括的那个系统或其它语义实体的边界。,Check status,Place order,Fill order,Establish credit,Telephone Catalog,Salesperson,Shipping Clerck,Supervisor,Customer,例:USE CASE图,7)、使用USE CASE图的建模类型 使用USE CASE图所建造的类型,可以从两个层面上进行分类,它们是“整体/部分”关系 系统建模(system modeling ) 系统建模用于描述软件系统的结构和行为 业务建模(business modelin

17、g) 业务建模用于企业或组织过程的优化和再工程(process re-engineering) 业务建模的图形元素不仅包括普通的Actor和Use Case,还包括Worker、Artifact,Business 过程描述时还应结合时序图(sequence diagram)和任务图(activity diagram),2、关于需求规约 需求规约的主要目标: 依据需求陈述(作为输入),解决其中的歧义、不一致等问题,以系统化的形式表达用户的需求,即给出问题的定义(建立模型),形成需求规格说明书。为了实现这一目标, (一)结构化分析方法 1提出的概念有: 数据流: 加工: 数据存储: 数据源: 数据

18、潭: 概念是完备的。,2建模过程 (1)建立系统的功能模型 -使用的工具为数据流图DFD 首先:建立系统环境图,确定系统边界 继之:自顶向下,逐层分解 (2)建立数据字典 定义数据流 定义数据存储 定义数据项 (3)给出加工小说明 -使用的工具可以为判定表 判定树,(1)建立系统的功能模型 -使用的工具为数据流图DFD 数据流图:是一种描述数据变换的图形工具。例如:,旅行社,订票单,预定 机票,准备 机票,记帐,费用,航班,帐单,机票,记帐文件,航班目录,旅行社,数据流图由四个基本成分组成: 数据流 加工 数据存储 数据源和数据潭,其中:1 各成分的定义 2 数据流、数据存储-支持数据抽象 加

19、工-支持过程/功能的抽象 3 关于命名问题,问题陈述:建立一个简化的商业自动化系统。 其中: 售货员 负责录入销售的商品(商品名,编号,单价,数 量),有时要根据特定情况对销售的商品进行修 改或删除。 收款员 负责收取现金,并将多交的付款退还用户。 销售经理 需要随时查询整个部门的销售情况(时间,商品 编号,销售金额),并在日结时,统计各类商品 销售金额。,简化的商业自动化系统,营业员,收款员,经 理,销售的商品,现金额,现金余额,销售情况,日销售额,查询要求,首先:建立系统环境图,确定系统边界 -顶层DFD,其中:1 数据流为:销售的商品,日销售额等 3个输入流,3个输出流 数据源为:营业员

20、,经理,收款员 数据潭为:经理,收款员 2 加工名为:要建立的系统名字,录入、修改或 删除商品信息,录入、修改 现金额, 并计算余额,查询商品销售情况 计算日销售额,1,2,3,继之:自顶向下,逐层分解 A、按人或部门的功能要求,将加工“打碎”,形成:,注:需给每一加工编号;,B、”分派”数据流,形成:,录入、修改或 删除商品信息,2 录入、修改 现金额, 并计算余额,查询商品销售情况 计算日销售额,销售的商品,现金额,现金余额,查询要求,销售情况,日销售额,1,3,其中:要根据特定的加工要求进行分派; 保持与顶层数据流的一致; 可以不引入数据源和数据潭。,录入、修改或 删除商品信息,录入、修

21、改 现金额, 并计算余额,查询商品销售情况 计算日销售额,销售的商品,现金额,现金余额,查询要求,销售情况,日销售额,销售文件,1,2,3,C、引入文件,使之形成一个有机整体系统:,注:到一个文件,既有输入流,又有输出流,则可简化为 ,并可不给出标识。 至此,体现精化,形成0层数据流图。,查询商品销售情况 计算日销售额,查询要求,销售情况,日销售额,销售文件,3,继续A、B、C:自顶向下,逐层分解。例如:加工3,可分解为:,判定要求,查询要求,3。1 统计销售情况,3。2 计算日销售额,销售文件,查询要求2,查询要求1,销售情况,日销售额,加工3:,*其中为什么要引入 加工“判定要求”?,(2

22、)建立数据字典 定义数据流 定义数据存储 定义数据项 引入:结构符 | 用于定义数据结构,A,A,A,B,C,B0,C0,B*,数据字典: 1、数据流: 销售的商品=商品名+商品编号+单价+数量+日期 现金额 = 余额 =非负实数 查询要求=商品编号|日期 查询要求1=商品编号 查询要求2=日期 销售情况=商品名+商品编号+金额 日销售额= 类名+现金额 2、数据存贮: 销售文件=销售的商品 3、数据项,(3)给出加工小说明 -使用的工具可以为判定表 判定树 判断表 条件类别 条件组合 操作 操作执行 例如: 考试总分 =620 =620 620 单科成绩 有满分 有不及格 有满分 发升级通知

23、书 y y n 发留级通知书 n n y 发重修通知书 n y n,3建模中注意的问题 (1)模型平衡规则 父图和子图必须平衡 每个数据流和数据存储必须在数据字典中予以定义 “叶”加工(最低层)必须给出加工小说明 小说明和数据流图的图形表示必须一致,例如: 在小说明中,必须说明“输入数据流”如何使用,必须 说明如何产生“输出数据流”,必须说明如何选取、使用、 修改“数据存储”,(2)控制复杂性规则 上层数据可以“打包” 上、下数据流对应关系在数据字典中给出,但包内 数据流的性质(输入、输出)必须一致。 一幅图中的图元个数应控制在7+/-2以内 与每一加工相关的数据流的数目应适中 (与层次有关)

24、 分析数据内容,确定是否所有的输入信息都用于 产生输出信息; 分析加工,确定一个加工所产生的输出,是否都 能由该加工的输入信息导出,实例讲解:图书管理系统问题陈述见P35。 根据问题陈述,在一定的层次上,可以把该系统分为两“大块”,即:借还书等事务的处理,以及咨询事务处理。 -进行功能抽象。 (注:不同的功能抽象将导致不同的结果!但应该是等价的。) 于是,可以根据这一抽象,可以识别: 1)顶层数据流:借还书等事务处理要求 咨询事务要求 以及相关的数据流 2)数据源和数据潭为:图书管理人员,读者以及时钟。,基于以上分析,可形成该系统的环境图:,图书管理系统,图书管理员,图书管理要求,查询要求,图

25、书统计表,图书情况,读者情况,读者,系统时钟,当前日期,罚款单,其中:3个输入流:图书管理要求,查询要求,系统时钟 图书管理要求=入库单 借书单 还书单 注销单 查询要求=读者情况 图书情况 图书统计表 4个输出流:图书统计表,图书情况,读者情况,通过“打碎”、“分派”,可形成如下0层DFD:,1 处理借还 书等事务,2 处理咨询 事务,图书管理要求,查询要求,当前日期,目录文件,借书文件,读者文件,罚款单,读者情况,图书情况,图书统计表,其中:保持输入与输出的一致; 引入三个文件,对顶层DFD进行细化。 (注:存在数据库设计问题),以同样方式,对加工1进行分解,形成:,1。1 入库新书,1。

26、2 借书,1。3 还 书,1。4 注销图书,图书管理要求,处理图书管理要求,目录文件,罚款单,当前日期,借书文件,读者文件,入库单,借书单,注销单,还书单,其中:注意平衡问题;平面化问题。当然,还可以继续细化,1。2 借书,目录文件,借书文件,例如:借书,读者文件,借书单,1。2。1 检查读者的有效性,读者文件,1。2。2 检查读者的资格,1。2。3 办理借书,1。2。4 检查图书库存,借书单,无效读者,有效读者借书单,借书超限,核准后的借书单,该书已借完,借书记录,借书文件,目录文件,注意:其中粗线数据流!,图书管理系统的USE CASE模型(基本思路):,借书,还书,新书入库,注销图书,图

27、书管理员,读 者,请:1、在这一思路的基础上,建立该系统的USE CASE模型;并给出每一USE CASE的描述。 2、对该系统的两种模型进行比较。(在哪些方法进行?),3、关于需求验证 有关SRS内容方面: (1)正确性:指的是SRS中陈述的每个需求是否都表达了 系统的某个要求。 (2)无二义性:指的是SRS中陈述的每个需求是否都只有 一种解释。 (3)完整性: 未来系统所做的任何事情都包含在SRS的陈述中; 未来系统响应所有可能的输入(包括有效和无效); SRS中没有被标识为“待定”的内容。,(4)可验证性:SRS中陈述的每个需求都是可验证的- 即当且仅当存在一个有限代价的过程(人工或机器

28、) 可以检查构造的软件产品是否符合用户的需求。 (5)一致性: SRS中陈述的需求没有与以前的文档发生冲突; SRS中陈述的各个需求之间没有发生冲突。 (6)可理解性:,有关SRS格式与风格方面 (7)可修改性:指的是SRS的结构和风格使任何对需求的 必要修改都易于完整、一致的进行。 (8)可被跟踪性:指的是SRS中的每个需求的出处都是清 楚的,这意味着SRS中包含对前期支持文档的引用表。 (9)可跟踪性:指的是SRS的书写方式有助于对其中陈述 的每个需求进行引用。 (10)设计无关性:指的是SRS不暗示特定的软件结构和 算法。,第四章 结构化设计 要回答如何解决问题 即给出软件解决方案 1总

29、体设计的任务:如何将DFD转化为MSD 分二步实现: 第一步:如何将DFD转化为初始的MSD 分类:变换型数据流图 事务型数据流图 变换设计 事务设计,数据流图分类 变换型: 事务型,1,2,3,4,5,6,7,8,a,b,c,d,e,f,h,g,y,x,z,1,2,3,5,4,6,a,b,c,d,e,f,g,y,变换设计,XX系统,变换模块,get e,put h,put g,get c,get d,c,d-e,e-f,f-g,h,h-y,put y,g-x,put x,x-z,put z,get a,get b,b-d,a-c,e,e,g,h,h,g,z,z,x,x,g,y,y,h,d,b

30、,c,a,c,d,e,e,f,g,h,f,x,a,b,事务设计,事务中心,输入模块,路径1,路径2,输出模块,a,y,c,g,b,f,c-e,c,e,e-g,e,g,b-d,b,d,d-f,d,f,3,4,6,8,2,5,7,9,A2,c,b,d,e,f,g,i,h,m,k,n,1,10,A1,x,一个系统的DFD,通常是变换型数据流图和事务型数据流 图的组合。如下所示:,第二步:如何将初始的MSD转化为最终可供详 细设计使用的MSD 概念:模块 模块化 模块化度量:内聚 耦合 设计规则经验规则 精化初始的MSD 体现设计人员的创造,1)耦合:不同模块之间相互依赖程度的度量。 耦合类型: (1

31、)内容耦合: (2)公共耦合:两个以上的模块共同引用一个全局数据项。 (3)控制耦合:一个模块向另一模块传递一个控制信号, 接受信号的模块将依据该信号值进行必要的活动。 (4)标记耦合:两个模块至少有一个通过界面传递的公共 有结构的参数。 (5)数据耦合:模块间通过参数传递基本类型的数据。,2)内聚:一个模块之内各成分之间相互依赖程度的度量。 内聚类型: (1)偶然内聚:一个模块之内各成分之间没有任何关系。 (2)逻辑内聚:几个逻辑上相关的功能放在同一模块中。 (3)时间内聚:一个模块完成的功能必须在同一时间内完成,而 这些功能只是因为时间因素关联在一起。 (4)过程内聚:处理成分必须以特定的

32、次序执行。 (5)通信内聚:各成分都操作在同一数据集或生成同一数据集。 (6)顺序内聚:各成分与一个功能相关,且一个成分的输出作为 另一成分的输入。 (7)功能内聚:模块的所有成分对完成单一功能是最基本的,且 该模块对完成这一功能而言是充分必要的。,启发性规则-经验的总结 (1)改进软件结构,提高模块独立性; (2)模块规模适中-每页60行语句; (3)深度、宽度、扇入和扇出适中; (4)模块的作用域力争在控制域之内; (5)降低模块接口的复杂性; (6)模块功能应该可以预测。,示例:数字仪表板系统的精化,读旋转信号,收集并 求平均,转换成 转/分,计算 gph,读并 校核,确定 加速/减速,

33、计算里程,计算mph 和超速值,计算 燃料消耗,产生 加速/减速显示,产生 里程显示,发出 铃声,产生 mph显示,产生 mpg显示,旋转信号,信号/秒,(sps),sps,燃烧流 传感器信号,燃烧流,gph,sps,rpm,rpm,箭头指示,上箭头,下箭头,水平线,英里,超速值,mph,mpg,mpg显示,mph显示,铃声,里程显示,输入部分,Get gph,Get rpm,Get sps,Get 燃料流,变换燃料流为 ghp,Get 燃转信号,变换燃转信 号为燃料流,变换sps为 rpm,Get sps,Get sps,转换为 sps,Get 转速信号,变换为sps,变换为 sps,1、

34、数字仪表板系统输入部分的精化 输入部分的初始模块结构图,转速信号,转速信号,燃料流,燃料流,燃料流,gph,sps,sps,rpm,sps,rpm,gph,sps,sps,sps,sps,sps,sps,sps,转速信号,转速信号,输入部分,计算gph,计算rpm,计算 sps,读燃转信号,采集sps,读转速信号,使用启发式规则1,并考虑其它规则, 可以将输入部分的模块结构图精化为:,其中:sps为转速的每秒信号量;sps 为sps的平均值; sps为sps的瞬时 变化值;rpm为每分钟转速;mph为每小时英里数;gph为每小时燃烧 的燃料加仑数;rpm为行进里程。,输出部分,PUT mpg,

35、PUT mph,PUT里程,PUT 加/减速,PUT 超速量,显示,显示,显示,2、数字仪表板系统输出部分的精化 输出部分的初始模块结构图,显示,对于这一初始的模块结构图,一般情况下应: 把相同或类似的物理输出合并为一个模块,以减少模块之间的关联。就本例而言: 左边前三个“显示”,基本上属于相似的物理输出,因此可以把它们合并为一个显示模块。而将“PUT mpg”模块和相关的“生成显示的模块合并为一个模块;同样地,应把“PUT mph”模块、“PUT里程”各自与相关的生成显示的模块合并为一个模块,参见下图。 其它求精的规则,与输入部分类同。例如,可以将“PUT 加/减速”模块与其下属的两个模块合

36、并为一个模块,将“PUT 超速量”模块与其下属的两个模块合并为一个模块 。,输出模块,生成mpg 显示,生成mph 显示,生成里程 显示,生成加/减速显示,生成蜂鸣,显示,通过以上求精之后,可得如下的模块结构图,变换模块,计算mpg,计算mph,计算里程,计算加/减速,3、变换部分的精化 1)首先,应该了解:对于变换部分的求精,是一项具有挑战性的工作。其中主要是根据设计准则,并要通过实践,不断地总结经验,才能设计出合理的模块结构。 2)就给定的数字仪表板系统而言,如果把“确定加/减速”的模块放在“计算速度mph”模块下面,则可以减少模块之间的关联,提高模块的独立性。 通过这一求精,可以得到如下

37、的模块结构图:,通过以上讨论,可以看出:在总体设计中 (1)将一个给定的DFD转换为初始的模块结构图基本 上是一个 “机械”的过程,一般体现不了设计人员的创 造力; (2)优化设计-将一个初始的模块结构图转换为最终 的模块结构图,对设计人员将是一种挑战,其结果将 直接影响软件系统开发的质量。,总体设计小结: 1、总体设计的目标和任务; 2、总体设计的表示:层次图,HIPO图,模块结构图; 3、基本概念:模块,以及由此产生的“鸿沟”; 4、总体设计的基本思想与步骤: 通过:变换设计和事务设计 DFD-初始的MSD (几乎可“机械”地进行) 使用:启发式规则 初始的MSD-MSD (体现设计人员的

38、创造),2详细设计的任务:定义每一模块 结构化程序设计 三种控制结构:顺序 begin s1;s2;sn end; 选择 if 条件表达式 then s1 else s2; 循环 while 条件表达式 do s ;,几种表示工具 流程图、PAD、NS图、伪码等 1)框图,s1,s2,s1,s2,. . .,s,2)伪码 伪码是一种混合语言。外部采用形式语言的 控制结构,内部使用自然语言。 Begin 输入一元二次方程的系数a,b,c; if b2-4aco then 计算两实根 else 输出无实根; end.,3)PAD图,S1,S2,S3,S1,S2,X5 X5,S,顺序: 选择 : 循

39、环:,注:支持逐步求精设计,3)N-S图,支持逐步求精设计举例,顺序: 选择 : 循环:,条件,F,T,S1,S2,循环条件,循环体,N:=1.10,X5,T,F,F,T,S1,S2,S3,S4,S5,S6,S8,S7,S9,S10,X10 主语,特定的名词或名词短语 ,一个类作为一个元模型,是一组对象的描述,这组对象具有同样的属性,操作,方法,关系与语义。 一个类可以使用一组接口,用于指明该类为环境提供的操作。一个类的完整定义必需包括实现接口的每一个操作。 尽管有的类可以是抽象类(没有实例的类),Class定义了对象的数据结构。 每一类的实例包括一组对应于Behavioral Feature

40、或类范围的属性,一个类的所有对象共享该类中的Behavioral Feature,并且它们都访问为每一类空间的属性所存储的单一值。,综上, 类是一组具有共同特征的相似对象的抽象描述。 类是面向对象语言的基本成分; 类是面向对象程序的唯一构造单位; 类是抽象数据类型的具体实现; 类是对象的生成模板。 any uniquely-identified abstraction(I.e.,model)of a set of logically-related instances that share the same or similar characteristics.Firesmith,Lorenz

41、,Rumbaugh any concept that has members .Henderson-Sellers,(3)类的表示:,名字栏,属性栏,操作栏,注:还可以有其它栏,但要给出栏名,并放在栏的中间。,(A)关于类名,deposit Time:date time:time Amount:currency:cash,Bank:checkaccount,(B)属性、操作性质的描述 使用:性质串,可以作为一个列表元素 例如:,A query B C,性质串的作用域,(4)风格指导 类名使用黑体字,位于分栏中央; 类名以大写字母开始; 属性和服务用普通格式,左对齐; 属性和服务以小写字母开始;

42、 抽象类或者抽象操作的特征标记以斜体字表示。,示例,2)属性 (1)语义 表示对象状态的一组值。 Any named property of an object that takes a literal as its value,defines the abstract state of its object,and appear within the interface rather then the implementation. ODMG Any named property used as a data abstraction to describe its enclosing obj

43、ect,class,or extent. Firesmith,Rumbaugh,(2)属性的表示: Attribute signature:the signature of any attribute declaring its: -name -type -initial value(if any) ODMG attribute type:any type of object used an attribute Firesmith,Jacobson,属性表示为具有一定语法格式的文本串。其默认的语法是: 可见性 名称 多重性:类型表达式 = 初始值 性质串 (A)可见性的值可为: + 公有的 #

44、 受保护的 - 私有的 例如:+size:area=(100,100) #visibility:Boolean -xptr:XWindowPtr,当把可见性作为属性分栏中的性质串时,可以使用关键字 public、 protected和private,分别表示公有的、受保护 的和私有的。例如: public a:integer; b:real; protected c:integer; d:real; private e:real; f:integer;,(B)名称是表示属性名字的标识串。 通常以小写字母开头。 (C)多重性表示属性的多重性(见关联端点)。 多重性是可以省略的,在这种情况下,多重

45、性是1.1。 在没有给出多重性的情况下,属性只含一个值。可以在属性名之后用中的多重性指示符来表示多重性。例如: colors3:Color points2.*:Point 注意,如果多重性是0.1,就有可能出现空值。例如,下面的声明允许字符串name为空值或空串: name0.1:String,(D)类型表达式是属性实现类型的规约,与具体实现语言有关 (E)初始值是与语言相关的表达式,用于为新建立的对象赋予初始值。初始值是可选的(此时等号也被省略)。 对象的构造函数可以参数化或者修改默认的初始值。 (F)性质串表示应用到该元素的性质值。例如: a:integer=1frozen 表示属性是不可

46、以改变的,在缺省的情况下,属性是可以改变的。 性质串是可选择的。性质串位于属性字符串之后。 (G)通过在类名和类型表达式画下划线的方式,表示类范围的属性,即该类对象共享的属性,否则属性是实例范围的。,3)操作:为其它对象提供的服务。 (1)语义 -any service that can be requested. Jacobson,Martin,OMG -Any discrete activity,action,or behavior that is performed by (I.e.,belongs to) an object or class. Ada95,Firesmith,Hend

47、er-Sellers 同义词:function,method,service.,(2)表示 操作表示为具有一定语法格式的文本串。其默认的语法是: 可见性 名字(参数列表):返回类型表达式 性质字符串 (A)可见性的值可为 + 公有的 # 受保护的 - 私有的 当把可见性作为操作分栏中的性质串时,使用关键字public、 protected和private,分别表示公有的、受保护的和私有的。 (B)名字是标识符串。通常以小写字母开头。可以把抽象操作表示成斜体。,(C)返回类型表达式是操作的实现类型或者操作的返回的值类型的规约,它与具体的实现语言有关。如果操作没有返回值(例如C+ 中的void),

48、就省略冒号和返回类型。当需要表示多个返回值时,可以使用表达式列表。 (D)参数列表是以逗号分隔的形参列表,形参的语法为: 类型 名称 :类型表达式 = 默认值 类型是in、 out 或 inout分别用以表示输入、输出和即可以输入又可以输出,默认的是in; 名称是形参的名字; 类型表达式是实现类型的(与语言有关)规约; 默认值是可选的值表达式,用最终的目标语言表示。 注:可以省略全部的参数列表和返回类型,但不准只省略其中的一部分。另外,操作的特征标记串的语法可以遵循特定的编程语言,比如C+或Smalltalk。,(E)性质串指明应用于元素的性质值。性质是可选的(若没有指定特性串,则省略括号)。

49、性质串列表在整个操作串的后面。 标准性质值: 。query:指明该操作是不改变系统状态(没有副作用)的操作;否则,操作可能更改系统的状态。 。 concurrency=name:指明操作的并发语义 ,其中的name是下列之一:sequential, guarded, concurrent,分别表示操作是顺序的、受监护的和并发的。 可以采用缩写方式,直接在性质串中使用这三个值。在没有对并发语义进行详细说明的情况下,就假设操作是顺序执行的。 (F)通过对名字和类型表达式串加下划线方式,表示对类范围的操作。否则是实例范围的操作。,(H)在类的继承结构(见泛化)中,对上层的类没有实现的操作(即没有提供

50、方法): 要用 “abstract”标记,或者把操作写成斜体,以表示它是抽象的。若该操作在它的子类中出现,且没有带abstract,就表明它的子类实现了这个操作的方法。 (L)注释:可以把方法的具体文字描述或算法放在依附操作条目的注释中,并把注释依附到操作上。例如:,PoliceStation,alert(),BurglarAlarm,Is tripped:Boolean=false,report(),If is tripped Then station.alart(self),4)对象 (1)语义 对象是类的一个实例。 (2)表示,对象名:类名 属性列表,triangle,Triangle:

51、Polygon,:Polygon,名字的其他情况:display-window:WindowSystem: GragicWindows:Window,a:b,c,d(规则:在一个时刻只属于一 个实现类),5)接口 (1)语义(仅以类为例) 接口描述类、构件或者子系统的外部可见操作,并不描述内部结构。 通常,一个接口仅描述一个特定类的有限行为。 接口没有实现,接口也没有属性、状态或者关联,接口只有操作。 接口只可以被其它类目使用,而其本身不能访问其它类目。 可以对接口使用泛化关系。 接口在形式上等价于一个没有属性、没有方法而只有抽象操作的抽象类。,(2) 表示法 可以用带有分栏和关键字的矩形符号

52、表示接口。在操作分栏中给出接口支持的操作列表。接口的属性分栏总是空的。把从类目到它支持的接口的实现关系显示为带有实三角箭头的虚线。用带有use标记的虚线箭头表示类目(在箭头尾部)使用或者需要接口提供的操作。 也可以把接口表示成小圆圈。接口名放在圆圈的下面,并用实线把圆圈连接到支持它的类目上。这意味着这个类目要提供在接口中的所有操作,其实类目提供的操作可能要更多。要显示接口的操作列表的话,就不能使用圆圈表示法,而应该使用矩形表示法。可以用指向圆圈的虚线箭头,把使用或者需要接口提供的操作的类目连到圆圈。 上述的虚线箭头还意味着使用接口的类目并不需要使用接口给出的全部操作。,(3) 例子,该图表明,

53、类String支持接口Hashable、Comparable, 而类HashTable使用接口Hashable、Comparable。,以上内容小结 (知识点 和 解决问题的基本思想和途径) 1、知识点 (1)、给出了表达客观事物基本成分(对描述客观事物而 言不可再分的)的概念: 对象,类 语义及其表示。 (2)、给出了这些成分的基本构造: 属性,操作 语义及其表示 (3)、给出了支持功能抽象的机制: 接口 语义及其表示,以及,(4)、接口与其他成分之间的关系 接口: 一组操作(没有实现的),这组操作在一个特定类中实现。 作为一种机制,支持功能抽象。 操作:一个类对外提供的服务。 可以是抽象的

54、。 其声明可以作为接口的成分。 方法:是操作的一个实现。,至此可以说: 这五个概念围绕一个问题,即如何描述客观 事物-“对象”展开的! 如何抽象对象的“结构”:属性,操作 如何描述一组具有相似性质的对象:类 如何抽象并描述在特定环境中对象的功能: 接口。,2、解决问题的基本思想和途径 (1)大千世界是有对象构成的,对象有其自己的属性与运动规律。 (2)基本途径 数据和操作(功能)的局部化-支持事物语义的表达; 数据和操作的封装性-支持交互; 功能模块化(接口)-支持在一个层次上的功能抽象; 描述的“二分法”(元数据,数据)-支持复杂性控制(抽象) 类,对象 接口,操作 操作,方法 提高 模型的稳定性,可维护性,练习题 问题陈述:在要建立的某商场简化的管理信息系统中: 合同管理员负责: 输入合同(合同号,交货地点,客户名,产品名,数量,单价,交货期,结算方式); 登入合同执行情况(合同号,客户名,产品名,数量,单价,交货期,结算方式); 打印合同执行情况清单(合同号,客户名,产品名,数量,单价,金额,交货日期,欠款)。 客户管理员负责: 输入客户信息( 客户名,编号,地址,电话,客户行,帐号,邮编); 确定客户等级(按销售额计算等级)。,部门经理: 随机按合同号或客户名查询合同欠款; 按月交货情况; 1)、请用结构化分析方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论