你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

软件工程实用教程(3版)第12345678章习题与参考答案(人民邮电大学郭宁主编)

2021/12/12 16:22:21

目录

  • 第一章 软件工程引论
  • 第二章 软件生命周期及开发模型
  • 第三章 结构化需求分析
  • 第四章 结构化软件设计
  • 第五章 面向对象的需求分析
  • 第六章 面向对象的软件设计
  • 第七章 软件测试技术
  • 第八章 软件维护技术

第一章 软件工程引论

1.判断题
(1)√ (2)√ (3)× (4)× (5)×
2.选择题
(1)D (2)B (3)A (4)B (5)C (6)B (7)D
3.简答题
(1)什么是软件危机?它和软件工程有什么关系?
答:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
(2)简述软件和软件工程的定义以及软件工程的形成过程。
答:软件是与计算机系统操作有关的程序、规程、规则及其文档和数据的统称。软件由两部分组成:一是机器可执行的程序和有关的数据;二是与软件开发、运行、维护、使用和培训有关的文档。
软件工程是指导计算机软件开发和维护的工程学科。它强调按照软件产品的生产特性,采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前最好的技术结合起来,以便经济地开发出高质量的软件并有效地维护它。
软件工程的发展经历了以下3个阶段。
第一阶段:20世纪70年代,—传统软件工程时代。
第二阶段:20世纪80年代,—过程软件工程时代。
第三阶段:进入20世纪90年代以后,—构件软件工程时代。
(3)软件工程的目标是什么?如何解决多目标之间的矛盾?
答:软件工程的目标:软件开发成本较低。软件功能能够满足用户的需求。软件性能较好。软件可靠性高。软件易于使用、维护和移植。能按时完成开发任务,并及时交付使用。
有些目标之间是相互补充的,如易于维护和高可靠性之间、功能强与可用性之间;有些目标是彼此相互冲突的,如若只考虑降低开发成本,很可能同时也降低了软件的可靠性,如果一味追求提高软件的性能,可能造成开发出的软件对硬件的依赖性较强,从而影响到软件的可移植性;不同的应用对软件质量的要求不同,如对实时系统来说,其可靠性和效率比较重要;对生命周期较长的软件来说,其可移植性、可维护性比较重要,所以,应该根据不同的系统需求决定个目标之间的重要性。
(4)在软件开发中软件开发工具有什么作用?
答:软件开发工具是指用来辅助软件开发、维护和管理的软件。现代软件工程方法得以实施的重要保证是软件开发工具和环境。软件开发工具使软件在开发效率、工程质量、减少软件开发对人的依赖性等多方面得到改善
(5)什么是软件支持过程?它与软件工程方法学有何关系?
答:软件过程是指生产满足需求且达到工程目标的软件产品所涉及的一系列相关活动,它覆盖了需求分析、系统设计、实施以及支持维护等各个阶段。
软件过程有各种分类方法。按性质划分软件过程可概括为基本过程类、支持过程和组织过程类。可见软件支持过程是软件过程中的一种。
(6)在软件工程知识体系中,将软件工程划分为哪些知识域?
答:SWEBOK将软件工程知识体系划分为10个知识域,分为两类过程。一类是开发与维护过程,包括软件需求、软件设计、软件构造、软件测试和软件维护;另一类是支持过程,包括软件配置管理、软件工程管理、软件工程过程、软件工程工具与方法、软件质量。
(7)B.W.Boehm提出的软件工程基本原则的作用是什么?
答:
1.采用分阶段的生命周期计划,以实现对项目的严格管理
2.坚持进行阶段评审,以确保软件产品质量
3.实行严格的产品控制,以适应软件规格的变更
4.采用现代程序设计技术
5.软件成果能清楚地审查
6.开发小组人员应该少而精
7.承认不断改进软件工程实践的必要性

第二章 软件生命周期及开发模型

1.判断题
(1)× (2) × (3)√ (4)√ (5)×
2.选择题
(1)B (2)C (3)D (4)D (5)A (6)D
(7)B (8)C (9)B (10)A (11)C (12)B
3.简答题
(1)简述什么是软件生命周期。根据国家标准《计算机软件开发规范》,软件生命周期主要包括哪几个阶段?
答:作为工程化的一般特征,软件产品和其他工业产品一样,软件产品也包括设计、生产、使用和消亡几个阶段,并称之为软件的生命周期,即指软件产品从功能确定、设计、开发成功、投入使用,并在使用中不断修改、完善,直至被新的软件所替代,而停止该软件使用的全过程。国家标准GB8566—1988《计算机软件开发规范》将软件生命周期划分为几个阶段:可行性研究、项目计划、需求分析、总体设计、详细设计、编码实现(包括单元测试、集成测试、确认测试)、系统运行和维护。这几个阶段又可以归纳为3个阶段,即软件定义阶段,软件开发阶段和软件运行维护阶段。
(2)瀑布模型有哪些特点?对于里程碑,有哪些认识?
答:1970年W.Royce最早提出瀑布模型。
瀑布模型的特点:①线性化模型结构;②各阶段具有里程碑特征;③基于文档的驱动;④严格的阶段评审机制。
其中的里程碑是指瀑布模型中的阶段只能逐级到达、不能跨越;每个阶段都有明确的任务,都需要产生确定的成果。 由于瀑布模型是一种线性模型,要求项目严格按规程推进,必须等到所有开发工作全部完成以后才能获得可以交付的软件产品。因此,瀑布模型不太适用于用户需求经常变更的软件项目。
瀑布模型是一种基于里程碑的阶段过程模型,它所提供的里程碑式的工作流程,为软件项目按规程管理提供了便利。例如,按阶段制订项目计划,分阶段进行成本核算,进行阶段性的评审等。这为提高软件产品质量提供了有效保证。
(3)试说明原型模型的两种实现方案各有什么特点,各适用于哪些情况。
答:原型可以分为3类。
1)抛弃式原型:这种原型在目的达到后即被抛弃,原型不作为最终产品,如上所述。
2)进化式原型:这类原型的形成和发展是逐步完成的,它是高度动态迭代和高度动态循环,每次迭代都要对系统重新进行需求规格说明、重新设计、重新实现和重新评价,所以是对付变化最为有效的方式。
3)增量式模型:系统是一次一段地增量构造,与演化式原型的最大区别在于增量式开发是在软件总体设计基础上进行的。
(4)一般认为,只有大型项目才采用螺旋模型,其原因是什么?
答:螺旋模型的优越性在于它吸收了“进化”的概念,使得开发人员和用户对每一个演化层出现的风险均有所了解,并对此做出反应。但使用该模型需要丰富的风险评估经验和专门知识,如果项目风险较大又未及时发现,势必造成重大损失。实际上,对软件项目进行风险分析也需要费用,假如项目风险分析费用过高,甚至超过了项目的开发费用,显然就不合适了。一般大型项目才有较高的风险,才有进行详细风险分析的必要。因此,这种模型比较适合大型的软件项目。
(5)为什么说构件复用模型是一种有利于软件按工业流程生产的过程模型?
答:对象技术将事物实体封装成包含数据和数据处理方法的对象,并抽象为类。经过适当的设计和实现的类也可称为构件。由于构件具有一定的通用性,可以在不同的软件系统中被复用。在基于构件复用的软件开发中,软件由构件装配而成,这就如同用标准零件装配汽车一样。构件复用技术,它能带来更好的复用效果,并且具有工程特性,更能适应软件按工业流程生产的需要。
(6)敏捷方法的价值观和原则与传统的方法有哪些联系和区别?
答:相对于“非敏捷”,敏捷不仅是体现在有效地响应变化,它还包括鼓励程序员团队与业务专家之间的紧密协作、面对面地沟通(认为比书面的文档更有效)、强调可运行软件的快速交付而不是中间产品,敏捷过程提倡可持续开发。建立紧凑而自我组织型的团队,能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。
(7)在什么情况下建议不用敏捷方法来开发软件系统?
答:从产品角度看,敏捷方法适用于需求萌动并且快速改变的情况,如系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合;从组织结构的角度看,组织结构的文化、人员、沟通则决定了敏捷方法是否适用。
(8)具有原型化的瀑布模型具有什么特点?它与瀑布模型最大的不同是什么?
答:为了克服瀑布模型的问题,可以在需求阶段或设计阶段平行地进行几次快速建立原型的工作。原型开发后,可以获得更为清晰的需求反馈信息,既可以消除风险或减少不确定性,又可以采用平行瀑布模型方式。在瀑布模型的各阶段间转换时,可以适当并行扩展各阶段的开发工作。例如,在需求分析完成60%时,就可以开始进行这60%已完成分析部分的设计工作,同时并行进行其余40%的需求分析。

第三章 结构化需求分析

1.判断题
(1)× (2)√ (3)× (4)√ (5)×
2.选择题
(1)C (2)B (3)A (4)A (5)B
(6)C (7)D (8)C (9)B (10)C
3.简答题
(1)什么是需求分析?需求分析的任务是什么?
答:需求分析:开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。
基本任务: ⑴问题识别:双方确定对问题的综合需求,这些需求包括功能需求,性能需求,环境需求,用户界面需求;分析与综合,导出软件的逻辑模型;编写文档:包括编写"需求规格说明书",“初步用户使用手册”,“确认测试计划”,“修改完善软件开发计划”
(2)在进行可行性研究时,向用户推荐的方案中应清楚在表明什么?
答:可行性研究主要集中在以下4个方面。
1)经济可行性:进行开发成本的估算及可能取得效益的评估,确定目标系统是否值得投资开发。
2)技术可行性:对目标系统进行功能、性能和限制条件的分析,确定在现有资源的条件下,技术风险有多大,系统是否能实现。这里,资源包括已有的或可以提供的硬件、软件资源,现有技术人员的技术水平与已有的工作基础。
3)操作可行性:系统的操作方式能否在用户的组织内行得通,以及对目标系统可能会涉及的政策、责任等问题做出决定。
4)社会可行性:主要分析项目对社会的影响,从方针政策、经济结构、法律和制度等社会因素方面考虑项目开发的合理性和意义。
总之,可行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解,分析员应该建议停止这项开发工程,以避免时间、资源、人力和金钱的浪费;如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。
(3)需求工程包含哪些内容?如何写好需求规格说明?
答:需求工程指应用工程化方法、技术和规格来开发和管理软件的需求。需求工程的目标是获取高质量的软件需求。需求工程突出了工程化原则,强调以系统化、条理化和重复化的方法进行软件需求的相关活动,从而增强管理性和降低需求开发的成本。需求工程由需求开发活动和需求管理过程组成。一个好的需求规格说明应符合以下要求:1)正确性。每一项需求都必须准确地陈述其要开发的功能。即需求规格说明对系统功能、行为、性能等的描述必须与用户的期望相吻合,这是软件系统真正需要完成可达到的。2)完整性。需求规格说明应该包括软件要完成的全部任务,每一项需求都必须是在已知系统和环境的权能和限制范围内可以实施,不能遗漏任何必要的需求信息。3)必要性。每一项需求都应把客户真正所需要的和最终系统所需遵从的标准记录下来。4)划分优先级。给每项需求、特性或使用实例分配一个实施优先级以指明它在特定产品中所占的分量。5)无二义性。对所有需求说明的读者都只能有一个明确统一的解释,由于自然语言极易导致二义性,所以尽量把每项需求用简洁明了的语言表达出来。6)可验证性。需求规格说明中描述的需求都可以运用一些可行的手段对其进行验证和确认。
(4)答:获取需求是需求分析的基础,要在获得详实调查资料的基础之上才能进行需求分析。需求获取包括了一系列的方法和活动,如研究资料法、问卷调查法、用户访谈和实地观察法等。需求分析人员可以使用这些方法、技术进行收集、确认用户的需求。
(5)答:数据流图和数据字典一起构成了系统的逻辑模型。没有数据字典,数据流图就不严格;没有数据流图,数据字典也没有作用。数据字典的重要用途是作为分析阶段的工具。在数据字典中建立严密一致的定义有助于改进分析人员和用户之间的通信,避免许多误解的发生。数据字典也有助于改进不同的开发人员或不同的开发小组之间的通信。同样,将数据流图中的每个元素的精确定义放在一起,就构成了系统的、完整的需求规格说明的主体。
数据字典还作为连接软件设计、实现和进化阶段的开发机构的信息存储。在软件设计阶段,数据字典是存储文件或数据库设计的基础。在实施阶段,还可参照数据字典描述数据。随着系统的改进,字典中的信息也会发生变化,新的信息会随时加入进来。数据字典对下列4类元素进行定义:数据项;数据流;数据存储(文件);加工。
(6)答:软件需求规格说明(Software Requirement Specification,SRS)是需求工程最终产生的结果,必须用一种统一的方式将它们编写成可视文档,包含了软件的功能需求和非功能需求。需求规格说明是项目相关人员对要开发的软件系统达成的共识,是进行系统设计、实现、测试和验收的基本依据,也是整个软件开发过程中最重要的文件。软件需求规格说明的主要内容有:
image.png
(7)答:结构化分析(Structured Analysis,SA)是由美国Yourdon公司提出的适用于分析典型的数据处理系统的,以结构化的方式进行系统定义的分析方法。这个方法通常与L.Constantine提出的结构化设计(Structured Design,SD)方法衔接起来使用,即所谓的SASD方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。Yourdon方法首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(Structured Programming,SP)。
4.应用题
(4)
image.png
image.png

第四章 结构化软件设计

1.判断题
(1)×(2)√(3)√(4)√(5)√(6)√(7)×(8)√ (9) ×(10)×
2.选择题
(1)D (2)A (3)A (4)C (5)C
4.应用题
(2)答:
[外链图片转存中…(img-amYHlyFF-1639296488049)]image.png
(4)答:
 有两个条件:旅游时间t:t1{7-9,12}; t2{1-6,10,11}
订票量a:a1{≤20};a2{>20}
 根据旅游时间、订票量的条件组合,以及折扣量画出的判定表如下:
image.png
判定树
image.png

第五章 面向对象的需求分析

1.判断题
(1)√ (2)√ (3)×
2.选择题
(1)B (2)C (3)B
3.简答题
(1)答:对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组服务组成。类(Class)是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。具体来说,类由数据和方法集成,它是关于对象性质的描述,包括外部特性和内部实现两个方面。类是具有相同属性和行为的一组相似对象的抽象,在现实世界中并不能真正存在。类好比是一个对象模板,根据需要用它可以产生多个对象(即类的实例)。因此类所代表的是一个抽象的概念或事物,类是静态概念;在客观世界中实际存在的是类的实例,即对象,对象是动态概念。类是对象的抽象,有了类之后,对象则是类的具体化,是类的实例。
(2)答:继承(Inheritance)是面向对象方法学中的核心概念,它是指从一个类的定义中可以派生出另一个类的定义,被派生出的类(子类)可以自动拥有父类的全部属性和服务。继承简化了人们对现实世界的认识和描述,在定义子类时不必重复定义那些已在父类中定义过的属性和服务,只要说明它是某个父类的子类,并定义自己特有的属性和服务即可。继承机制是组织构造和复用类的一种工具,如果将用面向对象方法开发的类作为可复用构件,那么在开发新系统时可以直接复用这个类,还可以将其作为父类,通过继承而实现复用。复用减少了程序的代码量和复杂度,提高了软件的质量和可靠性,软件的维护修改也变得更加容易。
多态性(Polymorphism)是指同名的方法或操作在不同类型的对象中有各自相应的实现。
在存在继承关系的一个类层次结构中,不同层次的类可以共享一个操作,但却有各自不同的实现。当一个对象接收到一个消息请求时,它根据其所属的类,动态地选用在该类中定义的操作。多态性机制不但为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。
(3)答:X1、X2和X3表示用例中的角色(或参与者)。已知UC3是抽象用例,那么X1可通过图中的UC4、UC1用例与系统进行交互。UC2是UC4的可选部分,UC5是UC4的必须部分。
4.应用题
(1)答:
image.png
(2)(略)
(3)

image.png

第六章 面向对象的软件设计

1.判断题
(1)× (2)√
2.选择题
(1)D (2)B (3)A
3.简答题
(1)答:面向对象系统是由对象到子系统、再到系统的集成。通常是松耦合的,系统中没有一个明显的顶层,即面向对象系统没有严格的层次控制结构,相互调用的功能也分散在不同的类中,类通过消息的相互作用申请和提供服务。此外,面向对象程序具有动态性,程序的控制流往往无法确定。因此,增量式集成测试不再适用,只能采用基于操作的集成测试。面向对象的集成测试关注系统的结构和内部的相互作用,可以分成两步进行:先进行静态测试,再进行动态测试。
面向对象基于操作的集成测试策略有两种:基于线程的测试和基于使用的测试。
基于线程的测试把相应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回归测试以保证不产生副作用。
基于使用的测试首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把软件系统构造完为止。
(2)答:以常见的一些编程语言为例:
FORTRAN语言,它不仅面向科学计算,数据处理能力也极强。适用于科学工程计算
Pascal语言,具有很强的数据和过程结构化能力,它语言简明,数据类型丰富,程序结构严谨。它是第一个体现结构化编程思想的语言。用于描述结构化算法和科学计算,操作系统的编写
C语言:功能强大,支持复杂的数据结构,可大量运用指针,具有丰富灵活的操作运算符及数据处理操作符,它还具有汇编语言的某些特征,使程序运行效率高。可用于许多领域,特别是在操作系统等方面有较大优势。
Coble语言,它具有极强的数据定义能力,程序说明与硬件环境说明分开、数据描述与算法描述分开。结构严谨层次分明,广泛用于商业数据处理。
SQL:结构化查询语言,用于对数据库进行存取管理。
汇编语言和Ada语言,主要用于实时处理和编写系统软件。
Prolog、Lisp语言。Lisp是一种函数型语言,特别适用于组合问题中符号运算和表处理,用于定理证明、树的搜索和其他问题的求解。Prolog是一种逻辑型语言,它提供了支持知识表示的特性,每一个程序由一组表示事实、规则和推理的句子组成,比较接近与自然语言。这两种语言主要用于人工智能系统开发。
C++、Java语言,是面向对象的设计语言,用于面向对象的方开发软件。

(3)答:纯面向对象程序设计语言着重支持面向对象方法研究和快速原型的实现,而混合型面向对象程序设计语言的目标则是提高运行速度和使传统程序员容易接受面向对象的思想。成熟的面向对象程序设计语言一般都是提供丰富的类库和强有力的开发环境。除此之外,开发人员在选择面向对象程序设计语言时,还应考虑可复用性、类库和开发环境以及一些其他的因素。语言、开发环境和类库这3个因素综合起来,共同决定了可复用性。考虑类库时,不仅应该考虑是否提供了类库,还应考虑库中提供了哪些有价值的类。在选择编程语言时还应考虑的因素有为用户学习面向对象分析、设计和编程技术所能提供的培训服务;在使用面向对象程序设计语言期间能提供的技术支持;能提供给开发人员使用的开发工具、开发平台和发布平台;对机器性能和内存的需求;集成已有软件的容易程度等。
4.应用题
(1)略
(2)略
(3)(1)0…* (2)1 (3)0…* (4)1…* (5)1 (6)0…*
(7) getCategories (8)getCommodities (9)createPromotion (10)addCommodities

第七章 软件测试技术

1.判断题
(1)☓ (2)√ (3)☓ (4)√ (5)☓ (6)√ (7)☓ (8)☓
(9)☓ (10)☓
2.选择题
(1)B (2)C (3)D (4)D (5)A (6)A (7)C (8)B
(9)C (10)D
3.简答题
(1)答:首先要分别完成每个单元(模块)的测试任务,以确保每个模块能正常工作。然后把已经测试过的模块组装起来,进行集成测试。完成集成测试以后,要对开发工作初期制定的确认准则进行检验。完成确认测试以后,为检验它能否与系统的其他部分协调工作,还需要进行系统测试。软件测试步骤如下。
1)制订测试计划。该计划被批准后转向第2)步。
2)设计测试用例。该用例被批准后转向第3)步。
3)如果满足“启动准则”,那么执行测试。
4)撰写测试报告。
5)消除软件缺陷。如果满足“完成准则”,那么正常结束测试。
(2)答:
1)黑盒测试也称功能测试或数据驱动测试。在测试时,把程序看作一个不能打开的黑盒子,它是在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
黑盒测试技术是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。黑盒测试能够发现的错误类型包括:功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止错误等。黑盒测试技术主要包括等价类划分、边界值分析、因果图、错误推测等方法。
2)白盒测试也称结构测试或逻辑驱动测试,它是在已知程序内部结构的情况下设计测试用例的测试方法。在使用白盒测试方法时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,对所有逻辑路径进行测试,得出测试数据。白盒测试的主要技术有逻辑驱动、路径测试等,主要用于软件验证、检验语法错误、编译错误、性能问题、逻辑问题、判定条件问题和编程规范等。
(3)答:根据软件开发流程,软件测试工作可以分为单元测试、集成测试、系统测试和验收测试。单元测试是对软件中的基本组成单位进行的测试,验证每个模块是否满足系统设计说明书的要求。集成测试是将已测试过的模块组合成子系统,重点测试各模块之间接口和联系。系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等是否满足其规约所指定的要求。验收测试是根据需求规格说明书中定义的全部功能和性能要求,确认软件是否达到了要求。
4.应用题
(1)答:
解:1)划分等价类并编号,下表等价类划分的结果
image.png
2)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为①、⑤、⑧,设计的测试用例如下:
测试数据 期望结果 覆盖的有效等价类
200211 输入有效 ①、⑤、⑧
3)为每一个无效等价类设计一个测试用例,设计结果如下:
测试数据 期望结果 覆盖的无效等价类
95June 无效输入 ②
20036 无效输入 ③
2001006 无效输入 ④
198912 无效输入 ⑥
200401 无效输入 ⑦
200100 无效输入 ⑨
200113 无效输入 ⑩

(2)答:
1) 分析这一段说明,列出原因和结果。
原因:
1.售货机有零钱找
2.投入1元硬币
3.投入5角硬币
4.押下橙汁按钮
5.押下啤酒按钮
结果:
21.售货机〖零钱找完〗灯亮
22.退还1元硬币
23.退还5角硬币
24.送出橙汁饮料
25.送出啤酒饮料

2)画出因果图,如图所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。
中间结点:
11. 投入1元硬币且押下饮料按钮
12. 押下〖橙汁〗或〖啤酒〗的按钮
13. 应当找5角零钱并且售货机有零钱找
14. 钱已付清

3)转换成判定表:

4)在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据。

第八章 软件维护技术

1.判断题
(1)× (2)× (3)√ (4)× (5)√
2.选择题
(1)B (2)B (3)C (4)D (5)D (6)C
3.简答题
(1)答:为了保证软件在运行期间正常运行,延长软件的使用寿命,发挥良好的社会效益和经济效益,软件维护必不可少
(2)答:决定软件可维护性的质量属性主要有以下几个方面。
可理解性。可理解性是指人们通过阅读源代码和相关文档,了解程序功能、结构、接口和内部过程的容易程度。一个可理解的程序应该具备模块化、结构化、风格一致化(代码风格与设计风格一致)、易识别化(使用有意义的数据名和过程名),以及文档完整化等一些特性。
可测试性。可测试性是指论证程序正确性的容易程度。程序复杂度越低,证明其正确性就越容易。而且测试用例设计得合适与否,取决于对程序的理解程度。因此,一个可测试的程序应当是可理解的、可靠的和简单的。
可修改性。可修改性是指程序容易修改的程度。一个可修改的程序应当是可理解的、通用的、灵活的和简单的。其中通用性是指程序适用于各种功能变化而无需修改。灵活性是指能够容易地对程序进行修改。
(3)答:由于文档是对软件的总目标、程序各组成部分之间的关系、程序设计策略以及程序实现过程的历史数据等的说明和补充,因此,文档对提高程序的可理解性有着重要作用。即使是一个十分简单的程序,要想高效率地维护它就需要编制文档来解释其目的及任务。
对于程序维护人员来说,要想对程序编制人员的意图重新改造,并对今后变化的可能性进行估计,也必须建立完整的维护文档。
(4)答:在软件维护阶段,变更、完善软件的活动包括:提出维护申请;论证维护申请;制定维护方案;进行维护活动;建立维护文档;评价维护结果。由此可见,完成一项软件维护任务,又好似重复了软件开发的全过程。
(5)答:维护副作用是指由于修改而导致的错误或其他多余动作的发生。3类主要副作用:
修改代码的副作用
一般可在回归测试过程中对修改代码的副作用造成的软件故障进行查找和改正。
修改数据的副作用
完善的设计文档可以限制修改数据的副作用。这种文档描述了数据结构,并提供了一种把数据元素、记录、文件和其他结构与软件模块联系起来的交叉对照表。
修改文档的副作用
在软件再次交付使用之前,对整个软件配置进行评审将大大减少修改文档的副作用。
(6)答提高软件的可维护性,可以从两方面来考虑:一方面,在软件开发期的各个阶段,各项开发活动进行的同时,应该时时处处努力提高软件的可维护性,保证软件产品在发布之日具有高水准的可维护性;另一方面,在软件维护期进行维护活动的同时,也要兼顾提高软件的可维护性,更不能对可维护性产生负面影响。具体的提高软件可维护性的技术途径主要有以下4个方面:建立完整的文档;明确质量标准;采用易于维护的技术和工具;加强可维护性评审.