1选择20题,每题1分;填空10题,每题1分;简答5题,每题8分;设计题3题,每题10分(流程图的设计、流图设计和环形复杂度的计算、语句覆盖和判定覆盖测试用例的设计)。1.详细设计中,过程设计的工具,N-S图,PAD图及判定表和判定树各有何特点和适用情况?(第六章)(1)盒图(N-S图):一种不允许违背结构程序设计精神的图形工具,又称为N-S图。它有下述特点:①功能域(作用域)明确,可以从盒图上一眼就看出来。②盒图没有箭头,因此不允许随意转移控制。③很容易确定局部和全程数据的作用域。④很容易表现嵌套关系,也可以表示模块的层次结构。适用:对大部分设计均有适用性,常用于软件工程详细设计中,提供一种结构化的方式,便于思考和解决问题。(2)PAD图:PAD是问题分析图(problemanalysisdiagram),它用二维树形结构的图来表示程序的控制流。PAD图的主要优点如下:①使用PAD符号设计的程序必然是结构化程序。②PAD图所描绘的程序结构十分清晰。最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸。每增加一个层次,图形向右扩展一条竖线。图中竖线的总条数就是程序的层次数。③PAD图表现的程序逻辑,易读、易懂、易记。程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。④容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成。⑤既可表示程序逻辑,也可描绘数据结构。⑥支持自顶向下、逐步求精方法的使用。适用:为FORTTAN,COBOL,PASCAL等每种常用的高级程序设计语言提供了一套相应的图形符号。开始时可以定义一个抽象的程序,随着设计的深入,使用def符号逐步增加细节,直至完成详细设计,如图6.6所示。(3)判定表(P127有例子):适于表示复杂的条件组合与应做的动作之间的对应关系。特点是:①能够间接而又无歧义的描述处理故意则。②并不适用于作为一种通用的设计工具。③一张判定表由以下四部分组成:左上部列出所有条件,左下部是所有可能的动作,右2上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。判定表右半部的每一列实际上就是一个规则,规定了与特定的条件组合相对应的动作。适用:算法中包含多重嵌套的条件选择。数据元素多于2个的时候,能够比判定表更简洁的表达,便于理解。盒图的基本符号(1)盒图的基本符号(2)abgfX2X4ichdeX3X6jX5X1TTFFFT=1=2=33PAD图的基本符号图6.6使用PAD图提供的定义功能来逐步求精的例子4PAD描述的示例(4)判定树判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。判定树的优点:形式简单到不需任何说明,一眼就可以看出其含义,易于掌握和使用。适用:数据元素多的时候,初次接触的人很容易就看懂用判定树表示计算行李费的算法2.白盒测试和黑盒测试技术的区别。(第七章)白盒测试技术:用白盒方法测试软件时设计测试数据的典型技术。已知产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格要求,所有内部成分是否经过检查。黑盒测试技术:用黑盒方法测试软件时设计测试数据的典型技术。已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。黑盒测试着重测试软件功能。黑盒测试并不能取代白盒测试,它是与白盒测试互补的测5试方法,它很可能发现白盒测试不易发现的其他类型错误。3.白盒测试中的逻辑覆盖测试包含哪几种类型。(第七章)逻辑覆盖:是对一系列测试过程的总称。这组测试过程逐渐进行越来越完整的通路测试。覆盖:测试数据执行源程序的过程。①语句覆盖的含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。②判定覆盖又叫分支覆盖。含义:不仅每个语句必须至少执行一次,而且每个判定的每个分支都至少执行一次。③条件覆盖含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。④判定/条件覆盖含义:选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。⑤条件组合覆盖含义:使得每个判定表达式中条件的各种可能组合都至少出现一次。⑥点覆盖含义:选取足够多测试数据,使得程序执行路径至少经过流图的每个结点一次。⑦边覆盖含义:选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。⑧路径覆盖含义:选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。4.软件维护的类型有哪些,及各自所占比重。(第八章)①改正性维护,占17%~21%:在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分隐藏的错误遗留到运行阶段。这些隐藏下来的错误在某些特定的使用环境下就会暴露出来。改正性维护:为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程。②适应性维护,占18%~25%:在使用过程中,外部环境(如:新的硬、软件配置)、数据环境(如:数据库、数据格式、数据输入/输出方式、数据存储介质)可能发生变化。适应性维护:为使软件适应这种变化,而去修改软件的过程。③完善性维护,占全部维护活动的50%~66%:在软件的使用过程中,用户往往会对软件提出新的功能与性能要求。为了满足上述要求,需要修改或再开发软件而进行的完善性的维护活动。以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。完善性维护不一定是救火式的紧急维修,可以是有计划、有预谋的一种再开发活动。④预防性维护:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的维护活动。其他维护活动只占4%左右。预防性维护的定义:采用先进的软件工程方法对需要维护的软件或软件中的某一部分(重新)进行设计、编制和测试的过程。65.软件项目的可行性研究的实质是什么?(第二章)可行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行的解,分析员应该建议停止这项开发工程。如果问题值得解,分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的计划。6.可行性研究包括哪些内容。(第二章)技术可行性、经济可行性、操作可行性(至少以上三种)、运行可行性、法律可行性、开发方案可行性7.衡量模块独立性的标准有哪些?(第五章)模块独立:具有独立功能而且和其他模块之间没有过多的相互作用的模块。模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。模块独立程度的度量标准:内聚和耦合。耦合:模块间互相依赖(连接)的紧密程度;内聚:模块内部各个元素彼此结合的紧密程度。8.模块间的耦合有哪些类型,如何区分?(第五章)数据耦合:模块彼此间通过参数交换信息,交换的信息仅仅是数据,数据耦合是低耦合。标记耦合:若两个模块间传递的参数中至少有一个是数据结构,如字符串或记录,并且在模块中仅用到该数据结构中的部分元素,则称这两个模块之间存在标记耦合。控制耦合:一个模块向另一个模块传递控制信息,接收信息的模块的动作根据信息值进行调整。控制耦合是中等程度的耦合,它增加了系统的复杂程度。在把模块适当分解之后通常可以用数据耦合代替它。公共耦合:两个模块共享全局的数据区域,称他们为公共耦合,不要使用全局变量。耦合的复杂程度随耦合模块的个数而变化,随个数的增加显著增加。内容耦合:有三种情况,是最高程度的耦合性(坚决避免使用这种耦合)模块独立性与耦合的关系图总之,耦合是影响软件复杂程度的一个重要因素。应该采取下述设计原则:尽量使用数据耦合,少用控制耦合和标记耦合,限制公共环境耦合的范围,完全不用内容耦合。9.模块内的内聚有哪些类型,如何区分?(第五章)7弱偶然内聚:如果一个模块的各成分之间毫无关系,则称为偶然内聚。逻辑内聚:几个逻辑上相关的功能被放在同一模块中。时间内聚:如果一个模块完成的功能只是因为时间因素关联在一起。过程内聚:如果一个模块内部的各个处理成分必须以特定的次序执行,则称为过程内聚。通信内聚:如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。顺序内聚:如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。功能内聚:模块的所有成分对于完成单一的功能都是基本的。设计时,尽量使用内聚度高的模块(顺序内聚,功能内聚);中内聚(过程内聚,通信内聚)也可;低内聚(偶然内聚,逻辑内聚,时间内聚)很坏,不要采用。10.结构化程序设计的定义及特点。定义:是进行以模块功能和处理过程设计为主的详细设计的基本原则。特点:结构化程序中的任意基本结构都具有唯一入口和唯一出口,并且程序不会出现死循环。在程序的静态形式与动态执行流程之间具有良好的对应关系11.软件测试的定义及目的。(第七章)软件测试的定义:是为了发现程序中的错误而执行程序的过程。软件测试的目的:暴露程序中的错误。测试目标决定了测试方案的设计,如果为了表明程序的正确,就会设计一些不易暴露错误的测试方案;如果是为了发现程序中的错误,就会设计出最能暴露错误的测试方案。G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的目标或定义:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。测试是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。12.软件生命周期的阶段划分及每个阶段的任务。(第一章)软件生命周期:软件生命周期的阶段划分由软件定义、软件开发和运行维护(也称为软件维护),直到最终被废弃所经历的时期。生命周期每个阶段的基本任务:软件定义阶段:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程总目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,制定工程进度表。这个时期的工作又称为系统分析,由系统分析员负责完成。这个时期进一步划分成3个阶段:问题定义、可行性研究和需求分析。强8开发时期的任务是:设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。前两个阶段又称为系统设计,后两个阶段又称为系统实现。维护时期的主要任务是:使软件持久地满足用户的需要。具体地说:当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。13.面向对象方法的特点、特征。(第九章)特征:(1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。(4)对象彼此之间仅能通过传递信息互相联系。特点:(1)与人类习惯的思维方法一致(2)稳定性好(3)可重用性好(4)较易开发大型软件产品(5)可维护性好14.类、对象的概念,多态、重载、封装的含义。(第九章)类:对具有相同数据和相同操作的一组相似对象的定义(对具有相同属性和行为的一个或多个对象的描述)对象:具有相同操作的集合;对问题域中某个东西的抽象。(是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有唯一的标识它的名字,而且向外界提供一组服务)多态:是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。重载:有两种重载:(1)函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;(2)运算符重载是指同一个运算符可以施加于不同类型的操作数上面。当然,当参数