|
|
|
|
移动端

练习

《软件测试基础教程》第1章软件测试的基本知识,本章作为一个导引,其目的在于让读者熟悉与软件测试相关的基本概念,建立起全书的框架。在本书后续章节中将要详细阐述的问题,首先在这里被提了出来。读完这章之后,读者就能够在软件测试和软件质量方面提出一些有意义的问题。本节为本章的练习部分。

作者:王峰/郭长国/陈振华 等译来源:机械工业出版社|2011-09-17 21:23

技术沙龙 | 6月30日与多位专家探讨技术高速发展下如何应对运维新挑战!


练习

1.1经常听到这样的说法:“不可能完全测试一个程序。”讨论这句话成立的上下文环境。在何种“完全测试”定义下,这句话成立?(注意,现在试试回答这个问题;在阅读完第6章之后,再回头来回答此问题。)

1.2描述至少一个这样的场景:软件产品被感觉到的错误行为并非由产品中的错误引起的。

1.3在一台每微微秒(10-12秒)输入一对整数并执行完max的计算机上,完成对max的穷举测试需要多少年?

1.4设计一个为笑话判断优秀、良好或较差等级的测试策略。你会提出什么策略?会将统计技术应用于笑话分类中吗?

1.5评价例1.9中程序P的可靠性,假设:

(a)输入二元偶(0,0)出现的概率为0.6,其他两个二元偶出现的概率都是0.2。

(b)输入(-1,1)时程序P失效。

1.6根据ANSI/IEEE Std 729-1983,即使其包含多个缺陷,一个程序的可靠性有可能为1.0吗?解释原因。

1.7假设例1.10中程序sort当输入为字母数字串时失效的概率是0.9,当输入为纯数字串时运行正确。计算sort针对例1.10中两种操作剖面的可靠性。

1.8给出sort一种可能的编码,能够得出例1.6中的结果。

1.9考虑一个Web站点,其允许访问者用任意搜索串在数据库中搜索相关内容。假设我们只关注该站点允许的3类操作:search、previous和next。为了激发search操作,需输入一个搜索串并点击Go按钮。当搜索结果显示出来时,Previous按钮和Next按钮显现出来,点击Previous按钮可移到搜索结果的前一页,点击Next按钮可移到搜索结果的后一页。描述测试预言如何判断该Web站点的3个功能都被正确实现了。该测试预言能够自动化吗?

1.10(a)当对第1.14.3小节中的程序P1.3(例1.27)执行包含N个整数的输入序列时,计算其被遍历路径的长度。

(b)假设程序P1.3第8行语句被替换为:

 

如果输入序列的长度可以是0、1和2,计算修改过后的程序P1.3中不同路径的数量。

(c)对于长度为N的输入序列,计算修改后的程序P1.3遍历路径的最大长度。

1.11为图1-16中的CFG、图1-27中的每个CFG构造决定者树和后决定者树。

 
图1-27 练习1.11的CFG
1.12设pred(n)是CFG G=(N,E) 中结点n的所有直接前驱的集合。结点n的决定者集合可用下列等式进行计算:
  

采用这个等式,设计一个算法计算N中每个结点的决定者集合。(注意,已经存在一些计算CFG中决定者和后决定者的算法。努力设计自己的算法,然后用前面参考文献注释中的相关例证来研究所设计的算法。)

1.13(a)计算图1-16中CFG的圈复杂度。

(b)证明:对于结构化程序的CFG,圈复杂度等于条件数加1。所谓结构化的程序,就是只采用单个入口语句和单个出口语句的程序。在结构化的程序中不允许有GOTO语句。

1.14针对程序P1.2和程序P1.3,计算其Halstead软件科学度量。根据计算出的度量值,讨论两个程序的相对复杂性。当计算Halstead度量时,请注意:

(ⅰ)程序中的每个符号,不包括分号(;)和大括号({,}),要么被当作操作符,要么被当作操作数。

(ⅱ) 说明关键字是操作符,被说明的变量是操作数。这样,诸如if、else的关键字以及函数调用都是操作符,传统的算术运算符和关系运算符如<、+也是操作符。

1.15考虑两个应用软件A1和A2,假定这两个软件的可测试性是用静态复杂性来度量的,如圈复杂度。现在假设,A1和A2的圈复杂度相同。构造一个例子说明,尽管其圈复杂度相同,A1和A2的可测试性还是差别很大。(提示:考虑嵌入式应用软件。)

1.16考虑如图1-11a所示的一个双输入NAND(与非)门,其包含下列故障:

(ⅰ)输入A s-a-0故障,输出O s-a-1故障;

(ⅱ) 输入A s-a-0故障,输出O s-a-0故障;

(ⅲ)输入A和B都是 s-a-1故障;

(ⅳ)输入A和B都是 s-a-0故障;

(ⅴ) 输入A s-a-1故障,B s-a-0故障。

针对以上列举的每一种情况,考虑是否都存在一个测试向量能够判断出该与非门是有故障的?

1.17(a)修改图1-20中的依赖图,增加对应于程序P1.3 中第2行、第3行说明语句的结点以及相应的依赖边。

(b) 针对程序P1.3,能否说明增加对应于说明语句的结点是多余的?

(c)在何种条件下,向数据依赖图增加对应于说明语句的结点是有益的?

1.18构造第1.14.1节中求幂程序P1.2的PDG。

1.19为什么为测试系统组件设计的测试用例可能不适合测试系统?

1.20公司X因生产最新型的蒸汽锅炉而著名,其最新型号的燃气或燃油锅炉带有一个锅炉控制软件包,该软件包是个超高可靠的软件,精确控制锅炉的各个参数,如点火、燃烧等。该软件包有个用户友好的GUI,帮助设置各种参数。仔细阅读下面的描述,指出所采用的测试技术。

与公司接触时,公司说整个软件包有部分需求是用状态图形式化地描述的,其余部分的需求是用Z语言描述的。几个测试小组分别负责测试软件包的各个组件。

GUI测试小组的职责是确保GUI运行正确,并是用户友好的。状态图和Z规范是整个系统的测试依据。采用MC/DC基于控制流的覆盖准则来评价从这些规范生成的测试用例的充分性。为确保所有可能条件都被覆盖以及满足MC/DC准则,不断地增加新的测试用例。除了由形式化规范和图形规范生成的测试外,一个测试小组专门用组合设计来生成测试用例,向被测软件输入各种各样的参数组合。

在集成之前,软件包的各个组件已经单独进行了测试。对于每个组件,采用传统的等价类划分、边界值分析等技术来设计测试。因果图也用于某些组件的测试。在进行系统测试时,借助了前面生成的测试用例。

1.21 列出一些支持饱和效应存在的理由。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Java网络编程精解

本书结合大量的典型实例,详细介绍了用Java来编写网络应用程序的技术。本书的范例都基于最新的JDK 1.5版本,书中内容包括:Java网络编程的...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊