• 809.50 KB
  • 2022-04-22 11:24:16 发布

软件工程概论的练习题及答案.doc

  • 71页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'概述一、填空题1、软件由计算机程序、数据和文档组成。2、软件是一种逻辑产品,它与物质产品有很大的区别。3、计算机系统由硬件、软件、使用计算机的人、数据库、文档和执行过程组成。4、软件的发展,到现在为止,经历了三个阶段:程序设计、程序系统和软件工程。5、程序设计时代的生产方式是个体手工艺者,程序系统时代的生产方式是手工作坊,软件工程时代的生产方式是工程化。6、软件工程是一门综合性的交叉学科,它涉及计算机学科工程学科、管理学科和数学学科。7、计算机科学的成果都可用于软件工程,但计算机科学着重于理论和原理,软件工程着重于建造软件系统。8、软件工程研究的主要内容是方法、过程和工具等三个方面。9、软件开发各阶段任务的划分应尽可能相对独立,同一阶段任务的性质应尽可能相同。10、瀑布模型是将软件生存期各个活动规定为依线性顺序连接的若干阶段的模型。它规定了各阶段的活动由前至后,相互衔接的固定次序,如同瀑布流水,逐级下落。11、演化模型是一种非整体开发模型。先开发一个原型软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的产品。12、螺旋模型将开发过程分为几个螺旋周期。在每个螺旋周期内分为四个工作步骤:制定计划、风险分析、开发实施、用户评估。13、喷泉模型是一种以用户要求为动力,以对象为驱动的模型。它使开发过程具有迭代性和无间隙性,适用于面向对象开发方法。二、单项选择题1、软件产品的生产主要是C。A.制造B.复制C.开发D.研制2、个体手工劳动是B时代的软件生产方式。A.程序系统B.程序设计C.软件工程D.程序编码3、软件工程是一门C学科。A.理论性B.原理性C.工程性D.心理性4、软件开发费用只占软件生存期全部费用的B。A.1/2B.1/3C.1/4D.2/35、在软件开发过程中大约要花费C%的工作量进行测试和调试。A.20B.30C.40D.506、准确地解决“软件系统必须做什么”是B阶段的任务。A.可行性研究B.需求分析C.软件设计D.程序编码7、软件生存期中时间最长的是D阶段。A.需求分析B.软件设计C.软件测试D.软件运行/维护8、在软件生存期的模型中,D适合于大型软件的开发它吸收了软件工程中“演化”的概念。A.喷泉模型B.基于知识的模型C.瀑布模型D.螺旋模型9、在软件生存期中,用户的参与主要在A。A.软件定义阶段B.软件开发阶段C.软件维护阶段D.整个软件生存期过程中10、在软件开发过程中的每个阶段都要进行严格的D,以尽早发现在软件开发过程中产生的错误。A.检验B.验证C.度量D.评审11、在软件开发和维护过程中需要变更需求时,为了保持软件各个配置成分的一致性,必须实施严格的BA.产品检验B.产品控制C.产品标准化D.开发规范12、实践表明,采用先进的开发技术可提高软件开发的生产率,还可提高软件的D。 A.可靠性B.可使用性C.安全性D.可维护性13、为了提高软件开发过程的A,有效地进行管理,应当根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准。A.可见性B.生产率C.安全性D.有效性14、随着开发小组人数的A,因交流开发进展情况和讨论遇到的问题而造成的通信开销也急剧增加。A.增加B.降低C.稳定D.不稳定15、为保证软件开发的过程能够跟上技术的进步,必须不断地灵活地改进软件工程C。A.原则B.工具C.过程D.方法三、选择填空题1、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括内。 软件是计算机系统中与硬件相互依存的另一部分,它是包括(②)、(⑦)及(⑤)的完整集合。其中,(②)是按事先设计的功能和性能要求执行的指令序列。(⑦)是使程序能够正确操纵信息的数据结构。(⑤)是与程序开发、维护和使用有关的图文材料。供选择的答案:A~C.①软件②程序③代码④硬件⑤文档⑥外设⑦数据⑧图表2、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括内。开发软件时对提高软件开发人员工作效率至关重要的是(①)。软件工程中描述生存周期的瀑布模型一般包括计划、(①)、设计、编码、测试、维护等几个阶段,其中设计阶段在管理上又可以依次分成(③)和(⑥)两步。供选择的答案:A.①程序开发环境②操作系统的资源管理功能③程序人员数量④计算机的并行处理能力B.①需求分析②需求调查③可行性分析④问题定义C、D.①方案设计②代码设计③概要设计④数据设计⑤运行设计⑥详细设计⑦故障处理设计 ⑧软件体系结构设计3、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括内。有人将软件的发展过程划分为4个阶段:第一阶段(1950~1950年代末)称为“程序设计的原始时期”,这时既没有( A ),也没有( B ),程序员只能用机器指令编写程序。第二阶段(1950年代末~1960年代末)称为“基本软件期”。出现了(①),并逐渐普及。随着(④)的发展,编译技术也有较大的发展。第三阶段(1960年代末~1970年代中期)称为“程序设计方法时代”。这一时期,与硬件费用下降相反,软件开发费急剧上升。人们提出了(⑤)和(⑧)等程序设计方法,设法降低软件的开发费用。第四阶段(1970年代中期~现在)称“软件工程时期”。软件开发技术不再仅仅是程序设计技术,而是包括了与软件开发的各个阶段,如(⑤)、(④)、编码、单元测试、综合测试、(①)及其整体有关的各种管理技术。供选择的答案:A~D:①汇编语言②操作系统③虚拟存储器概念④高级语言⑤结构式程序设计⑥数据库概念⑦固件⑧模块化程序设计E~G:①使用和维护②兼容性的确认③完整性的确认 ④设计⑤需求定义⑥图象处理4、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括内。软件工程的最终目的是以较少的投资获得可维护的、可靠的、高效率的和可理解的软件产品。软件工程技术应遵循(⑦)、(④)、(⑥)、(③)、一致性、确定性、完备性、可验证性、抽象和信息隐蔽。 原型法适用于开发较复杂的系统,原型可分为三种:(②)、(⑤)和(④)。供选择的答案:A~D①有效性②合理性③局部化④协同性 ⑤实用性⑥模块化⑦抽象⑧信息隐蔽E~G:①复用型②实验型③废弃型④演化型 ⑤探索型四、问答题1、什么是软件?它的特性是什么? 答:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发,维护和使用有关的图文材料。软件的特点是:(1)软件是一种逻辑实体,而不是具体的物理实体。它具有抽象性。(2)软件的生产与硬件不同,它没有明显的制造过程。(3)在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。然而它存在退化问题。(4)软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。(5)软件的开发至今尚未完全摆脱手工艺的开发方式。(6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。(7)软件成本相当昂贵。2、试比较软件发展的三个时期的特点,从软件所指、软件工作范围、软件开发组织、决定质量的因素、开发技术和手段等几个方面说明它们的差别。答:3、软件工程是开发、运行、维护和修复软件的系统化方法,它包含哪些要素?试说明之。答:软件工程包括三个要素:方法、工具和过程。软件工程方法为软件开发提供了“如何做”的技术。它包括了多方面的任务,如项目计划与估算、软件系统需求分析、数据结构、系统总体结构的设计、算法过程的设计、编码、测试以及维护等。软件工具为软件工程方法提供了自动的或半自动的软件支撑环境。软件工程的过程则将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。4、软件工程过程有哪几个基本过程活动?试说明之。答:软件工程过程的基本过程活动有4步:·P(Plan):软件规格说明。规定软件的功能及其运行的限制;·D(Do):软件开发。产生满足规格说明的软件; ·C(Check):软件确认。确认软件能够完成客户提出的要求;·A(Action):软件演进。为满足客户的变更要求,软件必须在使用的过程中演进。5、试说明“软件生存期”的概念。答:软件与任何一个事物一样,有它的孕育、诞生、成长、成熟、衰亡的生存过程。这就是软件的生存期。它分为6个阶段:(1)软件项目计划:在这一步要确定软件工作范围,进行软件风险分析,预计软件开发所需要的资源,建立成本与进度的估算。根据有关成本与进度的限制分析项目的可行性。(2)软件需求分析和定义:在这一步详细定义分配给软件的系统元素。可以用以下两种方式中的一种对需求进行分析和定义。一种是正式的信息域分析,可用于建立信息流和信息结构的模型,然后逐渐扩充这些模型成为软件的规格说明。另一种是软件原型化方法,即建立软件原型,并由用户进行评价,从而确定软件需求。(3)软件设计:软件的设计过程分两步走。第一步进行概要设计,以结构设计和数据设计开始,建立程序的模块结构,定义接口并建立数据结构。第二步做详细设计,考虑设计每一个模块部件的过程描述。经过评审后,把每一个加细的过程性描述加到设计规格说明中去。(4)程序编码:在设计完成之后,用一种适当的程序设计语言或CASE工具生成源程序。应当就风格及清晰性对代码进行评审,而且反过来应能直接追溯到详细设计描述。(5)软件测试:单元测试检查每一单独的模块部件的功能和性能。组装测试提供了构造软件模块结构的手段,同时测试其功能和接口。确认测试检查所有的需求是否都得到满足。在每一个测试步骤之后,要进行调试,以诊断和纠正软件的故障。(6)软件维护:为改正错误,适应环境变化及功能增强而进行的一系列修改活动。与软件维护相关联的那些任务依赖于所要实施的维护的类型。6、试论述瀑布模型软件开发方法的基本过程,比较它的优点和缺点。答:瀑布模型规定了各项软件工程活动,包括:制定软件项目计划,进行需求分析和定义,软件设计,程序编码,测试及运行维护。并且规定了它们自上而下,相互衔接的固定次序,如同瀑布流水,逐级下落。瀑布模型为软件开发和软件维护提供了一种有效的管理图式。根据这一图式制定开发计划、进行成本预算、组织开发力量,以项目的阶段评审和文档控制为手段有效地对整个开发过程进行指导,从而保证了软件产品及时交付,并达到预期的质量要求。瀑布模型的缺点是缺乏灵活性,特别无法解决软件需求本身不明确或不准确的问题。这些问题的存在对软件开发会带来严重影响,最终可能导致开发出的软件并不是用户真正需要的软件,并且这一点在开发过程完成后才有所察觉。面对这些情况,无疑需要进行返工或是不得不在维护中纠正需求的偏差。但无论上述哪一种情况都必须付出高额的代价,并将为软件开发带来不必要的损失。7、试说明演化模型软件开发方法的基本过程,比较它的优点和缺点。答:由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。因此,可以先做试验开发,其目标只是在于探索可行性,弄清软件需求;然后在此基础上获得较为满意的软件产品。通常把第一次得到的试验性产品称为“原型”。演化模型从需求分析开始。软件开发人员与用户一起定义待开发软件系统的总目标,定义需求,确定软件的工作范围。然后快速设计软件中对使用者可见部分的表示,进而建造原型,再让用户或客户评估原型,根据评估结果,修改和细化待开发软件系统的需求,使之满足用户的需求。这个过程是一个迭代的过程。演化模型的优点是:·演化模型能够得到更好的软件需求,它不仅能够处理模糊的需求,而且开发人员与用户可通过原型充分进行交流; ·演化模型给用户提供了机会,以更改用户原来设想的不尽合理的最终系统;·演化模型使得开发出来的最终系统更容易维护,对用户更友好;·演化模型可以降低总的开发费用,缩短开发时间。演化模型的缺点是:·对于开发人员不熟悉的领域,演化模型可能误导开发者把系统的次要部分当作主要框架,作出不切题的原型;·原型过快地收敛于需求集合,使得某些基本方面被忽视;·长期在原型环境下开发,只注意得到令人满意的原型,容易“遗忘”用户环境与实际客户环境之间的差别。8、试说明螺旋模型软件开发方法的基本过程,比较它的优点和缺点。答:对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且加入两种模型均忽略了的风险分析,弥补了两者的不足。螺旋模型是一种风险驱动的模型。在软件开发中存在各种风险。项目越复杂,设计方案、资源、成本、进度等因素的不确定性越大,项目开发的风险也就越大。及时对风险进行识别、分析,采取对策,可消除或减少风险的损害。螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相吻合。在每个螺旋周期内按四个象限,分为四个工作步。第一,制定计划:确定软件目标,选定实施方案,明确项目开发的限制条件;第二,风险分析:分析所选方案,识别风险,通过原型消除风险;第三,开发实施:实施软件开发;第四,客户评估:评价开发工作,提出修正建议,建立下一个周期的计划。螺旋模型适合于大型软件的开发,应该说它是最为实际的方法,它吸收了软件工程“演化”的概念,使得开发人员和客户对每个演化层出现的风险有所了解,继而做出应有的反映。螺旋模型的优越性比起其它模型来说是明显的,但并不是绝对的。模型的使用需要具有相当丰富的风险评估经验和专门知识。如果项目风险较大,又未能及时发现,势必造成重大损失。此外,螺旋模型是出现较晚的新模型,远不如瀑布模型普及,要让广大软件人员和用户充分肯定它,还有待于更多的实践。9、软件工程的基本目标有哪些?试说明它们之间的关系。答:组织实施软件工程项目,从技术上和管理上采取了多项措施以后,最终希望达到以下几个主要的目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付使用。在具体项目的实际开发中,企图让以上几个目标都达到理想的程度往往是非常困难的。10、软件工程的基本原则有哪些?试说明之。答:在软件开发过程中必须遵循下列软件工程原则。·抽象:采用分层次抽象,自顶向下、逐层细化的办法进行功能分解和过程分解,可以由抽象到具体、由复杂到简单,逐步得到问题的解。·信息隐蔽:遵循信息封装,使用与实现分离的原则,将模块设计成“黑箱”,可以将实现的细节隐藏在模块内部,使用者只能通过模块接口访问模块中封装的数据。·模块化:按模块划分系统的体系结构,使得各模块间有良好的接口。这样有助于信息隐蔽和抽象,有助于表示复杂的系统。·局部化:按抽象数据类型思想及问题域中的概念来建立模块,确保模块之间低耦合,模块内部高内聚。这有助于控制解的复杂性。·确定性:软件开发过程中所有概念的表达应是确定的、无歧义性的、规范的。这有助于人们之间的沟通,保证整个开发工作协调一致。·一致性: 强调软件开发过程的标准化、统一化。包括文档格式的一致,工作流程的一致,内、外部接口的一致,系统规格说明与系统行为的一致等。·完备性:软件系统不丢失任何重要成分,可以完全实现系统所要求功能。·可验证性:开发大型的软件系统需要对系统自顶向下、逐层分解。系统分解应遵循系统易于检查、测试、评审的原则,以确保系统的正确性。11、软件工程的基本原理有哪些?试说明之。答:软件工程的基本原理是:·按软件生存期分阶段制定计划并认真实施。在软件生存期中需要完成许多不同性质的工作,所以应把软件生存期划分为若干阶段,并相应制定出可行的计划,且按照计划对软件的开发和维护活动进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件的开发和维护工作。·坚持进行阶段评审。软件的质量保证工作不能等到编码阶段结束之后再进行。错误发现得越晚,为改正它所需付出的代价就越大。因此,在每个阶段都要进行严格的评审,以尽早发现在软件开发过程中产生的错误。·坚持严格的产品控制。在软件开发过程中不应随意改变需求,因为改变一项需求往往需要付出较高的代价。但由于外界环境的变化或软件工作范围的变化,在软件开发过程中改变需求又是难免的,不能硬性规定禁止客户改变需求,只能依靠科学的产品变更控制技术来顺应需求的变更。其中主要是实施基线配置管理。·使用现代程序设计技术。实践表明,采用先进的技术可提高软件开发的生产率,还可提高软件的可维护性。其中包括结构化程序设计技术,Jackson程序设计技术,面向对象程序设计技术等。·明确责任。软件产品是看不见摸不着的逻辑产品。为了提高软件开发过程的可见性,有效地进行管理,应当根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使得工作结果能够得到清楚的审查。·用人少而精。合理安排软件开发小组人员的原则是参与人员应当少而精,即小组的成员应当具有较高的素质,且人数不应过多。人员素质高能大大提高软件开发的生产率,明显减少软件中的错误。软件开发小组人员少而精可以减少因交流开发进展情况和讨论遇到的问题而造成的通信开销。·不断改进开发过程。必须不断地灵活地改进软件工程过程,积极主动地采用新的软件技术,注意不断总结经验。此外,需要注意收集和积累出错类型、问题报告等数据,用以评估软件技术的效果和软件人员的能力,确定必须着重开发的软件工具和应当优先研究的技术。12、有人说:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。对否?请解释你的回答。答:软件开发时,一个错误发现得越晚,为改正它所付出的代价就越大。这个说法是对的。在1970年代,GTE、TRW和IBM等三家公司对此问题做了独立研究,最后它们得到相似的结论:从表中可以看出,在需求分析阶段检查和修复一个错误所需的代价只有编码阶段所需代价的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。项目管理一、填空题1、要成功地完成软件开发工作的一个主要的决定性因素是项目管理。 2、软件过程是软件生存期中的一系列相关工程活动集合。3、所有的软件开发都可以看成是一个问题循环解决过程,其中包括4个截然不同的阶段:状态捕捉、问题定义、技术开发和方案综合。4、在制定软件项目计划之前,必须先明确项目的目标和范围。项目的目标标明了软件项目的目的但不涉及如何去达到这些目的。5、对软件进行度量,是为了表明软件产品的质量,弄清软件开发人员的生产率,建立项目估算的基线,帮助调整对新的工具和附加培训的要求。6、软件质量的事后度量包括正确性、可维护性、完整性和可使用性。其中完整性包括危险性和安全性。7、软件范围包括功能、性能、限制、接口和可靠性。8、软件项目计划的第二个任务是对完成该软件项目所需的资源进行估算。资源包括人与工具。9、对于一个大型的软件项目,要进行一系列的估算处理。主要靠分解和类推的手段进行。10、基本COCOMO模型是一个静态单变量模型,它用一个已估算出的源代码行数(LOC)为自变量的(经验)函数来计算软件开发工作量。11、成本-效益分析的目的,是从经济角度评价开发一个新的软件项目是否可行。12、风险估计从两个方面估价风险。一是估计一个风险发生的可能性。一是估价与风险相关的问题出现后将会产生的结果。13、一个软件任务由一个人单独开发,生产率最高。14、在与软件成本相关的影响因素中,人员的能力是最大影响因素。15、软件开发所需的人力随开发的进展逐渐增加,在编码与单元测试阶段达到高峰,以后又逐渐减少。16、在建立项目组织时应注意的原则有三:①尽早落实责任,指定专人负责;②减少接口,要有合理的人员分工、好的组织结构、有效的通信,减少不必要的生产率的损失;③责权均衡。17、风险出现概率可以使用从过去项目、直觉或其它信息收集来的度量数据进行统计分析估算出来。18、用各种不同的方法对风险进行分类是可能的。从宏观上来看,可将风险分为项目风险、技术风险和商业风险。二、选择题1、所有的软件开发都可以看成是一个问题B过程。A.顺序解决B.循环解决C.分类解决D.分组解决2、软件项目管理所涉及的范围覆盖了整个软件D。A.开发过程B.运行与维护过程C.定义过程D.生存期3、为使软件开发获得成功,一个关键问题是必须对软件范围、风险、资源、任务、里程碑、成本,进度等做到心中有数,而C可以提供这些信息。A.计算机辅助工程B.软件开发工具C.软件项目管理D.软件估算4、软件范围标明了软件要实现的基本功能,并尽量以A的方式界定这些功能。A.定量B.规范C.统一D.定性5、只要事先建立特定的度量规程,很容易做到B开发软件所需要的成本和工作量、产生的代码行数等。A.间接度量B.直接度量C.间接估算D.直接估算6、为了计算特征点,可以像计算功能点那样,对信息域值进行计数和加权。此外,需要对一个新的软件特征A进行计数。A.算法B.计算误差C.程序复杂性D.效率7、对于软件的D,有一种简单的面向时间的度量,叫做平均变更等待时间MTTC(MeanTimeToChange)。这个时间包括开始分析变更要求、设计合适的修改、实现变更并测试它、以及把这种变更发送给所有的用户。A.可靠性B.可修改性C.可测试性D.可维护性8、软件的完整性是度量一个系统抗拒对它的C攻击(事故的和人为的)的能力。 A.可靠性B.正确性C.安全性D.容错性9、对每一种软件资源,应说明4个特性:资源的描述,资源的有效性说明,资源在何时开始需要,使用资源的持续时间。最后两个特性统称为A。A.时间窗口B.时间安排C.日程安排D.资源定义10、业务系统计划工具借助特定的C建立一个组织的战略信息需求的模型,导出特定的信息系统。A.过程性语言B.形式化语言C.元语言D.伪码11、软件开发成本主要是指软件开发过程中所花费的B及相应的代价。A.劳动力B.工作量C.资源D.持续时间12、自顶向下估算软件成本的方法主要是从项目的整体出发进行B,即根据已完成项目的总成本(或总工作量),来推算待开发软件的总成本(或总工作量),然后按比例将它分配到各开发任务单元中去。A.分解B.类推C.推导D.评估13、自底向上估算软件成本的方法主要是把待开发软件A,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发的总工作量。A.分解B.类推C.推导D.评估16、系统的经济效益B因使用新系统而增加的收入加上使用新系统可以节省的运行费用。A.大于B.等于C.小于D.不等于17、项目复杂性、规模和结构的不确定性构成C(估算)风险因素。A.技术B.经济C.项目D.商业18、识别风险的一种最好的方法就是利用一组A来帮助人们了解在项目和技术方面有哪些风险。因此,Boehm建议使用一个“风险项目检查表”。A.提问B.项目C.脚本D.场景19、在做风险评价时常采用的一个非常有效的方法就是定义D。A.风险评价标准B.风险影响因子C.风险调整因素D.风险参照水准21、当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的A问题,即所谓通信问题。A.接口B.衔接C.调用D.控制22、假设一个人单独开发软件,生产率是5000行/人年。若4个人组成一个小组共同开发这个软件,在每条通信路径上耗费的工作量是250行/人年。则组中每人的生产率降低为CA.4200B.4350C.4675D.437523、PERT技术叫做B技术,它是采用网络图来描述一个项目的任务网络,安排开发进度,制定软件开发计划的最常用的方法。A.日程安排B.计划评审C.关键路径D.因果图24、在进度压力下赶任务,其成果往往是以B产品的质量为代价的。A.浪费B.牺牲C.抵押D.维持三、选择填空题1、从供选择的答案中选出与下列有关软件过程叙述相对应的正确答案,将其编号填入到相应的括弧内。软件过程是软件(4)中的一系列相关软件工程(3)的集合。每一个软件过程又是由一组(6)、项目(8)、软件工程产品和交付物以及质量保证(SQA)点等组成。一个软件过程可以用右图的形式来表示。首先建立一个(2)过程框架,其中定义了少量可适用于所有软件项目的框架(3),再给出各个框架(3)的任务集合,最后是保护伞活动,如软件质量保证、软件配置管理以及测量等。软件过程模型的选择基于项目和应用的特点、采用的(5)和工具、要求的控制和需交付的产品。 A.④   B.③   C.⑥   D.⑧   E.②   F.⑤供选择的答案:A~F.①工程②公共③活动④生存期⑤方法⑥工作任务⑦功能⑧里程碑2、从供选择的答案中选出与下列有关软件项目管理叙述相对应的正确答案,将其编号填入到相应的括弧内。由于软件工程有如下的特点,使软件管理比其它工程的管理更为困难。软件产品(2)。(6)标准的过程。大型软件项目往往是(3)项目。(2)的作用是为有效地定量地进行管理,把握软件工程过程的实际情况和它所产生的产品质量。在制定计划时,应当对人力、项目持续时间、成本作出(4);(5)实际上就是贯穿于软件工程过程中一系列风险管理步骤。最后,每一个软件项目都要制定一个(1),一旦(6)制定出来,就可以开始着手(5)。供选择的答案:A.②  B.⑥  C.③  D.②  E.④  F.①  G.⑥  H.⑤A~C.①可见的②不可见的③“一次性”④“多次”⑤存在⑥不存在D~H.①进度安排②度量③风险分析④估算⑤追踪和控制⑥开发计划3、从供选择的答案中选出与下列有关软件度量叙述相对应的正确答案,将其编号填入到相应的括弧内。软件的度量包括(A1)和(B4)。软件产品的(A1)包括产生的代码行数、执行速度等。软件产品的(B)则包括若干质量特性。我们还可进一步将软件度量如右图所示那样分类。软件(C)度量主要关注软件工程过程的结果;(D)度量则指明了软件适应明确和不明确的用户要求到什么程度;(E)度量主要关注软件的一些特性而不是软件开发的全过程。从图中还可看到另一种分类方法:面向(F)的度量用于收集与直接度量有关软件工程输出的信息和质量信息。面向(G)的度量提供直接度量的尺度。面向(H)的度量则收集有关人们开发软件所用方式的信息和人们理解有关工具和方法的效率的信息。A.①  B.④  C.④  D.①  E.②  F.⑤  G.⑦  H.③供选择的答案:A~B.①直接度量②尺度度量③二元度量④间接度量C~E.①质量②技术③成本④生产率F~H.①过程②对象③人④存取⑤规模⑥进程⑦功能⑧数据4、从供选择的答案中选出与下列有关软件估算叙述相对应的正确答案,将其编号填入到相应的括弧内。估算资源、成本和进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。通常估算本身带有(A)。项目的复杂性越高,规模越大,开发工作量(B),估算的(A)就(C)。项目的结构化程度提高,进行精确估算的能力就能(D),而风险将(E)。有用的历史信息(F ),总的风险会减少。供选择的答案:A.③  B.②  C.⑦  D.①  E.③  F.②A.①风范(范型)②风格③风险④度量B~F.①增加②越多③降低④不变⑤越少⑥越高⑦越大5、从供选择的答案中选出与下列有关软件估算叙述相对应的正确答案,将其编号填入到相应的括弧内。在软件项目估算时,将代码行LOC和功能点FP数据在两个方面使用:一是作为一个估算变量,度量软件每一个(A)的大小;一是联合使用从过去的项目中收集到的(B)和其它估算变量,进行成本和(C)估算。LOC和FP是两种不同的估算技术,但两者有许多共同的特征,只是LOC和FP技术对于分解所需要的(D)不同。当用(E)作为估算变量时,功能分解是绝对必要且应达到很详细的程度,而用(F)作为估算变量时,分解程度可以不很详细。(E)是直接估算,(F)是间接估算。若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出LOC或FP估计值,记作a,m,b,则LOC或FP的期望值E的公式为(G),m是加权的最可能的估计值,遵循(H)。供选择的答案:A.③, B.⑦, C.⑤, D.①, E.②, F.①, G.②, H.③。A~C.①模块②软件项目③分量④持续时间⑤工作量⑥进度⑦基线数据⑧改进数据D.①详细程度②分解要求③改进过程④使用方法E,F.①FP②LOCG.①E=(a+m+b)/3②E=(a+4m+b)/6③E=(2a+3m+4b)/3④H.①χ概率②γ概率③β概率④泊松6、从供选择的答案中选出与下列有关软件估算叙述相对应的正确答案,将其编号填入到相应的括弧内。在考虑各种软件开发资源时,(A)是最重要的资源。如果把软件开发所需的资源画成一个金字塔形:在塔的上层是最基本的资源(A),在底部为(B)。(B)包括硬件资源和软件资源。(C)、(D)和其它硬件设备属于硬件资源。IPSE工具属于软件资源中的(E)。为了提高软件的生产率和软件产品的质量,可建立(F)。供选择的答案:A.②  B.③  C.②  D.④  E.⑥  F.⑤A,B.①方法②人力③工具④上下文环境C,D.①虚拟机②目标机③自动机④宿主机E,F.①维护工具②分析设计工具③支持工具④编程工具⑤可复用构件库⑥框架工具⑦原型化模拟工具7、从供选择的答案中选出与下列有关软件成本估算叙述相对应的正确答案,将其编号填入到相应的括弧内。定义一个人参加劳动时间的长短为(A),其度量单位为PM(人月)或PY(人年)。而定义完成一个软件项目(或软件任务)所需的(A)为(B),其度量单位是人月/项目(任务),记作PM(人月)。进一步地,定义单位(A)所能完成的软件(C)的数量为软件(D),其度量单位为LOC/PM。它表明一般指(E)的一个平均值。例如,一个软件的开发工作量如下表所示。该软件共有源代码2900行,其中,500行用于测试,2400行是执行(F)的源代码。则劳动生产率是(G)(LOC/PM)。供选择的答案:A.④  B.②  C.④  D.①  E.①  F.②  G.④A,B,D.①生产率②工作量③成本④劳动量E.①开发全过程②某开发阶段③软件生存期④某开发任务F,C.①软件②程序③进程④产品G.①520②120③320④2408、从供选择的答案中选出与下列有关软件成本估算叙述相对应的正确答案,将其编号填入到相应的括弧内。对于一个大型的软件项目,由于项目的复杂性,需要进行一系列的估算处理。主要按(A)和(B)手段进行。估算的方法分为三类:从项目的整体出发,进行(B)的方法称为(C )估算法。把待开发的软件细分,直到每一个子任务都已经明确所需要的开发工作量,然后把它们加起来,得到软件开发总工作量的方法称为(D)估算法。而把待开发的软件项目与过去已完成的软件项目做类比,区分出类似部分和不同部分分别处理的方法称为(E)估算法。(F)是由多位专家进行成本估算的方法。供选择的答案:A.③, B.①, C.②, D.③, E.①, F.④A,B.①类推②类比③分解④综合C~F.①差别②自顶向下③自底向上④专家判定技术⑤循序渐进⑥比较10、从供选择的答案中选出与下列有关软件成本估算叙述相对应的正确答案,将其编号填入到相应的括弧内。一个规模为10KDSI的商用微机远程通信的嵌入型软件,使用中间COCOMO模型进行软件成本估算。程序的名义工作量MM=(A);程序实际工作量MM=(B);开发所用的时间TDEV=(C);如果软件开发人员的工资都按每月6000美元计算,则该软件项目的开发人员的工资总额=(D)。表1中间COCOMO模型的名义工作量与进度公式表2影响工作量的因素fi的取值A.③, B.②, C.①, D.④供选择的答案:A,B.①45.8②51.5③44.38④54.2C.①8.9月②9.8月③7.8月④10.9月D.①26.4万美元②36万美元③20.96万美元④30.9万美元11、从供选择的答案中选出与下列有关软件成本-效益分析叙述相对应的答案,将其编号填入到相应的括弧内。假设开发某个计算机应用系统的投资额为3000元,该计算机应用系统投入使用后,每年可以节约1000元,5年内可能节约5000元。3000元是现在投资的钱,5000元是5年内节省的钱,两者不能简单地比较。 假定年利率为12%,利用计算货币现在价值的公式,可以算出该计算机应用系统投入使用后每年预计节省的金额的现在价值。A.④, B.②, C.③则该系统的纯收入是(A),投资回收期是(B),投资回收率为(C)。供选择的答案:A.①512.3元②729.28元③602.4元④612.27元B.①2.4年②3.93年③4.25年④2.78元C.①25%②30%③20%④15%12从供选择的答案中选出与下列有关软件风险分析叙述相对应的正确答案,将其编号填入到相应的括弧内。在特定情况下,是否必须进行风险分析,是对项目开发的形势进行(A)后确定的。(A)可以按如下步骤进行:明确项目的目标、总策略、具体策略和为完成所标识的目标而使用的方法和资源;保证该目标是(B),项目成功的标准也是(B);考虑采用某些条目作为项目成功的(C);根据估计的结果来确定是否要进行风险分析。一般来说,风险分析的方法要依赖于特定问题的需求和有关部门所关心的方面。具体分3步进行。第一步识别潜在的风险项,首先进行(D)过程;第二步估计每个风险的大小及其出现的可能性,选择一种(E),它可以估计各种风险项的值;第三步进行风险评估。风险评估也有三个步骤:确定(F),确定(G),把风险与“参照风险”做比较。供选择的答案:A.②  B.①  C.②  D.②  E.③  F.④  G.③A.①风险管理②风险估计③风险评价④风险测试B.①可度量的②不可度量的③准确的④不确定的C.①规范②标准③过程模型④设计要求D,E.①信息分类②信息收集③度量尺度④标准⑤度量工具⑥信息获取F,G.①风险的范围②风险的特性③风险的级别④风险的评价标准⑤风险的排除策略13、从供选择的答案中选出与下列有关软件风险分析叙述相对应的正确答案,将其编号填入到相应的括弧内。风险分析实际上是4个不同的活动,按顺序依次为(A)、(B)、风险评价和(C)。在风险评价时,应当建立一个三元组:[ri,li,xi],ri是风险描述,li是(D),而xi是风险的影响。一个对风险评价很有用的技术是定义(E)。(F)、(G)、(H)是三种典型的(E)。在做风险分析的上下文环境中一个(E)就存在一个单独的点,叫做参照点或(I)。在这个点上要公正底给出判断。实际上,参照点能在图上表示成一条平滑的曲线的情况很少,多数情况它是一个(J)。供选择的答案:A.②, B.③, C.①, D.②, E.①, F.③, G.④, H.⑥, I.②, J.④A~C.①风险驾驭和监控②风险识别③风险估计④风险消除D.①风险的大小②风险的概率③风险的时间④风险的范围E.①风险参照水准②风险度量③风险监控④风险工具F~H.①生产率②功能③成本④进度⑤范围⑥性能I,J.①凹点②崩溃点③终点④区域⑤拐点⑥原点14、从供选择的答案中选出与下列有关软件进度管理叙述相对应的正确答案,将其编号填入到相应的括弧内。任何软件项目都必须做好项目管理工作,最常使用的进度管理工具是(A),当某一开发项目的进度有可能拖延时,应该(B )。对于一个典型的软件开发项目,各开发阶段需投入的工作量的百分比大致是(C)。各阶段所需不同层次的技术人员大致是(D),而管理人员在各阶段所需数量也不同,相对而言大致是(E)。供选择的答案:A.①数据流图②程序结构图③因果图④PERT图B.①增加新的开发人员②分析拖期原因加以补救③从别的小组抽调人员临时帮忙④推迟预定完成时间A.④  B.②  C.③  D.③  E.①15从供选择的答案中选出与下列有关软件进度管理叙述相对应的正确答案,将其编号填入到相应的括内。对于一个小型的软件开发项目,一个人就可以完成需求分析、设计、编码和测试工作。但随着软件项目规模增大,需要有多人共同参与同一软件项目的工作。当几个人共同承担软件开发项目中的某一任务时,人与人之间必须通过交流来解决各自承担任务之间的(A)问题,即通信问题。通信需花费时间和代价,会引起软件错误(B),(C)软件生产率。如果一个软件开发小组有n个人,每两人之间都需要通信,则共有(D)条通信路径。假设一个人单独开发软件,生产率是5000行/人年,且在每条通信路径上耗费的工作量是250行/人年。若4个人组成一个小组共同开发这个软件,则小组中每个人的软件生产率为(E)。若小组有6名成员,则小组中每个成员的软件生产率为(F)。因此,有人提出,软件开发小组的规模不能太大,人数不能太多,一般在(G)人左右为宜。A.③  B.②  C.①  D.②  E.③  F.②  G.④供选择的答案:A.①分配②管理③接口④协作B,C.①降低②增加③不变D.①n(n+1)/2②n(n-1)/2③n(n-1)(n-2)/6④n2/2E,F.①4875②4375③4625④5735G.①8~15②1~2③2~5④2~816、从供选择的答案中选出与下列有关软件进度管理叙述相对应的正确答案,将其编号填入到相应的括内。软件项目的进度管理有许多方法,但(A)不是常用的进度控制图示方法。在几种进度控制图示方法中,(B)难以表达多个子任务之间的逻辑关系,使用(C)不仅能表达子任务之间的逻辑关系,而且可以找出关键子任务。在(C)中,用带箭头的边表示(D),用圆圈结点表示(E),它标明(D)的(F)。供选择的答案::A.②  B.①  C.③  D.⑥  E.③  F.⑤A~C.①甘特图②IPO③PERT④时标网状图D~F.①数据流②控制流③事件④处理⑤起点或终点⑥任务17从供选择的答案中选出与下列有关软件项目管理叙述相对应的正确答案,将其编号填入到相应的括弧内。软件项目管理的主要职能包括:(A),建立组织,配备人员,(B)和(C)。由于软件项目的特有性质,使得项目管理存在一定困难。第一、(D ),软件工程过程充满了大量高强度的脑力劳动;第二、(E),在特定机型上,利用特定的硬件配置,由特定的系统软件和支撑软件支持,形成了特定的开发环境;第三、(F),软件项目经历的各个阶段都深透了大量的手工劳动,远未达到自动化的程度;第四、(G),用户要经过专门的培训,才能掌握操作步骤,且需要配备专职维护人员进行售后服务;第五、(H),为高质量地完成软件项目,充分发掘人员的智力才能和创造精神。在总结和分析足够数量失误的软件项目之后可知,造成软件失误的原因大多与(I)工作有关。在软件项目开始执行时,执行的过程中及项目进行的最后阶段都会遇到种种问题。供选择的答案:A.② B.④ C.⑥ D.② E.③ F.⑤ G.④ H.① I.④A~C.①编码②制定计划③开发④指导⑤测试⑥检验D~H.①软件工作渗透了人的因素②智力密集,可见性差③单件生产④使用方法繁琐,维护困难⑤劳动密集,自动化程度低I.①设计②维护③测试④管理⑤实践⑥指导⑦审核⑧分析18从供选择的答案中选出与下列有关软件项目组织叙述相对应的正确答案,将其编号填入到相应的括弧内。软件项目组织的原则是(A)、(B)和(C)。一般有(D)、(E)、(F)三种组织结构的模式。(F)实际上是(D)和(E)两种模式的复合。(E)这种模式在小组之间的联系形成的接口较多,但便于软件人员熟悉小组的工作,进而成为这方面的专家。供选择的答案:A.②  B.③  C.⑥  D.③  E.④  F.①A~C.①推迟责任的落实②尽早落实责任③减少接口④增加联系⑤责权分离⑥责权均衡D~F.①矩阵形模式②主程序员小组模式③按课题划分的模式④按职能划分的模式⑤民主制小组模式19从供选择的答案中选出与下列有关软件开发小组叙述相对应的正确答案,将其编号填入到相应的括弧内。软件开发小组的目的是发挥集体的力量进行软件研制。因此,小组从培养(A)的观点出发进行程序设计消除软件的(B)的性质。通常,程序设计小组的组织形式有三种,如下图所示的a属于(C),b属于(D),c属于(E)。A.②  B.④  C.③  D.②  E.①供选择的答案:A,B.①“局部”②“全局”③“集体”④“个人”C~E.①层次式小组②民主制小组③主程序员制小组需求分析一、填空1、在软件需求分析阶段,分析人员要确定对软件的综合要求,其中最重要的是功能要求。2、需求分析阶段产生的最主要的文档是需求规格说明书。3、解决一个复杂的问题,往往采取的策略是分解。4、可行性研究的目的是用最小的代价,在尽可能短的时间内,确定该软件项目是否能够开发。5、可行性研究实质上是进行一项简化、压缩了的需求分析、设计过程。6、可以从4个方面研究可行性,即技术可行性、经济可行性、社会可行性、()可行性。 7、结构化分析方法从三个方面建模:数据建模、功能建模、行为建模。 8、实体―关系图用于数据建模,它最初用于数据库设计。 9、数据流图中的每一个加工至少有一个输入数据流和一个输出数据流。 10、状态―迁移图用于行为建模,状态中包含活动,状态因事件发生转移。  11、数据词典中有四类条目,分别为数据流、加工、数据存储、外部实体。 二、单项选择1、软件需求分析阶段的工作可以划分以下四个方面:对问题的识别、分析与综合、制定需求规格说明和C。A.总结B.阶段性报告C.需求分析评审D.以上答案都不正确2、各种需求分析方法都有它们共同适用的D。A.说明方法B.描述方法C.准则D.基本原则3、软件需求分析应从问题的信息域和功能域出发。信息域应包括信息流、信息内容和C。A.信息项B.数据结构C.信息结构D.信息内容4、需求分析产生的文档是C。A.项目开发计划B.可行性分析报告C.需求规格说明书D.软件设计说明书5、需求分析中,分析人员要从用户那里解决的最重要的问题是A。A.要让软件做什么B.要给该软件提供什么信息C.要求软件工作效率如何D.要让该软件具有何种结构6、可行性研究的目的是B。A.开发项目B.项目值得开发否C.规划项目D.维护项目7、技术可行性要解决D。A.存在侵权否B.成本效益问题C.运行方式可行D.技术风险问题8、研究开发资源的有效性属于A可行性的一部分。A.技术B.经济C.社会D.操作9、在可行性研究过程中,对每一个合理的候选方案,分析人员都应准备如下资料D。A.系统流程B.组成系统的物理元素清单、成本―效益分析C.实现该系统的进度计划D.以上全部10、软件需求分析的任务不应包括C。A.问题分析B.信息域分析C.结构化程序设计D.确定逻辑模型11、结构化语言、判定表和判定树属于A规格说明的描述工具。A.加工B.控制C.数据描述D.脚本12、加工激活表属于B规格说明的描述工具。A.加工B.控制C.数据描述D.脚本13、基数和参与性属于C图的描述工具。A.控制流B.数据流C.实体―关系D.状态―迁移14、分层数据流图是一种比较严格又易于理解的描述方式,它的顶层数据流图描述了系统的B。A.细节B.输入与输出C.软件的作者D.绘制的时间15、对于分层的数据流图,父图与子图的平衡是指子图的输入、输出数据流同父图的输入、输出数据流A。A.必须一致B.数目必须相等C.名字必须相同D.数目必须不等16、在数据流图的基本图形符号中,加工是以信息结构或B作为加工对象的。A.数据结构B.信息内容C.信息流D.数据内容17、一个局部数据存储当它作为D时就把它画出来。A.某些加工的数据接口B.某个加工的特定输入C.某个加工的特定输出D.某些加工的数据接口或某个加工的特定输入/输出18、软件需求规格说明书的内容不应包括对B的描述。A.主要功能B.算法的详细过程C.用户界面及运行环境D.软件的性能19、需求规格说明书的作用不应包括B。A.软件设计的依据B.软件可行性研究的依据C.软件验收的依据D.用户和开发人员对软件要做什么的共同理解20、快速原型化思想是在研究D阶段的方法技术中产生的。 A.可行性研究B.软件设计C.程序编码D.需求分析21、用于整个开发阶段,及早提供一个原型系统的是D原型。A.实验型B.探索型C.提交型D.演化型22、用于软件设计阶段,考察实现方案是否可行的是C原型。A.探索型B.演化型C.实验型D.增量型三、选择填空1、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括弧内。软件需求分析的任务不应包括( A )。进行需求分析可使用多种工具,但( B )是不适用的。在需求分析中,分析员要从用户那里解决的最重要的问题是( C )。需求规格说明书的内容不应当包括( D )。该文档在软件开发中具有重要的作用,但其作用不应当包括( E )。供选择的答案:A.③,B.③,C.①,D.②,E.④A.①问题分析 ②信息域分析 ③结构化程序设计 ④确定逻辑模型B.①数据流图 ②判定表 ③PAD图④数据词典C.①要让软件做什么②要给该软件提供哪些信息③要求软件工作效率如何 ④要让软件具有什么样的结构D.①对重要功能的描述 ②对算法的详细过程性描述③软件确认准则 ④软件的性能E.①软件设计的依据 ②用户和开发人员对软件要“做什么”的共同理解③软件验收的依据 ④软件可行性分析的依据2、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括弧内。当前系统的(A)模型描述现行系统的实际业务处理过程,反映了现行系统具体(B )的现实。当前系统的( C )模型描述现行系统的功能结构、数据组织以及动态行为,反映了现行系统( D )的本质。 目标系统是指待开发的新系统。根据计算机系统的特点,分析、比较目标系统和当前系统逻辑上的差别,确定目标系统的软件工作范围,采用自顶向下逐步分解的分析策略,确定目标系统的功能结构、数据组织以及动态行为,从而建立起目标系统的( E )模型。供选择的答案:A.②,B.①,C.⑤,D.③,E.⑤A,C,E:①对象②物理③服务④过程⑤逻辑B,D:①怎么做②何时做③做什么④为何做⑤谁来做3、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括弧内。 结构化分析模型从多视角来描述系统。在分析模型的核心是( A ),它描述了所有在目标系统中使用和生成的数据对象。围绕着这个核心有三种图:( B )、( C )和( D )。( B )描述数据对象及其关系,用于建立数据模型;( C )描述数据在系统中如何被传递和变换,用于建立功能模型,同时还需要给出加工规格说明;( D )描述系统对外部事件如何响应,用于建立行为模型,同时还需要给出控制规格说明。 Petri网主要用于描述相互独立,协同操作的处理系统,即( E )的处理系统。【供选择的答案】A.②,B.⑧,C.④,D.③,E.①A~D:①对象图 ②数据词典 ③状态迁移图 ④数据流程图⑤时序图⑥事件追踪图 ⑦控制流程图 ⑧实体关系图⑨仿真图⑩行为图E:①并发执行 ②事件驱动 ③时钟驱动 ④随机执行⑤顺序执行4、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括弧内。 软件需求分析方法必须能够理解和表达问题领域的信息域和功能域。信息域包括(A)、(B)和(C)。( A )表示数据和控制在系统中传递时的变化方式。输入对象首先被变换成数据和控制的( D )信息,然后再变换成输出结果信息。( B )表示信息在计算机中的组织形式。各种数据和控制对象按什么逻辑关系组织在一起,又按什么物理关系存储在计算机中,必须靠( B )分析来解决。( C )可以利用数据词典明确地表示,也可以通过数据或数据对象的层次结构隐含地表示。对数据进行变换就是程序所表现的功能。两个功能之间的数据传递确定了功能之间的( E )。【供选择的答案】A.⑦,B.②,C.⑥,D.③,E.② A~C:①信息属性 ②信息结构 ③信息服务 ④信息通信 ⑤信息抽象⑥信息内容 ⑦信息流 ⑧信息层次⑨信息项 ⑩信息行为D~E:①连接 ②接口 ③中间 ④通讯⑤联系5、从供选择的答案中选出与下列有关软件需求分析叙述相对应的正确答案,将其编号填入到相应的括弧内。 原型化方法是用户和软件开发人员之间进行的一种交互过程,适用于( A )系统。它从用户界面的开发入手,首先形成( B ),用户( C ),并就( D )提出意见,它是一种( E )型的设计过程。供选择的答案:A.①B.③C.④D.①E.①A. ①需求不确定性高的 ②需求确定的 ③管理信息  ④决策支持B. ①用户界面使用手册 ②用户界面需求分析说明书③系统界面原型 ④完善的用户界面C. ①改进用户界面的设计②阅读文档资料③模拟用户界面的运行 ④运行用户界面原型D.①同意什么和不同意什么 ②使用和不使用哪一种编程语言③程序的结构 ④执行速度是否满足要求E.①自外向内  ②自顶向下  ③自内向外  ④自底向上四、问答题1、在软件需求分析时,首先建立当前系统的物理模型,再根据物理模型建立当前系统的逻辑模型。试问:什么是当前系统?当前系统的物理模型与逻辑模型有什么差别?答:所谓当前系统可能是需要改进的某个已在计算机上运行的数据处理系统,也可能是一个人工的数据处理过程。当前系统的物理模型客观地反映当前系统实际的工作情况。但在物理模型中有许多物理的因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的和非本质的因素,去掉那些非本质的因素即可获得反映系统本质的逻辑模型。所以当前系统的逻辑模型是从当前系统的物理模型抽象出来的。2、软件需求分析是软件工程过程中交换意见最频繁的步骤。为什么交换意见的途径会经常阻塞?答:软件需求分析过程中,由于最初分析员对要解决的问题了解很少,用户对问题的描述、对目标软件的要求也很凌乱、模糊,再加上分析员和用户共同的知识领域不多,导致相互间通信的需求。首先,由于分析员和用户之间需要通信的内容相当多,业务知识上的不足,表达方式的不足,可能对某些需求存在错误解释或误解的可能性,造成需求的模糊性。其次,用户和分析员之间经常存在无意识的“我们和他们”的界限,不是按工作需要组成统一的精干的队伍,而是各自定义自己的“版图”,并通过一系列备忘录、正式的意见书、文档,以及提问和回答来相互通信。历史已经证明,这样会产生大量误解。忽略重要信息,无法建立成功的工作关系。3、你认为一个系统分析员的理想训练和基础知识是什么?请说明理由。答:系统分析员处在用户和高级程序员之间,负责沟通用户和开发人员的认识和见解,起着桥梁的作用。一方面要协助用户对所开发的软件阐明要求,另一方面还要与高级程序员交换意见,探讨用户所提要求的合理性以及实现的可能性。最后还要负责编写软件需求规格说明和初步的用户手册。为能胜任上述任务,分析员应当具备如下的素质:(1)能够熟练地掌握计算机硬、软件的专业知识,具有一定的系统开发经验。(2)善于进行抽象的思维和创造性的思维,善于把握抽象的概念,并把它们重新整 理成为各种逻辑成分,并给出简明、清晰的描述。(3)善于从相互冲突或混淆的原始资料中抽出恰当的条目来。(4)善于进行调查研究,能够很快学习用户的专业领域知识,理解用户的环境条件。(5)能够倾听他人的意见,注意发挥其它人员的作用。(6)具有良好的书面和口头交流表达能力。4、可行性研究主要研究哪些问题?试说明之。答:可行性研究主要做4个方面的研究:经济可行性:进行成本效益分析。从经济角度判断系统开发是否“合算”。技术可行性:进行技术风险评价。从开发者的技术实力、以往工作基础、问题的复杂性等出发,判断系统开发在时间、费用等限制条件下成功的可能性。法律可行性:确定系统开发可能导致的任何侵权、妨碍和责任。方案的选择:评价系统或产品开发的几个可能的候选方案。最后给出结论意见。5、信息和信息结构有什么区别?有没有不存在信息流的系统?有没有不存在信息结构的系统?答:什么是信息?广义地讲,信息就是消息。宇宙三要素(物质、能量、信息)之一。它是现实世界各种事物在人们头脑中的反映。此外,人们通过科学仪器能够认识到的也是信息。信息的特征为:可识别、可存储、可变换、可处理、可传递、可再生、可压缩、可利用、可共享。我们通常讲的信息域就是对信息的多视角考虑。信息域包含3个不同的视图:信息内容和关系、信息流和信息结构。为了完全理解信息域,必须了解每一个视图。 信息结构:它是信息在计算机中的组织形式。一般表示了各种数据和控制对象的内部组织。数据和控制对象是被组织成n维表格,还是组织成有层次的树型结构?在结构中信息与其它哪些信息相关?所有信息是在一个信息结构中,还是在几个信息结构中?一个结构中的信息与其它结构中的信息如何联系?这些问题都由信息结构的分析来解决。 信息流:表示数据和控制在系统中传递时的变化方式。输入对象首先被变换成中间信息(数据或控制),然后再变换成输出结果信息。沿着变换路径,可能从已有的数据存储(如磁盘文件或内存缓冲区)中引入附加的信息。对数据进行变换是程序中应有的功能或子功能。两个变换功能之间的数据传递就确定了功能间的接口。 所以,没有信息流的系统相当于没有功能的系统,这样的系统的存在是毫无意义的。而没有信息结构的系统是没有信息的系统,这样的系统不是计算机能够处理的系统。6、软件需求分析的操作性原则和需求工程的指导性原则是什么?答:所有的需求分析方法都与一组操作性原则相关联:· 必须理解和表示问题的信息域。· 必须定义软件将完成的功能。· 必须表示软件的行为(作为外部事件的结果)。· 必须对描述信息、功能和行为的模型进行分解,能够以层次方式揭示其细节。· 分析过程应当从要素信息转向细节的实现。 通过使用这些原则,分析员可以系统地处理问题。首先检查信息域以便更完整地理解目标软件的功能,再使用模型以简洁的方式表达目标软件的功能和行为,并利用自顶向下、逐层分解的手段来降低问题的复杂性。在这些处理过程中,因处理需求带来的逻辑约束和因其它系统元素带来的物理约束需要通过软件要素和视图的实现加以检验和确认。 除此以外,Davis建议了一组针对“需求工程”的指导性原则:· 在开始建立分析模型之前应当先理解问题。如果问题没有很好理解就急于求成,常常会产生一个解决错误问题的完美的软件。· 强力推荐使用原型。这样做可以使用户了解将如何与计算机交互,而人们对软件质量的认识常常是基于对界面“友好性”的切身体会。 · 记录每一个需求的起源和原因。这是建立对用户要求的可追溯性的第一步。· 使用多个视图,建立系统的数据、功能和行为模型。这样做可帮助分析员从多方面分析和理解问题,减少遗漏,识别可能的不一致之处。· 给需求赋予优先级。因为过短的时限会减少实现所有软件需求的可能性。因此,对需求排定一个优先次序,标识哪些需求先实现,哪些需求后实现。· 注意消除歧义性。因为大多数需求都是以自然语言描述,存在叙述的歧义性问题,造成遗漏和误解。采用正式的技术评审是发现和消除歧义性的好方法。 遵循以上原则,就可能开发出较好的软件需求规格说明,为软件设计奠定基础。7、数据流图的作用是什么?它有哪些基本成份?答:数据流图可以用来抽象地表示系统或软件。它从信息传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程,同时可以按自顶向下、逐步分解的方法表示内容不断增加的数据流和功能细节。因此,数据流图既提供了功能建模的机制,也提供了信息流建模的机制,从而可以建立起系统或软件的功能模型。数据流图的基本成份有4种:8、考务处理系统的分层数据流图如下图所示。 该考务处理系统有如下功能:①对考生送来的报名表进行检查;②对合格的报名表编好准考证号码后将准考证送给考生,并将汇总后的考生名单送给阅卷站;③对阅卷站送来的成绩表进行检查,并根据考试中心指定的合格标准审定合格者;④填写考生通知单(内容包含考试成绩及合格不合格标志),送给考生;⑤按地区、年龄、文化程度、职业、考试级别等进行成绩分类统计及试题难度分析,产生统计分析表。(1)图(c)中,加工1.1的输入数据流是(A),输出数据流是(B),图(b)中,加工2的输出数据流是(C),它是由(D)和(E)组成。供选择的答案:答:A.②B.⑤C.①D.⑥E.⑧F.②其中,D与E的答案可互换。A~E.①统计分析表②报名表③准考证④考生通知单   ⑤合格报名表⑥难度分析表⑦错误成绩表⑧分类统计表(2)图(d)中的文件“试题得分表”是否在图(b)中漏掉了?回答是(F)。供选择的答案:F.“①试题得分表”没有在图(b)中画出,是错误的。“ ②试题得分表”是图(b)中加工的内部文件,不必在图(b)中画出。“ ③试题得分表”是多余的。  应注意的问题: ①适当地为数据流、加工、文件、数据的源汇点命名。名字应反映该元素的实际含义,避免空洞的名字。如数据、信息处理、计算等名字都不好。 ②画数据流时不要夹带控制流。数据流图中各种数据的加工没有考虑时序关系,引入控制流后,加工之间就有了时序关系,这与画数据流图不考虑实现细节的初衷相违背。 ③一个加工的输出数据流不要与该加工的输入数据流重名,即使它们的组成成分相同。例如图(c)中加工1.1的输入数据流“报名表”与输出数据流“合格报名表”。 ④允许一个加工有多个数据流流向另一个加工,也允许一个加工有两个相同的输出数据流流向两个不同的加工。 ⑤ 保持父图与子图的平衡。就是说,父图与它的子图的输入数据流与输出数据流应当在数量与名字上都相同。特别的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,但子图中这几个数据流中的数据项合起来正好是父图中的那个数据流,这时它们还算是平衡的。例如,图(b)中加工2的输出数据流“统计分析表”是由“难度分析表”和“分类统计表”组成,那么图(b)与图(d)仍满足父图与子图平衡的条件。 ⑥在自顶向下的分解过程中,若一个文件首次出现时只与一个加工有关,那么这个文件应作为这个加工的内部文件而不必画出。例如,图(d)中的文件“试题得分表”就是图(b)中加工的内部文件,所以在图(b)中没有画出。 ⑦保持数据守恒。就是说,一个加工的所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者是通过该加工产生的数据。9、Petri网可以描述计算机软件系统的执行。现有一个程序如下(类似于Pascal语言)L:S1;WHILEP1DOBEGINIFP2THENS2ELSES3;COBEGINS4;S5;S6;COENDEND;GOTOL;S6是单个执行语句,COBEGIN和COEND是并行执行开始和并行执行结束(即S4,S5和S6语句并行执行)。试用Petri网描述这段程序的执行过程。  其中,P1和P2为逻辑表达式,S1答:采用条件事件网(CE网,C―Condition,E―Event)式Petri网。其定义如下: ①当事件e激发时条件c开始成立,则称c是e的后继。此关系用“”表示; ②当事件e激发时条件c消失成立,则称c是e的前驱。此关系用“”表示; ③当事件e激发时条件c不受影响,则c和e之间没有前驱、后继关系,无边。根据定义,给定程序的CE网如下: 10、数据词典的作用是什么?它有哪些基本词条?答:分析模型中包含了对数据对象、功能和控制的表示。在每一种表示中,数据对象和控制项都扮演一定的角色。为表示每个数据对象和控制项的特性,建立了数据词典。数据词典精确地、严格地定义了每一个与系统相关的数据元素,并以字典式顺序将它们组织起来,使得用户和分析员对所有的输入、输出、存储成分和中间计算有共同的理解。在数据词典的每一个词条中应包含以下信息: ①名称:数据对象或控制项、数据存储或外部实体的名字。 ②别名或编号。 ③分类:数据对象?加工?数据流?数据文件?外部实体?控制项(事件状态)? ④描述:描述内容或数据结构等。 ⑤何处使用:使用该词条(数据或控制项)的加工。11、传统的软件开发模型的缺陷是什么?原型化方法的类型有哪些?原型开发模型的主要优点是什么?答:传统软件生存期范型的典型代表是“瀑布模型”。这种模型的核心是将软件生存期划分为软件计划、需求分析、软件设计、编码、测试和运行维护等阶段,根据不同阶段工作的特点,运用不同的方法、技术和工具来完成该阶段的任务。软件开发人员遵循严格的规范,在每一阶段工作结束时都要进行严格的阶段评审和确认,以得到该阶段的一致、完整、正确和无歧义性的文档资料,并以它们做为下一阶段工作的基础。传统思想强调每一阶段的严格性,尤其是开发初期要有良好的软件规格说明,主要是源于过去软件开发的经验教训,即在开发的后期或运行维护期间来修改不完善的规格说明要付出巨大的代价。但是,要想得到一个完整准确的规格说明不是一件容易的事。特别是对于一些大型的软件项目,在开发的早期用户往往对系统只有一个模糊的想法,很难完全准确地表达对系统的全面要求,软件开发人员对于所要解决的应用问题认识更是模糊不清。经过详细的讨论和分析,也许能得到一份较好的规格说明,但却很难期望该规格说明能将系统的各个方面都描述得完整、准确、一致,并与实际环境相符。很难通过它在逻辑上推断出(不是在实际运行中判断评价)系统运行的效果,以此达到各方对系统的共同理解。随着开发工作向前推进,用户可能会产生新的要求,或因环境变化,要求系统也能随之变化;开发人员又可能在设计与实现的过程中遇到一些没有预料到的实际困难,需要以改变需求来解脱困境。因此规格说明难以完善、需求的变更、以及通信中的模糊和误解,都会成为软件开发顺利推进的障碍。尽管在传统软件生存期管理中通过加强评审和确认,全面测试,甚至依靠维护阶段能够缓解上述问题,但不能从根本上解决这些问题。 为了解决这些问题,逐渐形成了软件系统的快速原型的概念。由于运用原型的目的和方式不同,原型可分为以下两种不同的类型: ①废弃型:先构造一个功能简单而且质量要求不高的模型系统,针对这个模型系统反复进行分析修改,形成比较好的设计思想,据此设计出更加完整、准确、一致、可靠的最终系统。系统构造完成后,原来的模型系统就被废弃不用。 ②追加型或演化型:先构造一个功能简单而且质量要求不高的模型系统,作为最终系统的核心,然后通过不断地扩充修改,逐步追加新要求,最后发展成为最终系统。建立快速原型进行系统的分析和构造,有以下的优点: ①增进软件者和用户对系统服务需求的理解,使比较含糊的具有不确定性的软件需求(主要是功能)明确化。由于这种方法能在早期就明确了用户的要求,因此可防止以后由于不能满足用户要求而造成的返工,从而避免了不必要的经济损失,缩短了开发周期。 ② 软件原型化方法提供了一种有力的学习手段。通过原型演示,用户可以亲身体验早期的开发过程,获得关于计算机和被开发系统的专门知识。软件开发人员也可以获得用户对系统的确切要求,学习到应用范围的专业知识。 ③使用原型化方法,可以容易地确定系统的性能,确认各项主要系统服务的可应用性,确认系统设计的可行性,确认系统作为产品的结果。因而它可以作为理解和确认软件需求规格说明的工具。 ④软件原型的最终版本,有的可以原封不动地成为产品,有的略加修改就可以成为最终系统的一个组成部分,这样有利于建成最终系统。12、试简述原型开发的过程和运用原型化方法的软件开发过程。答:原型的开发和使用过程叫做原型生存期。下图是原型生存期的模型及其细化。 ①快速分析:在分析者和用户的紧密配合下,快速确定软件系统的基本要求。 ②构造原型:根据基本规格说明,尽快实现一个可运行的原型系统。③运行和评价原型:用户试用原型,考核评价原型的特性。纠正过去交互中的误解和分析中的错误,增补新的要求,提出全面的修改意见。 ④修正和改进:根据修改意见进行修改。如果用修改原型的过程代替快速分析,就形成了原型开发的迭代过程。在一次次的迭代过程中不断将原型完善,以接近系统的最终要求。 ⑤判定原型完成:经过修改或改进的原型,达到参与者一致认可,则原型开发的迭代过程可以结束。为此,应判断有关应用的实质是否已经掌握,判定的结果有两个不同的转向,一是继续迭代验证,一是进行详细说明。 ⑥判断原型细部是否说明:判断组成原型的细部是否需要严格地加以说明。 ⑦原型细部的说明:通过文件加以说明那些不能通过原型说明的项目。 ⑧判定原型效果:考察新加入的需求信息和细部说明信息,看其对模型有什么影响?是否会影响模块的有效性?如果模型受到影响,则要进行修正和改进。 ⑨整理原型和提供文档  快速原型方法的提出使得传统的软件生存期在思想方法上受到了影响。如果只是在局部运用原型化方法,若将原型开发过程用于软件生存期的某一个阶段内,那么传统的软件生存期依然不变,只是阶段内部的软件定义或开发活动采用了新的方法。但若原型开发过程代替了传统生存期中的多个阶段,则软件开发过程就成为一种新的形式。 图(a)表示了使用原型方法的软件生存期模型。原型开发过程处于核心,表示可在生存期的任何阶段中引入原型开发过程,也可合并若干阶段,用原型开发过程代替。图(b)详细描述了在各个阶段可能引入原型开发过程的软件开发过程。其中在原型开发过程的最后加上了一个“是否构造新原型”的判断,这是针对在系统开发的过程中有可能为不同的目的而要使用多个原型的情况而设。 ①辅助或代替分析阶段:在分析阶段利用快速原型方法可以得到良好的需求规格说明。在整体上仍然采用传统的模式,但使用原型化方法来补充和完善需求说明以达到一致、准确、完整、无多义性地反映用户要求,从而代替了传统的仅由复审和确认来提高需求规格说明质量的方法。并能在早期克服潜在的误解、遗漏和错误,尽量不让潜在的问题遗留到开发的后期,减少将来维护的代价。②辅助设计阶段:在设计阶段引入原型,可根据需求分析得到的规格说明进行快速分析,得到实现方案后立即构造原型,通过运行,考察设计方案的可行性与合理性。在这个阶段引入原型,可以迅速得到完善的设计规格说明。原型可能成为设计的总体框架,也可能成为最终设计的一部分或补充的设计文档。 ③代替分析与设计阶段:这时不再遵循传统的严格按阶段进行软件开发的要求,而是把原型方法直接应用到软件开发的整体过程。在实施原型开发的过程中,不再考虑完善的需求说明,把分析、定义和设计交织在一起,通过原型的构造、评价与改进的迭代过程,逐步向最终系统的全面要求靠近。由于在分析的同时也考虑了设计与实现的要求,能更有效地确定系统的需求和设计规格说明。 ④代替分析、设计和实现阶段:在软件开发环境的支持下,通过原型生存期的反复迭代,直接得到软件的程序,交付系统测试。这属于进化型的原型开发,由初始的基本需求得到最初的原型开始,一直进化到软件的整体系统,并满足用户的一切可能的要求。 ⑤代替全部定义与开发阶段:这是典型的进化型原型开发方法。完全摆脱了传统的软件生存期模式,通过反复的原型迭代过程,直接得到最终的软件产品。系统测试作为原型评价工作的一部分,融入原型的开发过程。13、软件需求分析说明书主要包括哪些内容?答:软件需求规格说明是分析任务的最终产物,通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计约束的说明、合适的验收标准,给出对目标软件的各种需求。软件需求规格说明的框架如下:14、阅读下列关于开发人事管理系统的交互式工作方式的叙述,再回答问题。  某大企业最近决定采用高性能微机开发人事管理系统,将四台联机终端分置于人事处的三个科室。该系统可供操作员和程序员使用,也可供人事处负责人和主管人事的副厂长等查询人事信息用。人事管理系统通过录入人事数据和修改、删除等操作,产生和更新各类人事文件,通过搜索这些文件进行各类人事信息的查询。 该企业有3000多个工人、干部和技术人员,大体可分成机关科室、生产车间、后勤服务和开发研制部门等几类部门。厂领导决定由计算机应用科来负责协调和开发应用系统。计算机应用科科长指示系统工程师张某负责进行系统分析。 考虑到人事处有大量的查询信息要求、频繁的人事信息修改和文件存档、查阅等特点,计算机应用科决定认真设计人机交互界面,首先设计好在终端上的交互式会话的方式。系统工程师张某通过调查收集到如下10条意见:(1) 某程序员认为:系统在屏幕格式、编码等方面应具有一致性和清晰性,否则会影响操作人员的工作效率。(2) 某操作人员认为:在交互式会话过程中,操作人员可能会忘记或记错某些事情,系统应当提供HELP功能。(3) 某操作人员认为:既然是交互式会话,那么对所有的输入都应当作出响应,不应出现击键后,计算机没有任何反应的情况。(4) 某操作人员认为:在出错的时候,交互式会话系统应当给出出错信息,并且尽可能告诉我们出错的性质和错在什么地方。(5)某程序员认为:终端会话也应当符合程序员编制程序时的习惯,这样可以更高效地维护人事管理系统。(6) 教育科干部甲认为:应当对操作员进行一些必要的培训,让他们掌握交互式会话系统的设计技巧,有助于提高系统的使用效率。(7) 教育科干部乙认为:尽管操作人员的指法已经强化训练但在交互式会话时应尽可能缩短和减少操作员输入的信息,以降低出错概率。(8) 某程序员认为:由于本企业中有很多较大的文件,文件的查找很费时间,交互式会话系统在响应时间较长时应给予使用者以提示信息。(9) 人事处干部丙认为:我们企业的人事资料相当复杂,格式非常之多,希望交互式系统使用十分清晰的格式,并容易对输入数据中的错误进行修改。(10) 人事处干部丁认为:人事管理系统应当具有相当的保密性和数据安全性,因此在屏幕上显示出的信息应该含混一些,以免泄密。系统工程师张某对上述调查情况和其他要求作了分析后,发现收集到的10条意见中有3条意见是不能接受的,写出编号并各用40字以内叙述理由。答:不能接受的3条意见是(5)、(6)、(10)。人机交互界面首先考虑的是用户如何使用起来方便,与编程习惯、设计技巧无关。此外,屏幕上信息应很清晰易懂,安全保密与屏幕显示无关。面向对象一、填空题1、面向对象的特征是对象唯一性、分类性、继承性和多态性。2、面向对象有三个基本要素,它们是抽象、封装性和共享性。3、类具有属性,它是对象状态的抽象,用数据结构来描述类的属性。4、类具有操作,它是对象行为的抽象,用操作名和操作方法实现来描述。5、在类层次中,子类只继承一个父类的属性和方法,则称为单继承。子类继承了多个父类的属性和方法,则称为多继承。6、OMT方法是RumBaugh等人提出的面向对象开发方法。开发工作的基础是对现实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计。 7、Coad和Yourdon方法完成了从需求角度出发的对象和分类结构认定工作,面向对象设计可以在此基础上,从设计的角度进一步进行类和类层次结构的认定。8、Booch方法通过分析问题陈述正文,将其中的名词映射为对象,将其中的动词映射为方法,从而为对象和方法的认定提供了一种简单的策略,虽然Booch方法原是面向Ada的语言,但仍处于面向对象开发方法的奠基性地位。9、UML不仅统一了Booch方法、OMT方法、OOSE方法的表示方法,而且对其作了进一步的发展,最终成为为国际对象组织(OMG)认可的同一建模语言。10、在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般化—特殊化关系和整体-部分关系。11、在面向对象设计中存在三种内聚,即操作内聚、类内聚和一般化-特殊化内聚。二、单选填空题1、对象是面向对象开发方法的基本成分,每个对象可用它本身的一组C和它可以执行的一组操作来定义。A.服务B.参数C.属性D.调用2、在面向对象方法中,把一组具有相同数据结构和相同操作的对象的集合定义为B。此定义包括一组数据属性和在数据上的一组合法操作。A.聚合B.类C.结构D.主题3、面向对象技术的许多强有力的功能和突出的优点都来源于把系统组织成一个类的层次结构。一个类的上层可以有父类,下层可以有子类。这种系统的类层次结构的一个重要性质是D,通过它,一个类可共享其父类的全部数据和操作。A.传递性B.复用性C.并行性D.继承性4、一个面向对象软件的体系结构通过它的成分对象及各对象之间的关系来确定,与传统的结构化开发方法相比,它具有A的优点。A.设计稳定B.性能稳定C.模块独立D.硬件独立5、封装性是指所有软件部件都有明确的范围以及清楚的外部边界。每个软件部件都有友好的B,软件部件的内部实现和外部使用分离。A.使用方式B.界面C.调用D.继承6、属性指的是类中对象具有的特性(数据)。不同对象的同一属性可具有相同的或不同的A。A.属性值B.操作C.服务D.控制7、操作是类中对象所使用的一种功能或变换。类中的各个对象可以共享操作,方法是类中操作的B。A.别名B.实现步骤C.功能D.脚本8、A应当在应用分析之前进行,因为我们在了解问题之前应对问题敞开思想考虑,不应加以限制。A.论域分析B.高层设计C.实例建立D.类的开发9、应用程序可以通过执行对象的操作来改变对象的属性值,但它必须通过C的传递。A.接口B.控制C.消息D.实例10、在软件开发过程中,抽取和整理用户要求并建立问题论域精确模型的过程叫做D。A.生存期B.面向对象分析C.面向对象程序设计D.面向对象设计11、Rumbaugh等人提出的对象模型化技术OMT把分析时收集到的信息组织在三种模型中,即对象模型、动态模型和C。A.信息模型B.控制模型C.功能模型D.行为模型12、对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构。它是从现实世界实体的相互关系的角度来描述、表现对象间的相互关系。该模型主要关心系统中对象的结构、属性和操作,使用了B的工具来刻划。A.E-R图B.对象图C.系统流程图D.系统结构图13、组装关系是一种“整体-部分” 关系。在这种关系中,有整体类和部分类之分。组装关系中最重要的性质是D,它还具有逆对称性。A.局部性B.完整性C.一致性D.传递性14、分类关系是“一般化-特殊化”关系。一般化类又称为父类,特殊化类又称为子类。分类关系和C是同时存在的。A.传递性B.逐步求精C.继承性D.全局性15、继承有单继承和多继承。单继承指的是子类只有一个父类,在一个类层次结构中若只有单继承,则该类层次结构是树形结构。多继承指的是子类可以有多个父类,在一个类层次结构中若有多继承,则该类层次结构是C层次结构。A.树形B.星形C.网状D.环形16、动态模型描述与时间和变化有关的系统的性质。该模型描述了系统的控制结构,表示了瞬时的行为化的系统控制性质,它关心的是系统的控制、操作的执行顺序。它从系统涉及的事件和对象的A出发,表现了对象及对象间的相互行为。A.状态B.属性C.操作D.控制17、动态模型描述的系统属性是触发事件、事件序列、状态、事件和状态的组织。使用A作为描述工具。A.状态图B.顺序图C.活动图D.进程图18、功能模型用来说明值是如何计算的,表明值之间的依赖关系及其相关的功能。数据流图有助于表示功能依赖关系,其中的处理对应于状态图中的活动和动作,数据流对应于对象图中的B。A.实例连接B.对象或属性C.消息传递D.关联19、操作与对象模型中的属性和关联的查询有关,与动态模型中的A有关,与功能模型中的加工有关。A.事件B.状态C.变换D.处理20、面向对象设计阶段中的高层设计是要确定实现系统的策略和目标系统的A。A.体系结构B.算法设计C.类结构D.类设计21、面向对象设计阶段中的类设计是要确定实现方案中的类、关联和接口形式及实现操作的D。A.逻辑B.顺序C.控制D.算法22、状态是对象属性值的抽象,状态指明了对象对A的响应。A.输入事件B.输入信息C.输入数据D.输入序列23、活动是一种有时间间隔的操作,它是依附于状态的操作。动作是一种瞬时操作,它是与B联系在一起的操作。A.时间B.事件C.控制D.状态24、事件可以看成是信息从一个对象到另一个对象的单向传送。因此要确定各事件的发送对象和接收对象。A用来表示事件、事件的接收对象和发送对象。A.事件追踪图B.进程图C.脚本D.状态序列图三、选择填空题2、从供选择的答案中选出与下面有关面向对象范型的叙述最适合的答案,将其编号填入相应的括号内。对象是面向对象范型的(A)。每个对象可用它自己的一组(B)和它可以执行的一组(C)来表征。应用执行对象的(C)可以改变该对象的(B)。它的应用必须通过(D)的传递。可以认为,这种(D)的传递大致等价于过程性范型中的函数调用。某些语言提供了特殊功能,允许对象引用自己。若一个对象没有显式地被引用,则可让该对象(E)。供选择的答案:A①B⑤C.③D.②E.③A.①基本单位②最小单位③最大单位④语法单位B~C.①行为②功能③操作④数据⑤属性D.①接口②消息③信息④操作⑤过程E.①撤消②歇着③缺省④隐式引用⑤引用自己3、从供选择的答案中选出与下面有关面向对象开发过程的叙述最适合的答案,将其编号填入相应的括号内。在面向对象软件开发过程中特别重视复用。软件构件应独立于当初开发它们的应用而存在。在以后的应用开发中,可以调整这些独立构件以适应新问题的需要。因此,应使得类成为一个(A )的单元。这样就有一个(B)生存期问题。(B)生存期有自己的步骤,与任一特定应用的开发(C)。按照这些步骤,可以完整地描述一个基本(D)。而不仅仅考虑当前正在开发的系统。系统开发的各个阶段都可能会标识新的类。随着各个新类的标识,(B)生存期引导开发工作逐个阶段循序渐进。在设计与实现类时,应尽可能利用既存类提供为当前应用所需要的功能,利用既存类的三个可能途径是:(E)复用既存类;对既存类进行(F)以得到满足要求的类;重新开始进行开发。供选择的答案:A.①,B.③,C.④,D.②,E.③,F.④A.①可复用②可测试③可适用④可靠B.①应用②寿命③类④软件C.①相关②密切相关③负相关④无关D.①概念②实体③事件④事情E,F.①修改②更新③照原样④演化7、从供选择的答案中选出与下面的叙述最适合的答案,将其编号填入相应的括号内。从分析到设计的过程流如图所示。一旦已经开发完成一个合理完整的(A)模型后,就要着手(B)的设计。这需要描述(B)的特征,以准确表达待实现的用户需求,以及实现需求所必须的支持环境。一旦定义了各个(B),就开始(C)设计,这时,可利用CRC卡片,将属性转换为(D),将关系转换为(E)。供选择的答案:A.①,B.④,C.⑤,D.②,E.④A~C.①分析②系统设计③模块设计④子系统设计⑤对象设计⑥数据设计⑦操作设计⑧行为设计D~E.①对象②数据结构③算法④消息传递⑤控制⑥并发处理⑦进程⑧过程8、从供选择的答案中选出与下面有关面向对象分析的叙述最适合的答案,将其编号填入相应的括号内。由RumBaugh等人提出的一种面向对象方法叫做对象模型化技术(OMT),即三视点技术,它要求把分析时收集的信息建立在三个模型中。第一个模型是(A),它的作用是描述系统的静态结构,包括构成系统的对象和类,它们的属性和操作,以及它们之间的联系。第二个模型是(B),它描述系统的控制逻辑,主要涉及系统中各个对象和类的时序及变化状况。(B)包括两种图,即(C)和(D)。(C)描述每一类对象的行为,(D)描述发生于系统执行过程中的某一特定场景。第三个模型是(E),它着重于描述系统内部数据的传送与处理,它由多个数据流图组成。A.⑦B.⑥C.③D.⑥E.②供选择的答案:A,B,E:①数据模型②功能模型③行为模型④信息模型⑤原型⑥动态模型⑦对象模型⑧逻辑模型⑨控制模型⑩仿真模型C,D:①对象图②概念模型图③状态迁移图④数据流程图⑤时序图⑥事件追踪图⑦控制流程图⑧逻辑模拟图⑨仿真图⑩行为图9、从供选择的答案中选出与下面有关面向对象设计的叙述最适合的答案,将其编号填入相应的括号内。在面向对象软件设计过程中,应按如下要求进行类的设计:只有类的共有界面的成员才能成为使用类的操作,这就是软件设计的(A)原则。当且仅当一个操作对类的实例的用户有用时,它才是类公共界面的一个成员,这是软件设计的(B)原则。由同属一个类的操作负担存取或加工类的数据,这是软件设计的(C)原则。两个类之间的交互应当仅涉及参数表,这是软件设计的(D)原则。每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集,这是软件设计的(E)原则。供选择的答案:A.③B.②C.③D.①E.⑤A:①过程抽象②功能抽象③信息隐蔽④共享性⑤连通性B:①标准调用②最小界面③高耦合④高效率⑤可读性C:①数据抽象②低内聚③高内聚④低复杂度⑤低强度 D:①显式信息传递②高内聚③低内聚④相互操作性⑤连接性E:①动态联编②异质表③信息隐蔽④多态性⑤继承性10、从供选择的答案中选出与下面有关面向对象程序设计的叙述最适合的答案,将其编号填入相应的括号内。面向对象的程序设计语言具有数据抽象、信息隐蔽、(A)等特征。作为运算单位的对象应具有下列特性:(B)、(C)、(D)。(E)是面向对象的语言。A.④B.①C.③D.④E.①供选择的答案:A:①对象调用②对象变换③非过程性④信息继承⑤并发性B~D①对象把数据和处理数据的操作结合为一体②在程序运行时对象都处于活动状态③对象在计算中可向其他对象发送消息④接受消息的对象必须给消息发送者以回答⑤对象的内部状态只根据外部送来的消息才操作E:①C++,SMALLTALK,objectC②C,Ada,Modula2③PASCAL,C++,APL④Ada,objectC,C软件设计一、填空 1、软件设计是要把描述软件“做什么”的逻辑模型转换为描述“怎么做”的物理模型,即着手实现软件的需求,并将设计结果记入软件设计说明书文档中。 2、软件程序系统结构的设计是以模块为基础的。以需求分析的结果为依据,从实现的角度进一步划分为模块,并组成模块的层次结构。 3、数据库的设计指数据存储文件的设计,主要进行概念、逻辑、物理的设计。 4、在数据处理系统的功能分析与设计过程中同时要进行数据分析和数据设计,数据库的概念设计和逻辑设计分别对应于系统开发的需求分析与概要设计,而数据库的物理设计与模块的详细设计相对应。 5、在软件的系统结构中,模块是可组合、可分解和可更换的单元。模块的基本属性包括功能、逻辑、接口和状态。 6、模块内聚与耦合是模块独立性的两个定性标准。在划分模块时,应尽可能作到低内聚、高耦合。 7、一个模块的作用范围应在其控制范围之内,且判定所在的模块应与受其影响的模块在层次上尽可能靠近。 8、如果模块之间耦合性太高,每个模块内功能不复杂,可将它们合并,以减少信息的传递和数据公用区的引用。若有多个相关的模块,应对它们的功能进行分析,消去重复的功能。二、单项选择题1、结构化设计方法(SD)与结构化分析方法(SA)一样,遵循C的模型,采用自顶向下,逐步细化的技术。通常SD方法继续SA的工作,根据数据流图设计程序的结构。A.实体-关系B.快速原型C.抽象D.瀑布2、结构化设计在软件开发中用于B。A.测试设计B.概要设计C.程序设计D.详细设计3、D把已确定的软件需求转换成特定形式的软件表示,使其得以实现。A.系统设计B.逻辑设计C.详细设计D.软件设计4、在进行软件模块结构设计时应当遵循的最主要的准则是C。A.抽象B.模块化C.模块独立D.信息隐蔽5、A是数据说明、可执行语句等程序对象的集合,它是单独命名的并可通过名字访问。A.模块B.复合语句C.程序块D.数据块6、模块C,则说明模块的独立性越强。A.耦合越强B.扇入数越高C.耦合越弱D.扇入数越低7、模块之间的信息可以做“控制信息”用,也可以作为D用。A.控制流B.数据结构C.控制结构D.数据8、A数据处理问题的工作过程大致分为三步:即取得数据、变换数据和输出数据。 A.变换型B.事务型C.演化型D.结构化9、在多层系统结构图中,其模块的层次数称为结构图的A。A.深度B.宽度C.控制域D.粒度10、C着重反映的是模块间的隶属关系,即模块间的调用关系和层次关系。A.程序流程图B.数据流图C.系统结构图D.实体关系图11、C是指把一些关系密切的软件元素物理地放置到彼此靠近的位置。A.信息隐蔽B.内聚C.局部化D.模块独立12、块间联系和块内联系是评价程序结构质量的重要标准。联系的方式、共用信息的作用、共用信息的数量和界面的C等因素决定了块间联系的大小。A.友好性B.健壮C.清晰性D.安全性13、为了提高模块的独立性,模块之间最好是D。A.公共耦合B.控制耦合C.内容耦合D.数据耦合14、为了提高模块的独立性,模块内部最好是C。A.逻辑内聚B.时间内聚C.功能内聚D.通信内聚15、从下列有关系统结构图的叙述中选出正确的叙述D。A.系统结构图中反映的是程序中数据流的情况。B.系统结构图是精确表达程序结构的图形表示法。因此,有时也可将系统结构当作程序流程图使用?C.一个模块的多个下属模块在系统结构图中所处的左右位置是无关紧要的。D.在系统结构图中,上级模块与其下属模块之间的调用关系用有向线段表示。这时,使用斜的线段和水平、垂直的线段具有相同的含义。三、选择填空1、软件的开发工作经过需求分析阶段,进入(A)以后,就开始着手解决“怎么做”的问题。常用的软件设计方法有(B)、(C)、(D)和(E)等方法。A.②,B.⑤,C.①,D.①,E.③。D与E的答案可互换供选择的答案:A~B.①程序设计②设计阶段③总体设计④定义阶段⑤SD方法⑥SP方法C.①Jackson方法②瀑布法③快速原型法④回溯法D~E.①CP(Wanier)方法②递归法③Parnas方法④自下而上修正⑤逐步求精法⑥检测校正法2、请将下述有关模块独立性的各种模块之间的耦合,按其耦合度从低到高排列起来。③⑤④②⑥⑦①①内容耦合②控制耦合③非直接耦合④标记耦合⑤数据耦合⑥外部耦合⑦公共耦合3、请将下述有关模块独立性的各种模块内聚,按其内聚度(强度)从高到低排列起来。③⑥④⑦②⑤①①巧合内聚②时间内聚③功能内聚④通信内聚⑤逻辑内聚⑥信息内聚⑦过程内聚4、从供选择的答案中选出正确的答案填入下列叙述中的()内。A.⑤,B.⑦,C.③,D.④,E.①模块内聚性用于衡量模块内部各成份之间彼此结合的紧密程度。(1)一组语句在程序中多处出现,为了节省内存空间把这些语句放在一个模块中,该模块的内聚性是(A)的。(2)将几个逻辑上相似的成分放在同一个模块中,通过模块入口处的一个判断决定执行哪一个功能。该模块的内聚性是(B)的。(3)模块中所有成分引用共同的数据,该模块的内聚性是(C)的。(4)模块内的某成份的输出是另一些成份的输入,该模块的内聚性是(D)的。(5)模块中所有成份结合起来完全一项任务,该模块的内聚性是(E)的。它具有简明的外部界面,由它构成的软件易于理解、测试和维护。供选择的答案:A~E:①功能内聚②信息内聚③通信内聚④过程内聚⑤巧合内聚⑥时间内聚⑦逻辑内聚5、从供选择的答案中选出正确的答案填入下面的()中。 块间联系和块内联系是评价程序模块结构质量的重要标准。联系的方式、共用信息的作用、共用信息的数量和接口的(A)等因素决定了块间联系的大小。在块内联系中,(B)的块内联系最强。SD方法的总的原则是使每个模块执行(C)功能,模块间传送(D)参数,模块通过(E)语句调用其它模块,而且模块间传送的参数应尽量(F)。此外,SD方法还提出了判定的作用范围和模块的控制范围等概念。SD方法认为,(G)应该是(H)的子集。供选择的答案:A.③,B.②,C.①,D.①,E.②,F.①,G.①,H.②A:①友好性②健壮性③简单性④安全性B:①巧合内聚②功能内聚③通信内聚④信息内聚C:①一个②多个D:①数据型②控制型③混合型E:①直接引用②标准调用③中断④宏调用F:①少②多G~H:①作用范围②控制范围6、从供选择的答案中选出应该填入下列关于软件设计的叙述的()内的正确答案。在众多的设计方法中,SD方法是最受人注意的,也是最广泛应用的一种,这种方法可以同分析阶段的(A)方法及编程阶段的(B)方法前后衔接,SD方法是考虑如何建立一个结构良好的程序结构,它提出了评价模块结构质量的两个具体标准——块间联系和块内联系。SD方法的最终目标是(C),用于表示模块间调用关系的图叫(D)。另一种比较著名的设计方法是以信息隐蔽为原则划分模块,这种方法叫(E)方法。供选择的答案:A.②,B.⑤,C.③,D.③,E.②A~B:①Jackson②SA③SC④Parnas⑤SPC:①块间联系大,块内联系大②块间联系大,块内联系小③块间联系小,块内联系大④块间联系小,块内联系小D:①PAD②HCP③SC④SADT⑤HIPO⑥NSE:①Jackson②Parnas③Turing④Wirth⑤Dijkstra7、从供选择的答案中选出应该填入下列关于软件详细设计的叙述的()内的正确答案。软件详细设计工具可分为三类,即:图示工具、设计语言和表格工具。图示工具中,(A)简单而应用广泛、(B)表示法中,每一个处理过程用一个盒子表示,盒子可以嵌套。(C)可以纵横延伸,图形的空间效果好。(D)是一种设计和描述程序的语言,它是一种面向(E)的语言。A.②,B.①,C.④,D.②,E.①供选择的答案:A~C:①NS图②流程图③HIPO图④PAD图D:①C②PDL③RPOLOG④PASCALE:①人②机器③数据结构④对象8、Jackson结构化程序设计方法(JSP)是英国人M.Jackson提出的,它是一种面向(A)的设计方法,主要适用于规模适中的(B)系统的开发,其基本步骤依次为(C)、(D)、(E)。供选择的答案:A.③B.①C.①D.③E.②A:①对象②数据流③数据结构④控制结构B:①数据处理②文字处理③实时控制④科学计算C~E:①建立数据结构②列出基本操作③建立程序结构④建立控制结构⑤建立对象9、从供选择的答案中选出应该填入下列关于软件设计的叙述的()内的正确答案。在完成软件概要设计,并编写出相关文档之后,应当组织对概要设计工作的评审。评审的内容包括:分析该软件的系统结构、子系统结构,确认该软件设计是否覆盖了所有已确定的软件需求,软件每一成份是否可(A)到某一项需求。分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足(B)和(C)的要求。模块(D)是否在其(E)之内。供选择的答案A.③,B.②,C.③,D.①,E.⑤A:①覆盖②演化③追溯④等同⑤连接B:①多功能②高内聚③高耦合④高效率⑤可读性C:①多入口②低内聚③低耦合④低复杂度⑤低强度D~E:①作用范围②高内聚③低内聚④取值范围⑤控制范围四、问答题1、逐步求精、分层过程与抽象等概念之间的相互关系如何? 答:“自顶向下,逐步求精”是NiklausWirth提出的设计策略:即将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。 这样的结构实际就是一个模块的分层结构,即分层的过程。在实施时,采用抽象化的方法,自顶向下,给出不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。而在较低的抽象层次上,则采用过程化的方法。在描述问题的解法时,我们可以配合使用面向问题的术语和面向现实的术语。但最后在最低的抽象层次上,我们应使用能够直接实现的方式来描述这个解法。2、完成良好的软件设计应遵循哪些原则?答:软件设计既是过程又是模型。设计过程是一系列迭代的步骤,使设计人员能够描述被开发软件的方方面面。设计模型体现了自顶向下、逐步细化的思想,首先构造事物的整体,再逐步细化,引导人们构造各种细节。为了给软件设计人员提供一些指导,1995年Davis提出了一系列软件设计的原则如下,其中有些修改和补充:· 设计过程不应受“隧道视野”的限制。一位好的设计者应当考虑一些替代的手段。根据问题的要求,可以用基本的设计概念,如抽象、逐步求精、模块化、软件体系结构、控制层次、结构分解、数据结构、软件过程、信息隐蔽等,来决定完成工作的资源。· 设计应能追溯到分析模型。由于设计模型中每一单个成份常常可追溯到多个需求上,因此有必要对设计模型如何满足需求进行追踪。· 设计不应当从头做起。系统是使用一系列设计模式构造起来的,很多模式很可能以前就遇到过。这些模式通常被称为可复用的设计构件。可以使用它们代替那些从头开始做的方法。时间短暂而资源有限!设计时间应当投入到表示真正的新思想和集成那些已有的设计模式上去。· 设计应当缩短软件和现实世界中问题的“智力差距”,就是说,软件设计的结果应尽可能模拟问题领域的结构。· 设计应具有一致性和集成性。如果一个设计从整体上看像是一个人完成的,那它就是一致的。在设计工作开始之前,设计小组应当定义风格和格式的规则,如果仔细定义了设计构件之间的接口,则该设计就是集成的。 使用上述的基本的设计概念,将设计构造得便于将来的修改。· 应将设计构造得即使遇到异常的数据、事件或操作条件,也能平滑地、轻松地降级。设计良好的计算机程序应当永不“彻底停工”,它应能适应异常的条件,并且当它必须中止处理时也能以从容的方式结束。· 设计不是编码,编码也不是设计。即使在建立程序构件的详细的过程设计时,设计模型的抽象级别也比源代码要高。在编码级别上作出的唯一设计决策是描述如何将过程性设计转换为程序代码的小的实现细节。·在开始着手设计时就应当能够评估质量,而不是在事情完成之后。利用上述的基本的设计概念和已有的设计方法,可以帮助设计者评估质量。·应当坚持设计评审以减少概念上(语义上)的错误。有时人们在设计评审时倾向于注重细节,只见树木不见森林。在关注设计模型的语法之前,设计者应能确保设计的主要概念上的成份(的遗漏、含糊、不一致)都已检查过。3、如何理解模块独立性?用什么指标来衡量模块独立性?答:如果两个模块互相独立,那么对其中一个模块进行编码、测试或修改时可以完全不考虑另一个模块对它的影响。因此,用模块独立性作为衡量模块结构是否容易编码、容易测试、容易修改的标准是合适的。但是,在一个系统的模块结构中没有哪两个模块可以完全独立,所以,要力争模块之间尽量独立,以得到一个质量良好的模块结构。 一般采用两个准则度量模块独立性。即模块间的耦合和模块的内聚。模块间的耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。模块之间的连接越紧密,联系越多,耦合性就越高,而其模块独立性就越弱。内聚是模块功能强度(一个模块内部各个成份彼此结合的紧密程度)的度量。一个模块内部各个成份之间的联系越紧密,则它的内聚性就越高,相对地,它与其它模块之间的耦合性就会减低,而模块独立性就越强。因此,模块独立性比较强的模块应是高内聚低耦合的模块。一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为低耦合的情形有非直接耦合、数据耦合和标记耦合,它们都是比较好的模块间的连接。特点是模块间的接口简单、规范。中度耦合的情形有控制耦合,它通过参数表传递控制参数。相对高的耦合情形有外部耦合和公共耦合,它们都是通过全局数据传递模块间的信息,不是说它们一定“坏”,但一定要注意使用这类耦合可能产生的后果,特别要防范这种后果。一般模块的内聚性分为七种类型,它们的关系如下图所示。在上面的关系中可以看到,位于高端的几种内聚类型最好,位于中段的几种内聚类型是可以接受的,但位于低端的内聚类型很不好,一般不能使用。因此,人们总是希望一个模块的内聚类型向高的方向靠。模块的内聚在系统的模块化设计中是一个关键的因素。内聚和耦合是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。但这也不是绝对的。我们的目标是力求增加模块的内聚,尽量减少模块间的耦合,但增加内聚比减少耦合更重要,应当把更多的注意力集中到提高模块的内聚程度上来。4、模块独立性与信息隐蔽(反映模块化有效程度的属性)有何关系?答:所谓“模块独立性”是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的。所谓的“信息隐蔽”是指每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。如果软件系统做到了信息隐蔽,即定义和实施了对模块的过程细节和局部数据结构的存取限制,那么这些模块相互间的接口就是简单的。这组模块的独立性就比较强。事实上,衡量模块独立性的一个准则就是模块内聚,达到信息隐蔽的模块是信息内聚模块,它是高内聚情形,模块独立性当然很强了。一个对象的抽象数据类型,就是信息隐蔽的示例。例如,对于栈stack,可以定义它的操作makenull(置空栈)、push(进栈)、pop(退栈)、gettop(取栈顶)和empty(判栈空)。这些操作所依赖的数据结构是什么样的?它们是如何实现的?都被封装在其实现模块中。软件的其它部分可以直接使用这些操作,不必关心它的实现细节。一旦实现栈stack的模块里内部过程或局部数据结构发生改变,只要它相关操作的调用形式不变,则软件中其它所有使用这个栈stack的部分都可以不修改。这样的模块结构具有很强的模块独立性。5、模块的内聚性程度与该模块在分层结构中的位置有关系吗?说明你的论据。 答:模块的内聚性与该模块在分层模块结构中的位置无关。事实上,一个好的模块化的程序系统,它所有的模块可以都是功能内聚的,即每一个模块就只干了一件事。用结构化设计方法建立起来的模块结构中的每一个模块都符合这个要求。把讨论范围再拓宽点,在纯面向对象范型的软件系统中,整个系统看作是一个类,它的子类可以看作是系统的子系统或高层模块,它们还可以有子类,……,这就形成一个类的层次结构。类的构造可以看成是一个抽象数据类型,实际上是信息内聚的。所以整个系统中从上到下,所有模块(对象类)都是信息内聚的模块。6、耦合性的概念和软件的可移植性有什么关系?请举例说明你的论述。答:所谓“耦合性”是指模块之间联系的紧密程度的一种度量,而软件的“可移植性”是指将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需工作量的大小。可移植性是用一组子特性,包括简明性、模块独立性、通用性、可扩充性、硬件独立性和软件系统独立性等,来衡量的。如果一个软件具有可移植性,它必然耦合性低,这样模块独立性要强。例如,有一个图形处理软件,它应具有二维几何图形处理、三维几何图形处理、图形显示、外设控制、数据库管理、用户界面控制、设计分析等模块。如果这些模块之间都是通过参数表来传递信息,那么它们之间的的耦合就是数据耦合或标记耦合等,都是低耦合。将来如果想要把它们移植到另一个外部环境中,这些模块容易修改(功能内聚),且接口清晰,修改可局部化。反言之,如果这些模块都是功能内聚或信息内聚的模块,模块之间的耦合都是低耦合,也对可移植性有促进。但不能讲具有低耦合性模块结构的软件一定具有可移植性,因为是否具有可移植性还有其它因素的影响。7、递归模块(即自己调用自己的模块)的概念如何能够与本章所介绍的设计原理与方法相适应?答:递归过程在求解复杂的大型问题时非常有效。常用的求解问题的方法,一种叫做“分而治之”的策略和“回溯”的策略,都可以用递归方法来解决。所谓“分而治之”的方法即是把大而复杂的问题化为规模稍小的子问题,用同样方法求解。如果分解后的子问题能够直接解决,就直接解出,然后再回推得到原来问题的解。所谓“回溯”方法就是如果一个大的问题在求解过程中从某一步出发有可选的多种解决方案,先选择一种解决方案,试探求解。如果求解失败,撤消原来的选择,再选一种解决方案,试探求解,……。如果用某一方案求解成功,则退回上一步并报告这一步求解成功;如果所有可选方案都试过,都求解失败,则退回上一步并报告求解失败。软件设计过程中的“自顶向下,逐层分解”的做法与上述求解问题的策略是一致的。如果分解出来的子问题(子功能、子模块)相互独立性比较强,这种分解可以降低模块的复杂性,做到模块化。所以,只要分解出来的子问题与原来问题满足递归的情况,用递归方法建立模块结构也是可行的。8、举例说明你对概要设计与详细设计的理解。有不需要概要设计的情况吗?答:软件设计是一个把软件需求变换成软件表示的过程。最初这种表示只是描绘出软件的总的框架,然后进一步细化,在此框架中填入细节,把它加工成在程序细节上非常接近于源程序的软件表示。正因为如此,所以从工程管理的角度来看,软件设计分两步完成。首先做概要设计,将软件需求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。 由于概要设计建立起整个系统的体系结构框架,并给出了系统中的全局数据结构和数据库接口,人机接口,与其它硬、软件的接口。此外还从系统全局的角度,考虑处理方式、运行方式、容错方式、以及系统维护等方面的问题,并给出了度量和评价软件质量的方法,所以它奠定了整个系统实现的基础。没有概要设计,直接考虑程序设计,就不能从全局把握软件系统的结构和质量,实现活动处于一种无序状态,程序结构划分不合理,导致系统处于一种不稳定的状态,稍一做改动就会失败。所以,不能没有概要设计。9、如何用PDL语言来实施逐步求精的设计原理?答:使用PDL语言,可以做到逐步求精:从比较概括和抽象的PDL程序起,逐步写出更详细的更精确的描述。下面举一个例子。PROCEDUREspellcheckIS查找错拼的单词BEGINsplitdocumentintosinglewords把整个文档分离成单词loodupwordsindictionary在字典中查这些单词displaywordswhicharenotindictionary显示字典中查不到的单词createanewdictionary造一新字典ENDspellcheck 这个例子只是搭起一个处理问题的框架。为进一步表明查找拼错的单词的4个步骤如何实现,可以对它每一步进行细化:PROCEDUREspellcheckBEGIN  --*splitdocumentintosinglewordsLOOPgetnextword   addwordtowordlistinsortorderEXITWHENallwordsprocessedENDLOOP--*lookupwordsindictionaryLOOPgetwordfromwordlist   IFwordnotindictionaryTHEN         --*displaywordsnotindictionarydisplayword,promptonuserterminalIFuserresponsesayswordOKTHEN     addwordtogoodwordlist      ELSEaddwordtobadwordlist      ENDIFENDIFEXITWHENallwordsprocessed   ENDLOOP   --*createanewwordsdictionarydictionary:=mergedictionaryandgoodwordlistENDspellcheck程序编码一、填空1、软件详细设计的目标不仅是逻辑上正确地实现每个模块的功能,还应使设计出的处理过程清晰易懂。结构化程序设计是实现该目标的关键技术之一;它指导人们用良好的思想方法开发易于理解、易于验证的程序。2、结构化程序设计方法的基本要点是:①采用自顶向下、逐步细化的程序设计方法;②使用三种基本结构构造程序,避免GOTO语句的使用;③数据结构合理化。3、任何程序都可由顺序、选择和重复等三种基本控制结构构造。这三种基本控制结构的共同点是单入口和 单出口。4、程序设计风格是人们编写程序的特点、习惯和逻辑思路等。5、语句构造的原则是简单,直接不能因为追求效率而使代码复杂化。6、追求效率建立在不损害程序可读性或可靠性的基础上。7、提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构和算法,而不是靠编程时对语句进行调整。8、为开发一个特定的项目选择程序设计语言时,必须从心理特性、工程特性和技术性能特性等几方面考虑。9、通常考虑选用程序设计语言的因素有项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性和软件开发人员的知识。二、单项选择题1、在编制程序时应采纳的原则之一是D。A.不限制goto语句的使用B.减少或取消注解行C.程序越短越好D.程序结构应有助于读者理解2、一个程序如果把它作为一个整体,它也是只有一个入口、一个出口的单个顺序结构,这是一个B。A.结构化程序B.组合的过程C.自顶向下程序设计D.分解过程3、程序控制一般分为B、分支和重复等三种基本控制结构。A.分块B.顺序C.迭代D.循环4、将非结构化的程序转换为结构化程序的过程中,下面D不适用于具有重复结构的程序。A.重复编码法B.状态变量法C.布尔标记法D.全部方法5、以下说法正确的是B。A.所有改变循环条件的成分都在循环体外B.在直到型循环中,循环体至少要执行一次C.在当型循环中,循环体至少要执行一D.基本程序结构不允许嵌套6、源程序文档化要求在每个模块的首部加序言性注释。该注释的内容不应有B。A.模块的功能B.语句的功能C.模块的接口D.扇入数越低7、功能性注释的作用是解释下面的语句B。A.怎么做B.做什么C.何时做D.为何做8、对于不好的程序,应当CA.打补丁B.修改错误C.重新编写D.原封不动9、程序设计语言的心理特性在语言中表现不应包括C。A.二义性B.简洁性C.保密性D.传统性10、程序设计语言的工程特性之一表现在A。A.软件的可复用性B.数据结构的可描述性C.抽象类型的可描述性D.数据库的易操作性11、程序设计语言的技术特性不应包括D。A.数据结构的可描述性B.抽象类型的可描述性C.数据库的易操作性D.软件的可移植性12、Lipow证明了:当源程序少于100个语句时,每行代码的出错率随程序行数的增长A。A.呈线性相关关系B.呈指数方式增长C.呈对数方式增长D.没有一定规律三、选择填空题1、从下列关于模块化程序设计的叙述中选出5条正确的叙述。(×)(1)程序设计比较方便,但比较难以维护。(√)(2)便于由多个人分工编制大型程序。(√)(3)软件的功能便于扩充。(√)(4)程序易于理解,也便于排错。(×)(5)在主存储器能够容纳得下的前提下,应使模块尽可能大,以便减少模块的个数。(×)(6)模块之间的接口叫做数据文件。(√)(7)只要模块之间的接口关系不变,各模块内部实现细节的修改将不会影响别的模块。 (√)(8)模块间的单向调用关系叫做模块的层次结构。(×)(9)模块越小,模块化的优点越明显。一般来说,模块的大小都在10行以下。2、从下列叙述中选出5条符合程序设计风格指导原则的叙述。(1)、(3)、(5)、(7)、(9)是正确的(1)嵌套的重数应加以限制。(2)尽量多使用临时变量。(3)不滥用语言特色。(4)不用可以省略的括号。(5)使用有意义的变量名。(6)应尽可能把程序编得短些。(7)把常见的局部优化工作留给编译程序去做。(8)注解越少越好。(9)程序的格式应有助于读者理解程序。(10)应尽可能多用GOTO语句。3、从下面关于程序编制的叙述中,选出三条正确的叙述。(1)、(4)、(6)是正确的(1)在编制程序之前,首先必须仔细阅读给定的程序说明书。然后,必须如实地依照说明书编写程序。说明书中常会有含糊不清或难以理解的地方。程序员在作业时应该对这些地方作出适当的解释。(2)在着手编制程序时,重要的是采用既能使程序正确地按设计说明书进行处理,又易于出错的编写方法。(3)在编制程序时,首先应该对程序的结构充分考虑,不要急于开始编码,而要象写软件文档那样,很好地琢磨程序具有什么样的功能,这些功能如何安排等等。(4)考虑到以后的程序变更,为程序编写完整的说明书是一项很重要的工作。只要有了完整的程序说明书,即使程序的编写形式难以让他人看懂也没有什么关系。(5)编制程序时不可缺少的条件是,程序的输入和输出数据的格式都应确定。其他各项规定都是附带的,无足轻重。(6)作为一个好的程序,不仅处理速度要快,而且易读易修改等等也都是重要的条件。为了能得到这样的程序,不仅要熟悉程序设计语言的语法,还要注意采用适当的规程和单纯的表现方法,注意使整个程序的结构简洁。4、从供选择的答案中选出应该填入下面()中的正确答案。A.允许用户建立、修改、存储正文的计算机程序是(②)。①BOOtstrap②Editor③Loader④TextformatterB.程序语言的编译系统和解释系统相比,从用户程序的运行效率来看(①)。①前者运行效率高②两者大致相同③后者运行效率高④不能确定C.FORTRAN语言的源程序是(①)结构。①COBOL②BASIC③FORTRAN④PL/1E.国际上最流行的数值计算的程序设计语言是(③)。①BASIC②ALGOL③FORTRAN④CF.美国国防部主持开发了高级程序设计语言Ada,在它研制开始时,经反复比较,确定以高级语言(②)作为Ada研究的出发点。①LISP②ALGOL③ALGOL68④PL/1G.在人工智能领域,目前最广泛使用的高级语言是(④)。①Ada②FORTRAN③COBOL④LISP5、从供选择的答案中选出应该填入下面()中的正确答案。A.汇编程序是指(③)。①用汇编语言写的程序②符号程序③汇编语言的处理程序B.为了实现递归子程序的正确调用,人们必须用(①)来保存(⑥)及有关信息。 ①堆栈②线性表③队列④树⑤入口点⑥返回地址⑦断点C.UNIX操作系统是(①)研制的,它是用程序语言(⑦)书写实现的。①Bell实验室②DEC公司③IBM公司④PASCAL⑤并发PASCAL⑥MODULA⑦C6、从供选择的答案中选出适当的字句填入下面关于程序生产率的描述中的()内。A.⑤,B.②,C.③,D.①,E.③(1)1960年底Dijkstra提倡的(A)是一种有效的提高程序设计效率的方法。(2)Dijkstra为了使程序结构易于理解,把基本控制结构限于顺序、(B)、(C)3种,应避免使用(D)。(3)(A)不仅提高程序设计的生产率,同时也容易进行程序的(E)。供选择的答案:A.①标准化程序设计②模块化程序设计③多道程序设计④宏语言⑤结构化程序设计⑥汇编语言⑦表格处理语B~C.①分支②选择③重复④计算⑤输入输出D.①GOTO语句②DO语句③IF语句④REPEAT语句E.①设计②调试③维护④编码四、问答题1、试说明下面的两个程序段的功能是什么?可否用另一些等效的程序段来代替它,以提高其可读性。(1)A[I]=A[I]+A[T];(2) for(i=1;i<=n;i++)A[T]=A[I]  -A[T];for(j=1;j<=n;j++)A[I]=A[I]  -A[T];V[i][j]=(i/j)*(j/i);答:(1)的功能是对换A[I]与A[T]的内容。等效的程序段可以是:WORK=A[T];A[T]=A[I];A[I]=WORK;(2)的功能是建立一个单位矩阵V。等效的程序段可以是:for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i==j)V[i][j]=1;elseV[i][j]=0;2、结构化程序设计有时被错误地称为“无GOTO语句”的程序设计。请说明为什么会出现这样的说法,并讨论环绕着这个问题的一些争论。答:纷乱如麻的程序流程早在1963年,针对当时流行的ALGOL语言,PeterNaur指出,在程序中大量地,没有节制地使用GOTO语句,会使程序结构变得非常混乱。但是很多人还不太注意这一问题。以致许多人写出来的程序仍然是纷乱如麻的。1965年,E.W.Dijkstra在一次会议上提出,应当把GOTO语句从高级语言中取消。并指出,程序的质量与程序中包含的GOTO语句的数量成反比。在这种思想的影响下,当时新开发的几种高级程序设计语言,例如LISP、ISWIM、BLISS等,都把GOTO语句取消了。 1966 年,Bohm与Jacopini证明了任何单入口单出口的没有“死循环”的程序都能由三种最基本的控制结构构造出来。这三种基本控制结构就是“顺序结构”、“选择IF-THEN-ELSE结构”、“重复DO-WHILE或DO-UNTIL结构”。1968 年,Dijkstra在写给(美国计算机协会通讯)杂志编辑部的信中再次建议从一切高级语言中取消GOTO语句,只使用三种基本控制结构编写程序。他的建议引起了激烈的争论。争论集中在如何看待GOTO语句的问题上。赞成取消GOTO语句的一方认为,GOTO语句对程序清晰性有很大破坏作用,凡是使用GOTO语句多的程序,其控制流时而GOTO向前,时而GOTO向后,常使程序变得很难理解,从而增加查错和维护的困难,降低程序的可维护性。但以D.E.Knuth为代表的另一方认为,GOTO语句虽然存在着破坏程序清晰性的问题,但不应完全禁止。因为GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁,并且GOTO语句可直接得到硬件指令的支持。经过争论,人们认识到,不是简单地去掉GOTO语句的问题,而是要创立一种新的程序设计思想、方法和风格,以显著提高软件生产率和软件质量,降低软件维护的成本。1970年代初N.Wirth在设计Pascal语言时对GOTO语句的处理可被当做对GOTO语句争论的结论。在Pascal语言中设置了支持上述三种基本控制结构的语句;另一方面,GOTO语句仍然保留在该语言中。不过,N.Wirth解释说,通常使用所提供的几种基本控制结构已经足够,习惯于这样做的人不会感到GOTO语句的必要。也就是说,在一般情况下,可以完全不使用GOTO语句。如果在特殊情况下,由于特定的要求,偶然使用GOTO语句能解决问题,那也未尝不可,只是不应大量使用罢了。 事实上,大量采用GOTO语句实现控制路径,会使程序路径变得复杂而且混乱,从而使程序变得不易阅读,给程序的测试和维护造成困难,还会增加出错的机会,降低程序的可靠性。因此要控制GOTO语句的使用。但有时完全不用GOTO语句进行程序编码,比用GOTO语句编出的程序可读性差。例如,在查找结束时,文件访问结束时,出现错误情况要从循环中转出时,使用布尔变量和条件结构来实现就不如用GOTO语句来得简洁易懂。3、设下图给出的程序流程图代表一个非结构化的程序,试问:(1)为什么说它是一个非结构化的?(2)设计一个等价的使用附加标志变量flag的结构化程序。(3)设计一个使用break(用于代替goto)的程序。答:(1)它是一个单入口、两出口的结构,所以是一个非结构化的程序。(2)等价的结构化程序:enumBoolean{false,true}Booleanflag=true;while(P&&flag){doG;if(!Q)flag=false;}(3)使用break的程序 while(P){doG;if(!Q)break;}4、有一种循环结构,叫做N+1/2循环。其流程图如下所示。这种控制结构不属于基本控制结构:它既不是先判断型循环,又不是后判断型循环。试修改此流程图,将它改为用基本控制结构表示的等效的流程图。答:等效的控制流程图如下图中(a)所示。先判断型循环要求在进入循环体之前,先判断是否要继续执行此循环。因此,在这种控制结构的入口处应是一个判断语句。这种循环的循环体可能一次也不执行。参看图(b)。5、下面是两个程序流程图,试分别用N-S图和PAD表示之,并计算它们的McCabe复杂性度量。答:对应的N-S图如下。 对应PAD图如下。McCabe复杂性度量都为3。6、下面给出一个求实函数方程F(x)在自变量区间[a,b]中的全部实根的算法。首先阅读此程序,然后(1) 画出消去全部goto语句的结构化程序流程图。(2) 将它改成N_S图。(3) 计算该程序的McCabe复杂性度量。 在算法中,a与b是区间[a,b]的两端点值;eps1与eps2是用户要求的求解精度。如果区间中点的函数值的绝对值小于eps1或新的小区间的长度小于eps2,就认为这个中点为根。floatBinRoot(floata,floatb,floateps1,floateps2){ floatlow=a,high=b,mid,fmid;floatflow=Func(low),fhigh:=Func(high);labelL1,L2,L3;   //标号说明,给定某些程序地址if(flow*fhigh>0.0){BinRoot=0;gotoL3;}//无实根L1: mid=(low+high)/2;fmid=Func(mid);if(abs(fmid)<=eps1){L2:BinRoot=mid; gotoL3}elseif(high-mid<=eps2)gotoL2;elseif(flow*fmid>0.0){low=mid;flow=fmid;gotoL1;}else{high=mid;gotoL1};L3:}答:(1)结构化的程序流程图: (2)N-S图:7、用某种软件复杂性度量算法来度量不同类型的程序时,得出的度量值是否真正反映了它们的复杂性?如果对同类型的程序进行度量,其结果是否就比较有价值? 答:开发规模相同,但复杂性不同的软件,花费的成本和时间会有很大的差异。因此到目前为止,还没有一个软件复杂性度量的方法能够全面、系统地度量任一软件的复杂性,某一种度量方法只偏重于某一方面。所以,用某一种软件复杂性来度量不同类型的程序,所得到的度量值不一定真正反映它们的复杂性。但对同一类型的程序,按某种视点来度量它们的复杂性,其结果还是比较有价值的?8、软件复杂性有哪几类?软件复杂性度量模型应遵循哪些基本原则?答:K.Magel从六个方面描述软件复杂性: ①理解程序的难度; ②改错及维护程序的难度; ③向他人解释程序的难度; ④按指定方法修改程序的难度; ⑤根据设计文档编写程序的工作量; ⑥执行程序时需要资源的程度。软件复杂性度量模型应遵循的基本原则: ⑴软件复杂性与程序大小的关系不是线性的; ⑵控制结构复杂的程序较复杂; ⑶数据结构复杂的程序较复杂; ⑷转向语句使用不当的程序较复杂; ⑸循环结构比选择结构复杂,选择结构又比顺序结构复杂; ⑹语句、数据、子程序和模块在程序中的次序对软件复杂性都有影响; ⑺全程变量、非局部变量较多时程序较复杂; ⑻参数按地址传递比按值传递更复杂; ⑼函数副作用比显式参数传递更难以琢磨; ⑽具有不同作用的变量共用一个名字时较难理解; ⑾模块间或过程间联系密切的程序较复杂; ⑿嵌套深度越深程序越复杂。 最典型的两种程序复杂性度量的方法中,McCabe环路复杂性度量就是针对基本原则(2)制定的度量模型;Halstead软件科学则是针对程序中操作符和操作数的出现频度而制定的度量模型。软件测试一、填空1、软件测试阶段的基本任务应当是根据软件开发各阶段的文档资料和程序的内部结构,精心设计一批“高产”的测试用例,利用这些测试用例执行程序,找出软件中潜藏的各种错误和缺陷。2、测试用例不仅要选用合理的测试输入数据,还需要选用不合理的测试输入数据,这样能更多地发现错误,提高程序的可靠性。对于不合理的测试输入数据,程序应拒绝执行,并给出相应的提示。3、动态测试指通过运行程序发现错误。对软件产品进行动态测试时使用黑盒测试法和白盒测试法。4、静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。5、黑盒测试依据软件需求规格说明,检查程序是否满足功能要求。因此,黑盒测试由称为功能测试或数据驱动测试。6、白盒测试以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检查内部控制结构和数据结构是否有错,程序的运行状态与预期的状态是否一致。7、在基本路径测试中,独立路径是指包括一组以前没有处理过的语句或条件的一条路径。从程序图来看,一条独立路径是至少包含有一条上层调用模块的边的路径。 8、在单元测试中,驱动模块的作用是用来模拟被测模块的主程序。它的工作是接受测试输入数据,以上层模块调用被测模块的形式驱动被测模块,接收被测模块的实测结果并输出。9、在单元测试中,桩模块用来代替被测模块的子模块。其作用是返回被测模块所需的信息。10、错误的群集现象是指模块错误发现率与模块的残留错误数成正比关系。二、选择题1、在软件测试中,下面说法中错误的是A。A.测试是为了发现程序中的错误而执行程序的过程B.测试是为了表明程序是正确的C.好的测试方案是极可能发现迄今为止尚未发现的错误的方案D.成功的测试是发现了至今为止尚未发现的错误的测试2、软件测试的目的是B。A.试验性运行软件B.发现软件错误C.证明软件正确D.找出软件中全部错误3、软件测试用例主要由测试输入数据和C两部分组成。A.测试计划B.测试规则C.测试的预期结果D.以往测试记录分析4、与设计测试用例无关的文档是A。A.项目开发计划B.需求规格说明书C.软件设计说明书D.源程序5、软件测试是软件质量保证的主要手段之一,测试的成本已超过A的30%以上。因此,提高测试的有效性非常重要。A.软件开发成本B.软件维护成本C.软件开发成本和维护成本D.软件研制成本6、“高产”的测试是指C。A.用适量的测试用例说明被测试程序正确无误B.用适量的测试用例说明被测试程序符合相应的要求C.用适量的测试用例发现被测试程序尽可能多的错?D.用适量的测试用例纠正被测试程序尽可能多的错误7、如果想要进行成功的测试,为其设计测试用例主要依赖于B。A.黑盒测试方法B.测试人员的经验C.白盒测试方法D.错误推测法8、使用白盒测试方法时,确定测试数据应根据A和指定的覆盖标准。A.程序的内部结构B.程序的复杂性C.使用说明书D.程序的功能9、在用逻辑覆盖法设计测试用例时,有语句覆盖、分支覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖和路径覆盖等。其中D是最强的覆盖准则。A.语句覆盖B.条件覆盖C.判定-条件覆盖D.路径覆盖10、在设计测试用例时,A是用得最多的一种黑盒测试方法。A.等价类划分B.边界值分析C.因果图D.功能图11、在黑盒测试中,着重检查输入条件的组合的测试用例设计方法是D。A.等价类划分B.边界值分析C.错误推测法D.因果图法12、从下列叙述中,能够与软件开发各阶段,如需求分析、设计、编码相对应的软件测试是B。A.组装测试、确认测试、单元测试B.单元测试、组装测试、确认测试C.单元测试、确认测试、组装测试D.确认测试、组装测试、单元测试13、单元测试将根据在D阶段中产生的规格说明进行。A.可行性研究与计划B.需求分析C.概要设计D.详细设计14、组装测试计划是在C阶段制定的。A.可行性研究与计划B.需求分析C.概要设计D.详细设计15、确认测试计划是在B阶段制定的。A.可行性研究与计划B.需求分析C.概要设计D.详细设计16、软件的组装测试最好是由D承担,以提高组装测试的效果。 A.该软件的设计者B.该软件开发组的负责人C.该软件的编程者D.不属于该开发组的人员17、D是简化了的模拟较低层次模块功能的虚拟子程序。A.过程B.函数C.仿真D.桩18、A是指为查明程序中的错误和缺陷,可能使用的工具和手段。A.调试技术B.测试技术C.跟踪法D.动态测试19、从已发现故障的存在到找到准确的故障位置并确定故障的性质,这一过程称为C。A.错误检测B.故障排除C.调试D.测试20、在程序设计的过程中应为程序调试做好准备,主要体现在D方面。A.采用模块化、结构化的程序设计方法设计程序B.编写程序时要为程序调试提供足够的灵活性C.根据程序调试的需要,选择并安排适当的中间结果输出和必要的断?D.以上全是21、统计资料表明,软件测试的工作量占整个软件开发工作量的C。A.30%B.70%C.40%~50%D.95%22、软件测试计划是一些文档,它们描述了D。A.软件的性质B.软件的功能和测试用例C.软件的规定动作D.对于预定的测试活动将要采取的手段23、IBM公司的统计资料表明,使用静态测试的方法最高可以查出在测试中查出的全部软件错误的B。A.80%B.70%C.50%D.35%24、黑盒测试方法的优点是D。A.可测试软件的特定部位B.能站在用户立场测试C.可按软件内部结构测试D.可发现实现功能需求中的错误25、白盒测试方法的优点是C。A.可测试软件的特定部位B.能站在用户立场测试C.可按软件内部结构测试D.可发现实现功能需求中的错误26、等价类划分完成后,就可得出C,它是确定测试用例的基础。A.有效等价类B.无效等价C.等价类表D.测试用例集27、由因果图转换出来的A是确定测试用例的基础。A.判定表B.约束条件表C.输入状态表D.输出状态表三、选择填空题1、从供选择的答案中选出应填入下列()中的字句。软件测试的目的是(A②)。为了提高测试的效率,应该(B④)。使用白盒测试方法时,确定测试数据应根据(C①)和指定的覆盖标准。与设计测试数据无关的文档是(D④)。软件的集成测试工作最好由(E④)承担,以提高集成测试的效果?BR>供选择的答案:A.①评价软件的质量②发现软件的错误③找出软件中的所有错误④证明软件是正确的B.①随机地选取测试数据②取一切可能的输入数据作为测试数据③在完成编码以后制定软件的测试计划④选择发现错误的可能性大的数据作为测试数据C.①程序的内部逻辑②程序的复杂程度③使用说明书④程序的功能D.①该软件的设计人员②程序的复杂程度③源程序④项目开发计划E.①该软件的设计人员②该软件开发组的负责人③该软件的编程人员④不属该软件开发组的软件人员2、从供选择的答案中选出应填入下列()中的字句。A.②B.③C.②D.③E.③F.④为了把握软件开发各个环节的正确性和协调性,人们需要进行(A)和(B)工作。(A)的目的是想证实在一给定的外部环境中软件的逻辑正确性。它包括(C)和(D),(B)则试图证明在软件生存期各个阶段,以及阶段间的逻辑(E)、(F)和正确性。供选择的答案:A,B.①操作②确认③验证④测试⑤调试C,D.①用户的确认②需求规格说明的确认③程序的确认④测试的确认E,F.①可靠性②独立性③协调性④完备性⑤扩充性 3、从供选择的答案中选出应填入下列()中的字句。A.②B.④C.⑥D.③E.①F.②测试过程需要三类输入:(A)、(B)和(C)。请选择正确的答案填入下图中以完成测试信息处理的全过程。供选择的答案?A~C.①接口选择②软件配置③硬件配置④测试配置⑤测试环境⑥测试工具D~F.①排错②可靠性分析③结果分析④数据分类4、请从供选择的答案中选出应填入下列()中的字句。A.②B.④C.④D.②E.①程序的三种基本控制结构是(A)。它们的共同点是(B)。结构化程序设计的一种基本方法是(C)。软件测试的目的是(D)。软件调试的目的是(E)。供选择的答案:A.①过程,子程序,分程序②顺序,条件,循环③递归,堆栈,队列④调用,返回,转移B.①不能嵌套使用②只能用来写简单的程序③已经用硬件实现④只有一个入口和一个出口C.①筛选法②递归法③归纳法④逐步求精法D.①证明程序中没有错误②发现程序中的错误③测量程序的动态特性④检查程序中的语法错误E.①找出错误所在并改正之②排除存在错误的可能性③对错误性质进行分类④统计出错的次数5、从供选择的答案中选出同下列各条叙述关系最密切的字句。(1)对可靠性要求很高的软件,例如操作系统,由第三者对源代码进行逐行检查。(2)已有的软件被改版时,由于受到变更的影响,改版前正常的功能可能发生异常,性能也可能下降。因此,对变更的软件进行测试是必要的。(3)在意识到被测试模块的内部结构或算法的情况下进行测试。(4)为了确认用户的需求,先做出系统的主要部分,提交给用户试用。(5)在测试具有层次结构的大型软件时,有一种方法是从上层模块开始,由上到下进行测试。此时,有必要用一些模块替代尚未测试过的下层模块。供选择的答案:(1)②(2)⑩(3)⑨(4)⑧(5)④A~E:①仿真器②代码审查③模拟器④桩⑤驱动器⑥域测试⑦黑盒测试⑧原型⑨白盒测试⑩退化测试6、从供选择的答案中选出应填入下面叙述的()内的正确答案。软件测试方法可分为黑盒测试法和白盒测试法两种。黑盒测试法是通过分析程序的(A)来设计测试用例的方法。除了测试程序外,它还适用于对(B)阶段的软件文档进行测试。白盒测试法是根据程序的(C)来设计测试用例的方法。除了测试程序外,它也适用于对(D)阶段的软件文档进行测试。白盒法测试程序时常按照给定的覆盖条件选取测试用例。(E)覆盖比(F)覆盖严格,它使得每一个判定的每一条分支至少经历一次。(G)覆盖既是判定覆盖,又是条件覆盖,但它并不保证使各种条件都能取到所有可能的值。(H)覆盖比其他条件都要严格,但它不能保证覆盖程序中的每一条路径?BR>单元测试一般以(I)为主,测试的依据是(J)。 供选择的答案:A.③B.④C.②D.②E.②F.①G.④H.⑤I.①J.①A,C:①应用范围②内部逻辑③功能④输入数据B,D:①编码②软件详细设计③软件总体设计④需求分析E~H:①语句②判定③条件④判定/条件⑤多重条件⑥路径I:①白盒法②黑盒法J:①模块功能规格说明②系统模块结构图③系统需求规格说明7、从供选择的答案中选出应填入下面叙述的()内的正确答案。集成测试也叫做(A)或(B)。通常,在(C)的基础上,将所有模块按照设计要求组装成为系统。子系统的集成测试特别称为?nbsp;D),它所做的工作是要找出子系统和系统需求规格说明之间的(E)。需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会(F);一个模块的功能是否会对另一个模块的功能产生不利的影响;各个(G)组合起来,能否达到预期要求的(H);(I)是否有问题;单个模块的误差累积起来是否会放大。供选择的答案:A.③B.⑥C.①D.②E.⑥F.②G.①H.③I.⑤A、B的答案可互换A~D.①单元测试②部件测试③组装测试④系统测试⑤确认测试⑥联合测试E~I.①子功能②丢失③父功能④局部数据结构⑤全局数据结构⑥不一致⑦一致8、从供选择的答案中选出应该填入下列叙述的()内的正确答案。软件测试中常用的静态分析方法是(A)和(B)。(B)用于检查模块或子程序间的调用是否正确。分析方法(白盒方法)中常用的方法是(C)方法。非分析方法(黑盒方法)中常用的方法是(D)方法和(E)方法。(E)方法根据输出对输入的依赖关系设计测试用例。供选择的答案:A.①B.⑤C.①D.②E.③A~B:①引用分析②算法分析③可靠性分析④效率分析⑤接口分析⑥操作分析C~E:①路径测试②等价类③因果图④归纳测试⑤综合测试⑥追踪⑦深度优先⑧调试⑨相对图9、从供选择的答案中选出应填入下面叙述的()内的正确答案。等价类划分是一种典型的(A)方法,也是一种非常实用的重要的测试方法。使用这一方法,完全不考虑程序的(B)。用所有可能输入的数据来测试程序是不可能的,只能从全部可供输入的数据中选择一个(C)进行测试。(D)是指某个输入域的集合,在该集合中,各个输入数据对于揭露程序中的错误是(E)。供选择的答案:A.②B.①C.②D.⑤E.③A:①白盒测试方法②黑盒测试方法B:①内部结构②外部环境③顺序④流程C~E:①全集②子集③等效④不同的⑤等价类⑥典型集10、从供选择的答案中选出应填入下面叙述的()内的正确答案。① 黑盒测试方法的缺点是(A)和(D)。A.不可测试软件的特定部位B.不能发现功能需求中的错误C.无法检验软件的外部特性D.无法测试未实现功能需求的软件的内部缺陷② 白盒测试方法的缺点是(B)和(C)。A.不可测试软件的特定部位B.不能发现功能需求中的错误C.无法检验软件的外部特性D.无法测试未实现功能需求的软件的内部缺陷四、问答计算题1、从下列关于软件测试的叙述中,选出5条正确的叙述。(1)用黑盒法测试时,测试用例是根据程序内部逻辑设计的。(2)尽量用公共过程或子程序去代替重复的代码段。(3)测试是为了验证该软件已正确地实现了用户的要求。(4)对于连锁型分支结构,若有n个判定语句,则有2n条路径。(5)尽量采用复合的条件测试,以避免嵌套的分支结构?BR>(6)GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁。(7)发现错误多的程序模块,残留在模块中的错误也多。 (8)黑盒测试方法中最有效的是因果图法。(9)在做程序的单元测试时,桩(存根)模块比驱动模块容易编写。(10)程序效率的提高主要应通过选择高效的算法来实现。答:正确的叙述有(4)、(5)、(6)、(7)、(10)。 黑盒测试主要是根据程序的有关功能规格说明和覆盖准则来设计测试用例,进行测试的,不是根据程序的内部逻辑来设计测试用例,这是白盒测试做的事情。在所有黑盒测试方法中,最有效的不是因果图法,而是边界值分析方法。测试的目的是尽可能多地发现软件中的错误,其附带的收获才是验证该软件已正确地实现了用户的要求。测试的一条重要原则是:发现错误多的程序模块,残留在模块中的错误也多。软件可靠性模型(Shooman)就是依据这个原则建立它的公式的。对于连锁型分支结构,若有n个判定语句,则有2n条路径。因此,随着n的增大,路径数增长非常快。单元测试时,因为桩模块要模拟子模块的功能,这不是一件容易的事情,而驱动模块只是控制被测模块的执行,所以桩模块的编写比驱动模块的编写要难得多。在程序设计风格方面,如果重复的代码段没有明显的功能,不可以抽取出来形成独立的公共过程或子程序,只有在这些代码段表现出独立的功能时,才可把它们抽取出来形成独立的公共过程或子程序。另外,程序效率的提高主要应通过选择高效的算法或使用高效的语言编译器来实现。GOTO语句概念简单,使用方便,在某些情况下,保留GOTO语句反能使写出的程序更加简洁,这句话是正确的。2、对小的程序进行穷举测试是可能的,用穷举测试能否保证程序是百分之百正确呢?答:对小程序进行穷举测试,不见得能保证程序百分之百正确。所谓穷举测试是拿所有可能的输入数据来作为测试用例(黑盒测试),或覆盖程序中所有可能的路径(白盒测试)。对于小程序来说,实际上并不能真正作到穷举测试。例如前面讲过,一个小程序P只有两个输入X和Y及输出Z,在字长为32位的计算机上运行。如果X、Y只取整数,考虑把所有的X、Y值都做为测试数据,按黑盒方法进行穷举测试,这样做可能采用的测试数据组(Xi,Yi),基数(radix)i的最大可能数目为:232×232=264。如果程序P测试一组X、Y数据需要1毫秒,而且假定一天工作24小时,一年工作365天,要完成264组测试,需要5亿年。3、在任何情况下单元测试都是可能的吗?都是需要的吗?答:单元测试又称模块测试,是针对软件设计的最小单位─程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。单元测试是在编码阶段完成的,每编写出一个程序模块,就开始做这个模块的单元测试,所以只要采用模块化方法开发软件,单元测试都是必需的。它可由编写程序的人来完成。因为它需要根据程序的内部结构设计测试用例,对于那些不了解程序内部细节的人,这种测试无法进行。4、如图所示的程序有三条不同的路径。分别表示为L1(a→b)、L2(a→c→d)、L3(a→c→e),或简写为ace、abd、abe及acd。根据判定覆盖、条件覆盖、判定–条件覆盖、条件组合覆盖和路径覆盖等五种覆盖标准,从供选择的答案中分别找出满足相应覆盖标准的最小测试用例组。(用~①⑩回答) 供选择的答案:①x=90,y=90②x=50,y=50③x=90,y=90④x=90,y=70x=50,y=50x=40,x=90⑤x=90,y=90⑥x=90,y=90x=50,y=50x=70,y=90x=90,y=70x=50,y=50⑦x=90,y=90⑧x=90,y=90x=50,y=50x=50,y=50x=80,y=70x=90,y=50x=70,y=90x=80,y=80⑨x=90,y=90⑩x=90,y=90x=90,y=70x=80,y=80x=90,y=30x=90,y=70x=70,y=90x=90,y=30x=30,y=90x=70,y=90x=70,y=70x=30,y=90x=50,y=50x=70,y=70x=50,y=50答:针对覆盖标准,相应的测试用例组如下注意:测试是一个程序的执行过程。对于逻辑表达式AorB,当A为真时不再对B 做判断,对于逻辑表达式AandB,当A为假时不再对B做判断。未能做判断的条件,在解答中用“□”表示。此测试用例组在满足条件覆盖的情况下又满足了判定覆盖的要求。 在条件组合覆盖情形,(x?90)or(y?90)的组合有4种,与条件(x+y?140)的组合应有8种,但(x+y?140=F)and((x?90=T)or(y?90=T))不可能出现,因此,7个测试用例就够了。 因为流程图有3条路径,只需3个测试用例就够了。如果将判定中的复合条件表达式改为单个条件的嵌套选择结构,第一个判定有3条路径,其中两条路径通向第二个判定。第二个判定有4条路径,组合起来总共应有9条路径。但是,其中受测试条件的限制,有3条路径不可达,因此,程序中应有6条路径,需要6个测试用例来覆盖它们。 5、在白盒测试用例设计中,有语句覆盖、分支覆盖、条件覆盖、路径覆盖等,其中(A)是最强的覆盖准则。为了对如下图所示的程序段进行覆盖测试,必须适当地选取测试用例组。若x,y是两个变量,可供选择的测试用例组共有Ⅰ、Ⅱ、Ⅲ、Ⅳ四组,如表中给出,则实现判定覆盖至少应采取的测试用例组是(B)或(C);实现条件覆盖至少应采取的测试用例组是(D);实现路径覆盖至少应采取的测试用例组是(E)或(F)。 供选择的答案A:  ①语句覆盖②条件覆盖③判定覆盖④路径覆盖B~F: ①Ⅰ和Ⅱ组②Ⅱ和Ⅲ组③Ⅲ和Ⅳ组④Ⅰ和Ⅳ组   ⑤Ⅰ、Ⅱ、Ⅲ组⑥Ⅱ、Ⅲ、Ⅳ组⑦Ⅰ、Ⅲ、Ⅳ组   ⑧Ⅰ、Ⅱ、Ⅳ组答:A.④B.⑤C.⑧D.④E.⑤F.⑧判定表为判定覆盖选取测试用例情形:对第一个判定选取测试用例组Ⅰ和Ⅱ,当用Ⅰ覆盖判定的T分支时,不会走到第二个分支;当用Ⅱ覆盖判定的F分支时,第二个判定需另取一个测试用例组覆盖其T分支,此时取测试用例组Ⅲ或Ⅳ即可。因此,选择⑤或⑧均可。为条件覆盖选取测试用例情形:取测试用例组Ⅰ和Ⅳ就可以覆盖所有4个条件的取值。为路径覆盖选取测试用例情形:总共3条路径,需3个测试用例,可选使各路径为T的测试用例。Ⅰ、Ⅱ、Ⅲ或Ⅰ、Ⅱ、Ⅳ均可,可选⑤或⑧。7、下面是选择排序的程序,其中datalist是数据表,它有两个数据成员:一是元素类型为Element的数组V,另一个是数组大小n。算法中用到两个操作,一是取某数组元素V[i]的关键码操作getKey(),一是交换两数组元素内容的操作Swap():voidSelectSort(d atalist&list){//对表list.V[0]到list.V[n-1]进行排序,n是表当前长度。for(inti=0;i0,B>0,C>0,且A+B>C,B+C>A,A+C>B。如果是等腰的,还要判断是否A=B,或B=C,或A=C。对于等边的,则需判断是否A=B,且B=C,且A=C。列出等价类表: 测试用例设计(略)9、设要对一个自动饮料售货机软件进行黑盒测试。该软件的规格说明如下:“有一个处理单价为1元5角钱的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”、“雪碧”或“红茶”按钮,相应的饮料就送出来。若投入的是2元硬币,在送出饮料的同时退还5角硬币。”(1)试利用因果图法,建立该软件的因果图;(2)设计测试该软件的全部测试用例。答:(1)因果图(2)测试用例设计测试用例每一纵列为一个测试用例11、应该由谁来进行确认测试?是软件开发者还是软件用户?为什么? 答:在对照需求做有效性测试和软件配置审查时,是由软件开发者在开发环境下进行的测试。而接下来做验收测试时则以用户为主。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用用户界面输入测试数据,并分析测试的输出结果。一般使用生产中的实际数据进行测试。 如果软件是为多个客户开发的,则需要进行α测试和β测试。α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。软件在一个自然设置状态下使用。开发者坐在用户旁边,随时记下错误情况和使用中的问题。这是在受控制的环境下进行的测试。β测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。这些用户是与公司签定了支持产品预发行合同的外部客户,他们要求使用该产品,并愿意返回有关错位错误信息给开发者。与α测试不同的是,开发者通常不在测试现场。因而,β测试是在开发者无法控制的环境下进行的软件现场应用。面向对象软件工程练习一、填空题1、面向对象的特征是对象唯一性、抽象性和继承性、多态性。2、面向对象有三个基本要素,它们是抽象、封装性和共享性。3、类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。4、类具有操作,它是对象的行为的抽象,用操作名和该操作的方法实现来描述。5、在类层次中,子类只继承一个父类的属性和方法,则称为单重继承。子类继承了多个父类的属性和方法,则称为多重继承。6、OMT方法是RumBaugh等人提出的面向对象开发方法。开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计。7、Coad和Yourdon方法完成了从需求角度出发的认定工作,面向对象设计可以在此基础上,从设计的角度进一步进行的认定。8、Booch方法通过分析问题陈述正文,将其中的映射为对象,将其中的映射为方法,从而为对象和方法的认定提供了一种简单的策略,虽然Booch方法原是面向的语言,但仍处于面向对象开发方法的奠基性地位。9、不仅统一了Booch方法、OMT方法、OOSE方法的表示方法,而且对其作了进一步的发展,最终成为为国际对象组织(OMG)认可的同一建模语言。10、在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即和整体-部分关系。11、在面向对象设计中存在三种内聚,即、和。二、单选填空题1、对象是面向对象开发方法的基本成分,每个对象可用它本身的一组()和它可以执行的一组操作来定义。A.服务B.参数C.属性D.调用2、在面向对象方法中,把一组具有相同数据结构和相同操作的对象的集合定义为()。此定义包括一组数据属性和在数据上的一组合法操作。A.聚合B.类C.结构D.主题3、面向对象技术的许多强有力的功能和突出的优点都来源于把系统组织成一个类的层次结构。一个类的上层可以有父类,下层可以有子类。这种系统的类层次结构的一个重要性质是(),通过它,一个类可共享其父类的全部数据和操作。A.传递性B.复用性C.并行性D.继承性4 、一个面向对象软件的体系结构通过它的成分对象及各对象之间的关系来确定,与传统的结构化开发方法相比,它具有()的优点。A.设计稳定B.性能稳定C.模块独立D.硬件独立5、封装性是指所有软件部件都有明确的范围以及清楚的外部边界。每个软件部件都有友好的(),软件部件的内部实现和外部使用分离。A.使用方式B.界面C.调用D.继承6、属性指的是类中对象具有的特性(数据)。不同对象的同一属性可具有相同的或不同的()。A.属性值B.操作C.服务D.控制7、操作是类中对象所使用的一种功能或变换。类中的各个对象可以共享操作,方法是类中操作的()。A.别名B.实现步骤C.功能D.脚本8、()应当在应用分析之前进行,因为我们在了解问题之前应对问题敞开思想考虑,不应加以限制。A.论域分析B.高层设计C.实例建立D.类的开发9、应用程序可以通过执行对象的操作来改变对象的属性值,但它必须通过()的传递。A.接口B.控制C.消息D.实例10、在软件开发过程中,抽取和整理用户要求并建立问题论域精确模型的过程叫做()。A.生存期B.面向对象分析C.面向对象程序设计D.面向对象设计11、Rumbaugh等人提出的对象模型化技术OMT把分析时收集到的信息组织在三种模型中,即对象模型、动态模型和()。A.信息模型B.控制模型C.功能模型D.行为模型12、对象模型表示了静态的、结构化的系统数据性质,描述了系统的静态结构。它是从现实世界实体的相互关系的角度来描述、表现对象间的相互关系。该模型主要关心系统中对象的结构、属性和操作,使用了()的工具来刻划。A.E-R图B.对象图C.系统流程图D.系统结构图13、组装关系是一种“整体-部分”关系。在这种关系中,有整体类和部分类之分。组装关系中最重要的性质是(),它还具有逆对称性。A.局部性B.完整性C.一致性D.传递性14、分类关系是“一般化-特殊化”关系。一般化类又称为父类,特殊化类又称为子类。分类关系和()是同时存在的。A.传递性B.逐步求精C.继承性D.全局性15、继承有单继承和多继承。单继承指的是子类只有一个父类,在一个类层次结构中若只有单继承,则该类层次结构是树形结构。多继承指的是子类可以有多个父类,在一个类层次结构中若有多继承,则该类层次结构是()层次结构。A.树形B.星形C.网状D.环形16、动态模型描述与时间和变化有关的系统的性质。该模型描述了系统的控制结构,表示了瞬时的行为化的系统控制性质,它关心的是系统的控制、操作的执行顺序。它从系统涉及的事件和对象的()出发,表现了对象及对象间的相互行为。A.状态B.属性C.操作D.控制17、动态模型描述的系统属性是触发事件、事件序列、状态、事件和状态的组织。使用()作为描述工具。A.状态图B.顺序图C.活动图D.进程图18 、功能模型用来说明值是如何计算的,表明值之间的依赖关系及其相关的功能。数据流图有助于表示功能依赖关系,其中的处理对应于状态图中的活动和动作,数据流对应于对象图中的()。A.实例连接B.对象或属性C.消息传递D.关联19、操作与对象模型中的属性和关联的查询有关,与动态模型中的()有关,与功能模型中的加工有关。A.事件B.状态C.变换D.处理20、面向对象设计阶段中的高层设计是要确定实现系统的策略和目标系统的()。A.体系结构B.算法设计C.类结构D.类设计21、面向对象设计阶段中的类设计是要确定实现方案中的类、关联和接口形式及实现操作的()。A.逻辑B.顺序C.控制D.算法22、状态是对象属性值的抽象,状态指明了对象对()的响应。A.输入事件B.输入信息C.输入数据D.输入序列23、活动是一种有时间间隔的操作,它是依附于状态的操作。动作是一种瞬时操作,它是与()联系在一起的操作。A.时间B.事件C.控制D.状态24、事件可以看成是信息从一个对象到另一个对象的单向传送。因此要确定各事件的发送对象和接收对象。()用来表示事件、事件的接收对象和发送对象。A.事件追踪图B.进程图C.脚本D.状态序列图三、选择填空题1、从供选择的答案中选择适合下面有关范型的叙述的正确答案,将答案编号与叙述的题号对应起来。(1)问题的解决是基于规则的,它把有关问题的知识分解成一组具体规则,用语言的if_then等结构来表示这些规则。④(2)问题的解决把软件视为由一系列步骤构成的算法。每一步骤都是带有预定输入和特定输出的一个过程,连贯起来产生合理的稳定的贯通于整个程序的控制流。③(3)把一个问题分解成独立执行的模块。让不只一个程序(进程)同时运行。这些进程互相配合,解决问题。⑥(4)把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。②供选择的答案:①面向存取②面向对象③过程性④逻辑性⑤函数型⑥面向进程⑦说明型⑧原型2、从供选择的答案中选出与下面有关面向对象范型的叙述最适合的答案,将其编号填入相应的括号内。 对象是面向对象范型的(A)。每个对象可用它自己的一组(B)和它可以执行的一组(C)来表征。应用执行对象的(C)可以改变该对象的(B)。它的应用必须通过(D)的传递。可以认为,这种(D)的传递大致等价于过程性范型中的函数调用。某些语言提供了特殊功能,允许对象引用自己。若一个对象没有显式地被引用,则可让该对象(E)。供选择的答案:A. ①基本单位②最小单位③最大单位④语法单位B~C.①行为②功能③操作④数据⑤属性D. ①接口②消息③信息④操作⑤过程E. ①撤消②歇着③缺省④隐式引用⑤引用自己 答:A.①,B.⑤,C.③D.②E.③3、从供选择的答案中选出与下面有关面向对象开发过程的叙述最适合的答案,将其编号填入相应的括号内。 在面向对象软件开发过程中特别重视复用。软件构件应独立于当初开发它们的应用而存在。在以后的应用开发中,可以调整这些独立构件以适应新问题的需要。因此,应使得类成为一个(A)的单元。这样就有一个(B)生存期问题。(B)生存期有自己的步骤,与任一特定应用的开发(C)。按照这些步骤,可以完整地描述一个基本(D)。而不仅仅考虑当前正在开发的系统。系统开发的各个阶段都可能会标识新的类。随着各个新类的标识,(B)生存期引导开发工作逐个阶段循序渐进。 在设计与实现类时,应尽可能利用既存类提供为当前应用所需要的功能,利用既存类的三个可能途径是:(E)复用既存类;对既存类进行(F)以得到满足要求的类;重新开始进行开发。供选择的答案:A.①可复用②可测试③可适用④可靠B.①应用②寿命③类④软件C.①相关②密切相关③负相关④无关D.①概念②实体③事件④事情E,F.①修改②更新③照原样④演化答:A.①,B.③,C.④,D.②,E.③,F.④4、从供选择的答案中选出与下面有关类设计的叙述最适合的答案,将其编号填入相应的括号内。 类常常被看做是一个抽象数据类型的实现,更合适的是把类看做是某种(A)的一个模型。事实上,类是单个的(B)语义单元。类的用户能够操纵的操作叫做类的(C)。类定义的其余部分给出数据定义和辅助功能定义,包括类的实现。类的实现常常包括了其它类的实例,这些实例(D)被其它对象存取,包括同一个类的其它实例。类的实现可能还包括某些私有方法,实现它们的类可以使用,而其它任何对象都不能使用。 类,就它是一个数据值的聚合的意义上来看,与Pascal中的记录或C中的结构类似,但又有差别。类扩展了通常的记录语义,可提供各种级别的(E)。类不同于记录,因为它们包括了操作的定义,这些操作与类中声明的数据值有相同的地位。供选择的答案:A.①功能②概念③结构④数据B.①语法②词法③语义④上下文环境C.①界面②操作③行为④活动D.①可自由地②可有控制地③可通过继承④应受保护不E.①可移植性②可重复性③可访问性④继承性答:A.②,B.③,C.①,D.④,E.③5、从供选择的答案中选出与下面有关需求定义的叙述最适合的答案,将其编号填入相应的括号内。有一种非形式的技术,对于捕获信息有时很有用,它就是CRC卡片。CRC是(A)、(B)和(C)的缩写。它可以用来组织在每一个子系统中的类。以CRC卡片为辅助工具的设计有以下几个步骤:识别(A)和(B),分配(B),找寻(C),细化。CRC的作者强调模拟在执行每个基本功能时系统内部出现的(D),以此推动细化工作的进行。在这个过程中,CRC卡片是十分重要的一个工具。 用CRC卡片来进行设计,既不是传统的“自上而下”,也不是“自下而上”,而是从已知到未知的逐步(E)的过程。供选择的答案:A~C.①控制②协作者③可靠性④类   ⑤计算⑥职责⑦比较⑧上下文环境D. ①场景②算法③进程④变换E. ①演化②进展③展开④认识答:A.④,B.⑥,C.②,D.①,E.③6、从供选择的答案中选出与下面有关论域分析的叙述最适合的答案,将其编号填入相应的括号内。 论域分析的(A)和对应用分析和高层设计的(B)就构成问题论域的模型。已有许多建立这种模型的技术,一种特别适用的技术就是语义数据模型。 语义数据模型来源于Codd的(C)数据模型和实体—联系模型,并对这类模型进行了扩充和一般化。语义数据模型可以表达问题论域的内涵,还可以表示复杂对象和对象之间的联系。语义数据模型与(C)数据模型本来都是在(D)设计时使用的,但它们的范围已经扩展到系统的开发。作为(D)结构标准的ANSI/SPARC建议提出了三层模型:外部模型、概念模型和(E)模型。这三层可以被映象到面向对象设计的三个层次上去。外部模型与概念模型层相当于高层设计阶段。供选择的答案:A,B.①控制②输出③输入④处理   ⑤计算⑥解释⑦比较⑧创建C. ①变换②关系③抽象④事务D.  ①网络②程序③算法④数据库E.  ①低层②底层③内部④存储答:A.③,B.②,C.②,D.④,E.③7、从供选择的答案中选出与下面的叙述最适合的答案,将其编号填入相应的括号内。从分析到设计的过程流如图所示。一旦已经开发完成一个合理完整的(A)模型后,就要着手(B)的设计。这需要描述(B)的特征,以准确表达待实现的用户需求,以及实现需求所必须的支持环境。一旦定义了各个(B),就开始(C)设计,这时,可利用CRC卡片,将属性转换为(D),将关系转换为(E)。供选择的答案:A~C.①分析②系统设计③模块设计④子系统设计   ⑤对象设计⑥数据设计⑦操作设计⑧行为设计D~E.①对象②数据结构③算法④消息传递   ⑤控制⑥并发处理⑦进程⑧过程 答:A.①,B.④,C.⑤,D.②,E.④8、从供选择的答案中选出与下面有关面向对象分析的叙述最适合的答案,将其编号填入相应的括号内。 由RumBaugh等人提出的一种面向对象方法叫做对象模型化技术(OMT),即三视点技术,它要求把分析时收集的信息建立在三个模型中。第一个模型是(A),它的作用是描述系统的静态结构,包括构成系统的对象和类,它们的属性和操作,以及它们之间的联系。第二个模型是(B),它描述系统的控制逻辑,主要涉及系统中各个对象和类的时序及变化状况。(B)包括两种图,即(C)和(D)。(C)描述每一类对象的行为,(D)描述发生于系统执行过程中的某一特定场景。第三个模型是(E),它着重于描述系统内部数据的传送与处理,它由多个数据流图组成。供选择的答案:A,B,E:①数据模型②功能模型③行为模型④信息模型    ⑤原型⑥动态模型⑦对象模型⑧逻辑模型    ⑨控制模型⑩仿真模型C,D: ①对象图②概念模型图③状态迁移图④数据流程图    ⑤时序图⑥事件追踪图⑦控制流程图⑧逻辑模拟图⑨仿真图⑩行为图答:A.⑦,B.⑥,C.③,D.⑥,E.②9、从供选择的答案中选出与下面有关面向对象设计的叙述最适合的答案,将其编号填入相应的括号内。 在面向对象软件设计过程中,应按如下要求进行类的设计:只有类的共有界面的成员才能成为使用类的操作,这就是软件设计的(A)原则。当且仅当一个操作对类的实例的用户有用时,它才是类公共界面的一个成员,这是软件设计的(B)原则。由同属一个类的操作负担存取或加工类的数据,这是软件设计的(C)原则。两个类之间的交互应当仅涉及参数表,这是软件设计的(D)原则。每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集,这是软件设计的(E)原则。供选择的答案:A:①过程抽象②功能抽象③信息隐蔽④共享性 ⑤连通性B:①标准调用②最小界面③高耦合④高效率 ⑤可读性C:①数据抽象②低内聚③高内聚④低复杂度 ⑤低强度D:①显式信息传递②高内聚③低内聚④相互操作性 ⑤连接性E:①动态联编②异质表③信息隐蔽④多态性 ⑤继承性答:A.③,B.②,C.③,D.①,E.⑤10、从供选择的答案中选出与下面有关面向对象程序设计的叙述最适合的答案,将其编号填入相应的括号内。 面向对象的程序设计语言具有数据抽象、信息隐蔽、(A)等特征。作为运算单位的对象应具有下列特性:(B)、(C)、(D)。(E)是面向对象的语言。供选择的答案:A:①对象调用②对象变换③非过程性 ④信息继承⑤并发性 B~D:①对象把数据和处理数据的操作结合为一体   ②在程序运行时对象都处于活动状态   ③对象在计算中可向其他对象发送消息   ④接受消息的对象必须给消息发送者以回答   ⑤对象的内部状态只根据外部送来的消息才操作E:C++①,SMALLTALK,objectCC②,Ada,Modula2PASCAL ③,C++,APLAda④,objectC,C答:A.④,B.①,C.③,D.④,E.①四、问答题1、什么叫面向对象?面向对象方法的特点是什么?为什么要用面向对象方法开发软件?2、什么是“对象”?识别对象时将潜在对象分成7类,试给出这7类对象的名称,并举例说明。3、什么是“类”?“类”与传统的数据类型有什么关系?有什么区别?4、基于复用的面向对象开发过程分为哪几个阶段?每一个阶段需要做哪些事情?5、按照类生存期,类的开发有哪几种方式?每一种方式需要做哪些事情?6、面向对象开发方法与面向数据流的结构化开发方法有什么不同?使用面向对象开发方法的优点在什么地方?7、基于复用的面向对象的需求分析过程主要分为两个阶段:论域分析和应用分析。试讨论它们各自承担什么任务?如何衔接?8、建立分析和设计模型的一种重要方法是UML。试问UML是一种什么样的建模方法?它如何表示一个系统?9、使用面向对象设计方法进行高层设计,以建立系统的体系结构。这样的结构有哪几种主要的组成部分?每一部分所承担的职责是什么?10、在类的设计中需要遵循的方针是什么?三个主要的设计准则:抽象、信息隐蔽和模块化如何才能作到?11、在类的通过复用的设计中,主要的继承关系有哪几种?试举例说明。问答题答案:1、解答:关于“面向对象”,有许多不同的看法。Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+消息通信”。如果一个软件系统是使用这样4个概念设计和实现的,则认为这个软件系统是面向对象的。面向对象方法的特点是:·方法的唯一性,即方法是对软件开发过程所有阶段进行综合考虑而得到的。·从生存期的一个阶段到下一个阶段的高度连续性,即生存期后一阶段的成果只是在前一阶段成果的补充和修改。·把面向对象分析(OOA)、面向对象设计(OOD)和面向对象程序设计(OOP)集成到生存期的相应阶段。使用面向对象方法开发软件的好处是:·开发方法的唯一性,开发阶段的高度连续性,表示方式的一致性;·问题空间实体的自然表示,减轻了设计者的负担,在设计系统之初不必考虑一个很完整的解决方案。·建立稳定的系统结构,可促进复用性,易于维护,易于修改,可合理利用共同性,减少复杂性。2、解答:对象的定义:·对象是面向对象开发模式的基本成分,是现实世界中个体或事物的抽象表示。 ·每个对象可由一组属性和它可以执行的一组操作来定义。可能的潜在对象有7类:①外部实体:它们产生或接受为目标系统所使用的信息。如各种物理设备、使用人员、其它相关的子系统。②事物:问题的信息域所涉及的概念实体。如各种报告、显示、文字、信号、规格说明等。③事件:系统运行时发生的并需要系统记忆的事件。如状态转换、物理运动等。④角色:与系统有交互的各种人员所扮演的角色。如经理、工程师、销售人员等。⑤场所或位置:建立系统整体环境或问题上下文的场所、位置。如基于计算机的系统的安装场所等。⑥部门等。  组织,  组织机构:与应用有关的组织机构。如⑦结构:定义由一组成分对象组成的聚合对象,或在极端情况下,定义对象的相关类。如传感器、四轮驱动车、计算机等。3、解答:把具有相同特征和行为的对象归在一起就形成了类。类成为某些对象的模板,抽象地描述了属于该类的全部对象的属性和操作。属于某个类的对象叫做该类的实例。对象的状态则包含在它的实例变量,即实例的属性中。类定义了各个实例所共有的结构,类的每一个实例都可以使用类中定义的操作。实例的当前状态是由实例所执行的操作定义的。类,就它是一个数据值的聚合的意义上来看,与Pascal中的记录或C中的结构类似,但又有差别。类扩展了通常的记录语义,可提供各种级别的可访问性。也就是说,记录的某些成份可能是不可访问的,而这些成份对于本记录型来说具有可访问性。类不同于记录,因为它们包括了操作的定义,这些操作与类中声明的数据值有相同的地位。4、解答:基于复用的面向对象开发过程分为6个阶段,如图中虚线框所围。①论域分析:论域分析开发问题论域的模型。论域分析应当在应用分析之前进行,我们在了解问题之前应当对问题敞开思想考虑,考察问题论域内的一个较宽的范围,分析覆盖的范围应比直接要解决的问题更多。②应用分析:应用(或系统)分析细化在论域分析阶段所开发出来的信息,并且把注意力集中于当前要解决的问题。因为通过论域分析,分析人员具有了较宽的论域知识,因而能开发出更好的抽象。③高层设计 :在一个纯面向对象环境中,软件体系结构设计与类设计常常是同样的过程,但还是应当把体系结构设计与类的设计分开。在高层设计阶段,设计应用系统的顶层视图。这相当于开发一个代表系统的类,通过建立该类的一个实例并发送一个消息给它来完成系统的“执行”。④类的开发:根据高层设计所标识的对各个类的要求和类的规格说明,进行类的开发。因为一个应用系统往往是一个类的继承层次。对这些类的开发是最基本的设计活动。⑤实例的建立:建立各个对象的实例,实现问题的解决方案。⑥组装测试:按照类与类之间的关系组装一个完整的应用系统的过程中进行的测试。各个类的封装和类测试的完备性可减少组装测试所需要的时间。5、解答:按照下图所示的类生存期,类的开发有三种方式。(1)既存类的复用只要有可能就应复用既存类。为了达到此目的,开发人员必须能够找到这样一些类,它们都能选用来提供所需要的行为。有时应用要解决的问题与以前遇到的一些问题密切相关,因此那些问题中定义和实现的类可以复用。然而,多数照原样复用被限制在低层上最基本的类,像基本数据结构。对于较一般的结构,可以在实例化时,使用参数来规定它们的行为。(2)从既存类进行演化多数复用情况是一个类已经存在,它提供的行为类似于要为新类定义的行为。开发人员可以使用既存类做为定义新类的起点。新类将根据既存类渐进式地演变而成。这样,在开发一个新类时,只需要花费较少的工作量就能复用许多既存类,得到所需要的新类。演化可以是横向的,也可以是纵向的。横向的演化导致既存类的一个新的版本,而纵向的演化将从既存类导出新类。我们在这里将主要讨论类的纵向渐进式开发。①渐进式设计。设计既存类的一个特殊化类。通过确定新类中打算要的所有成员,设计者可以确定哪些追加的行为可以加到类中去,哪些既存的行为应当重新实现。②渐进式实现。许多实现可以从既存类直接继承;有时可以仅使用很少的新代码就能利用既存类的实现,而这些新代码必须当做老方法的上文或下文进行编写。此外,在渐进式设计阶段增加的那些行为也必须实现。③渐进式测试。在测试中最花费时间的就是测试用例的生成。许多新类的测试用例可以从既存类的测试用例组中得到。新类的某些部分因为在测试既存类时已经测试过,因此可以不再需要测试。(3)从废弃型进行开发 这个分支仅在不得已的情况下使用。任何一个类,只要它的开发不涉及既存类,就可看做是一个新的继承结构的开始。因此,将建立两种类:一种是抽象类,它概括了将要表达的概念;另一种是具体类,它要实现这个概念。①设计。设计阶段需把分析阶段所产生的界面当做输入,并确定类的其它属性。设计给出类的所有细节。这个阶段的输出是有关类的属性的足够的细节,可支持它们的实现。单个类的设计包括构造数据存储,它是类定义的核心。其内部表示还包括一些私有函数,它们实现了共有操作的某些部分。单个类的低层设计还涉及一些重要联系,如继承和组装关系。②实现。通过变量的声明、操作界面的实现及支持界面操作的函数的实现,可实现一个类的预期行为和状态。在变量中存储的数据通常是其它类的实例,它们提供了为该类的开发所需的服务。③测试。单个的类为测试提供了自然的单元。如果类的定义提供的界面比较狭窄,那么穷举测试就有可能实现。类的测试在最抽象的层次开始,沿继承联系继续向下进行,新的类可以很容易地完全地被测试,而已经测试过的部分就不需要从新测试了。(4)求精和维护传统的维护活动是针对应用的,而求精过程则是针对类,并把类链接在一起的结构的。因为我们利用抽象进行开发,因此,维护部分在任一时间都能修改这些抽象。随着经验的增长,我们可以够标识抽象的抽象,使得继承结构通过泛化增加新的层次,即在既存的根类之上增加新的层次。6、解答:结构化开发方法是使用最广泛、历史最长的过程化开发方法。结构化开发方法产生过程的抽象,这些抽象把软件视为处理流,定义构成一系列步骤的算法,每一步骤都是带有预定义输入和特定输出的一个过程,把这些步骤串联在一起可产生合理的稳定的贯通于整个程序的控制流。这将最终导致一个很简单的具有静态结构的体系结构。在结构化开发方法中,数据结构是应算法步骤的要求而开发的。数据结构贯穿于过程,提供过程需要传送给它的操作的信息。系统的状态是一组全局变量,这组全局变量保持了状态的值,把它们从一个过程传送到另一个过程。结构化开发方法是一种成熟的应用开发过程。对这种方法已经存在许多支持。然而,在大型系统的开发上和在面向用户系统的构造上存在一些问题。改进大型系统开发的技术主要集中在开发数据抽象。日益增多的考虑是使用抽象数据类型,把过程化系统开发过程包括到数据驱动的方法中。随着大型系统的开发,接踵而来的问题就是要把过程抽象与数据抽象方法组合起来,这种需要导致了面向对象开发方法的诞生。面向对象开发方法是我们分解问题所使用方法演化的结果。在结构化开发方法中过程抽象是优先的,而面向对象开发方法中优先的是实体,即问题论域的对象。在面向对象开发方法中,把标识和模型化问题论域中的主要实体做为系统开发的起点,主要考虑对象的行为而不是必须执行的一系列动作。面向对象系统中的对象是数据抽象与过程抽象的一个混合体。表示这些实体的数据抽象是面向对象设计过程的主要产品,系统的状态保存在各个数据抽象的核心所定义的数据存储中。控制流被分成块,并被包括在各个在数据抽象上的各个操作里面。不像在结构化开发方法里那样,把数据从一个过程传送到另一个过程,而是控制流从一个数据抽象被传送到另一个数据抽象。完成的系统体系结构更复杂但也更灵活。在块中分离的控制流允许把复杂的动作视为局部的相互影响。7、解答:论域分析是软件开发方法中一个基本组成部分,它给出的一组抽象是论域的知识的高层表示,用来做为特定系统需求开发的参考。由于分析常常是在超出当前应用的范围进行的,所以这个技术仅在扩充当前系统或将来建立其它系统时找寻复用信息时才是实用的。 论域分析是对与应用开发问题有关的范围十分广泛的知识的学习。论域的边界是模糊的,它们很多是凭借经验和实际考虑(如可用资源)定义的。主要思想是想把考虑的领域放宽一些,把相关的概念都标识到,以帮助更好地掌握应用的核心知识。当用户改变他们对系统需求的想法时,范围广泛的分析可以帮助预测这些变化,并不再需要进一步的分析。论域分析的目的是标识基本概念,识别论域的特征,把这些概念集成到论域的模型中。这个模型必须包含概念之间的关系和关于每个单独概念的完全信息。这个信息起着一种胶合作用,把所有相关概念并入论域综合视图中去。论域分析是一个持续的活动,它可以在软件开发的任一时刻进行标识,它还是一个可在超出特定应用的开发范围时仍然能够正常继续的处理。当论域变化时,必须更新那些抽象和关系。论域分析的结果使得我们可积累更多的有关论域的经验和细化我们的抽象。使用论域抽象做为系统开发基础的好处是可适应性,客户可能改变需求,而且问题环境也可能改变。基于论域信息的应用更容易适应论域内知识的改变和用户需求的变化。论域分析是一个长期的投资。如果在初始开发时需求发生变化,它可能有更直接的效益;在很大的项目上可能更快地得到回报。最大的价值是抽象的开发,这些抽象表示了一个问题论域中的基本概念,它们形成的软件库还可支持许多应用的开发。应用(或系统)分析细化在论域分析阶段所开发出来的信息,并且把注意力集中于要解决的精确的问题。应当把客户对系统的需求当做限制来使用,它们缩减了论域的信息量,而这种信息将是主动设计过程的一部分。就这一点来说,保留的信息受到论域分析视野的影响。论域分析产生的模型并不需要用任何基于计算机系统的程序设计语言来表示,而应用分析阶段产生影响的条件则伴随着某种基于计算机系统的程序设计语言的表示。响应时间需求、用户界面需求和某些特殊的需求,如数据安全等,在这一层都被分解提取。许多模型识别的要求是针对不止一个应用的。通常我们着重考虑两个方面:应用视图和类视图。必须对每个类的规格说明和操作详细化,还必须对形成应用结构的类之间的相互作用加以表示。8、解答:UML叫做统一的建模语言,它把Booch、Rumbaugh和Jacobson等各自独立的OOA和OOD方法中最优秀的特色组合成一个统一的方法。UML允许软件工程师使用由一组语法的语义的实用的规则支配的符号来表示分析模型。在UML中用5种不同的视图来表示一个系统,这些视图从不同的侧面描述系统。每一个视图由一组图形来定义。这些视图概述如下:·用户模型视图:这个视图从用户(在UML中叫做参与者)角度来表示系统。它用使用实例(usecase)来建立模型,并用它来描述来自终端用户方面的可用的场景。·结构模型视图:从系统内部来看数据和功能性。即对静态结构(类、对象和关系)模型化。·行为模型视图:这种视图表示了系统动态和行为。它还描述了在用户模型视图和结构模型视图中所描述的各种结构元素之间的交互和协作。·实现模型视图:将系统的结构和行为表达成为易于转换为实现的方式。·环境模型视图:表示系统实现环境的结构和行为。通常,UML分析建模的注意力放在系统的用户模型和结构模型视图,而UML设计建模则定位在行为模型、实现模型和环境模型。9、解答:一个典型的高层设计是在Smalltalk中使用的MVC软件体系结构,即模型/视图/控制器(Model/View/Controller) 。在这个结构中,模型是软件中的应用论域的各种对象,它们的操作独立于用户界面;视图则管理用户界面的输出;而控制器处理软件的输入。输入事件给出要发送给模型的消息。一旦模型改变了它的状态,就立即通过关联机制通知视图,让视图刷新显示。这个关联机制定义了在模型与各个视图之间的关系,它允许模型的运行独立于与它相关联的视图。类似地,控制器在输入事件发生时将对视图及模型进行控制与调度。另一个典型的高层设计是Coad与Yourdon提出的OOD模型。这个模型也有5层结构,又被划分成了4个组成部分:问题论域、用户界面、任务管理和数据管理。问题论域部分的职责是:组合所有的论域中定义的类,为应用设计适当的类层次,为适应语言要求简化继承层次,细化设计以改善性能,开发与数据管理部分的接口,做细化时加入低层对象,评审设计并审查对分析模型所做的增补。人机交互部分的职责是:定义用户类型,开发任务场景,设计用户命令层次,建立原型以细化与用户交互,设计相关的类和类层次,适当时集成GUI类。任务管理部分的职责是:标识任务的类型(如事件驱动,时钟驱动),建立优先级,标识协调者,为每个任务设计适当的类。数据管理部分的职责是:设计数据结构和布局,设计管理数据结构所需的服务,标识可以协助实现数据管理的工具,设计适当的类和类层次。10、解答:在设计类时需要遵循的方针是:·信息隐蔽:通过信息隐蔽可保护类的存储表示不被其它类的实例直接存取。·消息限制:该类实例的用户应当只能使用界面提供的操作。·狭窄界面:只有对其它类的实例是必要的操作才放到界面上。·强内聚:模块内部各个部分之间应有较强的关系,它们不能分别标识。·弱耦合:一个单独模块应尽量不依赖于其它模块。·显式信息传递:两个类之间的交互应当仅涉及显式信息传递。·派生类当做派生类型:每个派生类应该当做基类的特殊化来开发,而基类所具有的公共界面成为派生类的共有界面的一个子集。·抽象类:某些语言提供了一个类,用它做为继承结构的开始点,所有用户定义的类都直接或间接以这个类为基类。为了在类的设计中做到抽象、信息隐蔽和模块化:以类作为系统的基本模块单元,通过一般化―特殊化关系和整体―部分关系,搭建整个系统的类层次结构,实现数据抽象和过程抽象;将数据和相关的操作封装在类内部,建立共有、私有和子类型等存取级别,将数据表示定义成为类的私有成员,实现信息隐蔽。通过建立类属性(类模板),将某些有可复用要求的类设计成在数据类型上通用的可复用的软件构件,这样有助于实现模块化。11、解答:在类的通过复用的设计中,主要的继承关系有两大类:①配置:利用既存类来设计类,可能会要求由既存类的实例提供类的某些特性。通过把相应类的实例声明为新类的属性来配置新类。例如,一种仿真服务器可能要求使用一个计时器来跟踪服务时间。设计者不必开发在这个行为中所需的数据和操作,而是应当找到计时器类,并在服务器类的定义中声明它。 但如果使用既存类的内部表示来做为新类的内部表示的一部分,这是一种“针对实现”的继承方式,这种继承方式不好。例如,考虑使用继承来实现一个Circle类。Point类可支持Circle类的一部分实现。为了定义一个圆,我们只需要定义一个点和一个值,做为圆的圆心和半径。把Point当做子类,Circle类不但能得到由x和y提供的圆心,而且还能得到一个操作,让圆能够自由移动。但这样做,我们失去了抽象。②演变:要开发的新类可能与一个既存类非常类似,但不完全相同。此时可以从一个既存类演变成一个新类,可以利用继承机制来表示一般化―特殊化的关系。特殊化处理有三种可能的方式。如果新的概念是一个既存类所表示概念的一个特殊情况,特殊化运算可以从该既存类的定义产生新类的初始构造,这是典型的类继承的使用。既存类A的数据结构和操作可以成为新类B的一部分,如图(a)所示。既存类A的公共操作成为新类B的共有界面部分。如果新类比软件库中那些既存类更一般,则新类B不具有既存类A的全部特性,一般化运算把两个类中共同的特性移到新的更高层的类中,高一层的类是B,我们将要设计它。原来的类A成为新类B的子类。如图(b)所示。一个既存类A与我们设计的新类B共享概念的某一个部分,则两个概念的共同部分形成新类的基础,且既存类与新类两者成为子类,如图(c)所示。五、应用题1、建立窗口系统的对象模型,问题陈述如下:“窗口分为对话窗、图形窗、滚动窗三种。对话窗中有若干对话项,由唯一的项名字来确定;对话项分为按钮、选择项和正文项三种,选择项中有若干选择项入口。图形窗中有若干形状元素,形状元素分为一维形状和二维形状。一维形状又分为直线、圆弧、折线;二维形状分为圆、椭圆、矩形、多边形,其中折线与多边形由若干有序顶点组成。正文窗是滚动窗的一种,而图形滚动窗既是图形窗又是滚动窗。”答:·对象模型应由对象图和数据词典组成。根据题意,先给出对象图。·窗口类与对话窗类、图形窗类、滚动窗类是一般化?特殊化关系。·对话窗类与对话项类是限定关联,限定词是对话项名。·对话项类与按钮类、选择项类、正文项类是一般化?特殊化关系。·选择项类与选择项入口类是一对多的拥有关联。·图形窗类与形状元素类也是一对多的拥有关联。·形状元素类与一维形状、二维形状是一般化?特殊化关系。·一维形状类与直线类、圆弧类、折线类是一般化?特殊化关系。·折线类与顶点类是整体-部分关系。·二维形状类与圆类、椭圆类、矩形类、多边形类是一般化?特殊化关系。·多边形类与顶点类是整体-部分关系,一个多边形至少有3个顶点。·正文窗类与滚动窗类是一般化?特殊化关系。·图形滚动窗类的父类是图形窗类和滚动窗类,这是一个多继承关系。 对应的窗口系统的数据词典 2、在学校教学管理系统中,学生查询成绩就是系统中的一次交互,请用状态图来描述这种交互的行为。答:首先建立事件追踪图,用于描述用户与系统的一次交互行为。在图中,按时间的先后次序以及事件的发送和接收顺序,自上而下画出。 根据事件追踪图建立的状态图如下: '