软件测试方法研究及软件测试学习心得2022年4月姓名:专业:计算机科学与技术指导老师:目录1 引言 (1)1.1 编写目的 (1)1.2 相关背景 (2)1.3 参考资料 (2)2 软件测试概念 (3)2.1 软件测试定义 (3)2.2 软件测试概述 (3)3 软件测试的原则3.1 测试的基本原则(一) (4)3.2 测试的基本原则(二) (4)4 软件测试的内容4.1 验证(VERIFICATION) (5)4.1 确认(V ALIDATION ) (5)5 软件测试的分类5.1 常用分类.............................................................................................. 6错误!未定义书签。
5.2 黑盒测试和白盒测试 (6)5.3 静态测试 (11)5.4 动态测试 (12)6 感想与致谢 (16)1引言1.1编写目的本学期学习了软件测试这门计算机专业的专业课,作为计算机专业的一门很重要的课程,在计算机领域占据着不可替代的角色,随着人类社会的进步,各种领域计算机的普及,计算机软件也越来越多的出现在各个场合,为人们的办公,生活,学习,休闲等提供了前所未有的方便。
因此,当一个软件从雏形到真正的在一台计算机上运行的时候,谁也不能保证计算机软件能一步到位的满足人们的需求。
所以就有了软件测试,其目的是:第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。
作为计算机专业的学生,我想以我自己的观点来阐述一下我对软件测试的理解。
1.2参考资料参考书籍:1、Ron Patton 《软件测试》机械工业出版社20022、张克东等《软件工程与软件测试自动化教程》电子工业出版社20023、Dustin,E.《软件自动化测试:引入、管理与实施》电子工业出版社20034、James A. Whittaker 《实用软件测试指南》电子工业出版社20035、Zadrozny 《J2EE性能测试》电子工业出版社20036、Jones,C.《软件评估、基准测试与最佳实践》机械工业出版社20037、Edward Kit 《软件测试过程改进》机械工业出版社20038、Hung Q.Nguyen 《Web应用测试》电子工业出版社20039、Robert V.Binder《面向对象系统测试模型视图与工具(影印版)》10、Rakitin,S.K.《软件验证与确认的最佳管理办法》电子工业出版社200211、麦格雷戈《面向对象的软件测试》机械工业出版社2002参考网络资料1、51Testing软件测试网-中国软件测试人的精神家园2、百度中文搜索3、软件工程研究中心4、 软件工程专家网5、 测试管理中心6、 海松宝小屋7、/softtest/index.html 测试工程师1.3相关背景前段时间,就是在我没有认真了解测试行业之前,可能由于测试在中国的重视程度的问题,我也一直认为测试应该是不重要的,甚至认为有必要有专门的测试职业吗?认为软件主要是开发人员的事,软件的成果也是由开发人员决定的,当我在参加工作后,真正从学校的学习环境中走上实际运用开发的时候,事实上真的不是那么一回事哦。
软件无处不在,软而,软件是人编的——所以不完美。
臭名昭著的软件测试案例:1、迪士尼的狮子王(1994~1995)软件在少数系统中能正常工作,但在大众使用的常见系统中不行。
后来证实,迪士尼公司没有对市场上投入实用的各种pc机型进行正确的测试。
2、英特尔奔腾浮点除法软件缺陷(1994)英特尔为自己处理软件缺陷拿出4亿美元支付更换坏芯片的费用。
导致付出如此昂贵的代价,其主要原因是发现了软件缺陷没有正确的处理。
3、美国航天局火星极地登陆(1999)该项目使用前有经过测试,两个测试小组双方独立工作都很好,但从未走在一起。
4、爱国者导弹防御系统(1991)一枚导弹在多哈击毙28名美国士兵,症结在于一个软件缺陷:一个很小的系统时钟错误累积起来就可能拖延14小时,造成跟踪系统失去准确度。
在多哈袭击战中系统被拖延100小时。
5、千年虫(大约1974)估计世界各地更换或升级该系统程序解决原有2000年错误的费用已经超过数亿美元。
2软件测试概念2.1件测试定义软件测试使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 、完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。
(1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进;(2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
2.2软件测试概述测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。
软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right);第二是提供信息,比如提供给开发人员或程序经理的反馈信息,为风险评估所准备的信息;第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。
如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。
3软件测试的原则3.1测试基本原则(一)在设计有效测试用例之前,测试工程师必需理解软件测试的基本原则。
这里有一组测试原则:1 、所有的测试都应追溯到用户需求。
正如我们所知:软件测试的目标在于揭示错误。
而最严重的错误(从用户角度来看)是那些导致程序无法满足需求的错误。
2 、应该在测试工作真正开始前的较长时间内就进行测试计划。
测试计划可以在需求模型一完成就开始,详细的测试用例定义可以在设计模型被确定后立即开始。
因此,所有测试应该在任何代码被产生前就进行计划和设计。
3 、Pareto 原则应用于软件测试。
简单地讲,Pareto 原则暗示着测试发现的错误中的80 %很可能起源于程序模块中的20 %。
当然,问题在于如何孤立这些有疑点的模块并进行彻底的测试。
4 、测试应从" 小规模" 开始,逐步转向" 大规模" 。
最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。
5 、穷举测试是不可能的。
即使是一个大小适度的程序,其路径排列的数量也非常大。
因此,在测试中不可能运行路径的每一种组合。
然而,充分覆盖程序逻辑,并确保程序设计中使用的所有条件是有可能的。
6 、为了达到最佳效果,应该由独立的第三方来构造测试。
" 最佳效果" 指最有可能发现错误的测试(测试的主要目标),所以创建系统的软件工程师并不是构造软件测试的最佳人选。
7、不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现.。
3.2测试基本原则(二)1.应当把"尽早和不断的测试"作为开发者的座右铭。
2.程序员应该避免检查自己的程序,测试工作应该由独立的专业的软件测试机构来完成。
3.设计测试用例时应该考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下要制造极端状态和意外状态,比如网络异常中断、电源断电等情况。
4.一定要注意测试中的错误集中发生现象,这和程序员的编程水平和习惯有很大的关系。
5.对测试错误结果一定要有一个确认的过程,一般有A测试出来的错误,一定要有一个B来确认,严重的错误可以召开评审会进行讨论和分析。
6.制定严格的测试计划,并把测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。
7.回归测试的关联性一定要引起充分的注意,修改一个错误而引起更多的错误出现的现象并不少见。
8.妥善保存一切测试过程文档,意义是不言而喻的,测试的重现性往往要靠测试文档4软件测试的内容4.1验证(verification)验证(verification)是保证软件正确地实现了一些特定功能的一系列活动,即保证软件做了你所期望的事情。
(Do the right thing)1.确定软件生存周期中的一个给定阶段的产品是否达到前阶段确立的需求的过程;2.程序正确性的形式证明,即采用形式理论证明程序符号设计规约规定的过程;3.评市、审查、测试、检查、审计等各类活动,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断和提出报告。
4.2确认(validation)确认(validation)是一系列的活动和过程,目的是想证实在一个给定的外部环境中软件的逻辑正确性。
即保证软件以正确的方式来做了这个事件(Do it right)1.静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性;2.动态确认,通过执行程序做分析,测试程序的动态行为,以证实软件是否存在问题。
软件测试的对象不仅仅是程序测试,软件测试应该包括整个软件开发期问各个阶段所产生的文档,如需求规格说明、概要设计文档、详细设计文档,当然软件测试的主要对象还是源程序。
5软件测试的分类5.1常用分类从是否需要执行被测软件的角度,可分为:-静态测试-动态测试从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为:-白盒测试-黑盒测试5.2黑盒测试和白盒测试1、黑盒测试和白盒测试黑盒测试指的是把被测软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子,只关心软件的输入数据和输出结果。
黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:•是否有不正确或遗漏了的功能?•在接口上,输入能否正确地接受? 能否输出正确的结果?•是否有数据结构错误或外部信息(例如数据文件)访问错误?•性能上是否能够满足要求?•是否有初始化或终止性错误?用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。
但这是不可能的。
n假设一个程序P有输入量X和Y及输出量Z。
在字长为32位的计算机上运行。
若X、Y取整数,按黑盒方法进行穷举测试:n可能采用的测试数据组:232×232 =264 n如果测试一组数据需要1毫秒,一年工作365×24小时,完成所有测试需5亿年。