软件测试一些基本的知识(全程软件测试一零八)(1)

一、 软件测试的引入

1 学习软件测试前的思考

2 回顾软件的概念与分类

2.1 软件的概念

软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档的完整集合。

  1. 程序是按事先设计的功能和性能要求执行的指令序列;
  2. 数据是使程序能正常操作信息的数据结构;
  3. 文档是与程序开发、维护和使用有关的图文材料。

软件测试一些基本的知识(全程软件测试一零八)(2)

2.2 软件的分类

按重要性

按架构

C/S 架构

B/S 架构

3 软件失效

3.1 软件都是安全的吗?软件中有错误吗?

1991 年,爱国者导弹防御系统

美国爱国者导弹防御系统是里根总统提出的战硌防御计划(即星球大战计划),海湾战争中,用于拦截伊拉克飞毛腿导弹,但在沙特阿拉伯的多哈中失利,28名美国士兵丧生。分析发现症结在于一个软件缺陷,系统时钟的一个很小的计时错误积累起来到14 小时后,跟踪系统不再准确。在多哈的这次袭击中,系统已经运行了 100多个小时。

1994 年,迪斯尼狮子王游戏

迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏:狮子王动画游戏,迪斯尼公司进行了大量促销宣传,结果,销售额非常可观,该游戏成为孩子们那年节假日的“必买游戏”。12 月 26 日圣诞节的后一夭,迪斯尼公司的电话支持技术员们淹没在来自于愤怒的家长并伴随着玩不成游戏的孩子们哭叫的电话之中,报纸和电视新闻进行了大量的报道。后来证实,迪斯尼公司的软件在极少数系统中工作正常(如在迪斯尼程序员用来开发游戏的系统中),但在大多数公众使用的系统中却不能运行。

2000 年,千年虫问题

20C70S,美国一程序员位公司开发工资系统,当时的计算机存储空间很小,为了节省存储空间,把 4 位数日期缩减为 2 位数,如 1973—73。他简单地认为,只有在到达 2000 年他的程序计算 00 或 01 这样的年份时问题才会发生问题,他认定在 25 年之内程序肯定会升级或替换,而且眼前的任务比现在计划遥不可及的未来更加重要。后来,程序员退休了,程序仍然在使用,谁也不会想到如何深入到程序中检查 2000 年兼容问题,更不用说去修改了。据估计,世界各地检查和解决 2000 年兼容问题和错误花费了数千亿美元

2006 年,ATM 机故障,男子恶意取款事件

软件测试一些基本的知识(全程软件测试一零八)(3)

2009 年,广州火车站售票系统瘫痪 2 个半小时

软件测试一些基本的知识(全程软件测试一零八)(4)

3.2 软件危机(software crisis)

20 世纪六七十年代,出现了软件数量急剧增长,但软件失败率高速上升的现象。1968 年初,北大西洋公约组织的在联邦德国召开的国际学术会议上,计算机科学家们正式提出了“软件危机”(Softwre Crisis)。

3.3 软件为什么会失效?

软件测试一些基本的知识(全程软件测试一零八)(5)

缺陷产生的原因

软件测试一些基本的知识(全程软件测试一零八)(6)

二、 软件测试的定义

1 软件测试的起源与历史

早期软件开发中,没有测试的概念,开发所做的是调试,目的是发现并纠正软件中的故障。

1957 年,测试与调试被区别开来。但认为测试工作应该往后推,潜意识里认为,测试的目的验证产品能工作。

1972 年,在美国北卡罗来纳大学举行了首届软件测试正式会议,Bill Hetzel(比尔•海泽尔)在会上正式定义软件测试概念。

1979 年,Glenford J.Myers(迈尔斯)在《软件测试艺术》中给出测试的经典定义:测试是为了发现错误而执行程序的过程。

1983 年,IEEE(Institute of Electrical and Electronic Engineers)给出了软件测试的标准定义,并制定了测试的标准。

1996 年,Kent Beck(肯特•贝克)在极限编程 XP 方法论中提出 TDD 测试驱动开发理论。

2009 年,James A.Whittaker(惠特克)提出探索式测试理论。

2 早期测试如何进行?

软件测试一些基本的知识(全程软件测试一零八)(7)

3 软件测试的定义

3.1 经典定义

1979,Myers,《软件测试艺术》:测试是为发现错误而执行程序的过程。

理解:

3.2 标准定义

1983,IEEE使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。

理解:

3.3 国内定义

GB/T 11457依据规范的软件检测过程和检测方法,按照测试计划和测试需求对被检测软件的文档、程序和数据进行测试的技术活动。

3.4 其他理解

不同时期关于测试的其他定义

三、 软件测试的过程

1 分析测试需求

测试人员对用户的需求进行分析,了解软件要做什么,怎么做,进而确定将来怎么测试。

2 编写测试计划

测试负责人编写测试计划;

测试计划的内容:

包含产品概述、测试范围/测试区域/测试项、 测试目标/被测特征、测试优先级、测试配置/测试资源(硬件、软件、人力、技术等)、测试周期、进度安排(测试任务、人员安排)、 测试策略、测试方法/途径、测试交流、风险分析、测试标准、需交付文档等内容。

3 设计与编写测试用例

设计用例主要反映在编写测试点上;

根据公司格式或者选择一些模板编写测试用例。

4 执行测试

搭建测试环境;

执行测试用例,记录测试事件;

提交和跟踪缺陷。

5 评估与总结

分析实际测试与计划的偏差;

收集并提交各种测试文档和数据,对数据进行分析;

给出是否继续测试还是终止测试结论;

总结经验教训。

四、 软件测试的目的/目标

软件测试一些基本的知识(全程软件测试一零八)(8)

五、 区分三个概念

1 测试 & 调试

在目前的开发和测试中,谁去寻找软件中潜在的问题?发现缺陷后谁去修改?

软件测试一些基本的知识(全程软件测试一零八)(9)

2 软件质量保证 & 软件测试

软件质量保证(SQA,Software Quality Assurance)

软件测试一些基本的知识(全程软件测试一零八)(10)

,