黑色字体为原本答案,蓝色字体修改补充了
复习题组「61-65/61-65/13/13」
一、名词解释
61.确认测试
检查已实现的软件是否满足了需求规格说明中所确定的各种需求,以及软件配置是否完全、正确。(过程:功能性测试---软件配置复查---验收测试----α测试和β测试)
(补充)确认测试也称为验收测试,它的目标是验证软件的有效性。
通常,验证指的是保证软件正确地实现了某个特定要求的一系列活动;确认指的是为了保证软件确实满足了用户需求而进行的一系列活动。
62.过程模式(未找到答案)
所谓软件过程模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范形,使工程的进展达到预期的目的。对一个软件的开发无论其大小,我们都需要选择一个合适的软件过程模型,这种选择基于项目和应用的性质、采用的方法、需要的控制,以及要交付的产品的特点。一个错误模型的选择,将迷失我们的开发方向。
63.RMMM计划(Risk Mitigation, Monitoring and Management Plan)
翻译为:风险缓解,监测和管理计划,又称软件项目风险管理,是软件项目管理的重要内容。在进行软件项目风险管理时,要辩识风险,评估它们出现的概率及产生的影响,然后建立一个规划来管理风险。风险管理的主要目标是预防风险。
软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。
风险管理策略可以包含在软件项目计划中,或者风险管理步骤也可以组织成一个独立的风险缓解、监控和管理计划(RMMM计划)。RMMM计划将所有风险分析文档化,并由项目管理者作为整个项目计划中的一部分来使用。
64.耦合
耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。
65.多态性
同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。对象根据所接受的消息而做出动作,同样的消息被不同的对象接收时可能导致完全不同的行为,这种现象称为多态性。
(补充)在面向对象的设计中,多态主要体现在向不同的对象发送同一个信息,不同的对象在接收时会产生不同的行为(即方法),对像可以用自己的方法去响应共同的信息。( 多态:在同一个时刻,体现出来的不同状态)
二、简答题
61.简述模型在软件开发中的作用。
软件开发是一个复杂的过程,建立模型可降低复杂度.
建立模型可以使开发者有效地交流.
软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为软件项目工作的基础。
62.软件维护有哪些特点?
1、结构化维护与非结构化维护差别巨大
2、维护的代价高昂
3、维护的问题很多
下面列出和软件维护有关的部分问题:
(1)理解别人写的程序通常非常困难,而且困难程度随着软件配置成分的减少而迅速增加。如果仅有程序代码没有说明文档,则会出现严重的问题。
(2)需要维护的软件往往没有合格的文档,或者文档资料显著不足。认识到软件必须有文档仅仅是第一步,容易理解的并且和程序代码完全一致的文档才真正有价值。
(3)当要求对软件进行维护时,不能指望由开发人员给我们仔细说明软件。由于维护阶段持续的时间很长,因此,当需要解释软件时,往往原来写程序的人已经不在附近了。
(4)绝大多数软件在设计时没有考虑将来的修改。除非使用强调模块独立原理的设计方法学,否则修改软件既困难又容易发生差错。
(5)软件维护不是一项吸引人的工作。形成这种观念很大程度上是因为维护工作经常遭受挫折。
上述种种问题在现有的没采用软件工程思想开发出来的软件中,都或多或少地存在着。不应该把一种科学的方法学看做万应灵药,但是,软件工程至少部分地解决了与维护有关的每一个问题。
63.模块化的三个重要特征是什么,阐明各自的作用。
1.相对独立性,可以对模块单独进行设计、制造、调试、修改和存储,这便于由不同的专业化企业分别进行生产;
2.互换性,模块接口部位的结构、尺寸和参数标准化,容易实现模块间的互换,从而使模块满足更大数量的不同产品的需要;
3.通用性,有利于实现横系列、纵系列产品间的模块的通用,实现跨系列产品间的模块的通用。
64.单元测试时,为什么需要开发驱动模块和桩模块?
这是因为在开发设计的初级阶段,完成一个单元的开发任务后,这个单元相关联上面、下面的模块尚未开发出来,为了要测试所开发单元,所以要驱动模块和桩模块
在底层进行的测试叫做单元测试,也叫做模块测试。
驱动模块:
驱动模块是用来模拟被测模块的上一级模块,相当于被测模块的主程序。它接收数据并将相关数据传送给被测模块,启用被测模块并打印出相应结果。驱动模块的目的很单纯,就是访问类库的属性和方法来确定类库是否正确。
桩模块:
桩模块是模拟被测试模块所调用的模块,而不是软件产品的组成部分。主程序作为驱动模块,与之直接相连的模块是桩模块,也称为“替身模块”。桩模块本身不执行任何功能,只在它作为替身被调用时返回静态值。
65.什么是Use Cases Model,主要作用是什么?
是系统既定功能及系统环境的模型
用例模型最重要的作用是将系统行为传达给客户或最终用户。
用例(Use Case)是一种描述系统需求的方法,使用用例的方法来描述系统需求的过程就是用例建模。
使用用例的方法来描述系统的功能需求的过程就是用例建模,用例模型主要包括以下两部分内容:
用例图(Use Case Diagram)
确定系统中所包含的参与者、用例和两者之间的对应关系,用例图描述的是关于系统功能的一个概述。
用例规约(Use Case Specification)
针对每一个用例都应该有一个用例规约文档与之相对应,该文档描述用例的细节内容、
用例模型的作用
首先,用例模型是一种标准的语言,很容易成为开发人员之间交流和沟通的媒介,用例模型可以精确地定义软件需求,出现歧义的可能性很小,这可以保证用户和开发人员对需求理解的一致性
其次,用例模型可以成为我们评估压法工作量的一个标准,特别是对于迭代式开发言。迭代式开发模型里,通常依据用例模型来划分软件的开发周期:优先级别高的用例会在早期的迭代周期中实现,而优先级别低的用例则被安排在后续的迭代周期中完成。可以通过限制每个迭代周期中的用例个数来保证迭代周期长度的合理性
再次,用例模型在整个开发过程中都扮演着非常重要的角色,它可以驱动软件的分析和设计逐步细化
最后,测试过程中使用的测试用例-----特别是那些关注软件功能的测试用例---往往也是根据用例模型来确定的
三、论述题
13.讨论不同软件过程模型与软件开发的关系
常见的过程模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型等。
软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。通常使用生命周期模型简洁地描述软件过程。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。常见的过程模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型等。
1.瀑布模型
这个特点有两重含义:
1.必须等前一阶段的工作完成之后,才能开始后一阶段的工作;
2.前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
瀑布模型每个阶段都应坚持两个重要做法:
1.每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。完整、准确的合格文档是软件开发时期各类人员之间相互通信的媒介,也是运行时期对软件进行维护的重要依据。
2.每个阶段结束前都要对所完成的文档进行评审,以便迟早发现问题,改正错误。事实上越是早期阶段犯下的错误,暴露出来的时间就越晚,排除故障改正错误所需付出的代价也越高。因此,及时审查,是保证软件质量,降低软件成本的重要措施。
可以说瀑布模型是由文档驱动的。这个事实也是它的一个缺点,在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的。瀑布模型历史悠久、广为人知的,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发出的产品可能并不是用户真正需要的。
(1)传统的瀑布模型:(2)实际的瀑布模型:
2.快速原型模型
所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型的本质是“快速”,开发人员应该尽可能快地建造出原型系统,以加速软件开发过程,节约软件开发成本。原型的用作是获知用户的真正需求,一旦需求确定了,原型系统将被抛弃。
快速原型模型正是为了克服瀑布模型的缺点而提出来的。它通过快速构建一个可在计算机上运行的原型系统,让用户试用原型系统并收集用户反馈意见的办法,获取用户的真实需求。
3.增量模型
增量模型也称为渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
优点:
1.能在较短的时间内向用户提交可完成部分工作的产品。
2.逐步增加产品功能可以使用户有充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
增量模型具有可在软件开发的早期阶段使投资获得明显回报和较易维护的优点,但是,要求软件具有开放的结构是使用这种模型时固有的困难。
4.螺旋模型
螺旋模型的基本思想就是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作每个阶段之前都增加了风险分析过程的快速原型模型。
螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。事实上项目越大,风险也越大,因此进行风险分析的必要性也越大。此外只有内部开发的项目,才能在风险过大时方便中止项目。
螺旋模型的主要优势在于,它是风险驱动,但是,这也可能是它的一个弱点。除非软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险:当项目实际上正在走向灾难时,开发人员可能还认为一切正常。
风险驱动的螺旋模型适用于内部开发的大型软件项目,但是,只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会获得成功。
(1)简化的螺旋模型 (2)完整的螺旋模型
4.喷泉模型
喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,以面向对象的软件开发方法为基础,它适合面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。无间隙是指在分析、设计和实现等开发活动之间不存在明显的边界。
按照在软件生命周期过程中应完成的任务的性质,在概念上可以把软件生命周期划分成定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试以及运行维护等8个阶段。实际从事软件开发工作时,软件规模、种类、开发环境及使用的技术方法等因素,都影响各阶段的划分。
软件过程是为了获得高质量的软件产品所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。由于没有适用所有软件项目的任务集合,科学、有效的软件过程应该定义一组适合所承担的项目特点的任务集合。通常使用软件过程模型简洁地描述软件过程,它规定了把软件生命周期划分成的阶段及各个阶段的顺序。
四、应用题
13.下列是一段伪码程序:
START
INPUT (A,B,C)
IF A>5
THEN X=10
ELSE X=1
ENDIF
IF B>10
THEN Y=20
ELSE Y=2
ENDIF
IF C<15
THEN Z=30
ELSE Z=3
ENDIF
PRINT(X,Y,Z)
STOP
问题:(1)画出控制流程图(10分)
(2)采用基本路径测试,给出独立的路径(10分)
(3)写出路径覆盖用例(10分)