北大测试全套课件和教案 第16章习题与解答.docx

上传人:b****2 文档编号:17982663 上传时间:2023-04-24 格式:DOCX 页数:17 大小:91.01KB
下载 相关 举报
北大测试全套课件和教案 第16章习题与解答.docx_第1页
第1页 / 共17页
北大测试全套课件和教案 第16章习题与解答.docx_第2页
第2页 / 共17页
北大测试全套课件和教案 第16章习题与解答.docx_第3页
第3页 / 共17页
北大测试全套课件和教案 第16章习题与解答.docx_第4页
第4页 / 共17页
北大测试全套课件和教案 第16章习题与解答.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

北大测试全套课件和教案 第16章习题与解答.docx

《北大测试全套课件和教案 第16章习题与解答.docx》由会员分享,可在线阅读,更多相关《北大测试全套课件和教案 第16章习题与解答.docx(17页珍藏版)》请在冰豆网上搜索。

北大测试全套课件和教案 第16章习题与解答.docx

北大测试全套课件和教案第16章习题与解答

第1章习题解答

1.为何说软件缺陷的最大来源是产品说明书?

解答:

产品说明书没有写,我们要记得说不出来就做不出来;

产品说明书不完整、不停更改,难以和开发人员沟通。

2.简述软件质量保证和软件测试的关系。

解答:

软件质量保证(SQA)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。

软件测试流程包括项目计划检查、测试计划创建、测试设计、执行测试、更新测试文档和测试评估;SQA的活动可总结为协调度量、风险管理、文档检查、促进/协助流程改进、监察测试工作。

软件质量保证和软件质量控制之间的界限越来越模糊了。

软件测试是SQA中的重要手段,SQA的主要功能在软件测试中得到体现,集中在静态测试中,两者的关系越来越紧密。

3.在了解软件测试职业及其素质要求后,对你从事软件职业的生涯设计有何影响?

略。

第2章习题解答

1.用流程图实现下面这个问题:

计算并报告一个班学生的平均分数。

 

2.用伪代码实现下面这个问题:

输入一年中的某月,然后给出该月的天数,如果是2月,用户将回答这年是否是闰年。

#include

voidmain()

{

intmonth,year;

boolIsleap;

cout<<"pleaseinputyear:

(1812-2012)";

cin>>year;

if((year%4==0)&&(year%100!

=0)||(year%100!

=0)&&(year%400==0))

{Isleap=true;

cout<<"是闰年";

}

else

{

Isleap=false;

cout<<"不是闰年";

}

cout<<"pleaseinputthemonth:

(1-12)";

cin>>month;

switch(month)

{case1:

case3:

case5:

case7:

case8:

case10:

case12:

cout<<"31天.";break;

case4:

case6:

case9:

case11:

cout<<"30天.";break;

case2:

if(Isleap)

cout<<"29天.";

elsecout<<"28天";

break;

default:

cout<<"erroe!

";}

}

3.PriorDate是NextDate的逆函数,参照NextDate,写出PriorDate的伪代码。

#include

voidmain()

{

intlastday,lastmonth,lastyear;

intday,month,year;

boolc1,c2,c3;

cout<<"Entertoday'sdateinformMMDDYYYY";

cin>>month>>day>>year;

c1=(day>=1)&&(day<=31);

c2=(month>=1)&&(month<=12);

c3=(year>=1812)&&(year<=2012);

if(!

c1)

cout<<"Valueofdaynotintherange1...31"<<"\n";

if(!

c2)

cout<<"Valueofmonthnotintherange1...12"<<"\n";

if(!

c3)

cout<<"Valueofyearnotintherange1812...2012"<<"\n";

do

{

switch(month)

{

case5:

case7:

case10:

case12:

if(day>1)

{

lastday=day-1;

lastmonth=month;

lastyear=year;

}

else

{

lastday=30;

lastmonth=month-1;

lastyear=year;

}

break;

case2:

case4:

case6:

case8:

case9:

case11:

if(day>1)

{

lastday=day-1;

lastmonth=month;

lastyear=year;

}

else

{

lastday=31;

lastmonth=month-1;

lastyear=year;

}

break;

case3:

if(day>1)

{

lastday=day-1;

lastmonth=month;

lastyear=year;

}

else

{

if(year%4==0&&year%100!

=0||year%400==0)

{

lastday=29;

lastmonth=2;

lastyear=year;

}

else

{

lastday=28;

lastmonth=2;

lastyear=year;

}

}

break;

case1:

if(day>1)

{

lastday=day-1;

lastmonth=month;

lastyear=year;

}

else

{

lastday=31;

lastmonth=12;

if(year!

=1812)

lastyear=year-1;

elsecout<<"lastyearisnotinrange";

}

break;

default:

cout<<"error!

";

}

if(c1&&c2&&c3)

cout<<"\n"<<"thelastdayis"<

return;

}while(c1&&c2&&c3);

}

第三章习题解答

1.什么是单元测试?

单元测试时对软件设计的最小单位------模块进行正确性检验的测试工作,主要测试模块在语法、格式和逻辑上的错误。

2.单元测试主要采用什么测试方法?

单元测试的基本方法有:

人工静态分析、自动静态分析、自动动态测试,人工动态测试。

第四章习题解答

1.写出“直接插入排序”的算法,画出流程图,并用逻辑覆盖法,写出测试用例。

【解】已知直接插入排序算法得基本步骤如下:

(1)从一组数中取出第一个数

(2)取下一个数,如数已取完,则排序结束;

(3)如果所取数大于等于其前邻数,则重复

(2)步

(4)如果所取数小于其前邻数,则与其前邻数交换位置

(5)重复第(4)步,直到所取已无前邻数(即已交换到当前数列得第一位置),或大于等于其前邻数为止

(6)返回第

(2)步。

流程图如下:

 

 

程序代码如下

Programbubblesor

DimnAsinteger

DimA[n]Asinteger;

Dimi,j,k,tempAsInteger

n=100

input(k)

FORi=1tok

input(a[i])

FORi=2tok

IFa[i]<=a[i-1]

Forj:

=Idownto2

Temp:

=a[j]

A[j]:

=a[j-1]

A[j-1]:

=temp

Endfor

ENDif

Fori=1tok

Output(a[i])

EndProgram

【设计测试用例】

由以上分析可知,排序程序具有双重嵌套循环结构。

其内外循环体各包含一条选择语句,用于在条件满足时提前推出循环。

程序中得4个判断是测试时考察得重点。

以下分别列出按不同覆盖标准设计得测试用例:

语句覆盖。

稍作分析便不难看出,只要送入先大后小得两个数,程序执行时就可以遍历流程图中的所有框。

因此,仅需选用一组测试数据如{A={8,4},K=2},就能实现语句覆盖。

这类覆盖发现错误得能力不强,例如若将程序中得两个“>=”均误写为“=”,用上述得测试数据就不能发现。

判定覆盖。

选用上述得测试数据,内、外层循环都是从正常得循环出口退出得。

要实现判定覆盖,还需在语句覆盖得基础上,增加两个能使程序从非正常出口退出的测试数据。

例如,用以下两组数据:

{A={8,4,8},K=3}和{A={8,4,4},K=3}或{A={8,4,8,4},K=4}

则程序将在满足A[I]=A[I-1]或A[J]=A[J-1]的条件下通过非正常出口,也能实现判定覆盖。

但又可能出现另一种偏向,掩盖把“>=”误写为“=”的错误,造成更加严重得测试漏洞。

条件覆盖。

从以上分析很容易想到,必须选取足够得测试,使复合条件占的每个条件分别按“真”、“假”出现一次,才能克服前述的缺点,进一步提高发现错误的能力。

测试用例:

{A={8,4,9,6},K=4}{A={8,4,8,4},K=4}

就能对程序实现条件覆盖。

此时A[I](或A[J])大于、等于或小于A[I-1](或A[J-1])的3中情况将分别至少出现一次,无论把“>=”误写为“>”或“=”,都可用这两组数据检查出来。

其它覆盖。

本例中得两个复合条件,其组成条件都不是互相独立的。

如果其中有一个条件(例如A[I]=A[I-1])为真,则另一个条件(例如A[J]=A[J-1])必然为假。

所有就本例来说,判定条件覆盖及条件组合覆盖都没有实际意义,可以不必讨论。

由此可见,本例宜选择条件覆盖,以便得到较强得查错能力。

测试数据可选择

{A={8,4,9,6},K=4}{A={8,4,8,4},K=4}或合成一组:

{A={8,4,8,4,9,6},K=6}

2.请把下面的程序流程图转化成控制流图。

解答:

3.请把第2章的NextDate问题的伪代码转换成为控制流图,并简化。

(略)

4.重新编写程序片断14~20,用嵌套if-then-else语句替代复合条件。

14.if(a=b)AND(b=c)

15.ThenOutput(“Equilateral”)

16.ElseIf(a<>b)AND(a<>c)AND(b<>c)

17.ThenOutput(“Scalence”)

18.ElseOutput(“Isosecles”)

19.EndIf

20.EndIf

比较你改写后的程序和上面程序片断的圈复杂度。

解答:

改写如下:

If(a=b)

Thenif(b=c)

ThenOutput(“Equilateral”)

Elseif(a<>b)

Thenif(a<>c)

Thenif(b<>c)

ThenOutput(“Scalence”)

ElseOutput(“Isosecles”)

Endif

Endif

Endif

Endif

Endif

第5章习题解答

1.黑盒测试有哪两种基本方法?

解答:

黑盒测试有两种基本方法,即通过测试和失败测试。

在进行通过测试时,实际上是确认软件能做什么,而不会去考验其能力如何。

软件测试员只运用最简单,最直观的测试案例。

在设计和执行测试案例时,总是先要进行通过测试。

在进行破坏性试验之前,看一看软件基本功能是否能够实现。

这一点很重要,否则在正常使用软件时就会奇怪地发现,为什么会有那么多的软件缺陷出现?

在确信了软件正确运行之后,就可以采取各种手段通过搞“垮”软件来找出缺陷。

纯粹为了破坏软件而设计和执行的测试案例,被称为失败测试或迫使出错测试。

2.黑盒测试中,测试用例设计主要有哪些方法?

(1)等价类划分方法

(2)边界值分析方法

(3)错误推测方法

(4)因果图方法

(5)判定表驱动分析方法

(6)功能图分析方法

3.简述等价类划分的原则。

解答:

①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。

③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。

⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

4.列举一些常见的边界值。

1)对16-bit的整数而言32767和-32768是边界

 2)屏幕上光标在最左上、最右下位置

 3)报表的第一行和最后一行

 4)数组元素的第一个和最后一个

 5)循环的第0次、第1次和倒数第2次、最后一次

5.简述边界值分析法的原则。

1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。

 2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。

3)将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。

 4)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。

 5)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。

 6)分析规格说明,找出其它可能的边界条件。

6.因果图中有哪些关系和约束?

解答:

1)4种符号分别表示了规格说明中向4种因果关系。

1)   关系

①恒等:

若ci是1,则ei也是1;否则ei为0。

②非:

若ci是1,则ei是0;否则ei是1。

③或:

若c1或c2或c3是1,则ei是1;否则ei为0。

“或”可有任意个输入。

④与:

若c1和c2都是1,则ei为1;否则ei为0。

“与”也可有任意个输入。

2)   约束

输入状态相互之间还可能存在某些依赖关系,称为约束。

例如,某些输入条件本身不可能同时出现。

输出状态之间也往往存在约束。

在因果图中,用特定的符号标明这些约束。

A.输入条件的约束有以下4类:

  ①E约束(异):

a和b中至多有一个可能为1,即a和b不能同时为1。

  ②I约束(或):

a、b和c中至少有一个必须是1,即a、b和c不能同时为0。

  ③O约束(唯一);a和b必须有一个,且仅有1个为1。

  ④R约束(要求):

a是1时,b必须是1,即不可能a是1时b是0。

B.输出条件约束类型

   输出条件的约束只有M约束(强制):

若结果a是1,则结果b强制为0。

7.简述用因果图法设计测试用例的步骤。

解答:

(1)分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。

(2)分析软件规格说明描述中的语义。

找出原因与结果之间,原因与原因之间对应的关系。

根据这些关系,画出因果图。

(3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不不可能出现。

为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。

(4)把因果图转换为判定表。

(5)把判定表的每一列拿出来作为依据,设计测试用例。

第6章习题解答

1.什么是测试桩?

模拟被调用单元的一次性代码。

2.什么是驱动模块?

用以模拟被测模块的上级模块的一次性代码。

3.系统测试包含哪些内容?

压力测试、容量测试、性能测试、安全测试、容错测试

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1