一、软件测试的目的
1.发现软件中的缺陷和错误
2.确保软件是满足用户需求的
二、软件测试方式
1.按照软件的生命周期划分
单元测试:单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。
集成测试:集成测试是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。集成测试的策略主要有自顶向下和自底向上两种。
系统测试:系统测试是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求。软件系统测试方法很多,主要有功能测试、性能测试、随机测试等等。
验收测试:验收测试旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。
回归测试:回归测试是在软件维护阶段,对软件进行修改之后进行的测试。其目的是检验对软件进行的修改是否正确。
2.按照测试关注点划分
功能测试、性能测试、稳定性测试、易用性测试、安全性测试。
以登录界面为例
1.功能测试
正常流程(正确账号密码,点击提交,验证能否正确登陆)
异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
登陆成功后能否正确跳转
用户名和密码,太短或太长的处理(边界值法)
用户名和密码,有特殊字符(比如空格)及其他非英文的情况
记住用户名,记住密码
登陆失败后,不记录密码
用户名和密码前后有空格的处理
密码是否是密文显示,使用“*”号或圆点等符号代替
2.性能测试
打开登陆页面,需要的时间是否在需求要求的时间内
输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
压力测试,不同用户数压力下的表现
负载测试,看极限能承受多大的用户量同时正常使用
3.安全性测试
用户名或密码是否是通过加密方式,发送给后端服务器
用户名和密码应该在前端和后端做双重验证
防止CSRF攻击,是否存在token
用户名和密码的输入框,应该屏蔽SQL注入攻击
用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
防止暴力破解,检测是否有错误登陆的次数限制
4.兼容性测试
不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
同种浏览器下不同版本能否显示正常且功能正常
不同的操作系统是否能正常工作(Windows, Mac)
移动设备上是否正常工作(iOS,Android)
5.界面测试
布局是否合理,按钮和表单是否整齐
按钮和表单高度和长度是否符合要求
界面风格是否符合UI设计稿
文字有无错别字
3.按照技术/测试用例设计划分
白盒测试、黑盒测试、灰盒测试
1.黑盒测试:
等价类划分:是把所有可能的输入数据,即程序的输入域划分为若干个等价类 (子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
边界值分析法:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测 试方法。通常边界值分析法是作为对等价类划分法的补充,这 种情况下,其测试用例来自等价类的边界。
错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对 性的设计测试用例的方法。例如, 输入数据和输出数据为0的情况;输入表格为空格或输 入表格只有一行. 这些都是容易发生错误的情况。可选择这些 情况下的例子作为测试用例。
2.白盒测试:
语句覆盖,每条语句至少执行一次。
判断覆盖,每个判断的每个分支至少执行一次。
条件覆盖,每个判段的每个条件应取到的各种可能的值。
判断/条件覆盖,同时满足判断覆盖条件覆盖。
条件组合覆盖,每个判定中各条件的每一种组合至少出现一次。
路径覆盖,要使设计的测试用例能覆盖被测程序中所有可能的路径。(画程序流图,计算圈复杂度,V(G)=E-N+2/V(G)=P+1,导出测试用例,准备测试用例)
3.灰盒测试:
灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。
4.按照测试实施者划分
开发方测试(α测试)、用户测试(β测试)、第三方测试
1.α测试:在受控的环境下进行,由用户在开发者的场所进行,开发者指导用户测试,开发者负责记录发现的错误和使用中遇到的问题。
2.β 测试:在开发者不可控的环境下进行,由软件最终用户在一个或多个客户场所下进行,用户记录测试中遇到的问题,并定期上报给开发者。
5.按照分析方法划分
静态测试、动态测试
1.静态测试:静态方法是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口百等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分度析、符号执行来找错。
2.动态测试:动态测试方法是指通过专运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分属组成:构造测试实例、执行程序、分析程序的输出结果。
6.按照测试执行方式划分
手工测试、自动化测试
1.手工测试(更适合用于验收测试):手工测试能通过人为的逻辑判断效验当前的步骤是否正确,同时用例的执行具有一定步骤跳跃性,能够清楚知道逻辑,细致定位问题。测试人员应该从最终用户的角度进行思考,并测试应用程序以发现可能会妨碍用户体验的错误或缺陷。
优点:手工测试比自动化测试发现的缺陷更多,并且测试人员具有经验和对错误的猜测能力,还具有审美能力和心理体验。
缺点:重复的手工回归测试,代价昂贵、容易出错。依赖于软件测试人员的能力。如果修改bug所需时间稍长,那么想将手工测试应用于回归测试将变得异常困难。这是因为需要测试的测试用例太多,所以需要引入自动化测试。
2.自动化测试(更适合用于回归测试或负载测试):自动化程序可以迅速执行多个测试用例。
优点:对程序的回归测试更方便,可以运行更多更繁琐的测试,可以执行一些手工测试困难或不可能进行的测试,能更好地利用资源。
缺点:无法运用在测试复杂的场景,比手动测试脆弱,需要维护成本,而且工具本身并无想象力,无法代替手工测试。
三、测试和开发的结合
1.V模型
测试过程加在开发过程的后半段,比较被动。
2.W模型
测试提前,甚至和开发是同步进行,测试不仅是程序,还包括需求和设计。W模型有利于尽早地全面的发现问题,降低软件开发的成本,风险前置。
需求测试 -> 概要设计测试 -> 详细设计测试 -> 单元测试 -> 集成测试 -> 系统测试 -> 验收测试
四、怎么实施自动化测试
首先判断项目适不适合进行自动化测试。
对项目做需求分析。
制定测试计划和测试方案。
搭建自动化测试框架。
设计或编写测试用例。
执行自动化测试。
评估