软件工程第十一章

软件工程第十一章
软件工程第十一章

11.1 概述

11.1.1 软件质量的定义

软件质量定义为:

(1) 与所确定的功能和性能需求的一致性。

(2) 与所成文的开发标准的一致性。

(3) 与所有专业开发的软件所期望的隐含特性的一致性。

11.1.2 软件质量的度量和评价

影响软件质量的因素可以分为两大类:

(1) 可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。

(2) 只能间接度量的因素,如可用性或可维护性。

在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。

11.1.3 软件质量保证

1. 什么是软件质量保证

软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。

2. 质量保证的策略

质量保证策略的发展大致可以分为以下三个阶段:

(1) 以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。

(2) 以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。

(3) 以新产品开发为重。

3. 质量保证的主要任务

(1) 正确定义用户要求。

(2) 技术方法的应用。

(3) 提高软件开发的工程能力。

(4) 软件的复用。

(5) 发挥每个开发者的能力。

(6) 组织外部力量协作。

(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。

(8) 提高计划和管理质量。

4. 质量保证与检验

软件质量必须在设计和实现过程中加以保证。

11.2 质量度量模型

11.2.1 McCall质量度量模型

这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下:

(1) 面向软件产品操作。

(2) 面向软件产品修改。

(3) 面向软件产品适应。

11.2.2 ISO的软件质量评价模型

软件质量度量模型由三层组成。

11.3 软件复杂性

11.3.1 软件复杂性的基本概念

软件复杂性度量的参数很多,主要有:

(1) 规模,即总共的指令数,或源程序行数。

(2) 难度,通常由程序中出现的操作数的数目所决定的量来表示。

(3) 结构,通常用于程序结构有关的度量来表示。

(4) 智能度,即算法的难易程度。

软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

要求复杂性度量满足以下假设:

(1) 它可以用来计算任何一个程序的复杂性。

(2) 对于不合理的程序,例如对于长度动态增长的程序,或者对于原则上无法排错的程序,不应当使用它进行复杂性计算。

(3) 如果程序中指令条数、附加存储量、计算时间增多,不会减少程序的复杂性。

11.3.2 软件复杂性的度量方法

1. 代码行度量法

度量程序的复杂性,最简单的方法就是统计程序的源代码行数。此方法的基本考虑是统计一个程序的源代码行数,并以源代码行数作为程序复杂性的质量。

2. McCabe度量法

McCabe度量法是由Thomas McCabe提出的一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称环路度量。它认为程序的复杂性很大程度上取决于程序的复杂性。单一的顺序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图。也就是说,把程序流程图的每一个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同结点的有向弧,这样得到的有向图就叫做程序图。

程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作分支和循环的具体条件。因此,它往往把一个简单的IF语句与循环语句的复杂性看成是一样的,把嵌套的IF语句与CASE的复杂性看成是一样的。下面给出计算环路复杂性的方法,如图11-4所示。

根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:

V(G)=m-n+2p

其中,V(G)是有向图G中环路数,m是图G中弧数,n是图G中结点数,p是图G中强连通分量个数。在一个程序中,从程序图的入口点总能到达图中任何一个结点,因此,程序总是连通的,但不是强连通的。为了使图成为强连通图,从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。这样就可以使用上式计算环路复杂性了。

以图4-11所给出的例子示范,其中,结点数n=6,弧数m=9,p=1,则有

V(G=m-n+2p=9-6+2=5

即McCabe环复杂度度量值为5。这里选择的5个线形无关环路为(abefa),(beb),(abea),(acfa),(abcfa),其他任何环路都是这5个环路的线形组合。

当分支或循环的数目增加时,程序中的环路也随之增加,因此,McCabe环复杂度度量值实际上是为软件测试的难易程度提供一个定量度量的方法,同时也间接表示了软件的可靠性。实验表明,源程序中存在的错误数以及为了诊断he 纠正这些错误所需要的时间与McCabe环复杂度度量值有明显的关系。

利用McCabe环复杂度度量值时,有几点说明。

(1)环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。

(2)环路复杂度是可增加的。例如,模块A的复杂度为3,模块B的复杂度为4,则模块A与模块B的复杂度是7。

(3)McCabe建议,对于复杂度超过10的程序,应分成几个小程序,以减少程序中的错误。

(4)这种度量的缺点是:

①对于不同种类的控制流的复杂度不能区分。

②简单IF语句与循环语句的复杂性同等看待。

③嵌套IF语句与简单CASE的复杂性是一样的。

④模块间接口当成一个简单分支一样处理。

⑤一个具有1000行的顺序程序与一行语句的复杂性相同。

尽管McCabe复杂度度量法有许多缺点,但它容易使用,而且在选择方案和估计排错费用等方面都是很有效的。

11.4 软件可靠性

11.4.1 软件可靠性定义

软件可靠性定义表明了一个程序按照用户的要求和设计的目标,执行其功能的正确程度。一个可靠的程序应要求是正确的、完整的、一致的和健壮的。

11.4.2 软件可靠性指标

软件可靠性与可用性的定量指标,是指能够以数字概念来描述可靠性的数学表达式中所使用的量。下面主要讨论常用指标平均失效等待时间MTTF与平均失效间隔时间MTBF。

1. MTTF(Mean Time To Failure)

平均失效等待时间MTTF定义为:

2. MTBF(Mean Time Betmeen Failure)

MTBF是平均失效间隔时间,它是指两次相继失效之间的平均时间。

11.4.3 软件可靠性模型

软件可靠性是软件最重要的质量要素之一。

令MTTF是机器的平均无故障时间,MTTR是错误的平均修复时间,则机器的稳定可用性可定义为:

A=MTTF/(MTTF+MTTR)

软件可靠性模型通常分为如下几类:

(1) 由硬件可靠性理论导出的模型。

(2) 基于程序内部特性的模型。

(3) 植入模型。

11.5 软件评审

对软件工程来说,软件评审是一个“过滤器”,在软件开发的各个阶段都要采用评审的方法,以发现软件中的缺陷,然后加以改正。

把“质量”理解为“用户满意程度”。为使用户满意,有两个必要条件:

(1) 设计的规格说明书要符合用户的要求。

(2) 程序要按照设计规格说明书所规定的情况正确执行。

11.5.1 设计质量的评审内容

(1) 评价软件的规格说明是否合乎用户的要求,即总体设计思想和设计方针是否明确;需求规格说明是否得到了用户或单位上级机关的批准;需求规格说明与软件的概要设计规格说明是否一致等。

(2) 评审可靠性,即是否能避免输入异常(错误或超载等)、硬件失效及软件失效所产生的失效,一旦发生应能及时采取代替或恢复手段。

(3) 评审保密措施实现情况,即是否提供对使用系统资格进行检查;对特定数据的使用资格、特殊功能的使用资格进行检查,在查出有违反使用资格情况后,能否向系统管理人员报告有关信息;是否提供对系统内重要数据加密的功能等。

(4) 评审操作特性实施情况,即操作命令和操作信息的恰当性,输入数据与输入控制语句的恰当性;输出数据的恰当性;应答时间的恰当性等。

(5) 评审性能实现情况,即是否达到所规定性能的的目标值。

(6) 评审软件是否具有可修改性、可扩充性、可互换性和可移植性。

(7) 评审软件是否具有可测试性。

(8) 评审软件是否具有复用性。

11.5.2 程序质量的评审内容

程序质量评审通常它是从开发者的角度进行评审,直接与开发技术有关。它着眼于软件本身的结构、与运行环境的接口、变更带来的影响而进行的评审活动。

1. 软件的结构

(1) 功能结构。在软件的各种结构中,功能结构是用户唯一能见到的结构。

需要检查的项目有:

①数据结构:包括数据名和定义;构成该数据的数据项;数据与数据间的关系。

②功能结构:包括功能名和定义;构成该功能的子功能;功能与子功能之间的关系。

③数据结构和功能结构之间的对应关系:包括数据元素与功能元素之间的对应关系;数据结构与功能结构的一致性。

(2) 功能的通用性。

(3) 模块的层次。

(4) 模块结构。

①控制流结构:规定了处理模块与处理模块之间的流程关系。检查处理模块之间的控制转移关系与控制转移形式(调用方式)。

②数据流结构:规定了数据模块是如何被处理模块进行加工的流程关系。检查处理模块与数据模块之间的对应关系;处理模块与数据模块之间的存取关系,如建立、删除、查询、修改等。

③模块结构与功能结构之间的对应关系:包括功能结构与控制流结构的对应关系;功能结构与数据流结构的对应关系;每个模块的定义(包括功能、输入与输出数据)。

(5) 处理过程的结构。处理过程是最基本的加工逻辑过程。

2. 与运行环境的接口

(1) 与硬件的接口。

(2) 与用户的接口。

随着软件运行环境的变更,软件的规格也在跟着不断地变更。运行环境变更时的影响范围,需

要从以下三个方面来分析:

(1) 与运行环境的接口。

(2) 在每项设计工程规格内的影响。

(3) 在设计工程相互间的影响。

11.6 软件容错技术

提高软件质量和可靠性的技术大致分为两类,一类是避开错误(fault-avoidance)技术,即在开发的过程中不让差错潜入软件的技术;另一类是容错(fault-tolerance)技术,即对某些无法避开的差错,使其影响减少至最小的技术。

11.6.1 容错软件定义

归纳容错软件的定义,有以下四种:

(1)规定功能的软件,在一定程度上对自身错误的作用(软件错误)具有屏蔽能力,则称此软件为具有容错功能的软件,即容错软件。

(2)规定功能的软件,在一定程度上能从错误状态自动恢复到正常状态,则称之为容错软件。(3)规定功能的软件,在因错误而发生错误时,仍然能在一定程度上完成预期的功能,则把该软件称为容错软件。

(4)规定功能的软件,在一定程度上具有容错能力,则称之为容错软件。

11.6.2 容错的一般方法

1、结构冗余

(1)静态冗余。常用的有:三模冗余TMR(Triple Moduler Redundancy)和多模冗余。

(2)动态冗余。动态冗余的主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来顶替它并重新运行。

(3)混合冗余。它兼有静态冗余和动态冗余的长处。

2、信息冗余

为检测或纠正信息在运算或传输中的错误须外加一部分信息,这种现象称为信息冗余。

3、时间冗余

时间冗余是指以重复执行指令(指令复执)或程序(程序复算)来消除瞬时错误带来的影响。

4、冗余附加技术

冗余附加技术是指实现上述冗余技术所需的资源和技术。

11.6.3 容错软件的设计过程

容错系统的设计过程包括以下设计步骤:

(1)按设计任务要求进行常规设计,尽量保证设计的正确。

按常规设计得到非容错结构,它是容错系统构成的基础。在结构冗余中,不论是主模块还是备用模块的设计和实现,都要在费用许可的条件下,用调试的方法尽可能提高可靠性。

(2)对可能出现的错误分类,确定实现容错的范围。

对可能发生的错误进行正确的判断和分类,例如,对于硬件的瞬时错误,可以采用指令复执和程序复算;对于永久错误,则需要采用备份替换或者系统重构。对于软件来说,只有最大限度地弄清错误和暴露的规律,才能正确地判断和分类,实现成功的容错。

(3)按照“成本——效率”最优原则,选用某种冗余手段(结构、信息、时间)来实现对各类错误的屏蔽。

(4)分析或验证上述冗余结构的容错效果。如果效果没有达到预期的程度,则应重新进行冗余结构设计。如此反复,直到有一个满意的结果为止。

张海藩《软件工程导论》(第6版)(章节题库 第11章 面向对象设计)【圣才出品】

第11章面向对象设计 一、选择题 1.()是不需要接收消息就能主动执行的服务。 A.内部服务 B.外部服务 C.内嵌服务 D.上层服务 【答案】B 【解析】主动服务是不需要接收消息就能主动执行的服务,它在程序实现中是一个主动的程序成分,而外部服务属于主动服务,所以答案选B项。 2.火车是一种陆上交通工具,火车和陆上交通工具之间的关系是()关系。 A.组装 B.整体与部分 C.has a D.一般与具体 【答案】D 【解析】火车是一种陆上交通工具,而陆上交通工具不一定是火车,还可以是汽车、自行车等,说明火车是陆上交通工具的具体化,而陆上交通工具是火车的一般化,所以它们之间的关系是一般与具体的关系。

3.()只供对象内部的其他服务使用,不对外提供。 A.外部服务 B.内部服务 C.内嵌服务 D.上层服务 【答案】B 【解析】对象的服务分为外部服务和内部服务两种,其中,内部服务只供内部的其它服务使用,不对外提供,外部服务只供对象外部的其它服务使用,不对内提供。 4.对象标识是分配给每个对象的永久性标识(又称作“柄”),它不符合下述条件()。 A.在一定的范围或领域(例如一个应用系统)中是唯一的 B.与对象实例的特征、状态及分类(可能是动态的)无关 C.在对象存在期间保持一致 D.在对象存在之后保持一致 【答案】D 【解析】对象标识符合如下几个条件: ①在一定的范围或领域中是唯一的; ②与对象实例的特征、状态及分类无关; ③在对象期间保持一致。 5.对象或者类的整体行为(例如响应消息)的某些规则所不能适应的(对象或类的)()。

A.状况 B.情态 C.条件 D.问题 【答案】D 【解析】对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、情况、条件、形式或生存周期阶段。 二、填空题 1.对象的服务可分为_____、_____。 【答案】外部服务;内部服务 2._____不同取值所构成的组合都可看作对象的一种新的状态。 【答案】对象的每个属性 3.如果在一个服务中包括了多项可独立定义的功能,则它是_____,应尝试把它分解为多个服务。 【答案】低内聚的 4._____应尽可能准确地反映该服务的职能。 【答案】服务名

软件工程第十一章

11.1 概述 11.1.1 软件质量的定义 软件质量定义为: (1) 与所确定的功能和性能需求的一致性。 (2) 与所成文的开发标准的一致性。 (3) 与所有专业开发的软件所期望的隐含特性的一致性。 11.1.2 软件质量的度量和评价 影响软件质量的因素可以分为两大类: (1) 可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。 (2) 只能间接度量的因素,如可用性或可维护性。 在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。

11.1.3 软件质量保证 1. 什么是软件质量保证 软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 2. 质量保证的策略 质量保证策略的发展大致可以分为以下三个阶段: (1) 以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。 (2) 以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。 (3) 以新产品开发为重。 3. 质量保证的主要任务 (1) 正确定义用户要求。 (2) 技术方法的应用。 (3) 提高软件开发的工程能力。 (4) 软件的复用。 (5) 发挥每个开发者的能力。 (6) 组织外部力量协作。

(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。 (8) 提高计划和管理质量。 4. 质量保证与检验 软件质量必须在设计和实现过程中加以保证。 11.2 质量度量模型 11.2.1 McCall质量度量模型 这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下: (1) 面向软件产品操作。 (2) 面向软件产品修改。 (3) 面向软件产品适应。 11.2.2 ISO的软件质量评价模型 软件质量度量模型由三层组成。 11.3 软件复杂性 11.3.1 软件复杂性的基本概念 软件复杂性度量的参数很多,主要有: (1) 规模,即总共的指令数,或源程序行数。 (2) 难度,通常由程序中出现的操作数的数目所决定的量来表示。 (3) 结构,通常用于程序结构有关的度量来表示。 (4) 智能度,即算法的难易程度。 软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

软件工程导论试题集46172(1)

第一章:软件工程学概述 一.填空题 1. 计算机科学中的研究成果均可用于软件工程,但计算机科学更侧重于(原理和理论)、而 软件工程侧重于(如何建造一个软件系统) 2. 计算机程序及其说明程序的各种文档称为(文件)。计算任务的处理图像对象和处 理规则的描述称为(程序)。有关计算机程序功能、设计、编制、使用的文字或图形资 料称为(文档)。 3. 软件开发环境是相关一组(软件工具)的集合,它支持一定的软件开发方法或按照一定 的软件开发模型组织而成的。 4. CASE这一术语的英文是(Computer Aided Software Engineering)。 5. (平台集成)是指工具运行在相同的硬件/操作系统平台上。(数据集成)是指工具使 用共享数据模型来操作。(表示集成)是指工具提供相同的用户界面。 6. 根据支持的范围,CASE工具可分为(窄支持)、(较宽支持)和(一般支持)工具。 7. 软件危机的主要原因有(软件本身的特点)和(缺乏好的开发方法和手段)。 8. (增量)模型是一种非整体开发的模型。软件在该模型中是“逐渐”开发处理的, 开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。或者先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。 9.结构化方法总得指导思想是(自顶而下逐步求精)。它的基本原则是功能的(分解)与(抽象)。它是软件工程中最早出现的开发方法,特别适用于数据处理领域的问题。 10. 面向对象开发方法包括(面向对象分析)、(面向对象设计)、(面向对象实现)、三部分。 11. 瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。它包括(可行性分析)、项目开发计划、(需求分析)、(概要设计) 、(详细设计)、_ (编码)、(测试)、(维护),它规定了由前至后、相互衔接的固定次序 ,如同瀑布流水,逐级下落。 12. 瀑布模型本质上是一种(线性)顺序模型。 13. 构造原型时,必须注意(功能性能)取舍,忽略一切暂时不关心的部分。 14. 属性指的是类中对象所具有的(性质(数据值))。不同对象的同一属性可以具有相同或不同的(属性值)。 15. 结构化方法和原型化方法是软件开发中常使用的两种方法,在实际的应用中,它们之间的关系表现为(相互补充)。 二.判断题 1. 瀑布模型的存在问题是缺乏灵活性。(√) 2. 软件是一种逻辑产品。(√) 3. 软件工程学科出现的主要原因是程序设计方法学的影响。(× ) 4. 有关计算机程序功能、设计、编制、使用的文字或图形资料称为文档。(√) 5. CASE开放式工作台或者提供控制集成机制,或者可剪裁,其数据集成或协议是独立的。(× ) 6. 在软件的开发与维护过程中,用来存储、更新、恢复和管理一个软件的多版本,它是版本控制工具。(√) 7. 平台集成是指工具运行在相同的硬件/操作系统平台上。(√) 8. 软件生存周期模型有多种,功能模型是软件生存周期模型。(× ) 9. 从结构化的瀑布模型看,在软件生命周期中得8个阶段中,详细设计阶段出错,对软件

软件工程导论第六章课后答案

计算机科学与技术 第六章习题答案 4、图6.18给出的程序流程图代表一个非结构化的程序,问: (1)为什么说它是非结构化的? (2)设计一个等价的结构化程序。 (3)在(2)题的设计中使用附加的标志变量flag了吗?若没有,再设计一个使用flag的程序;若用了,再设计一个不用flag的程序。 图6.18 一个非结构化程序 答:(1)图示程序的循环控制结构有两个出口,不符合结构程序的定义,因此是非结构化的程序。 (2)设计的等价结构化程序盒图如下所示:

(3)在第(2)题中没有使用标志变量flag,设计使用附加的标志变量flag,将上述程序改成等价的结构化程序,如下盒图所示: 7、某交易所规定给经纪人的手续费计算方法如下:总手续费等于基本手续费加上与交易中的每股价格和股数有关的附加手续费。如果交易总金额少于1000元,则等于手续费为交易金额的8.4%;如果交易总金额在1000元到10000元之间,则基本手续费为交易金额的5%,再加34元;如果交易总金额超过10000元,则基本手续费为交易金额的4%加上134元。当每股售价低于14元时,附加手续费为基本手续费的5%,除非买进、卖出的股数不是100的倍数,在这种情况下

附加手续费为基本手续费的9%。当每股售价在14元到25元之间时,附加手续费为基本手续费的2%,除非交易的股数不是100的倍数,在这种情况下附加手续费为基本手续费的6%。当每股售价超过25元时,如果交易的股数零散(即,不是100的倍数),则附加手续费为基本手续费的4%,否则附加手续费为基本手续费的1%。

要求: (1)用判定表表示手续费的计算方法。(2)用判定树表示手续费的计算方法。答:(1)用判定表表示手续费的计算方法如下所示: (2)用判定树表示手续费的计算方法如下所示:

软件工程导论(第五版)课后习题测验答案

《软件工程导论》课后习题答案 第一章软件工程概论 1-1 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题表现在以下几个方面: (1)用户对开发出的软件很难满意。 (2)软件产品的质量往往靠不住。 (3)一般软件很难维护。 (4)软件生产效率很低。 (5)软件开发成本越来越大。 (6)软件成本与开发进度难以估计。 (7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。 2.软件危机有那些典型表现? (1)对软件开发成本和进度的估计常常很不准确。 (2) 用户对“已完成的”软件系统不满意的现象经常发生。 (3)软件产品的质量往往靠不住。 (4)软件常常是不可维护的。 (5)软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的比例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 3.为什么会产生软件危机? (1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。 (3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。 4.怎样克服软件危机? (1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。(3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。 总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。 1-3、

软件工程第11章

11.1 软件测试的目的。 答:软件测试是为了发现软件中的错误,并加以纠正。 11.2:什么是白盒测试?什么是黑盒测试? 答:白盒测试永成结构测试,这种方法把测试对象看做一个透明的盒子,测试人员根据程序内的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确的工作 黑盒测试也成行为测试,这种方法吧测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和北部特性,只根据程序的需求规格说明书,检查程序的功能是否符合他的功能需求 11.3:某模块的流程图如下图所示,根据判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖等覆盖标准分别设计最少的测试用例 Figure 1待测试模块的流程图 答: X>=80 and Y>=80? X+Y>=140 and (X>=90 or Y>=90)? 入口 T=1 T=3 T=2 返回 Y N Y N a b

条件组合覆盖自己做吧 11.5:分别简述单元测试、集成测试、确认测试和系统测试的任务 答: 单元测试:对软件的最小单元(软件构件及模块)进行验证 集成测试:堆积成后的软件进行测试,用来揭露设计阶段产生的错误 确认测试:发现软件与需求不一致的错误,主要检查软件是否实现了规约规定的全部功能要求 系统测试:对阵个基于计算机的系统进行的测试,检查是否符合系统工程中对软件的要求,能否与计算机系统的其他元素协调地工作 11.6:什么是α测试?什么是β测试?(重要内容) α测试指软件在开发者对用户的指导下进行测试。经α测试的软件称为β软件 β测试指由软件的最终用户在一个或多个地方所进行的、开发者不在现场的测试 11.7:什么是回归测试? 对已经进行过测试的的子集的重新执行,以确保对程序的改变和修改,没有传播非故意的副作用。 11.8:简述边界值分析方法的作用 在超出程序处理输入或输出范围的边界上,揭露程序中的错误

软件工程导论张海蕃 课后习题答案

第一章 1-1 什么是软件危机 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 1-3 什么是软件工程 是指导计算机软件开发和维护的一门工程学科。 1-4 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。 目前使用得最广泛的软件工程方法学(2 种): 1. 传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分 成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。 2. 面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了 软件的开发和维护工作;促进了软件重用。 1-6 什么是软件过程它与软件工程方法学有何关系 z软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 z软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型 1-7什么是软件生命周期模型,试比较瀑布模型,快速原型模型,增量模型,和螺旋模型的优缺点,说明每种模型的适用范围。 软件生命周期由软件定义、软件开发和运行维护3个时期组成,每个时期又进一步划分成若干个阶段。生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。 瀑布模型的优点:1.可强迫开发人员采用规范的方法;2.严格规定了每个阶段必须提交的文档;3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。 瀑布模型的缺点:1.在软件开发初期,指明用户全部需求是困难的;2.需求确定后,经过一段时间才得到软件最初版本;3.完全依赖规格说明,导致不能满足用户需求。 适用中小型项目。 快速原型模型的优点:1满足用户需求程度高;2用户的参与面广;3返工现象少快速原型模型的优点:不适用大型软件的开发适用于小型项目。 增量模型的优点:1短期内可以交付满足部分用户需求的功能产品;2逐步增加功能可以让用户去适应新产品;3开放式的软件可维护性比较好;4开始第一构件前,已经完成需求说明。 增量模型的缺点:1对现有产品功能造成破坏;2意义上的矛盾适用于中型软件的开发

软件工程第十一章

11.1概述 11.1.1 软件质量的定义 软件质量定义为: (1)与所确定的功能和性能需求的一致性。 (2)与所成文的开发标准的一致性。 (3)与所有专业开发的软件所期望的隐含特性的一致性。 11.1.2 软件质量的度量和评价 影响软件质量的因素可以分为两大类: (1)可以直接度量的因素,如单位时间内千行代码(KLOC)中产生的错误数。 (2)只能间接度量的因素,如可用性或可维护性。 在软件开发和维护的过程中,为了定量地评价软件质量,必须对软件质量特性进行度量,以测定软件具有要求质量特性的程度。

11.1.3 软件质量保证 1. 什么是软件质量保证 软件的质量保证就是向用户及社会提供满意的高质量的产品,确保软件产品从诞生到消亡为止的所有阶段的质量的活动,即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 2. 质量保证的策略 质量保证策略的发展大致可以分为以下三个阶段: (1)以检测为重。产品制成后才进行检测,这种检测只能判断产品的质量,不能提高产品质量。 (2)以过程管理为重。把质量保证工作重点放在过程管理上,对制造过程的每一道工序都进行质量控制。 (3)以新产品开发为重。 3. 质量保证的主要任务 (1)正确定义用户要求。 (2)技术方法的应用。 (3)提高软件开发的工程能力。 (4)软件的复用。 (5)发挥每个开发者的能力。 (6)组织外部力量协作。

(7) 排除无效劳动。最大的无效劳动是因需求规格说明有误、设计有误而造成的返工。 (8) 提高计划和管理质量。 4. 质量保证与检验 软件质量必须在设计和实现过程中加以保证。 11.2 质量度量模型 11.2.1McCall质量度量模型 这是McCall等人于1979年提出的软件质量模型。针对面向软件产品的运行、修正、转移,软件质量概念包括11个特性,其定义如下: (1)面向软件产品操作。 (2)面向软件产品修改。 (3)面向软件产品适应。 11.2.2 ISO的软件质量评价模型 软件质量度量模型由三层组成。 11.3 软件复杂性 11.3.1 软件复杂性的基本概念 软件复杂性度量的参数很多,主要有: (1)规模,即总共的指令数,或源程序行数。 (2)难度,通常由程序中出现的操作数的数目所决定的量来表示。 (3)结构,通常用于程序结构有关的度量来表示。 (4)智能度,即算法的难易程度。 软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。同时它也是软件可理解性的另一种度量。

(完整word版)软件工程导论(第6版)

第一章、软件工程学概述 软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 软件危机包含下述两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。 2.如何维护数量不断膨胀的已有软件。 具体的说,软件危机主要有以下一些典型表现:1.对软件开发成本的进度的估计常常很不准确。 2.用户对“已完成的”软件系统不满意的现象经常发生 3.软件产品的质量往往靠不住。 4.软件常常是不可维护的。 5.软件通常没有适当的文档材料。 6.软件成本在计算机系统总成本中所占的比例逐年上升。 7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 软件生命周期:一个软件从定义、开发、使用和维护,知道最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。 软件配置:程序、文档和数据。 软件工程学的一个重要的目标:就是提高软件的可维护性,减少软件维护的代价。 软件:是程序、数据及相关文档的集合。 程序:是能够完成预定功能和性能的可执行的指令序列。 数据:是使程序能够适当地处理信息的数据结构。 文档:是开发、使用和维护程序所需要的图文资料。 软件工程:指导计算机软件开发和维护的一门工程学科。 软件工程具有下属的本质特性:1.软件工程关注于大型程序的构造。2.软件工程的中心课题是控制复杂性。3.软件经常变化。4.开发软件的效率非常重要。5.和谐地合作是开发软件的关键。6.软件必须有效地支持它的用户。7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。 软件工程的7条基本原理:1.用分阶段的生命周期计划严格管理。2.坚持进行阶段评审。3.实行严格的产品控制4.采用现代程序设计技术。5.结构应能清楚的审查。6.开发小组的人员应该少而精。7.承认不断改进软件工程实践的必要性。软件工程:包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。 软件工程方法学(包括传统方法学、面向对象方法学)包含三个要素:方法、工具和过程。 方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题。 工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境。 工程:是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 面向对象方法学:把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。 面向对象方法学具有下述四个要点:1.把对象作为融合了数据及在数据上的操作行为的统一的软件构件。 2.把所有对象都划分成类。 3.按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。 4.对象彼此间仅能通过发送消息互相联系。 面向对象方法学的优点:降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。 软件生命周期:软件定义、软件开发和运行维护。软件定义:问题定义、可行性研究和需求分析。软件开发:总体设计,详细设计,编码和单元测试,综合测试。 1.问题定义:问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”。 2.可行性研究:这个阶段回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?” 3.需求分析:确定目标系统必须具备哪些功能。 4.总体设计:这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。 5.详细设计:这个阶段应回答的关键问题是:“应该怎样具体地实现这个系统呢?” 6.编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。 7.综合测试:这个阶段的关键任务是通过各种类型的测试使软件达到预定的要求。 8.软件维护:关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。

软件工程之需求规格第11章软件的质量属性

软件工程之需求规格 第二部软件需求工程:第十一章软件的质量属性

目录 11.1 非功能需求 (3) 11.2 质量属性 (4) 11.3 定义质量属性 (6) 11.4 属性的取舍 (14)

第11章软件的质量属性 许多年前,我参加了一项工程,在该项目中用新的应用程序替换许多已有的主机( m a i nf r a m e)应用程序。根据用户的要求,开发组设计了一个基于窗口的用户界面并定义了新的数据文件,其容量是旧文件的两倍。虽然新系统满足了技术上的规范,但并没有达到客户可接受的程度。用户总是抱怨用户界面运行缓慢,并且新的数据文件所占用的磁盘空间太大。 用户没有陈述对新产品的一些特性的期望,这就不能在他们所提出的功能需求中体现出来。糟糕的是,开发者和用户没有详细地讨论新技术方法所牵涉到可能的性能,从而导致了用户期望与产品实际性能之间的期望差异。比起仅仅满足客户所要求的功能,软件的成功似乎更为重要。 11.1 非功能需求 用户总是强调确定他们的功能、行为或需求—软件让他们做的事情。除此之外,用户对产品如何良好地运转抱有许多期望。这些特性包括:产品的易用程度如何,执行速度如何,可靠性如何,当发生异常情况时,系统如何处理。这些被称为软件质量属性(或质量因素)的特性是系统非功能(也叫非行为)部分的需求。 质量属性是很难定义的,并且他们经常造成开发者设计

的产品和客户满意的产品之间的差异。就像Robert Charette(1990)指出的那样:“真正的现实系统中,在决定系统的成功或失败的因素中,满足非功能需求往往比满足功能需求更为重要”。优秀的软件产品反映了这些竞争性质量特性的优化平衡。如果你在需求的获取阶段不去探索客户对质量的期望,那么产品满足了他们的要求,这只能说你很幸运。但更多的可能是客户失望和开发者沮丧。 虽然,在需求获取阶段客户所提出的信息中包含提供了一些关于重要质量特性的线索,但客户通常不能主动提出他们的非功能期望。用户说软件必须“健壮”,“可靠”或“高效”时,这是很技巧地指出他们所想要的东西。从多方面考虑,质量必须由客户和那些构造测试和维护软件的人员来定义。探索用户隐含期望的问题可以导致对质量目标的描述,并且制定可以帮助开发者创建完美产品的标准。 11.2 质量属性 虽然有许多产品特性可以称为质量属性(Quality Attribute),但是在许多系统中需要认真考虑的仅是其中的一小部分。如果开发者知道哪些特性对项目的成功至关重要,那么他们就能选择软件工程方法来达到特定的质量目标( Glass 1992; DeGrace and Stahl 1993)。根据不同的设计可以把质量属性分类(Boehm 1976; DeGrace and Stahl 1993)。一种属性分类的方法是把在运行时可识别的

软件工程导论(第五版)课后习题答案

软件工程导论(第五版)课后习 题答案 《软件工程导论》课后习题答案 第一章软件工程概论 1-1 1 ?什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题表现在以下几个方面: (1) 用户对开发出的软件很难满意。 (2) 软件产品的质量往往靠不住。 (3) —般软件很难维护。 (4) 软件生产效率很低。 (5) 软件开发成本越来越大。 (6) 软件成本与开发进度难以估计。 (7) 软件技术的发展远远满足不了计算机应用的普及与深入的需要。 2.软件危机有那些典型表现? (1) 对软件开发成本和进度的估计常常很不准确。 (2) 用户对已完成的”软件系统不满意的现象经常发生。 (3) 软件产品的质量往往靠不住。

(4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。 (6) 软件成本在计算机系统总成本中所占的比例逐年上升。 (7) 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。 3 ?为什么会产生软件危机? (1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。 (2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统

一的、公认的方法论和规范指导,造成软件维护困难。 (3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。 4 ?怎样克服软件危机? (1) 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法,特别是吸取几十年来人类从事计算机硬件研究和开发的经 验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。(2) 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。 (3) 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个整体,形成一个很好的软件开发支环环境。 总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措 施。 1-3、 1-5、根据历史数据可以做出如下的假设: 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加: M=4080e0.28(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=0.3 X 0.72Y-1974(美分/位) 如果计算机字长为16位,则存储器价格下降的趋势为:P2=0.048 X 0.72Y-1974(美元/字) 在上列公式中Y代表年份,M是存储容量(字数),P1和P2代表价格。基于上述假设可以比较计算机硬件和软件成本的变化趋势。要求计算: (1) 在1985年对计算机存储容量的需求估计是多少?如果字长为16位,这个存储器的价格是多少? (2) 假设在1985年一名程序员每天可开发出10条指令,程序员的平均工资是每月4000美元。如果一条指令为一个字长,计算使存储器装满程序所需用的成本。 ⑶假设在1995年存储器字长为32位,一名程序员每天可开发出30条指令,程序员的月平均工资为6000美元,重复(1)、(2)题。 ?(1)在1983年对计算机存储容量的需求,估计是 M = 4080e O2SC198^156O)= 4080e7= 4?4715263(字) ?如果字长为16?,则这个存储器的价搭是_ P - 0.048 x 0.72囚3皿x 4474263 - 5,789(美元) ?{2)如果一条指令的长度为一个字,则使存储器装满程序共 ^4474263条抱令。 ?在佃8刁年一名程序员毎天可开发出10条指令,如果每月 有20个工作日,则每人每月可开发出10X20条指令“ ?为了开发出也742G3祭指令以装满存储器,需要的匸作量 屆4474263 200

软件工程导论答案 第2章 习题答案

答案 习题2 2-1在软件开发的早期阶段为什么要进行可行性分析研究?应该从哪些方面研究目标系统的可行性? 可行性分析是要进行一次大大压缩简化系统分析和设计过程,避免时间、资源、人力和金钱的浪费。 技术上的可行性——使用现有的技术能实现这个系统吗? 经济上的可行性——这个系统的经济效益能超过它的开发成本吗?(投资与效益)操作可行性——系统的操作方式在这个用户组织内行得通吗? 社会、政策允许的可行性 2-2 为方便储户,某银行拟开发计算机储蓄系统。储户填写的存款单或取款单由业务员键入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。请画出此系统的数据流图。

2-3为方便旅客,某航空公司拟开发一个机票预定系统。旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统核对无误即印出机票给旅客。请画出系统的数据流图。 2-4 目前住院病人主要由护士护理,这样做不仅需要大量护士,而且由于不能随时观察危险病人的病情变化,还可能会延误抢救时机。某医院打算开发一个以计算机为中心的患者监护系统,试写出问题定义,并且分析开发这个系统的可行性。 医院对患者监护系统的基本要求是随时接受每个病人的生理信号(脉搏、体温、血压、心电图等),定时记录病人情况以及形成患者日志,当某个病人的生理信号超出医生规定的安全范围时向值班护士发出警告信息,此外,护士在需要时还可以要求系统印出某个指定病人的病情报告。请画出系统的数据流图。

软件工程导论答案-张海潘(第五版)

第一章 1-1 什么是软件危机? 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 1-2 什么是软件工程?是指导计算机软件开发和维护的一门工程学科。 1-3 简述结构化范型和面向对象范型的要点,并分析它们的优缺点。 目前使用得最广泛的软件工程方法学(2种): 1.传统方法学:也称为生命周期方法学或结构化范型。 优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。 2.面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作; 促进了软件重用。 1-4 软件生命周期划分成哪些阶段 ●软件生命周期(各阶段)软件生命周期由软件定义、软件开发和运行维护三个时期组成。 1.软件定义时期划分为三个阶段:问题定义、可行性研究和需求分析 2.开发时期:总体设计、详细设计、编码和单元测试、综合测试。 3.维护时期:主要任务是使软件持久地满足用户的需要。 1-5 什么是软件过程?它与软件工程方法学有何关系? ●软件过程:是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤 ●软件工程方法学:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称范型 1-6 传统“瀑布模型”的主要缺陷是什么?试说明改进的方法。 传统的瀑布模型过于理想化了。增加“反馈环” 第二章 ●可行性研究的目的:就是用最小的代价在尽可能短的时间内确定问题是否能够解决。 ●可行性研究的任务:1.进一步分析和澄清问题;2.导出系统的逻辑模型;3.从逻辑模型出发,提出若干种系统 实现方案4.研究每种实现方案的可行性: ●技术上的可行性——使用现有的技术能实现这个系统吗? ●经济上的可行性——这个系统的经济效益能超过它的开发成本吗?(投资与效益) ●操作可行性——系统的操作方式在这个用户组织内行得通吗? ●社会、政策允许的可行性 5.为每个可行的解决方案制定一个粗略的实现进度 6.对以后的行动方针提出建议 方法:1.系统流程图 2.数据流图:(DFD) 符号 3.数据字典: 数据流图与数据字典共同构成系统的逻辑模型。 4.成本/效益分析 5.数据流图 –定货系统P32 –习题2第2题P43(银行储蓄系统) –习题2第3题P43(机票预订系统) –习题2第4题P43(医院监护系统) 数据流

软件工程导论--第七章课后答案

第七章习题答案 2.研究下面给出的伪码程序,要求: ⑴画出它的程序流程图。 ⑵它是结构化的还是非结构化的?说明你的理由。 ⑶若是非结构化的,则 (a)把它改造成仅用三种控制结构的结构化程序;(b)写出这个结构化程序的伪码; (c)用盒图表示这个结构化程序。 ⑷找出并改正程序中的逻辑错误。 COMMENT: PROGRAM SEARCHES FOR FIRST N REFERENCES TO A TOPIC IN AN INFORMATION RETRIEVAL SYSTEM WITH T TOTAL ENTRIES INPUT N INPUT KEYWORD(S) FOR TOPIC I=0 MATCH=0 DO WHILE I≤T I=I+1 IF WORD=KEYWORD THEN MATCH=MATCH+1 STORE IN BUFFER END

IF MATCH=N THEN GOTO OUTPUT END END IF N=0 THEN PRINT ”NO MATCH” OUTPUT: ELSE CALL SUBROUTINE TO PRINT BUFFER INFORMATION END 解:⑴程序流程图(如图2.1所示) ⑵此程序是非结构化的,它有一个GOTO语句,并且是从一个循环体内转到循环体外的一个条件语句内部。

图2.1 ⑶修改后的伪码如下:

INPUT N,T 输入N INPUT KEYWORD(S) FOR TOPIC 输入有关话题的关键字 OPEN FILE 打开文件 I=0 MATCH=0 DO WHILE I≤T 循环—最多可做T次 I=I+1 READ A WORD OF WORD 从文件里读一个字到变量WORD IF WORD=KEYWORD THEN MATCH=MATCH+1 IF MATCH=N THEN EXIT 搜索到了N个关键字,就跳出循环END IF END IF END DO IF MATCH =0 THEN PRINT ”NO MATCH”若MATCH =0就打印“没有相匹配” ELSE PRINT “共搜索到”; MATCH;“个匹配的关键字”否则打印信息 END IF 修改后的程序框图(盒图)

软件工程导论(第六版)张海藩 牟永敏课后习题答案

第一章 一、什么是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。 软件危机的典型表现: (1) 对软件开发成本和进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。 (2) 用户对已完成的软件不满意的现象时有发生。 (3) 软件产品的质量往往是靠不住的。(4) 软件常常是不可维护的。 (5) 软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发和维护工作带来许多难以想象的困难和难以解决的问题。 (6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。 (7) 开发生产率提高的速度远跟不上计算机应用普及的需求。 软件危机出现的原因: (1) 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。 (2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。 (3) 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。 二、假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳他? 答:在软件开发的不同阶段进行修改付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期,软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改, 不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”是在引入变动,当然付出的代价更高。一个故障是代码错误造成的,有时这种错误是不可避免的,但要修改的成本是很小的,因为这不是 整体构架的错误。 三、什么是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机? 1993年IEEE的定义:软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。 软件工程的本质特征: (1) 软件工程关注于大型程序(软件系统)的构造(2) 软件工程的中心课题是分解问题,控制复杂性(3) 软件是经常变化的,开发过程中必须考虑软件将来可能的变化 (4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就是,寻求开发与维护软件的更好更有效的方法和工具 (5) 和谐地合作是开发软件的关键(6) 软件必须有效地支持它的用户

软件工程导论[第六版]课后习题答案解析

第一章 一、什么就是软件危机?它有哪些典型表现?为什么会出现软件危机? 软件危机就是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题与难题。它包括两方面:如何开发软件,已满足对软件日益增长的需求;如何维护数量不断增长的已有软件。 软件危机的典型表现: (1) 对软件开发成本与进度的估计常常很不准确。常常出现实际成本比估算成本高出一个数量级、实际进度比计划进度拖延几个月甚至几年的现象。而为了赶进度与节约成本所采取的一些权宜之计又往往损害了软件产品的质量。这些都降低了开发商的信誉,引起用户不满。 (2) 用户对已完成的软件不满意的现象时有发生。 (3) 软件产品的质量往往就是靠不住的。 (4) 软件常常就是不可维护的。 (5) 软件通常没有适当的文档资料。文档资料不全或不合格,必将给软件开发与维护工作带来许多难以想象的困难与难以解决的问题。 (6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。 (7) 开发生产率提高的速度远跟不上计算机应用普及的需求。 软件危机出现的原因: (1) 来自软件自身的特点:就是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。 (2) 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。 (3) 供求矛盾将就是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心。 二、假设自己就是一家软件公司的总工程师,当把图1、1给手下的软件工程师们观瞧,告诉她们及时发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清楚它们就是不现实的,并举例说:“如果一个故障就是编码错误造成的,那么,一个人怎么能在设计阶段清除它呢?”应该怎么反驳她? 答:在软件开发的不同阶段进行修改付出的代价就是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;在开发的中期, 软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都做相应的修改, 不仅工作量大,而且逻辑上也更复杂,因此付出的代价剧增;在软件“已经完成”就是在引入变动,当然付出的代价更高。一个故障就是代码错误造成的,有时这种错误就是不可避免的,但要修改的成本就是很小的,因为这不就是 整体构架的错误。 三、什么就是软件工程?它有哪些本质特征?怎样用软件工程消除软件危机? 1993年IEEE的定义:软件工程就是:①把系统的、规范的、可度量的途径应用于软件开发、运行与维护过程,也就就是把工程应用于软件;②研究①中提到的途径。 软件工程的本质特征: (1) 软件工程关注于大型程序(软件系统)的构造(2) 软件工程的中心课题就是分解问题,控制复杂性(3) 软件就是 经常变化的,开发过程中必须考虑软件将来可能的变化 (4) 开发软件的效率非常重要,因此,软件工程的一个重要课题就就是,寻求开发与维护软件的更好更有效的方法与工具 (5) 与谐地合作就是开发软件的关键(6) 软件必须有效地支持它的用户 (7) 在软件工程领域中就是由具有一种文化背景的人替具有另一种文化背景的人(完成一些工作)消除软件危机的途径: (1) 对计算机软件有一个正确的认识(软件≠程序) (2) 必须充分认识到软件开发不就是某种个体劳动的神秘技巧,而应该就是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目 (3) 推广使用在实践中总结出来的开发软件的成功技术与方法 (4) 开发与使用更好的软件工具 四、简述结构化范型与面向对象范型的要点,并分析她们的优缺点。 1、传统方法学:也称为生命周期方法学或结构化范型。优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作, 从而降低了整个软件开发过程的困难程度。缺点:当软件规模庞大时,或者对软件的需求就是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。 2、面向对象方法学:优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发与维护工作; 促进了软件重用。 五、1-5 根据历史数据可以做出如下的假设 : 对计算机存储容量的需求大致按下面公式描述的趋势逐年增加:M=4080e0、28(Y-1960) 存储器的价格按下面公式描述的趋势逐年下降:P1=0、3×0、72Y-1974(美分/位)

相关文档
最新文档