软件测试学习感悟
学习软件测试的感受及体会
这学期学习了赵培英老师教授的软件测试这门计算机专业的专业课,我们学院又开设了刘老师的关于这方面的讲座,更彻底的使我们加深了对软件测试的认识。所以我想谈谈关于软件测试的体会及学到的一些知识。
作为计算机专业的一门很重要的课程,在计算机领域占据着不可替代的角色,随着人类社会的进步,各种领域计算机的普及,计算机软件也越来越多的出现在各个场合,为人们的办公,生活,学习,休闲等提供了前所未有的方便。软件测试,其目的是:第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right)。作为计算机专业的学生,我想以我自己的观点来阐述一下我对软件测试的理解。
以前,就是在我没有认真了解测试行业之前,我也一直认为测试应该是不重要的,甚至认为有必要有专门的测试职业吗?认为软件主要是开发人员的事,软件的成果也是由开发人员决定的,当我学了软件工程这门课,真正的了解到它的必要性,事实上真的不是那么一回事哦。软件无处不在,然而,软件是人编的——所以不完美。
我还查阅了一些资料就是不注意软件测试的案例:
1、迪士尼的狮子王 (1994~1995)软件在少数系统中能正常工作,但在大众使用的常见系统中不行。后来证实,迪士尼公司没有对市场上投入实用的各种pc机型进行正确的测试。
2、英特尔奔腾浮点除法软件缺陷(1994)英特尔为自己处理软件缺陷拿出4亿美元支付更换坏芯片的费用。导致付出如此昂贵的代价,其主要原因是发现了软件缺陷没有正确的处理。
3、美国航天局火星极地登陆(1999)该项目使用前有经过测试,两个测试小组双方独立工作都很好,但从未走在一起。
4、爱国者导弹防御系统 (1991)一枚导弹在多哈击毙28名美国士兵,症结在于一个软件缺陷:一个很小的系统时钟错误累积起来就可能拖延14小时,
造成跟踪系统失去准确度。在多哈袭击战中系统被拖延100小时。
5、千年虫 (大约1974)估计世界各地更换或升级该系统程序解决原有2000年错误的费用已经超过数亿美元。
这就是不注重测试的一些严重后果,因此我们发现了软件测试的必要性! 在设计有效测试用例之前,测试工程师必需理解软件测试的基本原则,包括: 1 、所有的测试都应追溯到用户需求。正如我们所知:软件测试的目标在于揭示错误。而最严重的错误(从用户角度来看)是那些导致程序无法满足需求的错误。
2 、应该在测试工作真正开始前的较长时间内就进行测试计划。测试计划可以在需求模型一完成就开始,详细的测试用例定义可以在设计模型被确定后立即开始。因此,所有测试应该在任何代码被产生前就进行计划和设计。
3 、 Pareto 原则应用于软件测试。简单地讲, Pareto 原则暗示着测试发现的错误中的 80 %很可能起源于程序模块中的 20 %。当然,问题在于如何孤立这些有疑点的模块并进行彻底的测试。
4 、测试应从 " 小规模 " 开始,逐步转向 " 大规模 " 。最初的测试通常把焦点放在单个程序模块上,进一步测试的焦点则转向在集成的模块簇中寻找错误,最后在整个系统中寻找错误。
5、为了达到最佳效果,应该由独立的第三方来构造测试。 " 最佳效果 " 指最有可能发现错误的测试(测试的主要目标),所以创建系统的软件工程师并不是构造软件测试的最佳人选。
6、 不充分的测试是不负责任的;过分的测试是一种资源的浪费,同样也是一种不负责任的表现.。
还有就是关于软件测试的分类:从是否需要执行被测软件的角度,可分为: -静态测试
-动态测试
从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为 : -白盒测试
-黑盒测试
关于静态测试和动态测试:
(1)静态测试是指不实际运行被测软件,而只是静态的检查程序代码、界面或文档中可能存在的错误的过程。
其中包括代码测试、界面测试和文档测试3个方面。对于代码测试,主要测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档测试,主要测试用户手册和需求说明是否符合用户的实际要求。
(2)动态测试是指实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。所以,我们判断一个测试属于动态还是静态测试 ,唯一的标准就是看是否运行程序。
关于黑盒测试和白盒测试 :
(1)黑盒测试
指的是把被测软件看作是一个黑盒子,我们不去关心盒子里面的结构是什么样子,只关心软件的输入数据和输出结果。
黑盒测试方法是在程序接口上进行测试,主要是为了发现以下错误:
• 是否有不正确或遗漏了的功能?
• 在接口上,输入能否正确地接受? 能否输出正确的结果?
• 是否有数据结构错误或外部信息(例如数据文件)访问错误?
•性能上是否能够满足要求?
• 是否有初始化或终止性错误?
用黑盒测试发现程序中的错误,必须在所有可能的输入条件和输出条件中确定测试数据,来检查程序是否都能产生正确的输出。 但这是不可能的。
黑盒测试的测试用例设计
•等价划分法
•边界值法
•错误推测法
•因果图法
(2)白盒测试
指的是把盒子盖打开,去研究里面的源代码和程序结构。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。 使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。
白盒测试的主要方法:
•逻辑驱动测试
•基本路径测试
主要用于软件验证。
使用程序设计的控制结构导出测试用例。
逻辑驱动测试:
主要是测试覆盖率,以程序内在逻辑结构为基础的测试。包括以下6种类型: •语句覆盖
•判断覆盖
•条件覆盖
•判定-条件覆盖
•条件组合覆盖
•路径覆盖
白盒测试的主要目的
• 保证一个模块中的所有独立路径至少被执行一次;
•对所有的逻辑值均需要测试真、假两个分支;
•在上下边界及可操作范围内运行所有循环;
•检查内部数据结构以确保其有效性
测试是软件开发过程的重要组成部分,是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试的目的,第一是确认软件的质量,其一方面是确认软件做了你所期望的事情(Do the right thing),另一方面是确认软件以正确的方式来做了这个事件(Do it right);第二是提供信息,比如提供给
开发人员或程序经理的反馈信息,为风险评估所准备的信息;第三软件测试不仅是在测试软件产品的本身,而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题,这说明此软件开发过程很可能是有缺陷的。
经过这一门课程的学习和老师的给我们的讲座,意识到测试并非是我想像的从客户角度任意使用软件产品,从而发现有无质量问题,它有它的理论和实践体系。软件测试是一项严谨的工作,软件测试员一个基本的素质是打破砂锅问到底。喜欢找出那些深藏不露的系统冲突,乐于处理最复杂的问题,外表上热衷於来回奔忙,追求尽善尽美,为征服系统而额手称庆。
最后特别感谢老师对我们的课程学习的讲授,让我们了解到计算机更多的知识,也让我们了解到求职关于计算机方面的岗位,应具备哪些专业知识,谢谢老师!