一、软件测试的概念和理论
软件测试的目的
-
测试的目的是为了找到软件/网站存在的问题和缺陷
-
通过提前找到软件存在问题,可以降低商业风险。
软件测试的定义
-
软件测试就是用人工或者自动化对软件系统进行测试,通过测试需要找到预期结果和实际结果的差异
-
预期结果:在测试之前我们就知道的结果/希望出现的结果
-
实际结果:测试之后得到的实际结果
1.1、软件测试的基本原则
1、所有软件只能证明存在问题,不能证明不存在问题。
-
所有的软件的都是有问题的,只是这些问题是否已经发现了
2、不能进行穷举测试,应该进行分类测试。
-
穷举:将所有的可能都测试一遍
-
分类测试
-
可以被正常搜索的:也就是可以正常显示的哪些,比如男装
-
不能正常搜索的:也就是哪些不应该被显示的对象,比如各种违禁品
-
特殊情况:带有特殊符号、空格、什么都不输入,
-
3、测试工作应该尽早介入,可以降低修复成本。
-
及早发现问题,及早解决
4、缺陷聚集原则,二八法则
-
一个项目中80%缺陷会集中在20%的功能模块中
-
越是有问题的地方,这里往往会有其他的问题
-
出现这个现象的原有
-
复杂这个模块的程序员技术水平一般
-
模块功能功能复
-
5、测试依赖环境
-
程序的架构:B/S C/S
-
B/S架构:Broswer/Server,通过浏览器访问服务
-
C/S架构:Client/Server,通过客户端程序访问服务
-
-
测试B/S架构准备三款浏览器:谷歌、火狐、IE
-
测试C/S架构准备:
-
PC:win7、8、10,mac,linux
-
手机:安卓、苹果、鸿蒙
-
6、杀虫剂现象
-
测试人员在经过一段时间后会进入自己的固有的思维意识,很难在测试出其他的bug,这个时候可以进行交叉测试,就是交互测试人员。
7、不存在缺陷谬论
-
不存在没有缺陷的程序
二、软件开发模型
2.1、软件开发模型简介
软件开发模型也叫做软件生命周期
软件测试与软件开发的开发模式有着紧密的联系,作为一名测试人员,应该充分理解软件的开发模式,以便找准自己在其中的位置,从而发挥自身的价值。
在软件开发的几十年实践中,人们总结了很多软件开发模型来描述和表示一个复杂的开发过程,软件开发有三种模式:
-
瀑布模型
-
快速原型模型
-
螺旋模型
2.2、三种模型的特点和优缺点
2.2.1、瀑布模型
第一个阶段:项目立项阶段
1、调研:
首先对项目进行可行性研究,通过可行性的研究来建立项目。
调研完成后会得到一个可行性的调研报告。
2、需求分析:
调研判断项目完成后,就可以进行需求分析。
最终会得到一个需求规格说明文档,文档中仅仅是需求的大体说明。
第二个阶段:项目开发阶段
1、概要设计:
就是将需求文档中的内容落地。
概要设计完成后,会得到概要设计文档。
概要文档中会将项目分成若干个功能模块,而且会明确说明每个模块中的功能。
2、详细设计:
再详细设计中,明确指定了模块具体实现的细节。
最终会得到一个详细的设计文档。
3、编码(编写程序):
又程序员编写程序,最终得到的是程序本身。
4、软件测试:
测试软件是否可以正常运行,是否达到了预期的功能。
最终得到是测试报告。
第三个阶段:项目运维阶段
对软件上线后进行运行和维护。
瀑布模型的特点
-
是以文档驱动,后面所有的工作都是基于前面的文档的内容。
-
每个阶段执行一次,而且是线性依次进行的
-
开发模式中,瀑布模型是非常重要的一种
瀑布模型的优点
-
各个阶段非常清晰
-
每个人只需要关注自己的阶段
瀑布模型的缺点
-
下面的阶段是依赖上面阶段的分析结果的,一旦上面出现错误,那么下面全部都会出现错误。
-
整个流程过分依赖需求分析结果,这种模式不能适应变化频繁的项目。
快速原型模型
-
一个项目在很短时间能,就有一个版本上线了,这个版本往往功能不全,而且有bug
-
在后续的版本中陆续修复bug,并添加完善功能
特点:
-
快速上线
-
支持用户参与
优点:
-
克服了瀑布模型的缺点,减少中间环节,可以及早发现问题并进行修复
缺点:
-
仅仅适合中小型项目,不适合大型项目
螺旋模型
三、软件测试模型
测试模型:所谓的模型就是这个行业的人总结出来的测试经验。
第一种:V模型
-
这种模型其实就是在前面瀑布模型的基础上进行测试的
-
这种模型其实也是瀑布模型的变种
-
根据测试阶段不同,测试也同样分成四个不同的阶段
V模型的流程
用户需求 → 需求分析 → 概要设计 → 详细设计 → 编码 → 单元测试 → 集成测试 → 系统测试→验收测试
优点:
-
整个流程比较清晰,即包含了底层测试,也包含了对高层进行测试
缺点:
-
这个本质上还是瀑布模型,因此具有瀑布模型的缺点
第二种:W(双V)模型
这种模式主要是为了解决V型模型存在的问题,解决思路就是测试前移。
W型比V型多的部分
-
集成:每个程序员将自己负责的功能模块合并到一起
-
实施:将开发好的软件安装到客户的服务器上
-
交付:教给用户如何使用软件
静态和动态测试
-
W模型中,对各种的文档进行测试,都是静态测试
-
对程序进行测试,就是动态测试
优点:
-
测试工作前移,可以尽早发现存在的问题
缺点:
-
对技术和管理能力要求较高
总结:W模型中的流程
开发V:用户需求→需求分析→概要设计→详细设计→编码→集成→实施→交付
测试V:验收测试设计→系统测试设计→集成测试设计→单元测试设计→单元测试→集成测试→系统测试→验收测试
四、软件质量模型
ISO9126 软件质量模型是评价软件质量的国际标准,由6个特性和27个子特性组成。
六大特性
一、功能性
1、适合性:软件产品为指定的任务和用户目标提供一组合适功能的能力。(1、软件提供了用户所需要的功能 2、软件提供的功能是用户所需要的)
2、准确性:软件提供给用户功能的精确度是否符合目标。(例如:运算结果的准确,数字发生偏差,多个0或少个0)
3、互操作性:软件与其它系统进行交互的能力。(例如:PC机中WORD和打印机完成打印互通;接口调用)
4、保密安全性:软件保护信息和数据的安全能力。(主要是权限和密码)
5、功能性的依从性:遵循相关标准(国际标准、国内标准、行业标准、企业内部规范)
二、可靠性
1、成熟性:软件产品为避免软件内部的错误扩散而导至系统失效的能力(主要是对内错误的隔离)
2、容错性:软件防止外部接口错误扩散而导致系统失效的能力(主要是对外错误的隔离)
3、易恢复性:系统失效后,重新恢复原有的功能和性能的能力。
4、可靠性的依从性:遵循相关标准。
三、易用性
1、易理解性:软件交互给用户的信息时,要清晰,准确,且要易懂,使用户能够快速理解软件。
2、易学性:软件使用户能学习其应用的能力。
3、易操作性:软件产品使用户能易于操作和控制它的能力。
4、易用性的依从性:遵循一定的标准。
四、效率
1、时间特性:软件处理特定的业务请求所需要的响应时间。
2、资源利用性:软件处理特定的业务请求所消耗的系统资源。
3、效率依从性:遵循一定的标准。
五、维护性
1、易分析性:软件提供辅助手段帮助开发人员定位缺陷产生的原因,判断出修改的地方。
2、易改变性:软件产品使得指定的修改容易实现的能力。(降低修复问题的成本)
3、稳定性:软件产品避免由于软件修改而造成意外结果的能力。
4、易测试性:软件提供辅助性手段帮助测试人员实现其测试意图。
5、维护性的依从性:遵循相关标准。
六、可移植性
1、适应性:软件产品无需作相应变动就能适应不同环境的能力。
2、易安装性:尽可能少的提供选择,方便用户直接安装。
3、共存性:软件产品在公共环境中与其它软件分享公共资源共存的软件。(兼容性)
4、易替换性:软件产品在同样的环境下,替代另一个相同用途的软件产品的能力。
5、可移植性的依从性:遵循相关的标准。
五、软件测试分类
软件测试方法种类繁多,有白盒测试、黑盒测试、静态测试、动态测试、集成测试等等,但是记忆起来容易混乱,容易分不清楚,如果把软件测试方法进行分类, 就会清晰很多。
5.1、按照阶段分类
1、单元测试
-
又称模块测试,是针对软件设计的最小单位----程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验程序各模块是否存在各种差错,是否能正确地实现了其功能,满足其性能和接口要求。
2、集成测试(组装测试)
-
又叫组装测试或联合,是单元测试的多级扩展,是在单元测试的基础上进行的一种有序测试。检验软件单元之间的接口关系,以期望通过测试发现各软件单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。
3、系统测试
-
是为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动、它是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。
4、验收测试
-
检查软件是否满足客户的要求,对软件做最后的测试
-
α测试【Alpha】:阿尔法测试的软件版本内存版本,软件bug较多,一般不让用户直接使用,而是公司内部交流使用。
-
测试【Beta】:贝塔测试就是软件的公测版本,目的就是让更多的用户通过使用软件来发现更多的问题。
-
γ测试【Gamma】:伽马测试就是软件的正式候选版,这个版本和用户最后使用的正式版几乎完全一致。
-
5.2、按照技术划分(是否查看源码划分)
1、白盒测试
-
又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。
2、黑盒测试(数据驱动测试)
-
又称为数据驱动测试,把测试对象当做看不见的黑盒,在完全不考虑程序内部结构和处理过程的情况下,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。
3、灰盒测试
-
是一种综合测试法,它将“黑盒”测试与“白盒”测试结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。
5.3、按照是否运行程序划分
静态测试:
-
指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
动态测试:
-
是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
5.4、按照是否自动运行
-
人工测试(所有测试工作,都有测试人员手动进行测试)
-
自动化测试 (通过python开发自动化工具,用工具完成测试工作)
5.5、其他分类
1、冒烟测试:
-
测试软件基础功能是否正常
2、回归测试:
-
在测试工作中,一旦发现bug,需要将这个bug提交给开发,开发修复完成后,需要重新对这些bug再次进行测试
5.6、 软件缺陷
缺陷不等于bug ;bug仅仅是缺陷中的很小的一个部分而已
软件缺陷判定标准
1、软件未实现产品说明书要求的功能
2、软件实现了产品说明书未提到的功能
3、软件出现了产品说明书指明不应该出现的错误
4、软件未实现产品说明书虽未明确提及但应该实现的目标
5、软件难以理解、不易使用、运行缓慢或者或从测试人员的角度看觉得最终用户会认为不好
软件缺陷产生原因【缺陷只能减少,不能完全避免】
1、对于需求文档等文等文件解释、理解错误
2、设计文档本身有错误
3、 程序代码错误
4、硬件和软件系统有错
软件缺陷类型
1、功能错误
软件没有达到需求文档的功能要求,或者功能异常
2、界面错误
软件功能正常,但是界面不好看或者未达到规格说明中的要求
3、兼容性错误
软件和系统中的其他的程序冲突,导致软件无法运行
4、易用性错误
软件难以理解、不易使用