软件测试基础知识

静态测试和动态测试—两个重要的测试技术之间的差异

测试用例设计白皮书
使用allpairs自动设计组合测试用例
软件测试缺陷密度的计算方法

一、软件测试概念

什么是软件测试?百度百科上,软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
其实说直白一点,就是找bug。

二、软件测试目的

软件测试的目的,就是基于概念而言的。其目的大概分为以下几种:

  1. 发现软件的缺陷
  2. 提高软件质量
  3. 软件开发,测试过程改进
  4. 评估软件质量
  5. 降低公司对软件的维护成本
  6. 降低软件发布后,对公司负面影响的风险

三、软件测试模型

常见的软件测试模型包括V模型、W模型、H模型、X模型和前置模型。这里暂且介绍常用的V模型及W模型。

1.V模型

V模型是最具有代表意义的测试模型。V模型是软件开发瀑布模型的变种,它反映了测试活动与分析和设计的关系 。

1)从左到右,描述了基本的开发过程和测试行为,非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系 。
2)左边依次下降的是开发过程各阶段,与此相对应的是右边依次上升的部分,即各测试过程的各个阶段。
优点:V模型的价值在于它非常明确地标明了测试过程中存在的不同级别,并且清楚地描述了这些测试阶段和开发过程期间各阶段的对应关系。
缺点:仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段;忽视了测试对需求分析,系统设计的验证,一直到后期的验收测试才被发现。

通俗的讲,一个产品从研发到出厂的工程中,测试分为三个阶段:单元测试、集成测试、系统测试; 单元测试:一个模块的功能及常规错误测试; 集成测试:完成单元测试后,各模块联调测试;集中在各模块的接口是否一致、各模块间的数据流和控制硫是否按照设计实现其功能、以及结果的正确性验证等等;可以使整个产品的集成测试,也可以使大模块的集成测试; 系统测试:针对整个产品的全面测试,既包含各模块的验证性测试(验证前两个阶段测试的正确性)和功能性(产品提交个用户的功能)测试,又包括对整个产品的健壮性、安全性、可维护性及各种性能参数的测试.

系统测试和集成测试的区别:

  • 一般的小系统区分不是很大的,通常小公司是不做集成测试,直接做系统测试了。
  • 系统测试用例相对很接近用户接受测试用例
    系统测试这个称呼往往被用于压力测试、容量测试、性能测试、安全测试等方面。
  • 而集成测试这个称呼往往被用于细节化的功能测试的超集——从用户需求来设计和组织较大颗粒度的功能测试。
  • 系统测试最主要的就是功能测试,测试软件《需求规格说明书》中提到的功能是否有遗漏,是否正确的实现。做系统测试要严格按照《需求规格说明书》,以它为标准。测试方法一般都使用黑盒测试法;
  • 集成测试在系统测试之前,单元测试完成之后系统集成的时候进行测试。集成测试主要是针对程序内部结构进行测试,特别是对程序之间的接口进行测试。 集成测试对测试人员的编写脚本能力要求比较高。测试方法一般选用黑盒测试和白盒测试相结合**。

2.W模型

W模型由Evolutif公司公司提出,相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,明确表示出了测试与开发的并行关系。

W模型中测试与开发对应关系如下:
开发:需求分析、概要设计、  详细设计、  编码、  软件集成、系统集成、部署
     ↑    ↑       ↑     ↑      ↑    ↑   ↑
测试:需求评审、概要设计评审、详细设计评审、单元测试、集成测试、系统测试、验收测试
优点:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。

例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。
局限性:在W模型中,需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。这样就无法支持迭代的开发模型。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临着困惑。

四、软件测试基本流程

根据上述的W模型,软件测试基本流程包括如下:
1.测试需求分析
2.测试计划
3.测试设计(测试策略、测试用例)
4.测试执行(手工测试、测试工具)
5.缺陷跟踪
6.回归测试
7.编写测试报告

这里要注意,一般产品有需求之后,会有需求评审会,测试会一并参加,并需要在会议上积极发言,提出自己不清楚或有疑问的需求点。这样更有利于后期测试用例的编写。
测试流程是这样,但是,还是要真正动手测试,才能更加深刻的理解软件测试流程中的每个阶段含义。

五、软件测试的基本方法

  1. 测试技术原理
    1)黑盒测试,主要有等价类划分法、场景法等
    2)灰盒测试
    3)白盒测试,主要有静态测试、动态测试
    4)探索性测试
  2. 测试策略
    测试策略大概分为以下几种:
    数据和数据库完整性测试、接口测试、集成测试(业务流程测试)、功能测试、用户界面测试(用户友好性测试)、性能测试、浏览器兼容性测试、负载测试、强度测试、安全性和访问控制测试、故障转移和恢复测试、配置测试、安装测试。
    我们要根据测试处于开发、测试的对应阶段,分析测试需求,合理的去应用测试技术原理和测试策略。要具体情况具体分析。

六、软件测试工具

1.功能测试工具

1)WinRunner(Mercury公司)
2)Robot、XDE tester(IBM公司)
3)TestComplete
4)Ruby+watir(开源)

2.单元测试工具

1)DUnit(Delphi)
2)JTest、Junit(java)
3)NUnit(.NET)

3.性能测试工具

1)LoadRunner(Mercury公司)
2)Apache Jmeter(开源)
3)Siege(开源)
4)Robot(IBM公司)
5)eHealth

4.缺陷跟踪管理工具(开源)

1)Bugzilla
2)禅道
3)redmine
4)Bugfree
5)Mantis

5.用例管理工具

1)TestLink
2)TestManager(Rational测试解决方案中,推荐的测试用例管理工具)
3)禅道

6.自动化测试工具(app)

1)monkeyrunner
2)appium
3)Robotium
4)UI Automator

七、软件测试经验分享

文章中大概介绍了测试理论、测试策略及测试工具等,是比较入门级的,没有深入介绍。这里要说一下,测试理论要结合实际情况,进行正确有效的应用,才能发挥它的作用,因此要多实践,实践出真知。对于测试工具而言,它不是万能的,但是没有工具是万万不能的,所以要学会什么情况下,使用什么样的测试工具,进行什么样的测试,这才是最重要的,不要为了使用工具而使用。
最后,对于测试而言,要善于总结测试工作,从总结中积累自己的测试经验和特长。并且要积极主动,学会提问题,要让别人知道你想问的信息是什么。当对测试工作有了一定的了解之后,就要对自己以后的测试工作进行规划,有计划的朝自己的目标努力。过程虽然比较辛苦,当收获成长的时候,就会非常欣慰,感觉一切都值得。我们一定要趁着年轻,多学习,多积累,不要以后让自己后悔。

其它

1、Quality Center (QC)是Mercury Interactive 公司推出的一个基于 Web 且支持测试管理的所有必要方面的应用程序。该软件提供统一、可重复的流程,用于收集需求、计划和安排测试、分析结果并管理缺陷和问题。组织可使用该软件在较大的应用程序生命周期中实现特定质量流程和过程的数字化。该软件还支持在 IT 团队间进行高水平沟通和协调。

2、QTP是quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等
12.0以后改名为united function testing简称为UFT。