测试开发实战教程
上QQ阅读APP看书,第一时间看更新

1.软件测试简介

软件测试是软件开发的一个重要组成部分,贯穿于整个软件开发的生命周期,是对软件产品(包括阶段性产品)进行验证和确认的活动。其目的是尽快、尽早地发现软件产品中所存在的各种问题,以及产品与用户需求、预先定义的不一致性地方。检查软件产品中可能存在的Bug,并编写缺陷报告,交给开发人员修改。软件测试人员的基本目标是发现软件中的错误。

软件测试技术相当于是软件测试人员的武器。作为软件测试人员,必须要清楚了解可以通过哪些手段去保障产品的质量,只有知道了这些,才能更好地完成软件测试工作。

2.软件测试分类

软件测试的分类一般按照下面的这些维度去划分。

(1)按开发阶段分类

单元测试

集成测试

冒烟测试

系统测试

验收测试

(2)按软件测试实施组织分类

1)α测试:非正式验收测试。

2)β测试:内测后的公测。

(3)按软件测试执行方式分类

1)静态测试:不启动被测对象的软件测试,例如,代码走读、代码评审、文档评审、需求评审等。

2)动态测试:启动被测试对象的软件测试,例如,白盒测试、黑盒测试等。

(4)按是否查看代码分类

1)黑盒测试:指的是把被测的软件当作黑盒子,不关心盒子里面的结构是怎样的,只关心软件的输入数据和输出结果。

2)白盒测试:指的是把盒子盖子打开,去研究里面的源代码和程序运行逻辑。

(5)按是否手工执行分类

1)手工测试:手工一个一个地执行测试用例,通过键盘/鼠标等设备输入一些参数,查看程序返回结果是否符合预期结果,通常用于黑盒测试或系统测试阶段。

2)自动化测试:把以手工为驱动的测试行为转化为机器执行测试的一种自动化执行活动。

(6)按测试对象分类

1)性能测试:检查系统是否满足需求规格说明书中规定的性能。

2)安全测试:用于对各种攻击手段的测试,例如,SQL注入、XSS等。

3)兼容性测试:验证软件和硬件之间是否能够配合且发挥很好的工作效率,软件
和硬件之间是否会有影响从而导致系统的崩溃。

4)文档测试:测试软件产品中的各类文档。

5)易用性测试:用户体验测试。

6)业务测试:测试人员将系统的各个模块串接起来运行、模拟真实用户实际的工
作流程,验证按需求定义的功能是否满足用户要求所进行的软件测试。

7)界面测试:也称为UI测试,测试用户界面的功能模块的布局是否合理,整体风格是否一致,各个控件的放置位置是否符合客户的使用习惯,还要测试操作界面的操作便捷性、页面元素的可用性、界面的文字是否正确、元素命名是否统一、页面是否美观、文字和图片组合是否完美。

8)安装测试:测试程序的安装、卸载。

(7)其他分类

1)回归测试:修改了旧代码后,重新对修改后的程序执行测试以确认修改后的程
序没有引入新的错误或导致其他代码产生错误。

2)随机测试:指软件测试中的所有输入数据都是随机生成的,其目的是模拟用户
的真实操作,并发现一些边缘性的错误。

3)探索性测试:“试”是一种测试思维,探索性测试没有很多实际的测试方法、技术和工具,但却是所有测试人员都应该掌握的一种测试思维,探索性测试强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。

3.黑盒测试

黑盒测试又称功能测试、数据驱动测试或基于需求规格说明书的功能测试。该类测试注重于软件的功能。

采用这种软件测试方法,测试工程师把测试对象看作一个黑盒子,完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求文档,检查程序的功能是否符合用户需求。测试工程师无需了解程序代码的内部构造,完全模拟软件产品的最终用户去使用该软件,检查软件产品是否达到了用户的要求。

黑盒测试方法能够更好、更真实地从用户角度考察被测系统功能的实现情况。在软件测试的各个阶段,如单元测试、集成测试、系统测试及验收测试等阶段中,黑盒测试都发挥着重要作用,尤其在系统测试和确认测试中,其作用是其他软件测试方法无法取代的。

4.白盒测试

白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。测试人员用白盒测试可以全面了解程序内部逻辑结构、对所有逻辑路径进行测试。

白盒测试常用的方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法和基本路径测试法。

5.分层测试体系

分层测试体系如图1-27所示。

..\22-0118一校改图\22-0118改图回传\1-27.tif

图1-27

其中Unit代表单元测试,API代表接口测试,UI代表页面级的系统测试。分层的自动化测试倡导在产品的不同层次都需要自动化测试,这个金字塔也表示了越靠下越容易执行自动化测试,越靠下成本越低,越靠下效率越高。

分层测试顾名思义就是分多个层次的软件测试,例如先测完软件的中间接口层,再测软件的最上层的界面。不过也可以同时测试二者。

分层测试的测试方法对测试人员的代码编写能力还有自动化测试水平有较高要求,同时要求测试人员和开发团队真正地理解敏捷开发和敏捷测试,甚至要求开发团队具备开发即测试、测试即开发的能力。

(1)单元测试

对软件中最小的单元进行检查和验证,即开发者编写的一小段代码,用于检验被测的一个很小的功能是否正确实现。一个单元测试通常用于判断某个特定条件(或者场景)下某个特定函数的行为。

(2)接口测试

接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与本系统之间,以及内部各个子系统之间的交互点。

测试的重点是检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。

接口测试可以使测试人员更早介入,介入越早越能更早地发现系统中的问题,还可以缩短项目测试周期,能够发现更底层的Bug,减少开发成本。

考虑到公司中不同部门(前端、后端)的工作进度不一样,所以,测试人员可针对最先完成的接口,以及需要调用第三方系统的(银行、支付宝、微信、QQ等)一些接口进行接口测试及验证。

(3)UI测试

UI测试的是应用中的用户界面是否如预期设计,例如,用户在界面上输入数据需要触发正确的事件,输出的数据能正确地展示给用户,UI的状态能随着程序的运行发生正确的变化等。

UI测试可以采用静态测试方法或动态测试方法。

对用户界面的布局、风格、字体、图片等与显示相关的部分UI测试应该采用静态测试方法,例如,点检表测试,即将测试必须通过的项用点检表一条一条列举出,然后观察每项是否通过。

对用户界面中各个类别的控件应该采用动态测试方法,即编写测试用例,对每个按钮的响应情况进行测试,判断这些按钮是否符合概要设计所规定的标准,还可以对用户界面在不同软/硬件环境下的显示情况进行测试。

UI测试需要关注的内容有以下几个方面。

首先,要通过浏览器去操作测试对象,关注测试对象是否可以正确反映业务需求的功能。

其次,还要关注测试对象是否支持各种访问方法,如按Tab 键、移动鼠标、操作快捷键等。

最后,还需要关注浏览器窗口的对象特征,如浏览器的菜单展示、窗口大小、窗口位置、窗口的状态等,都需要符合标准。