一、 软件测试的引入
1 学习软件测试前的思考
- 软件测试就是测试程序吗?
- 测试是不是装上软件后点鼠标、敲键盘?
- 怎么开始测试工作?第一个任务是什么?
- 测试早做好还是晚些做好?
- 测试需要谋划或者规划吗?
- 测试要做到非常全面吗?尽善尽美?
- 谁会参与测试?谁做最合适?
- 测试的最终任务是什么?测试是为了证明软件很棒吗?
- 如果你找到一个缺陷,你该怎么办?
- 找到的缺陷一定要修改吗?你要不要去修改缺陷?
- 你希望发现的缺陷越多还是越少?
- 缺陷修改后一定会对软件带来有益的影响吗?
- 测试是一次性的任务吗?
- 公司中开发和测试人数上哪种应该更多些?
2 回顾软件的概念与分类
2.1 软件的概念
软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档的完整集合。
- 程序是按事先设计的功能和性能要求执行的指令序列;
- 数据是使程序能正常操作信息的数据结构;
- 文档是与程序开发、维护和使用有关的图文材料。
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 机故障,男子恶意取款事件
2009 年,广州火车站售票系统瘫痪 2 个半小时
3.2 软件危机(software crisis)
20 世纪六七十年代,出现了软件数量急剧增长,但软件失败率高速上升的现象。1968 年初,北大西洋公约组织的在联邦德国召开的国际学术会议上,计算机科学家们正式提出了“软件危机”(Softwre Crisis)。
- 对进度和成本估计不准确,开发成本远远超出预算,项目进度和软件开发效率严重滞后;
- 用户对提交的产品经常会不满意;
- 产品的质量不可靠,缺陷很多,维护成本非常高;
- 软件开发过程的文档匮乏。
3.3 软件为什么会失效?
缺陷产生的原因
二、 软件测试的定义
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 早期测试如何进行?
3 软件测试的定义
3.1 经典定义
1979,Myers,《软件测试艺术》:测试是为发现错误而执行程序的过程。
理解:
- 测试是为了证明程序有错,而不是证明程序无错误。
- 一个成功的测试是发现了至今未发现的错误的测试。
3.2 标准定义
1983,IEEE使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
理解:
- 测试是在用户需求和开发技术之间找一个平衡点。
3.3 国内定义
GB/T 11457依据规范的软件检测过程和检测方法,按照测试计划和测试需求对被检测软件的文档、程序和数据进行测试的技术活动。
- 软件测试是一个过程,测试不只是测试执行,它包括从计划开始到测试结束的一系列活动。软件测试需要测试方法和技术,或者说技巧。
- 软件包括程序、数据和文档,除了执行程序,数据和文档也需要测试。
3.4 其他理解
不同时期关于测试的其他定义
- 确信程序做了它应该做的事(Hetzel,1973)。
- 确认程序正确实现了所要求的功能。
- 查出规格说明中错误,以及与规格说明不符的地方。
- 测试是一切以评价程序或系统的属性、能力为目的的活动;测试是对软件质量的度量(Hetzel,1983)。
- 评价程序或系统的过程。
- 测试是与软件开发或维护工作并行进行的一个过程。
- 测试是一个获取信息,降低决策风险的过程。通过测试,向整个团队提供关于产品质量和项目环境的信息,帮助他们做出决定。
1 分析测试需求
测试人员对用户的需求进行分析,了解软件要做什么,怎么做,进而确定将来怎么测试。
2 编写测试计划
测试负责人编写测试计划;
测试计划的内容:
包含产品概述、测试范围/测试区域/测试项、 测试目标/被测特征、测试优先级、测试配置/测试资源(硬件、软件、人力、技术等)、测试周期、进度安排(测试任务、人员安排)、 测试策略、测试方法/途径、测试交流、风险分析、测试标准、需交付文档等内容。
3 设计与编写测试用例
设计用例主要反映在编写测试点上;
根据公司格式或者选择一些模板编写测试用例。
4 执行测试
搭建测试环境;
执行测试用例,记录测试事件;
提交和跟踪缺陷。
5 评估与总结
分析实际测试与计划的偏差;
收集并提交各种测试文档和数据,对数据进行分析;
给出是否继续测试还是终止测试结论;
总结经验教训。
四、 软件测试的目的/目标五、 区分三个概念
1 测试 & 调试
在目前的开发和测试中,谁去寻找软件中潜在的问题?发现缺陷后谁去修改?
2 软件质量保证 & 软件测试
软件质量保证(SQA,Software Quality Assurance)
,