一、软件测试的概念
软件测试是为发现错误而针对某个程序或系统的执行过程。或者说,使用人工和自动的手段来运行或测试某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
二、软件测试的原则
1.测试独立性。软件开发人员即程序员应该避免测试自己的程序,测试工作应该由独立的专业的软件测试机构来完成。但这并不是说程序员不能测试自己的程序,而是鼓励程序员进行调试,因为测试由别人来进行可能会更加有效、客观,并且容易成功,而允许程序员自己调试也会更加有效和针对性。
2.尽早和不断地测试。因为在软件开发的每一环节都有可能产生意想不到的问题,其影响因素有很多,比如软件本身的抽象性和复杂性、软件所涉及问题的复杂性、软件开发各个阶段工作的多样性,以及各层次工作人员的配合关系等。所以要坚持软件开发各阶段的技术评审,把错误克服在早期,从而减少成本,提高软件质量。
3.对测试用例要有正确的态度:第-,测试用例应当由测试输入数据和预期输出结果这两部分组成;第二,在设计测试用例时,不仅要考虑合理的输入条件,更要注意不合理的输入条件。因为软件投入实际运行中,往往不遵守正常的使用方法,却进行了些甚至大量的意外输入导致软件一时半时不能做出适当的反应,就很容易产生一系列的问题,轻则输出错误的结果,重则瘫痪失效!因此常用一些 不合理的输入条件来发现更多的鲜为人知的软件缺陷。
4.重点测试。人以群分,物以类聚,软件测试也不例外,一定 要充分注意软件测试中的群集现象,也可以认为是“80-20原则”。不要以为发现几个错误并且解决这些问题之后,就不需要测试了。反而这里是错误群集的地方,对这段程序要重点测试,以提高测试投资的效益。5.严格执行测试计划,排除测试的随意性,以避免发生疏漏或者重复无效的工作。6.应当对每一个测试结果进行全面检查。一定要全面地、仔细地检查测试结果。7.妥善保存测试用例、测试计划、测试报告和最终分析报告,以备回归测试及维护之用。
8.想用户所想。在所有测试的活动过程中,测试人员都应该从客户的需求出发。
三、软件测试技术
3.1测试目标
1、发现可以通过测试避免的开发风险的规模和来源:
2、实施测试来降低所发现的风险:
3、确定测试何时可以结束:
4、在开发项目的过程中将测试看作是-一个标准项目。
3.2测试方法
从是否需要执行被测软件的角度,可分为:静态测试、 动态测试
从测试是否针对系统的内部结构和具体实现算法的角度来看,可分为:白盒测试、 黑盒测试.
3.2.1静态测试和动态测试
静态测试是指不实际运行被测软件,而只是静态的检查程序代码、界面或文档中可能存在的错误的过程。其中包括代码测试、界面测试和文档测试3个方面。对于代码测试,主要测试代码是否符合相应的标准和规范。对于界面测试,主要测试软件的实际界面与需求中的说明是否相符。对于文档测试,主要测试用户手册和需求说明是否符合用户的实际要求。
动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。目前,动态测试也是公司的测试工作的主要方式。
根据动态测试在软件开发过程中所处的阶段和作用,动态测试可分为如下几个步骤:
1、单元测试:单元测试是对软件中的基本组成单位进行测试,其目的是检验软件基本组成单位的正确性。
2、集成测试:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。在实际工作中,我们把集成测试分为若干次的组装测试和确认测试。组装测试,是单元测试的延伸,除对软件基本组成单位的测试外,还需增加对相互联系模块之间接口的测试。确认测试,是对组装测试结果的检验,主要目的是尽可能的排除单元测试、组装测试中发现的错误:
3、系统测试:系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求。
4、验收测试这是软件在投入使用之前的最后测试。是购买者对软件的试用过程。
5、回归测试
即软件维护阶段,其目的是对验收测试结果进行验证和修改。
3.2.2白盒测试和黑盒测试
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。使用被测单元内部如何工作的信息,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。白盒测试的主要方法:逻辑驱动测试、基本路径测试逻辑驱动测试:主要是测试覆盖率,以程序内在逻辑结构为基础的测试。包括以下4种类型: 1.语句覆盖:使得程序中每一条可执行语句至少被执行一 次。
2.分支覆盖:使得程序中每一个分支都至少被执行一次。
3.条件覆盖:程序中每一个条件至少有一次被满足。
4.路径覆盖:对程序模块的所有独立的基本路径至少要测试一次。
基本路径测试:是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。包括以下4个步骤和一个工具方法:
1.画出程序的控制流图:描述程序控制流的一种图示方法。
2.计算程序圈复杂度: McCabe 复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一-次所必须的测试用例数目的上界。
3.导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
4.准备测试用例:确保基本路径集中的每一条路径的执行。工具方法:
图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。
白盒测试的优点:
(1)帮助软件测试人员增大代码的覆盖率;
(2)提高代码的质量,发现代码中隐藏的问题。
缺点:
(1)程序运行会有很多不同的路径,不可能测试所有的运行路径;
(2)测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;
(3)系统庞大时,测试开销会非常大。黑盒测试:也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个 不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
黑盒测试的主要方法:等价类划分、边值分析、错误推测法、因果图方法等。
黑盒测试实际上是检查以下几点是否满足要求:
1.正确性:计算结果命名等方面。
2.可用性:是否可以满足软件的需求说明。
3.边界条件:输入部分的边界值,就是使用等价类划分,试试最大最小和非法数据等等。
4.性能:程序的性能取决于两个因素:运行速度的快慢和需要消耗的系统资源。如果在测试过程中发现性能问题.修复起来是非常艰难的,因为这常常意味着程序的算法不好,结构不好,或者设计有问题。因此在产品开发的开始阶段,就要考虑到软件的性能问题。
5.压力测试:多用户情况可以考忠使用压力测试工具,建议将压力和性能测试结合起来进行。如果有负载平衡的话还要在服务器端打开监测工具,查看服务器CPU使用率,内存占用情况,如果有必要可以模拟大量数据输入.对硬盘的影响等等信息。
6.错误恢复:错误处理,页面数据验证,包括突然间断电,输入错误数据等。
7.安全性测试:特别是一些商务网站,或者跟钱有关.或者和公司秘密有关的web 更是需要这方面的测试。
8.兼容性:不同浏览器,不同应用程序版本在实现功能时的表现。
黑盒测试的优点:
(1)比较简单,不需要了解程序内部的代码及实现;
(2)与软件的内部实现无关;
(3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
(4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能; (5)在做软件自动化测试时较为方便。
缺点:
(1)不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;
(2)自动化测试的复用性较低。
黑盒测试和白盒测试是两种不同的测试方法。在整个的测试过程中两种方法都会用到,但以经验来看,在一个项目中测试工程师还是以黑盒测试为主,白盒测试为辅。因为你首先要用黑盒测试来验证结果是否正确,或者说目标是否正确,如果结果正确,然后再用白盒测试来验证,这个正确的结果是不是由于正确的过程产生的。如果结果不正确,那么用白盒测试来找到过程中错误的地方。只有先做好黑盒测试,然后用白盒测试验证,这个测试才能说做的完整了。
3.3测试技巧
(1)边界测试,测试用户输入框中的数值的最大数和最小数,以及为空时的情况。
(2)非法测试,例如在输入数字的地方输入字母。
(3)跟踪测试,跟踪一 条数据的流程,保证数据的正确性。
(4)在开始测试时应保证数据的正确性,然后在从系统中找出各种BUG。 (5)接口测试,程序往往在接口的地方很容易发生错误,要在此模块测试请勿掉以轻心。
(6)代码重用测试,在开发过程中有些模块功能几乎相同,程序员在重用代码时可能忘记在原有代码上修改或修改不全面,而造成的错误。 (7)突发事件测试,服务器上可能发生意外情况的测试。
(8)外界环境测试,有些系统在开发时依赖于另外-一个系统,当另外一个系统发生错误时,这个系统所受到的影响的情况。
(9)在程序员刚修复Bug之后的地方,再找一找,往往程序员只修复报告出来的缺陷而不去考虑别的功能在修改时可能会重新造成错误。(10) 认真做好测试记录在做完一 天的测试记录之后,第二天再根据第一 天的测试记录重复测试你会发现有未修正的错误。
(11)文字测试,如果在系统中有用词不当的地方,我想这是不应该的。 (12)系统兼容测试,例如有些程序在IB6 能运行正常,到IE5下不能运行。有些程序在WIN200下能运行,而到WIN98 却不能运行。像- - 些很特别的用户去使用系统,你很有可能发现BUG。
(13)用户的易用性测试,往往用户的需求是不断的变化的,而其中的一部份变化的原因,是有用户操作上不方便引起的。