1、软工题第八章第八章习题 一、选择题 1.软件复用的目的是要使软件开发工作进行得( A )。软件复用的实际效益除了( B )之外,在企业的经营管理方面也可望达到理想的效益。新的应用软件开发技术和工具是以( C )作为关键,复用大粒度的( D ),为的是快速开发应用软件。这些新技术包括微软的( E )、( F )、( G ),SUN公司的Java,OMG公司的CORBA、IDL等。供选择的答案:A. 更简捷 更方便 更快、更好、更省 更丰富B. 复用率 功能扩充 效率 空间利用率C, D. 软件 固件 构件 属性 对象 事物 数据 代码EG. office Visual Basic Active
2、X Photoshop OLE Fortran COBOL Delphi2. 以往的软件工程技术不能满足复用的需要,体现在工程、( A )、( B )、经营业务等4个方面。“工程”指软件开发工程,表现在缺乏( C )手段,缺乏( D )构件,缺乏对潜在可复用的( E ),缺乏实施复用的工具。供选择的答案:A, B. 需求 过程 环境 组织管理C E. 复用 可靠性 灵活性 界定 工具 互连性3. 软件体系设计的一个中心问题是能否( A ),以及采用何种软件体系结构风格。有原则地使用体系结构风格可带来一些实际的好处:(1) 它促进了对设计的( B );(2) 它可以带来显著的( C )(体系结构
3、风格的不变部分使它们可以共享同一个实现代码);(3) 只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构;(4) 对标准或规范风格的使用也支持了( D ),例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5) 在限制了设计空间的情况下体系结构风格通常允许进行特殊的与风格有关的分析;(6) 通常可以对特定的风格提供( E )手段。供选择的答案:A C. 使用特定的体系模式 使用重复的体系模式 复用 专用 代码复用 结构复用D E. 可视化 构件 互操作性 可移植性 可调度性 框架4. 软件复用可分为以下三个层次:( A ),例如软件工程知识
4、的复用。( B ),例如面向对象方法或国家制定的软件开发规范的复用。软件成分的复用。软件成分的复用又可进一步划分为( C ),如剪贴;( D ),如复用设计模型;( E ),更高级别复用。为了研究软件复用程度与软件生产率之间的关系,我们引进:生产率P = ( F )和复用率R = ( G )的公式,以及两者之间的关系P = ( H )。其中,用Lt代表程序总长度,Ln和Lr分别为新编代码和复用代码的长度。令Et、En和Er分别代表开发该程序的总工作量、新编程序的工作量和复用已有软件构件的工作量,Cn和Cr分别代表开发新代码和复用已有软件构件的生产率。供选择的答案:A E. 知识复用 分析结果复
5、用 代码复用 方法与标准复用 设计结果复用 软件成分复用F H. 二、简答题1. 请比较功能内聚和信息性内聚。2. 多态重用与继承重用有何关系?3. 在面向对象设计过程中为什么会调整对目标系统的需求?怎样调整需求?4. 为了设计人机交互子系统,为什么需要分类用户?5. 问题空间和解空间有何区别?6. 从面向对象分析阶段到面向对象设计阶段,对象模型有何变化?7. 请用面向对象方法分析设计下述的图书馆自动化系统。设计一个软件以支持一座公共图书馆的运行。该系统有一些工作站用于处理读者事务。这些工作站由图书馆馆员操作。当读者借书时,首先读入客户的借书卡。然后,由工作站的条形码阅读器读入该书的代码。当读
6、者归还一本书时,并不需要查看他的借书卡,仅需读入该书的代码。客户可以在图书馆内任一台PC机上检索馆藏图书目录。当检索图书目录时,客户应该首先指明检索方法(按作者姓名或按书名或关键词)。8. 用面向对象方法分析设计下述的电梯系统。在一幢m层楼的大厦里,用电梯内的和每个楼层的按钮来控制n部电梯的运动。当按下电梯按钮请求电梯在指定楼层停下时,按钮指示灯亮;当电梯到达指定楼层时,指示灯熄灭。除了大厦的最低层和最高层之外,每层楼都有两个按钮分别指示电梯上行和下行。当这两个按钮之一被按下时相应的指示灯亮,当电梯到达此楼层时灯熄灭,电梯向要求的方向移动。当电梯无升降动作时,关门并停在当前楼层。第八章习题解答
7、一、选择题1.答案:A. , B. , C. , D. , E. , F. , G. 。其中,E、F、G的答案顺序可互换。分析:实施软件复用的目的是要使软件开发工作进行得是更快、更好、更省。“更快”是指在市场竞争环境中,软件开发工作能满足市场上时间方面的要求(即在提供软件产品的时间方面能赛过竞争对手);“更好”是指开发出来的软件在未来的运行中失效可能性小;“更省”是指在开发和维护期间所花费的开销少。日美一些大公司的资料表明,软件复用率最高可望达到90 %,而且软件复用使得企业在及时满足市场、软件质量、软件开发和维护费用等方面都得到显著的改进。除了复用率之外,在企业的经营管理方面也可望达到理想的
8、效益。例如,上市时间可缩短2 5倍;软件产品的缺陷密度可减少5 10倍;软件产品的维护费用可减少5 10倍;软件开发总费用可减少15% 75%,其中,75%是针对长期项目,包括开发可复用构件及支持复用的负担。新的应用软件开发技术和工具是以“构件”作为关键,复用大粒度的“对象”,为的是快速开发应用软件。这些新技术包括微软的Visual Basic、Active X、OLE(对象链接与嵌入),SUN公司的Java,OMG公司的CORBA(公用对象请求代理程序体系结构)、IDL(接口定义语言)等。非面向对象语言(如COBOL和Fortran)在复用实践中已经器的相当的成功。这些非面向对象程序设计语言
9、构件技术的成功实践说明了:实现软件复用并不限于面向对象语言构件或类库。2. 答案:A. , B. , C. , D. , E. 。其中,A、B的答案的顺序可互换。分析:以往的软件工程技术不能满足复用的需要,体现在工程、过程、组织管理、经营业务等4个方面。这里所说的“工程”是指软件开发工程,其技术和方法面对复用的需要已显得低效,主要表现在: 缺乏界定手段:为了软件复用,需要循软件开发流程的各个阶段,通过分析它们的描述模型,明确界定出潜在可复用的部分,被界定出的部分,可能是可被复用的部分,也可能是可被可复用构件代用的部分。而以往的软件工程缺乏这种界定手段。 缺乏可复用的构件:者反映在许多方面。例如
10、,不能有效地挑选出可复用构件并对它们进行强化;缺乏对构件打包、文档化、分类、界定的技术;缺乏有效方法进行(构件)库的设计和实现;缺乏良好的构件库存取方法。 缺乏对潜在可复用构件的灵活性:如果一个构件很死板,那么它被复用的机会就很少。而过去的软件工程方法在设计灵活的、分层的软件体系结构方面一直没有不成熟的办法。过去的方法是对构件进行调节使之满足新的需求,或者使对新的体系结构进行限制。 缺乏实施复用的工具:为了实施复用,需要一系列新的工具,并把它们集成到面向复用的软件工程环境中去。而过去的工程缺乏这方面的工具。3. 答案:A. , B. , C. , D. , E. 。分析:软件体系设计的一个中心
11、问题是能否使用重复的体系模式,以及采用何种软件体系结构风格。例如可以采用通用的基于层次或数据流的系统体系结构,或者采用特殊的系统组织(如经典的编译器分解方式),OSI七层协议,MVC用户界面语义图等。有原则地使用体系结构风格可带来一系列实际的好处。(1) 它促进了对设计的复用。一些经过实践证实的解决方案可以拿来可靠地解决新问题。(2) 它可以带来显著的代码复用。体系结构风格的不变部分使它们可以共享同一个实现代码。(3) 只要系统是使用常用的、规范的方法组织起来的,就可以让其它设计者很容易地理解软件的体系结构。例如,如果某人把系统描述为“客户机服务器”模式,则不必给出细节,人们立刻就会明白它们是
12、如何一部分一部分地组织起来,并在脑海中清晰地得到这个图像。(4) 对标准或规范风格的使用也支持了互操作性,例如像CORBA这样的面向对象的架构和基于事件机制的工具的集成;(5) 在限制了设计空间的情况下,体系结构风格通常允许进行特殊的与风格有关的分析。例如,分析管道过滤器系统的可调度性(吞吐量、延时、死锁的解决)是可行的,但对于任意的、或用其它方法构造的架构来说,这种分析可能毫无意义。(6) 通常可以对特定的风格提供可视化的手段。例如,可以对与客户的专业领域有关的设计作出图解或文字说明。对于应用软件体系结构风格来说,由于视点的不同,软件人员有很大的选择空间。要为系统选择或设计某一个体系结构风格
13、,必须根据特定项目的具体特点,进行分析比较后再确定。体系结构风格的使用几乎完全是特化的。4. 答案:A. , B. , C. , D. , E. , F. , G. , H. 。分析:广义来讲,软件复用可分为以下三个层次:(1) 知识复用(如软件工程知识的复用);(2) 方法和标准的复用(如面向对象方法或国家制定的软件开发规范的复用);(3) 软件成分的复用。软件成分的复用又可进一步划分为三个级别: 代码复用(源代码剪贴、源代码包含、继承); 设计结果复用; 分析结果复用(这是一种更高级别的复用,即复用某个系统的分析模型)。为实现软件复用需要付出额外代价,如投资、时间和可复用构件库。即使不考虑
14、上述的额外代价,软件复用也不是必然能提高软件生产率。为研究软件复用程度与软件生产率的关系,我们首先引入下列两个量:生产率P = 程序总长度开发该程序所用人时数复用率R = 复用代码长度程序总长度令Lt为程序总长度(目标代码条数),Ln和Lr分别为新编代码和复用代码的长度(都用目标代码条数来度量)。再令Et、En和Er分别代表开发该程序的总工作量、新编程序的工作量和复用已有软件构件的工作量,则有以下等式成立:Lt = Ln + Lr, Et = En + Er, P = LtEt, R = LrLt.此外,用符号Cn和Cr分别代表开发新代码和复用已有软件构件的生产率,则有:Cn = LnEn,
15、Cr = LrEr.从上述6个等式出发,可以推导出下列的生产率与复用率之间的关系:从上式可知,复用率R越高,生产率不一定就越高。只有当软件开发人员使用已有的软件构件构造应用系统时,其工作效率比重新从底层编写程序的效率高时,复用率的提高才会导致生产率提高。可见,通过软件复用来提高软件生产率,并不是一件轻而易举的事情。构件的实用程度和使用方便程度,以及软件人员的素质、开发环境等因素,都直接影响软件复用的效果。二、简答题1. 答:内聚衡量组成模块的各个元素彼此结合的紧密程度,它是信息隐藏和局部化原理的自然扩展。设计软件时应该力求做到模块高内聚。当采用结构化范型设计软件系统时,使用功能分解方法划分模块
16、。组成这类模块的元素主要是完成模块功能的可执行语句。如果模块内所有处理元素属于一个整体,完成单一完整的功能,则该模块的内聚称为功能内聚。采用结构化范型开发软件时,功能内聚是最高等级的内聚。采用面向对象范型设计软件时,使用对象分解方法划分模块。对象是面向对象软件的基本模块,它是由描述该对象属性的数据及可以对这些数据施加的操作封装在一起构成的统一体。因此,组成对象的主要元素是既有数据又有操作,这两类元素是同等重要的。如果一个对象可以完成许多相关的操作,每个操作都有自己的入口点,它们的代码相对独立,而且所有操作都在相同的数据结构上完成,也就是说,操作围绕对其数据所需要做的处理来设置,不设置与这些数据
17、无关的操作,则该对象具有信息性内聚。实际上,信息性内聚的对象所包含的操作本身,应该是功能内聚的。2.答:当已有的类构件不能通过实例重用方式满足当前系统的需求时,利用继承机制从已有类派生出符合当前需要的子类,从而获得可在当前系统中使用的类构件,这种重用方式称为继承重用。如果在设计类构件时,把可能妨碍重用的、与应用环境密切相关的操作从一般操作中分离出来,作为适配接口,并且把这类操作说明为多态操作,类中其他操作通过调用适当的多态操作来完成自己的功能,则为了在当前系统中重用已有的类构件,在从已有类派生出的子类中只需重新定义某些多态操作即可满足当前系统的需求,这种重用方式称为多态重用。通过上面的叙述可以
18、知道,多态重用实际上是一种特殊的继承重用,是充分利用多态性机制支持的继承重用。一般说来,使用多态重用方式重用已有的类构件时,在子类中只需要重新定义的操作比较少,因此,这种重用方式的成本比继承重用方式的成本低。3.答:有两种情况会导致修改由面向对象分析确定下来的系统需求:一是客户需求或系统外部环境发生了变化;二是分析员对问题域理解不透彻或缺乏领域专家帮助,以致面向对象分析模型不能完整、准确地反映客户的真实需求。为了调整对目标系统的需求,通常只需简单地修改面向对象分析的结果(例如,增添或删掉一些类,从已有类派生出新类,调整某些类之间的关系),然后把这些修改反映到问题域子系统中。4.答:人机界面是提
19、供给用户使用的,用户对人机界面的评价在很大程度上由人的主观因素决定。用户的技能水平或职务不同,喜好和习惯也往往不同。因此,为了设计出符合用户需要的人机界面,应该了解和研究用户,根据用户类型设计出为他们所喜爱的用户界面。5.答:问题空间是现实世界的一部分,它由现实世界中的实体组成。解空间实际上就是软件系统,它由实现解决方案的软件实体组成。6.答:在面向对象分析阶段建立的对象模型中,对象是对问题空间中实体的抽象。随着软件开发过程进入面向对象设计阶段,这些对象逐渐变成了解空间的实体。7.答:识别对象的一条主要准则是,寻找应用领域中的重要概念。在一座图书馆中常见的实体有“书”、“书柜”、“读者”等。在
20、办公室环境中,可能有“文件夹”、“信件”、“职员”等实体。应用领域中特有的这些实体,是对象的主要候选者。它们可以使现实世界中的事物(例如,书);担任的角色(例如,图书馆的读者);组织单位(例如,计算机系);地点(例如,办公室);或设备(例如,打印机)。此外,还可以通过研究已有的分类或聚集结构,发现候选的对象。通过访谈、阅读文档等途径可以列出对象的第一份清单。识别对象的更简单的方法,是词法分析法。简单地列出图书馆自动化系统需求陈述中的名称,就可以得到下列的候选对象清单:软件,图书馆,系统,工作站,读者,事务,书,图书馆馆员,客户,借书卡,条形码阅读器,书的代码,PC机,图书目录。上列清单中的某些
21、候选对象并不是问题域中的对象,应该删掉。例如,“软件”是将要开发出的产品,不应该把它包含在问题域模型中。如果有诸如“算法”或“链表”这样的名称作为候选对象,则也应该把它们删掉。在详细设计阶段,可以需要引入(或重新引入)它们作为面向解法的对象。笼统的名称应该被更具体的名称所代替,或者干脆把它们删掉。在上列的候选对象清单中,“系统”就是一个笼统的名称。事实上,工作站和PC机将连接到同一台主计算机上,因此,可以用“计算机”取代“系统”。在图书馆自动化系统的需求陈述中,“读者”和“客户”是同义词,只能保留其中一个作为问题域中对象的名字。在图书馆环境中个,“读者”这个词更符合一般人的习惯,因此,应该用它
22、作为对象名。在决定怎样建立“读者”和“图书馆馆员”的模型时,必须十分慎重。一个具体的人可能同时充当两种角色。在模型中把他作为不同对象恰当还是作为同一个对象的不同角色恰当,在现阶段往往较难确定。目前,决定把读者和馆员作为不同的对象,但是应该记住,当模型精化时有可能改变这个决定。在本问题中,术语“事务”指的是施加于对象上的操作,而不是一个对象。它导致一系列动作,例如,把借书卡和想借的书递给馆员,把借书卡插入工作站的条形码阅读器,读入书上的条形码等。仅当事务本身具有系统需要的属性时,才应该把它作为对象,例如,如果要求系统生成读者喜爱何种书刊的信息,则把事务作为对象是恰当的。应该从候选对象清单中删掉的
23、最后一个候选者是“书的代码”。代码描述一个具体对象,应该把它作为对象“书”的属性。表8.1列出了对象之间的关系。其中一些关系是直接从需求陈述中摘录出来的,另一些关系是从我们关于图书馆的常识中得出的。表8.1 图书馆对象之间的关系根据上述分析得出的对象及对象之间的关系,画出图8.1所示的初始类图中。在这张图中仅包含了关系名,当模型进一步精化时可以包含诸如重数和泛化关系之类的进一步描述信息。图8.1 图书馆系统的初始对象模型接下来确定对象的属性。属性描述对象类的实例,构成对象的状态。通过寻找能把不同实例区分开来的特性,可以识别出对象的属性。属性是一个对象类的全部实例的公共性质。应该识别出原子属性而
24、不是复合属性,例如,对于图书馆的“读者”来说,应该识别出属性“姓名”和“地址”,而不应该设置复合属性“姓名与地址”。在分析阶段还应该尽力防止在属性集中出现冗余,例如,不应该同时设置“已借出的书”和“已借出的书数”这样两个属性,因为后者可以通过前者计算出来,仅有前一个属性就足够了。采用在对象状态中保留冗余信息并由该对象维护这些信息的方法,总能够优化实际的实现结果。例如,在详细设计时我们可以决定在对象状态中包含已借出的书数,而不是在需要时通过计算得出这个消息,这样做可以提高系统运行速度。但是,在分析阶段通常不需要考虑优化问题。一个对象提供的主要服务是与它的生命周期相关的那些服务。例如,一本书被购入
25、,被借出,被归还零次或多次,最后退出流通;一个人成为图书馆的会员,借书和还书,预约图书,改变地址,交纳罚金等等,直至最后终止会员资格。读、写对象属性的服务,提供对象的状态信息或改变对象的状态。提供对象状态信息的服务,可能需要引用某些计算,也可能不需要计算。在分析阶段并不需要考虑实现服务的方法。服务是通过计算实现的还是通过简单的查找过程实现的,对于需要这个信息的对象来说是不可见的。通过研究使用目标系统的情景,可以进一步确定所需要的服务。应该考虑在系统构件之间的典型对话,既应该考虑正常情况下的对话也应该考虑意外情况下的对话。例如,既应该考虑读者顺利地借到一本书的情景,也应该考虑读者借书卡无效的情景
26、,还应该考虑读者逾期还书应该付罚款的情景。图8.2是正常情况下读者借一本书的顺序图。从图中可以看出,UML顺序图与事件跟踪图很相像,区别仅在于在顺序图中用矩形框代表对象。在图中所描述的交互过程中发生了一系列事情,这些事件将由涉及的对象的操作来处理。图8.2 正常情况下的借书过程服务只不过是把对象联系起来的一种途径。使软件系统真正具有面向对象风格的关系,是“整体-部分”聚集关系和“一般-特殊”分类关系。某些分类关系可以从系统所处理的现实世界问题中已有的分类模式导出来。通过寻找对象之间的关系,可以完成把对象进一步组织成层次系统的分类过程。我们可以把一个对象看作是某些可能的对象的泛化。例如,可以把对
27、象“书”看作是对象“小说”、“诗集”和“工具书”的泛化。这些特化出的对象是否有意义,取决于所处理的问题。如果系统不需要区分小说和诗集,我们就不应该把它们定义成不同的对象类。但是,如果小说和诗集可以借出馆外,而工具书不可以借出馆外,则把小说和诗集作为一类对象,把工具书作为另一类对象,是有意义的。类似地,我们可以考虑对象之间的相似性,从而把它们看作是一个更一般化的对象的特化。例如,如果图书馆系统需要对象“书”和“杂志”,而且它们的许多属性是相同的,则可以引入一个新的对象类“出版物”,作为对这两类对象的泛化。把共同的属性提升到对象类“出版物”中,然后“书”和“杂志”继承这些属性。注意,泛化出的对象应
28、该代表现实世界中有意义的实体,例如,不应该仅仅因为书和文件柜有相同的属性“位置”,就草率地从这两类对象泛化出一个新的对象类。刚才泛化出的对象类“出版物”是一个抽象的类,这样的类没有实例。图书馆中仅有从“出版物”特化出的具体类(例如,“书”和“杂志”)的实例。在类的层次结构中,“出版物”的作用是建立其他对象类之间的关系,并且为它们的用户提供接口描述。在“出版物”层定义的属性和服务,构成了它的全部后代的公共接口。哪些对象和属性应该放到对象模型中与怎样在类的层次结构中定义它们是密切相关的。例如,如果一个对象仅有一个属性,通常最好要把它作为另外一些对象的属性。此外,一个类的所有实例应该有共同的属性,如
29、果某些属性仅对部分实例有意义,则实际上存在一个分类结构。例如,如果某些书可以借出馆外,另外一些书不能借出馆外,则表明存在一个分类结构,在该结构中“书”类有诸如“小说”和“工具书”那样的特化类。此外还应该注意,随着时间流逝,对象的属性集和对象所提供的服务也将变化,但是对象类的层次结构将保持相对稳定。例如,如果经过一段运行之后,图书馆决定增加向读者提供的服务(例如,出借音像制品),则只简单地调整图书馆的属性集并扩充读者的服务集。8.答:在电梯系统的需求陈述中,共有下列11个不同的名称:大厦,电梯,楼层,按钮,运动,指示灯,请求,最低层,最高层,方向和门。这些名称代替的事物可以作为对象的初步候选者。
30、其中,大厦、最低层、最高层和楼层是处于问题边界之外的,因此应该删掉;运动、方向、指示灯、请求和门可以作为其他对象的属性,例如,指示灯(的状态)可以作为按钮类的属性,方向和门(的状态)可以作为电梯类的属性。经过上述筛选后只剩下两个候选的对象类,即电梯和按钮。在需要陈述中实际上指定了两类按钮,因此,应该为按钮类定义两个子类,它们分别是电梯按钮和楼层按钮。总结上述分析结果,得出图8.3所示的对象模型。这个模型是一个非常初步的模型,在面向对象分析设计的过程中将不断的充实和完善它。图8.3 电梯系统对象模型的第一代迭代分析图8.3所示的对象模型就会发现,这个模型还存在比较明显的缺陷:在实际的电梯系统中,按钮并不直接与电梯通信;为了决定分派哪一部电梯去响应一个特定的请求,必须有某种类型的电梯控制器。然而在需求陈述中并没有提到控制器,因此它未被列入候选类中。由此可见,词法分析只为寻找候选类提供了初步线索,但不能指望依靠这种方法找出全部候选类。系统分析员必须根据领域知识和常识做更深入细致的分析工作,才能找出问题域中所有类。补充了电梯控制器类之后,得到了图8.4所示的对象模型。在这个模型中所有关系均为一对多关系,这使设计和实现变得比较容易。现在,似
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1