文档库 最新最全的文档下载
当前位置:文档库 › 软件工程导论_课件之第7章_实现(第五版)(张海潘编著).ppt.Convertor

软件工程导论_课件之第7章_实现(第五版)(张海潘编著).ppt.Convertor

软件工程导论_课件之第7章_实现(第五版)(张海潘编著).ppt.Convertor
软件工程导论_课件之第7章_实现(第五版)(张海潘编著).ppt.Convertor

第7章实现

7.1 编码

7.2 软件测试基础

7.3 单元测试

7.4 集成测试

7.5 确认测试

7.6 白盒测试技术

7.7 黑盒测试技术

7.8 调试

7.9 软件可靠性

通常把编码和测试统称为实现。

所谓编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。

软件测试在软件生命周期中横跨两个阶段。

通常在编写出每个模块之后就对它做单元测试。

在这个阶段结束之后,对软件系统还应该进行各种综合测试,通常由专门的测试人员承担这项工作。

通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。

在对测试结果进行收集和评价的时候,使用故障率数据,估计软件将来出现故障的情况并预测软件的可靠性。

7.1 编码

7.1.1 选择程序设计语言

机器语言,几乎不使用。

汇编语言,特殊场合使用。

高级语言,明显优于汇编语言。

程序设计语言的划代:

选择语言的理想标准:

为了使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构;

为了便于调试和提高软件可靠性,语言特点应该使编译程序能够尽可能多地发现程序中的错误;

为了降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。

主要的实用标准:

系统用户的要求

可以使用的编译程序

可以得到的软件工具

工程规模

程序员的知识

软件可移植性要求

软件的应用领域

7.1.2 编码风格

1. 程序内部的文档

恰当的标识符

适当的注解

程序的视觉组织

2. 数据说明

数据说明的次序应该标准化。

当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。

如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结构的方法和特点。

3. 语句构造

不要为了节省空间而把多个语句写在同一行;

尽量避免复杂的条件测试;

尽量减少对“非”条件的测试;

避免大量使用循环嵌套和条件嵌套;

利用括号使逻辑表达式或算术表达式的运算次序清晰直观。

4. 输入输出

对所有输入数据都进行检验;

检查输入项重要组合的合法性;

保持输入格式简单;

使用数据结束标记,不要要求用户指定数据的数目;

明确提示交互式输入的请求,详细说明可用的选择或边界数值;

当程序设计语言对格式有严格要求时,应保持输入格式一致;

设计良好的输出报表;

给所有输出数据加标志。

5. 效率

效率主要指处理机时间和存储器容量两个方面。

效率是性能要求,因此应该在需求分析阶段确定效率方面的要求。

效率是靠好设计来提高的。

程序的效率和程序的简单程度是一致的,不要牺牲程序的清晰性和可读性来不必要地提高效率。

效率问题:

程序运行时间

存储器效率

输入输出的效率

(1) 程序运行时间

写程序之前先简化算术的和逻辑的表达式;

仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;

尽量避免使用多维数组;

尽量避免使用指针和复杂的表;

使用执行时间短的算术运算;

不要混合使用不同的数据类型;

尽量使用整数运算和布尔表达式。

在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。

(2) 存储器效率

使用能保持功能域的结构化控制结构,是提高效率的好方法。

在微处理机中如果要求使用最少的存储单元,则应选用有紧缩存储器特性的编译程序,在非常必要时可以使用汇编语言。

提高执行效率的技术通常也能提高存储器效率。提高存储器效率的关键同样是“简单”。(3) 输入输出的效率

如果用户为了给计算机提供输入信息或为了理解计算机输出的信息,所需花费的脑力劳动是经济的,那么人和计算机之间通信的效率就高。因此,简单清晰同样是提高人机通信效率的关键。

例1:注释

/* ADD AMOUNT TO TOTAL */

TOTAL = AMOUNT+TOTAL

/* ADD MONTHL Y-SALES TO ANNUAL-TOTAL */

TOTAL = AMOUNT+TOTAL

例2:视觉组织——空格

(A<-17)ANDNOT(B<=49)ORC

(A<-17) AND NOT (B<=49) OR C

例3:视觉组织——移行

IF (…) THEN

IF (…) THEN

……

ELSE

……

ENDIF

……

ELSE

……

ENDIF

例4:数据说明标准化

INTEGER size,length,width,cost,price

INTEGER cost,length,price,size,width

例5:一行一条语句

FOR I:=1 TO N-1 DO BEGIN T:=I;

FOR J:=I+1 TO N DO

IF A[J]I

THEN BEGIN WORK:=A[T];

A[T]:=A[I]; A[I]:=WORK; END END;

FOR I:=1 TO N-1 DO

BEGIN

T:=I;

FOR J:=I+1 TO N DO

IF A[J]

IF T<>I THEN

BEGIN

WORK:=A[T];

A[T]:=A[I];

A[I]:=WORK;

END

END;

例6:强调清晰性

A[I]=A[I]+A[T];

A[T]=A[I]-A[T];

A[I]=A[I]-A[T];

WORK=A[T];

A[T]=A[I];

A[I]=WORK;

例7:简单直接

for (i=1; i<=n; i++)

for (j=1; j<=n; j++)

V[i][j]=(i/j)*(j/i)

for (i=1; i<=n; i++)

for (j=1; j<=n; j++)

if (i==j)

V[i][j]=1;

else

V[i][j]=0;

例8:避免不必要的转移

IF (X

IF (Y

SMALL=Z

GOTO 70

30 IF (X

AMALL=Z

GOTO 70

50 SMALL=Y

GOTO 70

60 SMALL=X

70 CONTINUE

SMALL=X;

IF (Y

SMALL=Y;

IF (Z

SMALL=Z;

例9:避免使用空ELSE和IF…THEN IF…语句if (char>=?a?)

if (char<=?z?)

cout << “This is a letter.”;

else

cout << “This is not a letter.”;

if (char>=?a? && char<=?z?)

cout << “This is a letter.”;

else

cout << “This is not a letter.”;

例10:少用否定条件

if ( !(char < ?0? || char > ?9?) )

if (char >= …0? && char <= …9?)

7.2 软件测试基础

7.2.1 软件测试的目标

测试是为了发现程序中的错误而执行程序的过程;

好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;

成功的测试是发现了至今为止尚未发现的错误的测试。

所有测试都应该能追溯到用户需求;

应该远在测试开始之前就制定出测试计划;

把Pareto原理应用到软件测试中;

应该从“小规模”测试开始,并逐步进行“大规模”测试;

穷举测试是不可能的;

为了达到最佳的测试效果,应该由独立的第三方从事测试工作。

7.2.2 软件测试准则

7.2.3 测试方法

黑盒测试(功能测试):

把程序看作一个黑盒子;

完全不考虑程序的内部结构和处理过程;

是在程序接口进行的测试。

白盒测试(结构测试):

把程序看成装在一个透明的盒子里;

测试者完全知道程序的结构和处理算法;

按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。黑盒测试不可能实现穷尽测试:

假设有程序P,输入量微A和B,输出量为C。

如果计算机的字长为32位,A和B的数据类型都是整数类型。将A和B的可能取值进行排列组合,输入数据的可能性有:232×232=264种。

假设这个程序执行一次需要1毫秒,要完成所有的测试,计算机需要连续工作5亿年。

白盒测试也不能实现穷尽测试:

图中所示的一个小程序的控制流程。曲线代表执行次数不超过20的循环,循环体中共有5条通路。

可能执行的路径有520条,近似为1014条可能的路径。

如果完成一个路径的测试需要1毫秒,那么整个测试过程需要3170年。

黑盒测试与白盒测试优缺点比较:

7.2.4 测试步骤

1. 模块测试(单元测试)

保证每个模块作为一个单元能正确运行;发现的往往是编码和详细设计的错误。2. 子系统测试

把经过单元测试的模块放在一起形成一个子系统来测试;

着重测试模块的接口。

3. 系统测试

把经过测试的子系统装配成一个完整的系统来测试;

发现的往往是软件设计中的错误,也可能发现需求说明中的错误;

不论是子系统测试还是系统测试,都兼有检测和组装两重含义,通常称为集成测试。

4. 验收测试(确认测试)

把软件系统作为单一的实体进行测试;

它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试;

发现的往往是系统需求说明书中的错误。

5. 平行运行

同时运行新开发出来的系统和将被它取代的旧系统;

比较新旧两个系统的处理结果;

可以在准生产环境中运行新系统而又不冒风险;

用户能有一段熟悉新系统的时间;

可以验证用户指南和使用手册之类的文档;

能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。

7.2.5 测试阶段的信息流

输入信息有两类:

软件配置,包括需求说明书、设计说明书和源程序清单等;

测试配置,包括测试计划和测试方案。

7.3 单元测试

单元测试集中检测模块;

单元测试和编码属于软件过程的同一个阶段;

可以应用人工测试和计算机测试这样两种不同类型的测试方法;

单元测试主要使用白盒测试技术,对多个模块的测试可以并行地进行。

7.3.1 测试重点

模块接口

局部数据结构

重要的执行通路

出错处理通路

边界条件

7.3.2 代码审查

由审查小组正式进行测试称为代码审查;

可查出30%~70%的逻辑设计错误和编码错误;

审查小组组成:

组长

程序的设计者

程序的编写者

程序的测试者

一次审查会上可以发现许多错误,可以减少系统验证的总工作量。

7.3.3 计算机测试

必须为每个单元测试开发驱动程序和(或)存根程序。

驱动程序是一个“主程序”,它接收测试数据,传送给被测试的模块,并且印出有关的结果。存根程序代替被测试的模块所调用的模块。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。

驱动程序和存根程序代表开销,通常并不把它们作为软件产品的一部分交给用户。

7.4 集成测试

集成测试是测试和组装软件的系统化技术,主要目标是发现与接口有关的问题。

由模块组装成程序时有两种方法:

非渐增式测试方法

渐增式测试方法

非渐增式测试方法:

先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序;

非渐增式测试一下子把所有模块放在一起,并把庞大的程序作为一个整体来测试,测试者面对的情况十分复杂。

在庞大的程序中想要诊断定位一个错误是非常困难的,改正错误更是极端困难,而且一旦改正一个错误之后,马上又会遇到新的错误。

渐增式测试方法:

把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;

测试完以后再把下一个应该测试的模块结合进来测试,每次增加一个模块;

实际上同时完成单元测试和集成测试;

把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误;

渐增方式有两种集成策略:

自顶向下

自底向上

7.4.1 自顶向下集成

从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。

在把附属于主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。

深度优先:先组装在软件结构的一条主控制通路上的所有模块。

宽度优先:沿软件结构水平地移动,把处于同一个控制层次上的所有模块组装起来。

按深度优先策略组装

按宽度优先策略组装

把模块结合进软件结构的过程由下述4个步骤完成:

第一步,对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块;第二步,根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序(新结合进来的模块往往又需要新的存根程序);

第三步,在结合进一个模块的同时进行测试;

第四步,为了保证加入模块没有引进新的错误,可能需要进行回归测试(即,全部或部分地重复以前做过的测试)。

从第二步开始不断地重复进行上述过程,直到构造起完整的软件结构为止。

优点:

能够在测试的早期对主要的控制或关键的抉择进行检验。

如果选择深度优先的结合方法,可以在早期实现软件的一个完整的功能并且验证这个功能。

缺点:

存根程序代替了低层次的模块,在软件结构中没有重要的数据自下往上流。

用下述步骤可以实现自底向上的结合策略:

第一步,把低层模块组合成实现某个特定的软件子功能的族;

第二步,写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出;

第三步,对由模块组成的子功能族进行测试;

第四步,去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。

上述第二步到第四步实质上构成了一个循环。

7.4.2 自底向上集成

自底向上结合

自底向上结合

7.4.3 不同集成测试策略的比较

不同集成测试方法的比较:

混合策略:

改进的自顶向下测试方法

基本上使用自顶向下的测试方法,但是在早期使用自底向上的方法测试软件中的少数关键模块。

能在测试的早期发现关键模块中的错误;测试关键模块时需要驱动程序。

混合法

对软件结构中较上层使用的自顶向下方法与对软件结构中较下层使用的自底向上方法相结合。

兼有两种方法的优缺点,当被测试的软件中关键模块比较多时,这种混合法可能是最好的折衷方法。

7.4.4 回归测试

回归测试是指重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预期的副作用。

回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动。

回归测试可以通过重新执行全部测试用例的一个子集人工地进行,也可以使用自动化的捕获回放工具自动进行。

7.5 确认测试

确认测试也称为验收测试,它的目标是验证软件的有效性。

软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。

需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。

确认测试必须有用户积极参与,或者以用户为主进行。

使用用户界面输入测试数据并且分析评价测试的输出结果。

通常在验收之前由开发单位对用户进行培训。

7.5.1 确认测试的范围

确认测试的一个重要内容是复查软件配置。

复查的目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。

7.5.2 软件配置复查

Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。Alpha 测试是在受控的环境中进行的。

Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。

测试总结:

1. 接口测试

每个接口可能有多个输入参数,每个参数有“典型值”、“边界值”、“异常值”之分。根据接口的定义,可以推断某种输入应当产生什么样的输出。输出包括函数的返回值和输出参数。

观察是否有程序语句从来没有被执行过。

要特别留意函数体内的错误处理程序块。

2. 路径测试

想遍历测试几乎是不可能的,不测试或者胡乱找几条路径测试却又不行。

输入与对应的输出之间的路径是唯一的。由于接口测试时的输入是有代表性的,因此相应的路径也具有代表性。

路径测试检查表:数据类型、变量值、逻辑判断、循环、内存管理、文件I/O、错误处理。

3. 功能测试

功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望相同。功能测试有两种比较好的测试方法:等价划分法和边界值分析法。

等价划分是指把输入空间划分为几个“等价区间”,在每个“等价区间”中只需要测试一个典型值就可以了。

边界值测试法是对等价划分法的补充。除了典型值外还要用边界值作为测试用例。

4. 健壮性测试

健壮性是指在异常情况下,软件能正常运行的能力。

健壮性有两层含义:

容错能力。容错性测试通常构造一些不合理的输入来引诱软件出错。

恢复能力。恢复测试重点考察以下几项:

系统能否重新运行;

有无重要的数据丢失;

是否毁坏了其它相关的软件硬件。

5. 性能测试

性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些性能数据供人们参考。

有时人们关心测试的“绝对值”。

有时人们关心测试的“相对值”。

6. 用户界面测试

绝大多数软件拥有图形用户界面。

图形用户界面的测试重点是正确性、易用性和视觉效果。

在评价易用性和视觉效果时,主观性非常强,应当考虑多个人的观点。

7. 信息安全测试

信息安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。

信息安全性测试有如下步骤:

为非法入侵设立目标;

邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现“目标”。

如果有人成功了,请他详述入侵的过程。

8. 压力测试

压力测试也叫负荷测试,即获取系统能正常运行的极限状态。

压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。

压力测试的一个变种是敏感测试。

敏感测试目的是发现什么样的输入可能会引发不稳定现象。

9. 可靠性测试

可靠性是指在一定的环境下、给定的时间内、系统不发生故障的概率。

软件可靠性测试可能会花费很长时间。

比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时间间隔,注意要去掉非工作时间。

统计出不发生故障的“最小时间间隔”、“最大时间间隔”和“平均时间间隔”。

10. 安装/反安装测试

目前市面上有非常流行的、专门制作安装/反安装程序的一些工具,如Install Shelled。

主要测试工作:

至少在标准配置和最低配置两种环境下测试;

如果有安装界面,应当尝试各种选项,如选择“全部”、“部分”、“升级”等。

7.6 白盒测试技术

所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。

7.6.1 逻辑覆盖

有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。

从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:

语句覆盖

判定覆盖

条件覆盖

判定/条件覆盖

条件组合覆盖

1. 语句覆盖

含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。

分析:

执行路径sacbed

测试用例:

A=2,B=0,X=4

覆盖sacbed

语句覆盖特点:

语句覆盖对程序的逻辑覆盖很少。

语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。

语句覆盖是很弱的逻辑覆盖标准。

2. 判定覆盖(分支覆盖)

含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。

所有判定分支:

(1) a点判定为T

(2) a点判定为F

(3) b点判定为T

(4) b点判定为F

2. 判定覆盖(分支覆盖)

测试用例:

Ⅰ. 满足(1)(4)

A=3,B=0,X=3

覆盖sacbd

Ⅱ. 满足(2)(3)

A=2,B=1,X=1

覆盖sabed

2. 判定覆盖(分支覆盖)

或者

Ⅰ. 满足(1)(3)

A=2,B=0,X=3

覆盖sacbed

Ⅱ. 满足(2)(4)

A=3,B=1,X=1

覆盖sabd

特点:比语句覆盖强,但对程序逻辑的覆盖程度仍不高。

3. 条件覆盖

含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。所有条件:

(1)A>1 (2)A≤1

(3)B=0 (4)B≠0

(5)A=2 (6)A≠2

(7)X>1 (8)X≤1

3. 条件覆盖

测试用例:

Ⅰ. 满足(1)(3)(5)(7)

A=2,B=0,X=4

覆盖sacbed

Ⅱ. 满足(2)(4)(6)(8)

A=1,B=1,X=1

覆盖sabd

3. 条件覆盖

或者

Ⅰ. 满足(1)(3)(5)(8)

A=2,B=0,X=1

覆盖sacbed

Ⅱ. 满足(2)(4)(6)(7)

A=1,B=1,X=2

覆盖sabed

或者……

条件覆盖特点:

条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二组测试用例。

判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。

4. 判定/条件覆盖

含义:使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。

测试用例:

Ⅰ. 满足条件(1)(3)(5)(7)

和判定(1)(3)

A=2,B=0,X=4

覆盖sacbed

Ⅱ. 满足条件(2)(4)(6)(8)

和判定(2)(4)

A=1,B=1,X=1

覆盖sabd

特点:有时判定/条件覆盖也并不比条件覆盖更强。

5. 条件组合覆盖

含义:要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。

条件组合:

(1)A>1,B=0

(2)A>1,B≠0

(3)A≤1,B=0

(4)A≤1,B≠0

(5)A=2,X>1

(6)A=2,X≤1

(7)A≠2,X>1

(8)A≠2,X≤1

5. 条件组合覆盖

测试用例:

Ⅰ.满足(1)(5)

A=2,B=0,X=4

覆盖sacbed

Ⅱ.满足(2)(6)

A=2,B=1,X=1

覆盖sabed

Ⅲ.满足(3)(7)

A=1,B=0,X=2

覆盖sabed

Ⅳ. 满足(4)(8)

A=1,B=1,X=1

覆盖sabd

条件组合覆盖特点:

条件组合覆盖是前述几种覆盖标准中最强的。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。

但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。(4组数据都没有测试到sacbd)

从对程序路径的覆盖程度分析的逻辑覆盖标准:

6. 点覆盖

含义:选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次。

特点:由于流图的每个结点与一条或多条语句相对应,因此点覆盖标准和语句覆盖标准是相同的。

7. 边覆盖

含义:选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。

特点:通常边覆盖和判定覆盖是一致的。

8. 路径覆盖

含义:选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。

语句

覆盖

判定/条件覆盖

条件组合覆盖

路径覆盖

点覆盖

边覆盖

7.6.2 控制结构测试

1. 基本路径测试

基本路径测试是Tom McCabe提出的一种白盒测试技术。

首先计算程序的环形复杂度;

以该复杂度为指南定义执行路径的基本集合;

从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。

i=1;

total.input=total.valid=0;

sum=0;

DO WHILE value[i] <> -999

AND total.input<100

increment total.input by 1;

IF value[i]>=minimum

AND value[i]<=maximum

THEN increment total.valid by 1;

sum=sum+value[i];

ENDIF

increment i by 1;

ENDDO

IF total.valid>0

THEN average=sum/total.valid;

ELSE average=-999;

ENDIF

例:求平均值过程

(1) 根据过程设计结果画出相应的流图。

1

2

3

4

5

6

7

8

9

10

11

12

13

1

2

3

4

5

6

9

8

7

10

12

11

13

(2) 计算流图的环形复杂度。

V(G)=6

(3) 确定线性独立路径的基本集合。

所谓独立路径是指至少引入程序的一个新处理语句集合或一个新条件的路径。

用流图术语描述,独立路径至少包含一条在定义该路径之前不曾用过的边。

路径1:1-2-10-11-13

路径2:1-2-10-12-13

路径3:1-2-3-10-11(12)-13

路径4:1-2-3-4-5-8-9-2-

10-11(12)-13

路径5:1-2-3-4-5-6-8-9-

2-10-11(12)-13

路径6:1-2-3-4-5-6-7-8-

9-2-10-11(12)-13

(4) 设计可强制执行每条独立路径的测试用例。

应该选取测试数据使得在测试每条路径时都适当地设置好了各个判定结点的条件。

在测试过程中,执行每个测试用例并把实际输出结果与预期结果相比较。

一旦执行完所有测试用例,就可以确保程序中所有语句都至少被执行了一次,而且每个条件都分别取过true值和false值。

某些独立路径不能以独立的方式测试,这些路径必须作为另一个路径的一部分来测试。3. 循环测试

循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。

在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。

(1) 简单循环

应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。

跳过循环。

只通过循环一次。

通过循环两次。

通过循环m次,其中m

通过循环n-1,n,n+1次。

(2) 嵌套循环

从最内层循环开始测试,其他循环都设置为最小值。

对最内层循环使用简单循环测试方法,而使外层循环的迭代参数取最小值,并为越界值或非法值增加一些额外的测试。

由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。

继续进行下去,直到测试完所有循环。

(3) 串接循环

如果串接循环的各个循环都彼此独立,则可以使用测试简单循环的方法来测试串接循环。如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。

7.7 黑盒测试技术

黑盒测试着重测试软件功能,错误类型为:

功能不正确或遗漏了功能;

界面错误;

数据结构错误或外部数据库访问错误;

性能错误;

初始化和终止错误。

测试标准:

测试用例尽可能少;

一个测试用例能指出一类错误。

7.7.1 等价划分

等价划分是一种黑盒测试技术,把程序的输入域划分成若干个数据类,据此导出测试用例。等价划分法力图设计出能发现若干类错误的测试用例,从而减少测试用例的数目。

每类中的一个典型值在测试中的作用与这一类中所有其他值的作用相同。

使用等价划分法设计测试方案首先需要划分输入数据的等价类。

常常还需要分析输出数据的等价类,以便根据输出数据的等价类导出对应的输入数据等价类。

等价类划分的启发式规则:

如果规定了输入值的范围,则可划分出一个有效的等价类(输入值在此范围内),两个无效的等价类(输入值小于最小值或大于最大值);

如果规定了输入数据的个数,则类似地也可划分出一个有效的等价类和两个无效的等价类;如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任一个不允许的输入值);

如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从各种不同角度违反规则);

如果规定了输入数据为整型,则可以划分出正整数、零和负整数等3个有效类;

如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。

设计测试方案时两个步骤:

设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止;

设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。

例1:

软件工程导论复习笔记

简答题: 1.什么是软件? 答:软件是: (1)指令的集合(计算机程序),通过执行这些指令可以满足预期的特征、功能和性能需求。 (2)数据结构,使得程序可以合理利用信息。 (3)软件描述信息,它以硬拷贝和虚拟形式存在,用来描述程序操作和使用。 2.How do software characteristics differ from hardware characteristics? 软件的特性是如何不同硬件的特性? 答:(1)软件是设计开发的,而不是传统意义上生产制造的(2)软件不会磨损,但会退化 (3)虽然整个工业向着基于构件的构造模式发展,然而大多数软件仍是根据实际的顾客需求定制的 3.What do people mean by the expression "software crisis"? 人们是怎样理解“软件危机”这个短语的?

答:软件危机主要表现在两个方面: (1)无法满足日益增长的对软件的需求。 (2)难以满足对已有的软件系统的维护需求。 软件危机出现的原因: (1)由于软件生产本身存在着复杂性 (2)与软件开发所使用的方法和技术有关 “软件工程”的概念用工程化的思想来克服软件危机。 4.What myths about software still exist ? 软件仍然存在着什么神话? 答:管理者的神话;用户的神话;开发者的神话。 简答题: 1.What are the three generic phases of software engineering? 软件工程的三个一般的阶段是? 答:定义阶段、开发阶段、维护阶段 (软件生存周期的三个阶段:软件定义、软件开发、软件维护) 2.What are the names of the five levels of the SEI Capability Maturity Model?

张海藩《软件工程导论》(第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._____应尽可能准确地反映该服务的职能。 【答案】服务名

(完整版)软件工程导论(第六版)张海藩课后习题部分答案

第一章 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意义上的矛盾适用于中型软件的开发 螺旋模型的优点:1集成了瀑布模型、快速原型模型、增量模型的优点;2支持用户需求动态变化;3需求分析与软件实现紧密联系相互依赖;4原型作为刑式的可执行的需求规格说明,即利用用户和开发人员共同理解,又可作为后续开发的基础;5为用户参与决策提供方便;6提高目标软件的适应能力;7降低风险;8在大型软件开发过程中充分发挥优势。螺旋模型的缺点:1迭代次数影响开发成本,延迟提价时间;2找不到关键改进点,人才、物力、财力时间引起无谓消耗;3成于风险分析,败于风险分析。适用于内部开发的大规模软件项目。 1-8:为什么说喷泉模型叫好的体现了面向对象软件开发过程无缝和迭代的特性?

软件工程导论试题集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个阶段中,详细设计阶段出错,对软件

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

第七章习题答案 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 FILE TO 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 修改后的程序框图(盒图)

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

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

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

《软件工程导论》课后习题答案 第一章软件工程概论 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、

软件工程导论简答题整理版

第一章 4.什么是软件工程?它与软件工程方法学有何关系? 软件过程是为了开发高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 软件过程定义了运用技术方法的顺序,应该交付的文档资料,为保证软件质量和协调软件变化必须采取的管理措施,以及标志完成了相应开发活动的里程碑。软件过程是软件工程方法学的3个重要组成部分之一。 7.假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。一旦实现并测试完之后,该产品将被抛弃。你打算选用哪种软件生命周期模型?请说明你作出选择的理由。 答:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型来分析需求也无须用原型来验证设计方案。此外,一旦实现并测试完之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。 第三章 一列火车最多有两个火车头。只有一个火车头时则位于列车最前面,若还有第二个火车头时,则第二个火车头位于列车最后面。火车头既可能是内燃机车也可能是电器机车。车厢分为硬座车厢、硬卧车厢和软卧车厢等3种。硬座车厢在所有车厢的前面部分,软卧车厢在所有车厢的后面部分。此外,在硬卧车厢和软卧车厢之间还有一节餐车。 答:jackson图善于描绘复杂事物的组成。用jackson图描绘一列火车的构成的方法至少有两种,一种方法是把火车分为一个车头和两个车头两类,另一种方法是把后车头作为可选的。图3.29给出了描绘一列火车的构成的jackson图。

用Jackson 图描绘一列火车的构成 第四章 3.假设有一个由5000行FORTRAN语句构成的程序(经编译后大约有25000条机器指令),你估计在对它进行测试期间将发生多少个错误?为什么? 答:经验表明,在类似的程序中,单位长度里的错误数Er/Ir近似为常数。美国的一些统计数字告诉我们,通常 0.5ⅹ10-2 <= Er/Ir <= 2ⅹ10-2 也就是说,在测试之前每1000条指令中大约有5-20个错误. 假设在该程序的每1000条指令中大约有10个错误,则估计在对它进行测试期间将发现的错误数为 25000ⅹ10/1000=250 第五章 3、某软件公司拟采取下述措施提高他们开发出的软件产品的可维护性。请判断那些措施是正确的,那些措施不正确。 (1)在分析用户需求时同时考虑维护的问题。 正确。在分析用户需求的同时考虑维护问题,列出将来可能变更或增加的需求,就可以在设计时为将来可能做的修改预先做一些准备,使得在用户确实提出这些维护要求时,实现起来比较容易一些。 (2)测试完程序后,删去程序中的注解以缩短源程序的长度。 不正确。程序中的注解是提高程序可理解性的关键的内部文档,删去程序中的注解必然会降低程序的可读性和可理解性,从而降低软件的可维护性。 (3)在软件开发过程中尽量保证各阶段文档的正确性。 正确。完整准确的文档对提高软件的可理解性有重要贡献,保证文档的正确性是提高软件可维护性的关键。 (4)编码时尽量多用全局变量。 不正确。程序中使用的全局变量多,不仅违背局部化原理而且会使得具有公共环境耦合的模块数量增多,从而降低程序的可理解性,可修改性和可测试性,因此,这样的软件可维护性较差。 (5)选用时间效率和空间效率尽可能高的算法。 不正确。一般说来,效率高的算法的可理解性较差,选用效率尽可能高的算法将降低软件的可维护性。事实上,程序的效率能够满足用户的需求就可以了,没有必要盲目地追求尽可能高的效率。 (6)尽可能利用硬件特点以提高程序效率。 不正确。程序对硬件特点依赖越多,运行程序的硬件变更适应性维护的工作量也就越大。(7)尽可能使用高级语言编写程序。 正确。用高级语言编程时,用户可以给程序变量和程序模块赋予含义鲜明的名字,通过名字能够比较容易的把程序对象和它们所代表的实体联系起来。此外,高级语言使用的概念和符号更符合人的习惯。上述事实都使得用高级语言编写的程序更容易阅读,因此也就更容易维护。 (8)进行总体设计时加强模块间的联系。 不正确。模块间耦合越紧密,程序就越难理解和修改,修改后测试也比较困难。因此,加强模块间的联系将降低软件的可维护性。 (9)尽量减少程序模块的规模。 不正确。程序模块的规模很小,就会使程序中包含的模块很多,这将使模块间的接口数量大

《软件工程导论》第五版-张海藩-编著-总结

《软件工程导论》第五版张海藩编著总结 分类:Computer System2011-01-04 10:14 6417人阅读评论(10) 收藏举报 测试数据结构工具任务文档软件测试 总结重点: ?Unit1 ?软件危机包含两方面の问题:一是如何开发软件,怎样满足人们对软件日益增长の需求?二是如何维护软件,使它们持久地满足人们の要求。 ?软件工程学定义:把软件当作一种工业产品,采用工程学の原理来管理和组织软件の开发和维护,称为软件工程。 ?软件是指程序、数据和文档三者共同构成の配置。 ?包含与数据处理系统操作有关の程序、规程、规则以及相关文档の智力创作称为软件。文档是描述程序开发过程の,是智力创作の真实记录,是创作活动の历史档案和结晶。 ?软件の描述性定义:软件由计算机程序,数据结构和文档组成。 ?软件质量定义为“与软件产品满足规定の和隐含の需求能力有关の特征和特性の全体” 具体来说: 1)软件产品中能满足给定需求の性质和特性の总体; 2)软件具有所期望の各种属性の组合程度。 ?将软件质量属性划分为六个特性(功能性、可靠性、易用性、效率、维护性和可移植性),这六个属性是面向用户の观点——面向管理の观点,且是定性描述の。 ?软件质量度量体系:内部度量可用于开发阶段の非执行软件产品,外部度量只能在生存周期过程中の测试阶段和任何运行阶段使用。 ?软件工程项目の基本目标:(1)低成本;(2)满足功能要求;(3)高性能;(4)易移植;(5)易维护。 ?软件工程方法学就是要从技术和管理上提供如何去设计和维护软件。 ?软件开发方法:面向数据流(约旦)方法、面向数据结构方法、面向对象方法。 ?结构程序设计是进行以模块功能和处理过程设计为主の详细设计の基本原则。它の主要观点是采用自顶向下、逐步求精の程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。 ?用来辅助软件开发、运行、维护、管理、支持等过程中活动の软件称为软件工具(CASE)。 ?软件生存周期定义:软件产品从形成概念开始,经过开发、使用和维护,直到最后不再使用の整个过程。各阶段の任务彼此间尽可能の相对独立,同一阶段内各项任务の性质尽可能の相同。软件の开发就是“按软件顺时间发展の过程分阶段进行”の。 ?软件生存周期模型: 瀑布模型(阶段间具有顺序型和依赖性,清楚地区分逻辑设计与物理设计、尽可能推迟程序の物理实现,是文档驱动模型,遵循结构化设计);

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

第一章 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意义上的矛盾适用于中型软件的开发

软件工程导论复习要点

软件工程导论复习要点 第一章 1.软件的定义: 软件是计算机程序、数据以及运行计算机系统可能需要的相关文档。 (1)程序:程序是计算任务的处理对象和处理规则的描述。(软件!=程序) (2)数据:使程序能正常操纵信息的数据结构(即数据的组织形式)。 (3)文档:文档是为了便于了解程序所需的阐明性资料。 2.软件工程的定义: 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;研究上面提到的途径。 3.软件工程三要素: 过程:开发软件产品的一组活动及其结果。 方法:为软件开发过程提供“如何做”的技术。 工具:为软件开发方法提供自动的或半自动的软件支撑环境。4.软件过程的四个基本活动: 规格说明:定义软件功能以及对其使用的限制。 软件开发:设计和实现满足规格说明的软件。 软件确认:验证软件足以保证能够满足客户的要求。

软件演化:改进软件以适应不断变化的需求。 5.两种主要的开发方法: 结构化(面向过程)的方法、面向对象的方法。 第二章 1.软件工程发展历史: (1)第一阶段:软件危机——是指计算机软件的开发和维护过程所遇到的一系列严重问题 主要表现:软件开发费用和进度失控;软件的可靠性差;生产出来的软件难以维护;软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的需要。(1968年10 月软件工程大会在德国由北约出资举办) (2)第二阶段:传统软件工程——一是从管理的角度,希望实现软件开发过程的工程化(软件生命周期模型;确定了一些重要文档格式的标准);二是侧重于对软件开发过程中、分析设计的方法的研究(结构化)。 (3)第三阶段:现代软件工程——从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。 发展趋势:模块化;开放计算;合理的开发治理;全球化软件协作交付。

(完整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.软件维护:关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。

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

软件工程导论(第五版)课后习 题答案 《软件工程导论》课后习题答案 第一章软件工程概论 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

张海藩《软件工程导论》(第6版)(课后习题 第7章 实现)【圣才出品】

第7章实现 1.下面给出的伪码中有一个错误。仔细阅读这段伪码,说明该伪码的语法特点,找出并改正伪码中的错误。字频统计程序的伪码如下: 答:(1)错误:INSERT the extracted word into the table在这个后面,没有给这个word的occurrence count赋值为1。 (2)语法特点:该伪代码在循环结构中嵌套循环结构,并且在嵌套的循环结构中又嵌套了IF ELSE结构。 2.研究下面给出的伪码程序,要求: (1)画出它的程序流程图。 (2)它是结构化的还是非结构化的?说明理由。 (3)若是非结构化的,则:

a.把它改造成仅用3种控制结构的结构化程序;b.写出这个结构化设计的伪码; c.用盒图表示这个结构化程序。 (4)找出并改正程序逻辑中的错误。 答:(1)程序流程图,如图7-8所示。

图7-8程序流程图 (2)此程序是非结构化的,它有一个GOTO语句,并且是从一个循环体内转到循环体外的一条件语句内部。 (3)①修改后的伪码,如图7-9所示。

图7-9修改后的伪码 ②修改后程序的盒图,如图7-10所示。 图7-10修改后程序的盒图 (4)程序中的错误: ①语句“IF WORD=KEYWORD”里的变量“WORD”没有预先赋值。 ②程序中没有预先输入T的值。 ③“N=0”应该是“MATCH=0”。 3.在第2题的设计中若输入的N值或KEYWORD不合理,会发生问题。(1)给出这些变量的不合理值的例子。 (2)将这些不合理值输入程序会有什么后果?

(3)怎样在程序中加入防错措施,以防止出现这些问题? 答:(1)N=1,KEYWORD=#。 (2)不合理的值输入程序后无法打印出任何信息。 (3)可以通过加入循环来防止出现这些错误的问题。 4.回答下列问题。 (1)什么是模块测试和集成测试?它们各有什么特点? (2)假设有一个由1000行FORTRAN语句构成的程序(经编译后大约有5000条机器指令),估计在对它进行测试期间将发现多少个错误?为什么? (3)设计下列伪码程序的语句覆盖和路径覆盖测试用例: 答:(1)①模块测试时对每个单独的模块,分别用黑盒和白盒测试技术,测试它地功

软件工程导论第五版复习重点(必考题)

(最后部分为每年必考题) 第一章 1. .软件工程的定义:软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的. 2. 软件危机的概念:软件危机是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。 3. 产生软件危机的原因:(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。(2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。 4. 面向对象方法学的四个要点:1.把对象作为融合了数据及在数据上的操作行为的统一的软件构件2.把所有对象都划分成类3.按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。4.对象彼此间仅能通过发送消息互相联系。 5. 软件生命周期:软件定义(问题定义,可行性研究,需求分析)、软件开发(总体设计,详细设计,编码,单元测试,总体测试)、运行维护(持久地满足用户的需要) 6. 瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,概念.方法.优缺点.区别。 7. 微软过程把软件生命周期划分为成5个阶段:规划阶段,设计阶段,开发阶段,稳定阶段,发布阶段。 第二章 1.可行性包括:技术可行性,经济可行性,操作可行性。 2. 系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形势描绘组成系统的每个部件(程序,文档,数据库,人工过程等)。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据流图而不是程序流程图。4. 书库流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只描绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示。 5. 用系统流程图描绘一个系统时,系统的功能和实现每个功能的具体方案是混在一起的。有数据元素组成的数据的方式只有下述3种基本类型:顺序(即以确定次序连接两个或多个分量)。选择即从两个或多个可能的元素中选取一个重复即把指定的分量重复零次或多次

相关文档
相关文档 最新文档