《软件工程概论课后习题答案(第二版).pdf》由会员分享,可在线阅读,更多相关《软件工程概论课后习题答案(第二版).pdf(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程概论课后习题答案(第二版)第1章软件与软件工程的概念1.1 举出你所知道的应用软件的例子。办公软件、游戏软件、财务软件、银行软件、人事管理软件、工资管理软件、学籍管理软件等。1.2 认 为 软件就是程序,软件开发就是编程序。这种观点是否正确?为什么?认为 软件就是程序,软件开发就是编程序。这种观点是错误的。首 先,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合,程序只是软件的组成部分之一;其 次,在软件开发中,编程只是软件开发过程的一个阶段。1.3 如果将软件开发比作高楼大厦的建造,可以将软件的设计比作什么?可以将软件的设计比作建筑设计,软件设计的
2、成果相当于建筑设计的设计图纸。1.4 什么是软件危机?它有哪些典型表现?为什么会出现软件危机?软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。典型表现:(1)对软件开发成本和进度的估计常常很不准确。(2)用户对 已完成的 软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。产生软件危机的原因:除了软件本身的特点,其原因主要有以下几个方面:(1)缺
3、乏软件开发的经验和有关软件开发数据的积累,使得开发工作计划很难制定。(2)软件人员与用户的交流存在障碍,使得获取的需求不充分或存在错误。(3)软件开发过程不规范。如,没有真正了解用户的需求就开始编程序。(4)随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是必须有科学严格的管理。(5)缺少有效的软件评测手段,提交给用户的软件的质量不能完全保证。1.5 什么是软件工程?软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出
4、高质量的软件并有效地维护它,这就是软件工程。1.6 简述软件生存期由哪些主要的阶段组成,每一阶段的主要任务是什么?(1)问题定义与可行性研究:问题定义必须回答的关键问题是:要解决的问题是什么。可行性研究要回答的关键问题是:在成本和时间的限制条件下能否解决问题?是否值得做?。(2)需求分析:这个阶段的任务仍然不是具体地解决客户的问题,而是准确地回答 目 标 系 统 必 须 做 什 么 这 个 问 题。(3)软 件 设 计:本阶段要回答的关键问题是 目标系统如何做?为 此,必须在设计阶段中制定设计方案,把已确定的各项需求转换成相应的软件体系结构。结构中的每一组成部分都是意义明确的构件,此即所谓概要
5、设计。进而具体描述每个构件所要完成的工作,为源程序编写打下基础,此即所谓详细设计。(4)程序编码和单元测试:本阶段要解决的问题是 正确地实现已做的设计为 此,需要选择合适的编程语言,把软件设计转换成计算机可以接受的程序代码,并对程序结构中的各个模块进行单元测试,然后运用调试的手段排除测试中发现的错误。要求编写出的程序应当是结构良好、清晰易读的,且与设计相一致的。(5)集成测试和系统测试:集成测试的任务是将已测试过的模块按设计规定的顺序组装起来,在组装的过程中检查程序连接的问题。系统测试的任务是根据需求规格说明的要求,对必须实现的各项需求,逐项进行确认,判定已开发的软件是否符合用户需求,能否交付
6、用户使用。为了更有效地发现系统中的问题,通常这个阶段的工作由开发人员、用户之外的第三者承担。(6)运行维护:已交付的软件投入正式使用,便进入运行维护阶段。这一阶段可能持续若干年。软件在运行中可能由于多方面的原因,需要对它进行维护。通常有四种类型的维护:改正性维护、适应性维护、完善性维护和预防性维护。1.7常见的软件生存期模型主要有哪些?每种模型的优缺点是什么?常见的软件生存期模型主要有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型和统一过程。瀑 布 模 型优 点:可强迫开发人员采用规范化的方法;严格地规定了每个阶段必须提交的文档;要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
7、。缺 点:由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要;用户往往需要等待很长时间才能看到可以运行的程序;适应需求变更的能力比较差。适用范围:瀑布模型只适用于项目开始时需求已确定的情况。(2)快速原型模型优 点:有助于满足用户的真实需求;原型系统已经通过与用户的交互而得到验证,据此产生的规格说明文档能够正确地描述用户需求。缺 点:要求开发人员快速建立原型。适用范围:适用于需求不明确的软件项目。(3)增量模型优 点:能在较短时间内向用户提交可完成一些基本功能的产品,即从第一个构件交付之日起,用户就能做一些有用的工作。逐步增加产品的功能可以使用户有较
8、充裕的时间学习和适应新产品,从而减少一个全新的软件可能给用户组织带来的冲击。项目失败的风险较低,虽然在某些增量构件中可能遇到一些问题,但其他增量构件将能够成功地交付给客户。优先级最高的服务首先交付,然后再将其他增量构件逐次集成进来。因 此,最重要的系统服务将接受最多的测试。缺 点:在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。软件体系结构必须是开放的,即向现有产品中加入新构件的过程必须简单、方便。适用范围:适用于工期紧张、功能可以划分、比较复杂的软件项目。软件工程师必须有较高的技术水平,能够设计出开放的软件体系结构。(4)螺旋模型优 点:对可选方案和约束条件的
9、强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;减少了过多测试或测试不足所带来的风险;在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。缺 点:螺旋模型是风险驱动的,因此要求软件开发人员必须具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还以为一切正常。适用范围:适用于内部开发的大型软件(开发周期长、比较容易受到社会因素影响的软件项目),软件开发人员具有丰富的风险评估知识和经验。(5)喷泉模型优 点:在开发过程中使用统一的概念和方法,各阶段之间没有明显的界限,容易实现各个开发过程的多次反复迭代,
10、达到了认识的逐步深化,降低了出错的可能性。缺 点:由于各个阶段之间的界线不明确,容易造成软件开发过程的无序。适用范围:适用于面向对象的软件开发。(6)统一过程优 点:提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供了较大的通用性。缺 点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;此 外,它没有支持多项目的开发结构,这在一定程度上
11、降低了在开发组织内大范围实现重用的可能性。适用范围:适用于基于构件的软件开发。第2章软件工程方法与工具2.1 软件工程的三种基本要素是什么,各自的作用是什么?软件工程的三种基本要素是方法、工具和过程。(1)软件工程方法(method)为建造软件提供技术上的解决方法(如何做)。目前使用得最广泛的方法是传统方法(结构化方法)和面向对象方法。(2)工具为方法的运用提供自动的或半自动的软件支撑环境。(3)过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。2.2 简述传统方法和面向对象方法的特点。(1)传统方法的特点传统方法也称为生命周期方法或结构化范型。它采用结构
12、化技术来完成软件开发的各项任务。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地逐步完成每个阶段的任务。每一个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一个阶段的结束标准就是后一阶段的开始标准。传统方法的主要缺点是在适应需求变化方面不够灵活,另 外,结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。(2)面向对象方法的特点面向对象方法把数据和行为看成同等重要,是将数据和对数据的操作紧密地结合起来的方法,这也是面向对象方法与传统方法的重要区别。面向对象方法的出发点和基本原则,是尽量模拟人类习惯的思维方式,使开发软件的方法和过程尽可能接近人类认识问
13、题和解决问题的方法与过程,从而使描述问题的问题空间与其解空间在结构上尽可能一致。对于大型、复杂及交互性比较强的系 统,使用面向对象方法更有优势。2.3 形式化方法的特点是什么?形式化方法的主要特点是:(1)软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明;(2)设计、实现和单元测试等开发过程由一个变换开发过程代替。通过一系列变换将形式的规格说明细化成为程序。2.5 安装 Rational Rose2000/2002/2003,并练习基本操作。略。第3章软件需求获取与结构化分析方法3.1 为什么结构化分析要叫“结 构 化?有其他可替代的术语吗?“结构化”一词应来源于 结构化程序设计,
14、先有 结构化程序设计 的思想,后有结构化设计及结构化分析。有时称传统的分析方法,指的就是结构化分析方法。3.2 顶层数据流图或称环境图的作用是什么?顶层数据流图(或 称 环 境 图)仅包括一个数据处理过程,也就是要开发的目标系统。其 作 用 如 下:(1)确定系统在其环境中的位置,与系统有联系的外部实体(包括硬件、软件、组织机构及人)有哪些。(2)通过确定系统的输入和输出与外部实体的关系确定系统的边界,也就是要确定哪些功能或处理属于系统范围之内,哪些属于系统范围之外,需要由其他系统处理或人工处理。3.3 在对数据流图进行分解时需要注意哪些问题?在对数据流图进行分解时,需要注意以下两个问题:(1
15、)当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入/输出数据流必须相同。(2)注意分层细化时对编号的处理方法。3.4 银行存款业务如下:客户到银行柜台存款时,首先填写存款单(包括帐号、姓名、存款金额、存款类型),如果还没有开户,则需要先开户,填写开户单(包括姓名、身份证号、地址、电话、是否留密码)。填写完存款单或开户单后,交给营业员,营业员将存款单或开户单信息输入计算机,系统记录开户信息或存款单信息,如果是开户并选择留密码,则需要客户输入密码。最后印出开户单或存款单给用户。请画出银行存款业务的分层数据流图(至少画出两层)。(1)识别外部实
16、体及输入输出数据流外部实体:储户、业务员。输入数据流:存款单,开户单,密码。可以将存款单和开户单抽象为事务。输出数据流:存款单,开户单。(2)顶层数据流图(3)一层数据流图又或艮行储蓄系统进行分解,从大的方面分解为接收事务、处理开户、处理存款三部分,得到一层数据流图。(4)二层数据流图对 处理存款 及 处理开户”进行进一步分解,得到二层数据流图,即处理存款的数据流图和处理开户的数据流图。处理存款的数据流图处理开户的数据流图3.5按照以下描述,画 出E R图。一本教材由许多章组成,每一章包含许多节、小结和习题组成,章和节都具有标题和序号属性。E R图如下:第4章结构化设计方法4.1 当你 编写
17、程序时你设计软件吗?软件设计和编码有什么不同吗?在“编写 程序时并没有设计软件。软件设计包括概要设计和详细设计,编码是将详细设计中的过程描述转换成用程序设计语言来描述。4.4 是否存在一种情况:复杂问题需要较少的工作去解决?这样的情况对模块化观点有什么影响?通过对复杂的问题进行合理分解,分解为若干个相对简单及独立的子问题,就可以用较少的工作去解决。这种情况能够较好地支持模块化的观点,每个子问题用单独的模块去解决,模块之间应该是高内聚、低耦合的,这样才能减少工作量,否 则,虽然每个模块的工作简单了,但模块之间的联系很复杂,也增加了问题解决的难度和工作量。4.8 用面向数据流的方法设计第3章 习
18、题3.4所描述的银行存款业务的软件结构,并使用改进方法对模块结构进行精化。(1)对 第3章习题3.4给出的数据流图进行精化,确定其边界,如下图所示。(2)对上图按事务型数据流进行处理,完成第一级分解,得到顶层和一层模块结构图。第一级分解后的结构图(3)完成第二级分解。对 上 图 所 示 的“输 入 数 据 、输出数据 和 调度模块进行分解,得到未经精化的输入结构、输出结构和事务结构。未经精化的输入结构未经精化的输出结构未经精化的事务结构初始软件结构图(4)对软件结构进行精化。1)由于调度模块下只有两种事务,因 此,可以将调度模块合并到上级模块中,如图 所 示。将调度模块合并到上级模块后的软件结
19、构2)记录密码”模块的作用范围不在其控制范围之内(即“输入密码 模块不在 记录密码”模块的控制范围之内),需对其进行调整,如图所示。3)提高模块独立性,对模块结构进行调整,如下图所示。调整后的模块结构图4.9 将大的软件划分成模块有什么好处?是不是模块划分得越小越好?划分模块的依据是什么?将大的软件划分成独立命名且可独立访问的模块,不同的模块通常具有不同的功能或职责。这种方法有利于将复杂的问题简单化,是分而治之策略的具体表现。尽管模块分解可以简化要解决的问题,但模块分解并不是越小越好。当模块数目增加时,每个模块的规模将减小,开发单个模块的成本确实减少了;但 是,随着模块数目增加,模块之间关系的
20、复杂程度也会增加,设计模块间接口所需要的工作量也将增加。划分模块的依据是,模块只具有单一的功能且与其他模块没有太多的联系。4.11 结构化程序设计禁止使用goto语句吗?如果程序中使用了 goto语 句,是否就可以断定它是非结构化的?结构化程序设计并不禁止使用goto语句。如果程序中使用了 goto语 句,并不能断定它是非结构化的。4.12 对于给定的算法,如何判断它是否是结构化的?对于给定的算法,如果符合以下三条原则,就可以判断它是结构化的。(1)使用语言中的W页序、选择、重复等有限的基本控制结构表示程序逻辑。(2)选用的控制结构只准许有一个入口和一个出口。程序语句组成容易识别的块(Bloc
21、k),每块只有一个入口和一个出口。4.13 对于图4-49所示的流程图,试分别用N-S图 和PAD表示之。图4-49流程图对应的N-S图如下:对应的PAD如 下:4.1 4图4-50所示的流程图完成的功能是使用二分查找方法在table数组中找出值 为item的数是否存在。(1)判断此算法是否是结构化的,说明理由。(2)若算法是非结构化的,设计一个等价的结构化算法,并 用N-S图表示。图4-5 0二分查找算法的流程图(1)不是结构化的,最上面的循环有两个出口,最下面的分支有三个入口。(2)等价的结构化算法如下:l=(START+FINISH)/2(FINISH-START)1&TABLE(I)!
22、=ITEMl=(START+FINISH)/2START=I+1FINISH=I-1ABLE(START)=ITEM II TABLE(FINISH)=1TEM 11 TABLE(I)=ITEMFLAG=1FLAG=O或者或者FLAG=Ol=(START+FINISH)/24.15使用自顶向下、逐步细化方法设计算法,完成下列任务:产生一个10 10的二维随机整数方阵,先求出每一行的最大值和每一列的最小值;然后求10个最大值中的最小者,10个最小值中的最大者;最后求这两个数之差的平方。(1)首先写出下面的程序框架:main()定 义10 10的二维整数数组A,长度为10的一维数组B,C;建 立1
23、0 10的二维随机整数数组A;-1求A中每一行的最大值 数 组B;-2求A中每一列的最小值数组C;-3求数组B中的最小值minOfB;-4求数组C中的最大值maxOfC;-5(minOfB-maxOfC)A2 result;)(2)对后面加标记的部分进行细化main()定 义10 10的二维整数数组A,长度为10的一维数组B,C;/*建 立10 10的二维随机整数数组A*/-1for(i=0;i=9;i+)for(j=0;j=9;j+)产生随机整数Ai,j;/*求A中每一行的最大值 数 组B*/-2for(i=0;i=9;i+)求数组A第i行的最大值Bi;-2.1)/*求A中每一列的最小值 数
24、 组C*/-3for(j=0;j=9;j+)求数组A第j列的最小值eg;-3.1)/*求数组B中的最小值minOfB*/-4minOfB=B0;for(i=l;i=9;i+)if(minOfB Bi)minOfB=Bi;)/*求数组C中的最大值maxOfC*/-5maxOfC=C0;for(i=l;iCi)maxOfC=Ci;)(minOfB-maxOfC)A2 result;)(3)下一步可以继续对2.1和3.1进行细化。具体略。4.16设计算法完成下列任务:输入一段英文后,无论输入的文字都是大写,还是小 写,或大 与 任 意 混 合,都能将其整理成除每个句子开头字母是大写外,其他都是小写的
25、文字。假设在输入的文字中,两个单词间只允许是空格.?、!,则在输出的文字 中,大写的情况有以下几种:(1)整段文字的第一个字母是大写;(2).后的第一个字母是大写;(3)?后的第一个字母是大写;(4)!后的第一个字母是大写;设变量a 存储输入的字符串,变 量 b 存储结果字符串,变 量 c 存储当前处理的字符,变 量 e 存 储 c 之前的字符(当 c 为第一个字符时除外)。算法如下:5.1 有人说程序编好后能上机运行就可以了,为什么还要讲究风格和可读性呢?你觉得对吗?为什么?对于学生的练习题和作业题,程序编好后能上机运行,一般认为任务就完成了。但对于实际开发的项目来说,任务并没有结束。编码人
26、员编写完程序后,要对自己的程序进行单元测试,测试人员要进行集成测试和系统测试,提交用户使用后,还需要对软件进行持续的维护修改工作。在软件开发和维护过程中,都需要阅读程序。道理很简单,如果需要对某段程序进行修改,首先要读懂,阅读程序是软件开发和维护过程中的一个重要组成部分,而且读程序的时间比写程序的时间还要多。所 以,程序的风格和可读性很重要,具有良好的程序风格和可读性的程序,有助于对程序的正确理解,可以大大减少阅读理解程序的时间,从而提高维护工作的效率。5.2 一般情况下,程序的效率和清晰性相比哪一个更重要?在计算机发展的早期,由于CPU效 率 低,内存小,程序在运行时容易出现运行时间太长或内
27、存溢出问题。因 此,人们在编写程序时,很注重程序的时间效率和空间效 率,而不太注重程序的清晰性。随着计算机硬件性能的飞速发展以及软件规模和复杂性的急剧增加,这种情况已经发生了根本的转变,程序的清晰性越来越受到重视,程序的清晰性不好会给测试、维护修改带来困难,这对于规模庞大和复杂的软件尤其明显。软件运行的效率主要取决于软件的体系结构及算法,编码阶段虽然也有机会提高效率,但效果并不明显。对于效率没有特殊严格要求的系统来说,要将程序的清晰性放在第T 立,在不影响清晰性的情况下,去改进效率。5.6在一行内只写一条语句,并且采取适当的移行格式,使程序的逻辑和功能变得更加明确。许多程序设计语言允许在一行内
28、写多个语句。但这种方式会使程序可读性变差。下面是一段排序程序,请对其编码风格进行改进,以增加其可读性。for(i=l;i=n-l;i+)for(j=l;jaj+l)temp=a|j;aj=aj+l;aj+l=temp;改进后的代码如下:for(i=l;i=n-l;i+)for(j=l;jaj+l)temp=aj;aj=aj+l;aj+l=temp;5.7请对下面代码的布局进行改进,使其符合规范其更容易理解。for(i=l;i=n-l;i+)t=i;for(j=i+l;j=n;j+)if(ajat)t=j;if(t!=i)temp=at;at=ai;ai=temp)改进后的代码如下:for(i=
29、l;i=n-l;i+)(t=i;for(j=i+l;j=n;j+)(if(ajat)if(t!=i)temp=at;at=ai;ai=temp)5.8使用你熟悉的语言编写出习题4.15的 程 序,注意编码风格。下面为使用C语言编写的习题4.15的程序:#include math.h#include stdio.h*include stdlib.h#include time.h/*求10 10的二维数组a的每一行的最大值存入一维数组b,每一列的最小值存入一维数组c,minOfB存储数组b的最小值,maxOfC存储数组c的最大值,re su lt存 储minOfB与maxOfC之差的平方。*/in
30、t main()(inta1010,b10,c10;inti,j,minOfB,maxOfC,result;/*产生随机数种子*/srand(unsigned int)time(NULL);/*建 立10 10的二维随机整数数组a*/for(i=0;i=9;i+)for(j=0;j=9;j+)aij=rand()%100+l;/产生 1-100 之间的随机数/*求a中每一行的最大值 数 组b*/for(i=0;i=9;i+)/*求数组a第i行的最大值bi*/bi=ai0;for(j=l;jbi)bi=aij;)/*求a中每一列的最小值 数 组c*/for(j=0;j=9;j+)/*求数组a第j
31、列的最小值cj;*/cj=aOj;for(i=l;i=9;i+)if(aijcj)eg=aij;)/*求数组b中的最小值minOfB*/minOfB=b0;for(i=l;i bi)minOfB=bi;/*求数组c中的最大值maxOfC*/maxOfC=c0;for(i=l;i=9;i+)if(maxOfCci)maxOfC=ci;result=pow(minOfB-maxOfC,2);printf(结 果 是:%d,result);return(result);)5.9使用你熟悉的语言编写出习题4.16的程序,注意编码风格。下面为使用C语言编写的习题4.16的程序:#include stdi
32、o.h#include string.h#include ctype.h/*将一段英文输入变量a(假设两个单词间只允许是空格.?、!),将其整理成每个句子开头字母是大写、其他都是小写的字符串存储在变量b中。变 量c存储当前处理的字符,变 量e存 储c之 前 字 符。*/void main()char a1000,b1000,c,e;inti,n;gets(a);n=strlen(a);/将整段的第一个字母转成大写。if(isalpha(aO)a0=toupper(a0);bO=aO;)/处理第一个字符之后的每个字符,将?后面的字母改为大写,其他改为小写。for(i=l;i7个(3)首字符 京
33、(4)非 京(5)第2个字符字 母(6)非 字 母(7)第37个字符数 字(8)非 数 字(9)测试用例如下:1)京 H 87774 (1),(4),(6),(8)2)京 H8777)(2)3)京14877745(3)4)冀 H87774)(5)5)京 987774(7)6)京 BA7774)(9)6.6比 较 测 试 与 测 试,说明其异同。测试与 测试都是集成测试之后所进行的测试,都属于系统测试。所不同的是,测试是在开发环境中所做的测试,主要由开发方人员进行。而 测试则是在用户实际工作环境中所做的测试,不受开发人员的干预。补 充 题:设计下列伪码程序的语句覆盖和路径覆盖测试用例:START
34、INPUT(A,B,C)IF A5THEN X=10ELSEX=1END IFIF B10THEN Y=20ELSE Y=2END IFIFC15THEN Z=30ELSEZ=3END IFPRINT(X,Y,Z)STOP设输入数据为,输出数据为O语句覆盖测试用例:,1路径覆盖测试用例:,第 7 章 统一建模语言UML概述7.2 U M L 中有哪些关系?解释类图中聚合和关联的相同点和不同点。在 U M L 中,常见的关系有泛化、聚合、关联、依赖和实现。在类图中,关联是一种结构关系,它描述了两个或多个类的实例之间的连接关系。聚合描述了整体和部分之间的结构关系。按照关联关系的定义,聚合属于一种特
35、殊的关联关系,只不过这种关联关系具有明确的整体-部分含义而已。从耦合度的角度看,聚合关系要强于关联关系。7.4 讨论顺序图与协作图的关系,何时用顺序图建模优于协作图建模,以及相反的情况。顺序图和协作图都能描述对象间的交互关系,但两者的侧重点不同J I页序图着重表现交互的时间顺序,协作图则着重表现交互对象的静态链接关系。但即使他们各有侧重,但从语义上来说是等价的,可从一种图自动转换为另一种图。T 殳情况下,当需要强调消息传递的时间顺序时,采用W 页序图;当表示涉及很多对象的模型时,协作图比顺序图更形象。顺序图在分析中更常用,而协作图则在设计中更常用。7.5 考虑银行系统中的帐户会有哪几种状态,画
36、出帐户对象的状态图。账户的状态包括开户、正常使用、透支、休眠、冻结和注销。账户对象的状态图如下图所示。第 8 章面向对象分析8.1比较面向对象的分析方法和面向数据流的分析方法,阐述它们各自的特点。面向对象的分析方法使用用例模型来表示用户的功能需求,用例模型相当于功能模型,在对用例模型进行细化的过程中,也伴随着对功能的分解。但面向对象的分析方法并不是以功能分解为核心,在获取并分析用户的功能需求之后,重点以类和对象为核心,建立对象模型,交互模型也是围绕对象模型进行的。面向数据流的分析方法是从建立顶层数据流图(环境图)开 始,之后逐层对加工进行分解。面向数据流的分析方法是以功能分解为核心的。8.2
37、面向对象分析需要建立的三个模型是什么?面向对象分析需要建立的3个 模 型 是:由用例和场景表示的功能模型(用例模型);用类和对象表示的静态模型(对象模型);由状态图和W页序图表示的动态模型(交互模型)。8.3 用例建模的主要步骤是什么?用例建模的主要步骤如下:(1)确定业务参与者一可以是与系统有交互的外部硬件、软件、组织、人 等。(2)确定业务需求用例参与者需要系统提供的完整功能。(3)创建用例图一标识参与者与用例之间、用例与用例之间的关系。8.5 用例与用例之间的关系主要有哪两种?其区别是什么?用例之间的关系主要有 包含(也 称 使用)和 扩展。包含 表示一个用例所执行的功能中总是包括被包含
38、用例的功能;扩展是指一个用例的执行可能需要由其他用例的功能来扩展,扩 展 联系可用于对期望或可选的行为建模,但其主要用途是使基本用例的功能不依赖于扩展用例。8.6 对于复杂的系统,其对象模型应该由哪五个层次组成?对 于 复 杂 的 系 统,对象模型应该由下述5个层次组成:主题层(也称为范畴层)、类-对象层、结构层、属性层和服务层,如图所示。-主0层-类-对象层-结构层-属性层-服务层对象模型的五个层次8.7 解释关联类的作用,在什么时候需要使用关联类?关联类的作用是描述关联的属性。在关联关系比较简单的情况下,关联关系的语义用关联关系的名字来概括。但在某些情况下,需要对关联关系的语义做详细的定义
39、、存储和访问,为此可以建立关联 类(association class)o8.8 按照以下描述,画 出UML类 图:一本教材由许多章组成,每一章包含许多节、小结和习题组成,章和节都具有标题和序号属性。UML类图如下:8.9 考虑一个计算机超市,出售硬件、外设和软件。分析谁是这个系统的参与者?这个系统有哪些主要用例?画出用例图。系统的参与者:系统管理员(administrator),售货员(salesperson),客户(customer),主要用例编 参 与 者 用例 说明a1administratorM aintain productinformation(维护商品信息)增加、修改、删除商品
40、信息(商品编号、名称、型号、价 格)2M aintain membershipinformation(维护会员信息)增加、修改、删除会员信息(会员编号、姓名、身份证号、办卡日期)3salespersonScan membership card(扫 描 会 员 卡)在商品出售之前,系统通过扫描仪刷卡(会员卡)来确认顾客的会员身份4Scan product code(扫描商品的条形码)通过扫描商品的条形码,自动识别商品的名称和价格5Input amount ofproduct(输入商品数量)对于已经扫描的条形码,手工输入购买的此件商品的数量6s alesperson,customerAccept
41、payment(接收现金付款)Charge payment to card(使用银行卡付款)7s alespersonPrint receipt(打印收据)用例图如下:第10章面向对象设计10.1 软件模块之间的依赖性可以从哪些角度和抽象层次进行分析?在面向对象软件中,常见的软件模块有类、接口、包、构件。因 此,分析软件模块之间的依赖性就可以从类、接口、包和构件的角度和层次进行分析。10.2 消除包之间循环依赖性的方法是什么?本质上,两个包之间的依赖性来自于两个包中类之间的依赖性。类之间的循环依赖性是个特别棘手的问题,好在大多数情况下可以通过重新设计避免循环依赖性。具体方法是增加新包。举例说明
42、如下:在下图中,包A依赖于包B,反过来包B又依赖包A,构成了循环依赖。具体解决办法是:将 包B依赖的包A中的元素从包A中分离出来,组成包C,使得包B不再依赖包A,而是依赖包C。白.c:W10.3 请给出构件的一般性定义,然后给出传统的软件工程环境及面向对象的软件工程环境中构件的定义,最后选择你熟悉的编程语言说明怎样定义一个构件。软件构件是一种组装单元,它具有规范的接口规格说明和显式的语境依赖。软件构件可以被独立部署,并由第三方任意组装。OMG UML规范中将构件定义为 系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系 列 接 口 。在传统的软件工程环境中,一个构件就是程序
43、的一个功能要素,程序由处理逻辑和实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。传统的构件也称为模块,是软件体系结构的一部分。在面向对象的软件工程环境中,面向对象技术已达到了类级复用,而构件级复用则是比类级复用更高一级的复用,它是对一组类的组合进行封装(当 然,在某些情况下,一个构件可能只包含一个单独的类),并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。一个构件可以是一个编译的类,可以是一组编译的类,也可以是其他独立的部署单元,如一个文本文件、一个图片、一个数据文件、一个脚本等。选择你熟悉的编程语言说明怎样定义一个构件。(略)10.4 典型的面向对象
44、设计模型在逻辑上由哪几部分组成?对每一部分进行设计时所包含的主要内容是什么?典型的面向对象设计模型在逻辑上将系统划分为4个部分,分别是问题域部分、人机交互部分、任务管理部分及数据管理部分。1)问题域部分的设计在面向对象设计过程中,可能要对面向对象分析所得出的问题域模型进行补充或调整。例 如,调整需求、复用已有的类、把问题域类组合在一起、增添泛化类以建立类间的协议、调整继承的支持级别、改进性能等。2)人机交互部分的设计人机交互界面的设计质量直接影响到用户对软件的使用。在设计阶段,必须根据需求把交互细节加入到用户界面设计中,包括人机交互所必需的实际显示和输入。3)任务管理部分的设计任务管理主要包括
45、任务的选择和调整。常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。设计任务管理子系统时,需要确定各类任务,并将任务分配给适当的硬件或软件去执行。4)数据管理的设计在采用面向对象方法进行软件开发时,数据的存储还是普遍使用关系数据库。在面向对象设计中,可以将UM L类图看作是数据库的概念模型,一个类可以映射为一个表或多个表,此 外,还要考虑类之间的关联关系、继承关系的映射O10.5用面向对象方法设计网上购书系统的软件结构,网上购书系统的业务如下:某书店为方便客户通过Internet购买相关图书,开 发一个 网上购书系统,客户可以通过W eb页面注册并登录 网上购书系统,
46、通 过W eb页面查看、选择图 书,系统根据用户选择的图书单价、数 量,系统自动生成订单,并计算总价格。客户在提交订单之前,必须填写关于寄送地址和发票及付款方式等细节,一旦订单被提交,系统显示确认信息,并附上订单的详细信息。客户可以在线查询订单的状态。系统管理人员查看客户的订单,验证客户的信用和付款方式,向仓库请求所购图书,打印发票并发货。本系统从逻辑结构上分为三层,W eb页面层,业务逻辑层和数据库层。W eb页面层负责接收用户的请求,业务逻辑层在获知用户请求后,执行相应的业务逻辑,向数据库层发出数据请求,获得所需要的数据后,通 知W eb页面层 锄 据 呈 现 给用户。从业务的角度,又可以
47、将系统划分为订购管理、客户信息管理和系统管理三个子系统(包)。系统的软件结构如图所示。10.6对10.5中的网上购书系统设计其问题域的类图。问题域类包括客户、信用信息、订单、图书、发票及发货单o类图如下所示:数据库系统导论第五版课后习题答案第1章 绪 论1.试述数据、数据库、数据库系统、数据库管理系统的概念。答:(I)数 据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分
48、广泛,表示这些对象的数据也越来越复杂。数据与其语义是不可分的。500这个数字可以表示一件物品的价格是500元,也可以表示一个学术会议参加的人数有500人,还可以表示一袋奶粉重500克。(2)数据库(DataBase,简 称DB):数据库是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。(3)数据库系统(DataBas。Sytem,简 称DBS):数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工 具)、应用系统、数据库管理员构成。解析数据
49、库系统和数据库是两个概念。数据库系统是一个人一机系统,数据库是数据库系统的一个组成部分。但是在日常工作中人们常常把数据库系统简称为数据库。希望读者能够从人们讲话或文章的上下文 中 区 分 数 据 库 系 统 和 数 据 库 ,不要引起混淆。(4)数据库管理系统(DataBase Management sytem,简称 DBMs):数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。DBM S的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。解 析DBMS是一个大型的复杂的软件系统,是计算机中的基础软件。
50、目 前,专 门 研 制DBMS的厂商及其研制的DBM S产品很多。著名的有美国IBM公 司 的D B Z关系数据库管理系统和IM S层次数据库管理系统、美 国Oracle公 司 的orade关系数据库管理系统、S油a se公 司 的s油a se关系数据库管理系统、美国微软公 司 的SQL Serve,关系数据库管理系统等。2.使用数据库系统有什么好处?答:使用数据库系统的好处是由数据库管理系统的特点或优点决定的。使用数据库系统的好处很多,例 如,可以大大提高应用开发的效率,方便用户的使用,减轻数据库系统管理人员维护的负担,等等。使用数据库系统可以大大提高应用开发的效率。因为在数据库系统中应用程