一 微信发消息模块功能和易用测试点参考答案
1 微信发消息模块功能测试点:
1) 发正常文字信息;
2) 发正常语音信息;
3) 发正常视频信息;
4) 发正常的图片;
5) 发位置地图;
6) 发空信息;
7) 发超过字数限制(比如2000)个字以上;
8) 发超过60s的语音
9) 发超过视频时间限制的视频;
10) 发格式错误的图片,比如将图片格式修改为jpg1;
11) 发超过微信图片大小要求的图片;
12) 发超过视频大小要求的视频;
13) 发等于文字限制(比如2000)个文字的信息;
14) 发等于图片大小限制的图片;
15) 发等于60s的语音;
16) 发等于视频要求大小的视频;
2 发消息模块易用性测试点:
1) 检查微信此页面的布局是否合理;
2) 检查微信此页面是否有错别字;
3) 检查微信此页面功能是否符合APP设计标准;
4) 检查微信此功能是否实用;
二 发朋友圈模块功能和易用
1 发朋友圈模块功能测试点:
1) 发允许字数以内的纯文字内容;
2) 发允许字数和图片范围内的文字+图片内容;
3) 发允许字数和图片范围内的文字+图片内容+位置;
4) 发超过字数限制数量的纯文字内容;
5) 发超过字数和图片范围的文字+图片;
6) 发等于字数限制数量的文字;
7) 发等于字数和图片限制的文字和图片;
8) 发允许大小的视频文件;
9) 发超过要求的视频文件;
10) 发等于视频大小要求的视频文件;
11) 转发公众号中的文章;
12) 转发其他朋友的文章;
13) 转发其他朋友的文字和图片内容;
2 发朋友圈模块易用测试点:
1) 检查是否符合插入文字,插入图片的标准;
2) 检查此功能模块的菜单是否有错别字;
3) 检查此功能模块的菜单是否符号微信其他页面的风格;
4) 检查发朋友圈的所有功能是否实用;
5) 检查发朋友圈的所有插入方法是否一致;
给 #软件测试基础(2015级7&8班)# 指派了新任务。
补交作业栏(补充平时漏掉的作业)
请大家补交前写清楚任务标题例如:任务一答案如下:
……任务二答案如下:……
知识汇总
软件测试基础这门课程整体分四大部分,第一部分测试背景知识;第二部分,测试技术;第三部分:测试工作流程相关主题;第四部分,专题测试; 在第一大部分中:就包括了测试是什么,为什么要进行测试,测试做什么?测试的原则,测试的内容;测试的误区;软件开发模型;软件测试模型;第二部分,测试技术相关,里面包括黑盒测试技术,白盒测试技术;这个是整个测试知识体系中的重点知识,无论以后做开发还是做测试,这些技术都需要明白,懂得这个思想,这些思想也可以应用在生活中,尤其面对选择时,可以使用等价类划分法去思考问题,所以作为知识本身讲,要深刻理解。 对于白盒测试技术,也同样,开发人员需要掌握,以提高自己的代码质量;作为测试人员讲,能够提高自己的测试技能;在白盒测试中又分为静态白盒测试和动态白盒测试;静态白盒测试,可以进行代码检查,比如桌面检查,代码走查和代码审查;结构分析,代码评估等等;动态白盒测试技术,包括六种逻辑覆盖,比如:语句覆盖,判定覆盖等等;每种覆盖,会检查到一部分逻辑,但也存在一部分检查不到的地方,条件组合覆盖和路径覆盖相对覆盖的比较全,但是花费的时间也比较多;所以在实际中用的时候也是酌情,要求安全性比较高的,需要用路径覆盖,条件组合覆盖;如果是安全性没那么高的,可以使用条件覆盖,判定覆盖这些覆盖方式; 第四部分:测试专题,兼容性测试,易用性测试,安全性测试; 在兼容性测试中,大家需要理解什么情况下需要考虑哪些兼容,比如平台(操作系统)的兼容性;应用软件的兼容性,需要考虑哪些,移动端的软件需要考虑哪些兼容; 易用性测试,分几个方面考虑,比如标准和规范;正确,一致等等;易用性测试用例从这些方面去考虑; 安全性测试,分两个角度,代码角度,外部攻击角度,其实核心在于代码,代码写的让别人没有插针的余地,需要下功夫;比如,最简单的密码能不能明文传输?不能; 然后,最好,我们讲解了质量相关的知识,其实质量相关的知识,应该放在这四大块中的第一块,背景知识中,为什么放在最好讲解,原因是,质量模型相对抽象,并且大家只有在测试之后,才会有质量的概念;我们提高编码能力也好,测试更全面也好,目的都是想要提高软件产品的质量。 第三部分:测试流程中:测试计划,测试环境搭建,测试用例的书写,实施测试,测试总结,测试评估;测试计划中,测试计划的基本结构;测试环境中;搭建测试环境的原则;注意事项等等;测试用例的书写:搞清楚为什么要书写测试用例,测试用例的格式,简化的,完整的都怎样写;实施测试中,第一轮测试,完整测试,之后进行回归测试,但是回归测试不代表不进行全部测试;验收测试:这也是测试过程中需要进行的,但他没有在测试流程中,只是用实施测试来代表,实施测试中包含初次测试,提交bug,回归测试,验收测试等等;甚至α,β测试,都包含在实施测试中,最终是测试总结和测试评估;围绕这个过程,每个过程我们需要知道做什么,怎样做?为什么做?做的过程中的注意事项等等。
任务四 知乎完善个人信息 用例参考答案
性别栏:
1 分别选择男和女,保存后查看结果是不是选择的男和女;
一句话介绍栏:
1不写任何内容
2 填入空格
3 填入10个汉字
4 填入10个字母
5 填入10个数字
6 填入边界值40个汉字
7 填入50个汉字
8 填入41个汉字
9 填入39个汉字
10 选择后,点击“取消”按钮
居住地栏:
1 不输入任何文字
2 输入空格
3 分别输入汉字、字母、数字
4 输入边界个汉字
5 输入边界+1个汉字
6 输入边界-1个汉字
7 输入超过边界数量的汉字
8 选择后,点击“取消”按钮
所在行业栏:
1 不选择任何行业
2 抽取选择3个行业名称,保存后查看结果
3 选择后,点击“取消”按钮
职业经历栏:
1 两个文本框都填入空
2 两个文本框分别填入边界值以内的文字
3 两个文本框分别填入边界值以外的文字
4 两个文本框分别填入等于边界值的文字
5 两个文本框分别填入等于边界值+1个文字
6 两个文本框分别填入等于边界值-1个文字
7 第一个文本框填入合法信息,第二个文本框不填写任何内容
8 第一个文本框不填入任何内容,第二个文本框填入合法信息
9 填入信息后,点击取消
教育经历栏:
1 两个文本框都填入空
2 两个文本框分别填入边界值以内的文字
3 两个文本框分别填入边界值以外的文字
4 两个文本框分别填入等于边界值的文字
5 两个文本框分别填入等于边界值+1个文字
6 两个文本框分别填入等于边界值-1个文字
7 第一个文本框填入合法信息,第二个文本框不填写任何内容
8 第一个文本框不填入任何内容,第二个文本框填入合法信息
9 填入信息后,点击取消
个人简介栏:
1 不输入任何文字
2 输入空格
3 分别输入汉字、字母、数字
4 输入边界个汉字
5 输入边界+1个汉字
6 输入边界-1个汉字
7 输入超过边界数量的汉字
8 选择后,点击“取消”按钮
任务四:答案
定义一个函数,含有三个参数,year,month,day,
其中1920<=year<=2050,使用边界值分析法,对输入数据进行设计
答案:
Year边界值:1919,,1920,1921,2049,2050,2051;
Month边界值:1,12,2,11
Day 边界值:1,31,30,28,29,2
日取边界
<2000,6,1>
<2000,6,2>
<2000,6,30>
<2000,6,31>
月取边界
<2000,1,15>
<2000,2,15>
<2000,11,15>
<2000,12,15>
年取边界
<1919,6,15>
<1920,6,15>
<1921,6,15>
<2049,6,15>
年取边界
<2050,6,15>
<2051,6,15>
闰年日边界
<2000,2,28>
<2000,2,29>
平年日边界
<2001,2,28>
<2001,2,27>
安全函数
给 #软件测试基础(2015级7&8班)# 指派了新任务。
任务七 从功能测试和易用测试两个角度设计微信子功能测试用例
以宿舍为单位,每人选择微信的一种子功能,分别从功能和易用测试两个角度设计所选子功能测试用例。
提交方式:写明宿舍编号,选择功能名称,然后写功能角度用例和易用角度用例;每条用例必须换行。
知识点梳理图:
任务六 答案
1 满足哪些规则属于缺陷?
软件未实现产品说明书要求的功能
软件出现了产品说明书指明不应该出现的错误
软件实现了产品说明书未提到的功能
软件未实现产品说明书虽未明确提及但应该实现的目标
软件难以理解,不易使用,运行缓慢或者--最终用户会认为不好
2 请按照缺陷报告要求的格式书写此缺陷报告:
windows 8操作系统的记事本文件,输入'写'字,保存再次打开后,不是‘写’
操作步骤:
1点击“开始”->“程序” ->“附件” ->“记事本”打开记事本软件;
2 仅输入“写”字后,点击“文件”->“保存”;
3 在打开的“另存为”对话框中保存文件,退出(文件名、保存位置任意);
4 打开保存的文件,出现乱码,不是“写”字。
原因:
在Windows平台下,使用系统的记事本以UTF-8编码格式存储了一个文本文件,但是由于Microsoft开发记事本的团队使用了一个非常怪异的行为来保存UTF-8编码的文件,它们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,所以我们就会遇到一些保存后乱码的问题。
提醒:
如果测试编辑类功能,需要使用错误推测法,(或等价类划分法)设计不同编码格式显示问题。
3 判断缺陷严重性
1)运行某金融软件,系统假死; 致命(Fatal)
2)某公司门户网站有中度病毒攻击 ; 严重(Critical)
3)某论坛网站,当某条帖子的评论超过15条后会产生分页,需要用户点击“查看更多”来显示所有评论内容,当用户点击“查看更多”后,页面跳转到第1页评论内容; Minor(小问题)
4 简单描述缺陷生命周期,以及在每个阶段缺陷的状态。
激活或打开(Active or Open)
新提的缺陷,确认“提交的缺陷”,问题还没有解决,等待处理。
已修正 (Fixed or Resolved)
已被开发人员检查、修复过的缺陷,已解决但还未被测试人员验证
关闭或非激活(Closed or Inactive)
测试人员验证后,确认缺陷不存在之后的状态。
重新打开(Reopen)
测试人员验证后,还依然存在的缺陷,等待开发人员进一步修复
推迟(Deferred)
这个软件缺陷可以在下一个版本中解决
保留(on hold)
由于技术原因或第三者软件的缺陷,开发人员不能修复的缺陷
不能重现(Unable to reproduce)
开发不能复现这个软件缺陷,需要测试人员检查缺陷复现的步骤。
需要更多信息(Needmoreinfor)
开发能复现这个软件缺陷,但开发人员需要一些信息,例如:缺陷的日志文件,图片等。
重复(Duplicate)
这个软件缺陷已经被其他的软件测试人员发现。
不是缺陷(Notabug)
这个问题不是软件缺陷
需要修改软件规格说明书
(Spec modified)
由于软件规格说明书对软件设计的要求,软件开发人员无法修复这个软件缺陷,必须要修改软件规格说明书。
5 使用McCabe计算方式,计算如下代码复杂度(写出过程:程序流程图,控制流图,得出最终结果)。
int foo(bool isOK)
{
const int ZERO = 0;
int* pInt = NULL;
if (isOk)
{
pInt = &ZERO;
}
return *pInt;
}
程序流程图:
控制流图:
6 请根据以下程序片段,设计最少的测试用例实现条件覆盖
If((A>1)AND(B=0))
Then X=X/A
If((A=2)OR(X>1))
Then X=X+1
Printf("X=%d",x)
第一组数据:
(A = 2
B = 0
X= (>1的任何值))
第二组数据:
(A= (<=1 的任何值)
B = (非0的任何值)
X = (<=1的任何值)
)
7 请列出关于一个印有文字的水杯,你能想到的测试用例
1) 功能:能不能盛水/盛饮料……;
2) 界面(外形):图案是不是清晰;文字描述是不是正确;形状上口大,下口小;
3) 性能:是不是抗摔;盛满水放7*24小时是不是仍然可以使用;
4) 安全:是不是烫手;材料是不是符合食品级别材料;
5) 易用:是不是方便使用;
8 写出对baidu首页搜索功能设计的测试用例
1)不填入任何内容,点击搜索;
2)输入空格,点击搜索;
3)输入单个字符(字母,数字,汉字),点击搜索;
4)输入单个单词/词语,点击搜索;
5)输入一句话(英文/中文),点击搜索;
6)输入图片(合理格式图片),点击搜索;
7)输入不合理格式图片,点击搜索;
8)输入文件后缀名(如.mp3)等,点击搜索;
9)输入边界值(38个汉字,39个汉字),点击搜索;
10) 输入100个汉字,点击搜索。
给 #软件测试基础(2015级7&8班)# 指派了新任务。
任务六 课前小测验
1 满足哪些规则属于缺陷?
2 请按照缺陷报告要求的格式书写此缺陷报告:
Windows 8操作系统的记事本文件,输入'写'字,保存再次打开后,不是‘写’
3 判断缺陷严重性
1)运行某金融软件,系统假死;
2)某公司门户网站有中...
给 #软件测试基础(2015级7&8班)# 指派了新任务。
任务五 白盒测试练习题
分别使用动态白盒测试方法中的六种方法设计测试用例(写出用例数据即可),写出必要的分析步骤。
1
2
代码审查清单
常规项
- 代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。
- 所有的代码是否简单易懂?
- 代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。
- 是否存在多余的或是重复的代码?
- 代码是否尽可能的模块化了?
- 是否有可以被替换的全局变量?
- 是否有被注释掉的代码?
- 循环是否设置了长度和正确的终止条件?
- 是否有可以被库函数替代的代码?
- 是否有可以删除的日志或调试代码?
安全
- 所有的数据输入是否都进行了检查(检测正确的类型,长度,格式和范围)并且进行了编码?
- 在哪里使用了第三方工具,返回的错误是否被捕获?
- 输出的值是否进行了检查并且编码?
- 无效的参数值是否能够处理?
文档
- 是否有注释,并且描述了代码的意图?
- 所有的函数都有注释吗?
- 对非常规行为和边界情况处理是否有描述?
- 第三方库的使用和函数是否有文档?
- 数据结构和计量单位是否进行了解释?
- 是否有未完成的代码?如果是的话,是不是应该移除,或者用合适的标记进行标记比如‘TODO’?
测试
- 代码是否可以测试?比如,不要添加太多的或是隐藏的依赖关系,不能够初始化对象,测试框架可以使用方法等。
- 是否存在测试,它们是否可以被理解?比如,至少达到你满意的代码覆盖(code coverage)。
- 单元测试是否真正的测试了代码是否可以完成预期的功能?
- 是否检查了数组的“越界“错误?
- 是否有可以被已经存在的API所替代的测试代码?
你同样需要把特定语言中有可能引起错误的问题添加到清单中。
这个清单故意没有详尽的列出所有可能会发生的错误。你不希望你的清单是这样的,太长了以至于从来没人会去用它。仅仅包含常见的问题会比较好。
优化你的清单把使用清单作为你的起点,针对特定的使用案例,你需要对其进行优化。一个比较棒的方式就是让你的团队记录下那些在代码审查过程中临时发现的问题,有了这些数据,你就能够确定你的团队常犯的错误,然后你就可以量身定制一个审查清单。确保你删除了那些没有出现过的错误。(你也可以保留那些出现概率很小,但是非常关键的项目,比如安全相关的问题)。
得到认可并且保持更新基本规则是,清单上的任何条目都必须明确,而且,如果可能的话,对于一些条目你可以对其进行二元判定。这样可以防止判断的不一致。和你的团队分享这份清单并且让他们认同你清单的内容是个好主意。同样的,要定期检查你的清单,以确保各条目仍然是有意义的。
有了一个好的清单,可以提高你在代码审查过程中发现的缺陷个数。这可以帮助你提高代码标准,避免质量参差不齐的代码审查。@All:如果交作业过程中,需要拍照上传,须纵向排照,否则横向拍照,上传,文字横向,看不清楚。
给 #软件测试基础(2015级7&8班)# 指派了新任务。
任务四 设计测试用例(等价类和边界值综合应用)
一 边界值分析法应用:
定义一个函数,含有三个参数,year,month,day,
其中1920<=year<=2050,使用边界值分析法,对输入数据进行设计。
二 常用控件测试方法...
给 #软件测试基础(2015级7&8班)# 指派了新任务。
按等价类划分法对如下两个实例,进行用例分析和设计
要要求步骤:
1 1 写出每到题目划分的等价类(上课在黑板上写的);
222 对划分好的等价类进行编号;
333 写出每个编号下可以选取的数据。
题题目:
一:定义一个函数,含有三个参数,year...
没在学院交不了文档
@7班-许彩霞:任务提交文档错误,请尽快重交。
给 #软件测试基础(2015级7&8班)# 指派了新任务。
根据Mymovie需求文档,书写此项目的测试计划
一、实验目标
1 理解影评项目的相关业务需求
2 掌握真实项目的测试计划制定
3 能够结合项目灵活设计测试方案
二、前提条件
1 阅读论坛需求相关文档,理解业务需求
2 掌握测试计划理论
测试计划即Test plan是计划阶段的测试文档,是指导测试过程的...
请大家在此目录下 \\10.7.1.4\super\教学管理\2016-2017(第一学期)课程\2015级软件测试基础,下载My movie项目需求
软件测试中的诸多误区
想起这个题目,是因为最近遇到好几次关于这方面的讨论。发觉即便做过几年测试的老员工也或多或少有些这方面的困惑。当然一家之言,仅作抛砖引玉之谈。
一、测试就是保证软件无故障运行
对这个,我只想说这个观点只是出于测试人员美好愿望。再牛的测试员也不可能保证他所测的软件就能无故障运行。只能说在他所测的范围内,软件能按预先定义的需求运行。
这个误区的一个潜在问题是,秉承这一观点的测试人员可能更期望自己的测试对象能“顺利”运行,而不是尽力发现产品中的问题。
二、测试的环境就选用户的环境
我想说的是:不可能!好吧,也许对于一些具有固定用户,特别订制的特定环境下的软件产品,你很好找到用户的环境。不过对于大部分的软件产品而言,我想说即便你知道了用户甲的环境,你也不一定搞清楚用户乙的环境。即便同一个甲,可能他今天和明天的环境也不一定相同。那结果,你选择哪个环境作你的测试环境呢?
这个问题我想说的是用户的某些典型环境可以在测试中进行优先考虑,但真正的测试环境永远应该是那个你认为能更好暴露产品问题的环境。
三、测试自动化更为高效
说句心里话,我并不是反对这个观点,不过这观点是有商量余地的。自然,这里是拿自动化测试和手工测试作为对比的。也许自动化有诸多的优点,比如能够不厌其烦执行枯燥的动作;能够精确的定位时序动作;能够长时间工作;能够快速执行等等。不过自动化测试的缺点也是有的,比如需要开发成本;需要对产品行为的明晰定义。
说到这点,也就是说采取测试自动化是有条件的。并不是它就一定适应你的测试,何论高效。其实自动化测试更多的是应用在回归测试场合,更多的bug事实上是在手工测试中发现的。虽然这个事实不一定是你希望看到的:)
四、开发人员更适合做测试
测试圈内的一个共同认识是从事测试的人员技术上总比开发人员差,开发人员能更好的应用技术去测试;开发人员更能了解开发,所以更能了解问题的所在。
不过本人的经历而言,开发组转过来从事测试的同事绩效并不怎么理想。这个误区的问题在于过于简单的看待测试的技能需求。一般而言,测试工程师需要三维的技能:技术,业务领域知识和软技能。其中技术不仅仅是开发,还包括测试技术。从开发转作测试的人员,不一定具备这些能力,而且从某种程度,他们更专注在开发技能,可能更喜欢的是工具的实现和代码的审核。从整体上来说,开发人员的技能并一定就能完全胜任测试工作。
五、Bug越多测试越有效
估计很多的经理会有这个观点,很多同行估计也深受这个指标考核之苦。不过,如果打个不恰当的比方,说:GDP越高经济越有效。我想很多人也就明白个大概了。
Bug的出现有多方面的因素,并不一定需要多有效的测试。犹如上策伐谋一样,有效地测试最好将bug消灭在未成的时候。对产品报bug已经是到了最后的保障环节,成本已经相对变高——相对于需求分析和设计阶段。只有到了最后阶段,同样情况下才是有效地。不过这并不一定是好度量的。
软件测试中的诸多误区
想起这个题目,是因为最近遇到好几次关于这方面的讨论。发觉即便做过几年测试的老员工也或多或少有些这方面的困惑。当然一家之言,仅作抛砖引玉之谈。
一、测试就是保证软件无故障运行
对这个,我只想说这个观点只是出于测试人员美好愿望。再牛的测试员也不可能保证他所测的软件就能无故障运行。只能说在他所测的范围内,软件能按预先定义的需求运行。
这个误区的一个潜在问题是,秉承这一观点的测试人员可能更期望自己的测试对象能“顺利”运行,而不是尽力发现产品中的问题。
二、测试的环境就选用户的环境
我想说的是:不可能!好吧,也许对于一些具有固定用户,特别订制的特定环境下的软件产品,你很好找到用户的环境。不过对于大部分的软件产品而言,我想说即便你知道了用户甲的环境,你也不一定搞清楚用户乙的环境。即便同一个甲,可能他今天和明天的环境也不一定相同。那结果,你选择哪个环境作你的测试环境呢?
这个问题我想说的是用户的某些典型环境可以在测试中进行优先考虑,但真正的测试环境永远应该是那个你认为能更好暴露产品问题的环境。
三、测试自动化更为高效
说句心里话,我并不是反对这个观点,不过这观点是有商量余地的。自然,这里是拿自动化测试和手工测试作为对比的。也许自动化有诸多的优点,比如能够不厌其烦执行枯燥的动作;能够精确的定位时序动作;能够长时间工作;能够快速执行等等。不过自动化测试的缺点也是有的,比如需要开发成本;需要对产品行为的明晰定义。
说到这点,也就是说采取测试自动化是有条件的。并不是它就一定适应你的测试,何论高效。其实自动化测试更多的是应用在回归测试场合,更多的bug事实上是在手工测试中发现的。虽然这个事实不一定是你希望看到的:)
四、开发人员更适合做测试
测试圈内的一个共同认识是从事测试的人员技术上总比开发人员差,开发人员能更好的应用技术去测试;开发人员更能了解开发,所以更能了解问题的所在。
不过本人的经历而言,开发组转过来从事测试的同事绩效并不怎么理想。这个误区的问题在于过于简单的看待测试的技能需求。一般而言,测试工程师需要三维的技能:技术,业务领域知识和软技能。其中技术不仅仅是开发,还包括测试技术。从开发转作测试的人员,不一定具备这些能力,而且从某种程度,他们更专注在开发技能,可能更喜欢的是工具的实现和代码的审核。从整体上来说,开发人员的技能并一定就能完全胜任测试工作。
五、Bug越多测试越有效
估计很多的经理会有这个观点,很多同行估计也深受这个指标考核之苦。不过,如果打个不恰当的比方,说:GDP越高经济越有效。我想很多人也就明白个大概了。
Bug的出现有多方面的因素,并不一定需要多有效的测试。犹如上策伐谋一样,有效地测试最好将bug消灭在未成的时候。对产品报bug已经是到了最后的保障环节,成本已经相对变高——相对于需求分析和设计阶段。只有到了最后阶段,同样情况下才是有效地。不过这并不一定是好度量的。
每个开发者都应该懂一点单元测试
了解敏捷开发的资料,参见博客:http://blog.csdn.net/myscrum/article/details/4313181
软件测试的十二个误区
软件缺陷导致严重后果的典型案例
用户为了保证自己业务的顺利完成,当然希望选用优质的软件。质量不佳的软件产品不仅会使开发商的维护费用和用户的使用成本大幅度增加,还可能产生其他的责任风险,造成公司信誉下降。一些关键的应用领域(例如银行、证券交易、军事等)如果质量有问题,还可能造成灾难性的后果。
现在人们已经逐步认识到是软件中存在的错误导致了软件开发在成本、进度和质量上的失控。 由于软件是由人来完成的,所以它不可能十全十美,虽然不可能完全杜绝软件中的错误,但是可以通过软件测试等手段使程序中的错误数量尽可能少,密度尽可能小。
接下来看看成功的软件测试带来的好处和不完整的软件测试带来的教训。
● IE和Netscape
在IE 4.0的开发期间,微软为了打败Netscape而汇集了一流的开发人员和测试人员。测试人员搭建起测试环境,让IE在数台计算机上持续运行一个星期,而且要保障IE在几秒钟以内可以访问数千个网站,在无数次的试验以后,测试人员证明了IE在多次运行以后依然可以保障它的运行速度。而且,为了快速完成IE 4.0的开发,测试人员每天都要对新版本进行测试,不仅要发现问题,而且要找到问题是哪一行代码造成的,让开发人员专心于代码的编写和修改,最终IE取得了很大的成功。
● 360存在严重后果缺陷导致系统崩溃
电脑中了木马,使用360安全卫士查出一个名为Backdoor/Win32.Agent.cgg的木马,文件位置为C:\Windows\system32\shdocvw.dll。进行清理后看不到Windows任务栏和桌面图标,根本进不去桌面,手工运行Explorer.exe也是一闪就关,后来查明是由于360在处理此木马时存在严重缺陷。360安全卫士只是简单的删除了木马文件,没有进行相关的善后处理工作,致使系统关键进程Explorer.exe无法加载。
● 2009年2月份Google的Gmail故障
2009年2月份Google的Gmail故障,Gmail用户几小时不能访问邮箱,应该算是最近因软件故障而受到广泛关注的事件。据Google后称,那次故障是因数据中心之间的负载均衡软件的Bug引发的。
360问题和Gmail故障还仅是导致用户不能正常使用电脑或几个小时内无法访问邮箱,并没有造成伤亡。当然了,对某些用户来讲,是非常不便。
但看了下面的一个例子您会发现,360和Gmail的问题真是“小巫见大巫”了。
● 2011 年温州7.23 动车事故
2011年7月23日20时30分05秒,甬温线浙江省温州市境内,由北京南站开往福州站的D301次列车与杭州站开往福州南站的D3115次列车发生动车组列车追尾事故,造成40人死亡、172人受伤,中断行车32小时35分,直接经济损失19371.65万元。
上海铁路局局长安路生28日说,根据初步掌握的情况分析,“7·23”动车事故是由于温州南站信号设备在设计上存在严重缺陷,遭雷击发生故障后,导致本应显示为红灯的区间信号机错误显示为绿灯。
● 致命的辐射治疗
辐射剂量超标的事故发生在2000年的巴拿马城(巴拿马首都)。从美国Multidata公司引入的治疗规划软件,其(辐射剂量的)预设值有误。有些患者接受了超标剂量的治疗,至少有5人死亡。后续几年中,又有21人死亡,但很难确定这21人中到底有多少人是死于本身的癌症,还是辐射治疗剂量超标引发的不良后果。
● 消失在太空
在制造其火星气候轨道探测器时,一个NASA的工程小组使用的是英制单位,而不是预定的公制单位。这会造成探测器的推进器无法正常运作。正是因为这个 Bug,1999年探测器从距离火星表面130英尺的高度垂直坠毁。此项工程成本耗费3.27亿美元,这还不包括损失的时间(该探测器从发射到抵达火星将近一年时间。)
● 阿丽亚娜5型火箭的杯具处女秀
1996年6月4日,阿丽亚娜5型运载火箭的首航,原计划将运送4颗太阳风观察卫星到预定轨道,但因软件引发的问题导致火箭在发射39秒后偏轨,从而激活了火箭的自我摧毁装置。阿丽亚娜5型火箭和其他卫星在瞬间灰飞烟灭。
后来查明的事故原因是:代码重用。阿5型的发射系统代码直接重用了阿4型的相应代码,而阿4型的飞行条件和阿5型的飞行条件截然不同。此次事故损失3.7亿美元。
● 英特尔奔腾芯片缺陷
如果在计算机的“计算器”中输入以下算式:
(419583/3145727)X3145727-4195835
结果显示为零。而在1994年,结果可能为其他答案,这就是英特尔(Intel)奔腾(Pentumn)CPU芯片所带来的一个浮点触发缺陷。英特尔为此付出了4亿多美元的代价。
● 一触即发的第三次世界大战
1980年,北美防空联合司令部曾报告称美国遭受导弹袭击。后来证实,这是反馈系统的电路故障问题,但反馈系统软件没有考虑故障问题引发的误报。
1983年,苏联卫星报告有美国导弹入侵,但主管官员的直觉告诉他这是误报。后来事实证明的确是误报。
幸亏这些误报没有激活“核按钮”。在上述两个案例中,如果对方真的发起反击,核战争将全面爆发,后果不堪设想。
通过以上的例子,可以看出软件发生错误时对人类生活所造成的各种影响,有的甚至会带来灾难性的后果。软件测试可以使这种风险降低,它在一定程度上解放了程序员,使他们能够更专心于解决程序的算法效率。同时它也减轻了售后服务人员的压力,交到他们手里的程序再也不是那些“一触即死机”的定时炸弹,而是经过严格检验的完整产品。同时,软件测试的发展对程序的外形、结构、输入和输出的规约和标准化提供了参考,并推动了软件工程的发展。