一、软件测试质量
ISO9126质量模型:软件质量模型的6大特性和27个子特性。
ISO9126软件质量模型是评价软件质量的国际标准,由6个特性和27个子特性组成,建议大家深入理解各特性、子特性的含义和区别,在测试工作需要从这6个特性和27个子特性去测试、评价一个软件。这个模型是软件质量标准的核心,对于大部分的软件,都可以考虑从这几个方面着手进行测评。
1、 软件质量的概念:
软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。通过改善软件的各种质量属性,从而进一步提高软件的整体质量。
2、软件质量模型图:
(1)功能性
1、适合性:是否提供了相应的功能
2、准确性:是不是正确(是不是满足用户需要的)
3、互操作性:产品与产品之间交互数据的能力
4、保密安全性:允许经过授权的用户和系统能够正常的访问相应的数据和信息,禁止未授权的用户访问.......
5、功能性的依从性:国际/国家/行业/企业 标准规范一致性
(2)可靠性:产品在规定的条件下,在规定的时间内完成规定功能的能力
1、成熟性:防止内部错误导致软件失效的能力
2、容错性:软件出现故障(包含外部错误),自我处理能力(能否自行解决)。
3、易恢复性:失效情况下的恢复能力,能否恢复到出错之前的应用
4、可靠性的依从性
(3)易用性:在指定使用条件下,产品被理解、 学习、使用和吸引用户的能力
1、易理解性(是不是容易被用户理解)
2、易学性(是不是容易学习)
3、易操作性(好不好操作)
4、吸引性(是不是吸引用户)
5、易用性的依从性
(4)效率性:在规定台条件下,相对于所用资源的数量,软件产品可提供适当性能的能力
1、时间特性:平均事务响应时间,吞吐率,TPS(每秒事务数)--对事物的处理能力好不好, 反应快不快,相同的时间内能够处理多少数据,每一次能够处理多少个请求。
2、资源利用性:软件运行的时候,占用服务器的资源有多少(主要是对CPU、 内存 、磁盘 、IO、 网络带宽、 队列、 共享内存的占用),如果占用资源很大,会影响到用户其他的软件使用,不容易接受。
3、效率依从性
(5)软件维护性:"四规", 在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力
1、易分析性:分析定位问题的难易程度(是否容易对问题进行分析和定位)
2、易改变性:软件产品使指定的修改可以被实现的能力(是不是容易被修改,添加一些可实现的功能)
3、稳定性:防止意外修改导致程序失效(能不能够防止一些误操作导致程序失效)。
4、易 测试性:使已修改软件能被确认的能力(已经修改的软件功能,好不好检测及确认正确与否)
5、维护性的依从性
(6)软件可移植性:从一种环境迁移到另一种环境的能力
1、适应性:适应不同平台(能不能适应不同的操作系统OS,linux、mac、windows等)
2、易安装性:被安装的能力(软件是不是容易被安装)
3、共存性(与其他的软件能否共存,如果安装了这个软件,其他的软件就使用不了,势必会被淘汰)
4、易替换性(软件是不是容易被其他的产品替代,不易替换更好)
5、可移植性的依从性
软件质量实例:
- 榨汁机
•功能:能够榨豆浆、水果汁(苹果、梨、西瓜……)
•性能:榨一公斤黄豆需要多长时间?
•耗能:榨一公斤黄豆耗电量多少?
•安全性:榨汁过程中有无人体安全防护措施?有无漏电保护?
•可靠性:榨汁机能持续稳定运转多长时间?
•易用性:榨汁机的操作是否简单方便?
….
- 酒店:
•建筑:客房、西餐厅、宴会厅、酒吧、健身房……
•设施:配套设施的品牌、档次
•环境:交通、风景……
•服务:服务品种、服务态度、响应客户要求的及时性……
……
3、软件测试与QA的区别
a.从性质上来看——QA属于管理的工作。
b.从对象上来看——测试的对象是软件研产品,大多数工作是对研发领域的检验。QA的对象是整个软件过程,覆盖各个领域。
c.从手段上来看——测试以事后检查为主,QA强调的是缺陷预防。
4、质量保证活动与软件测试的关系:
二、软件测试的类型:
1、功能测试
概念:功能测试时根据产品的需求规格说明书,和测试需求列表,验证产品的功能实现是否符合产品的需求规格
目标:功能测试主要是为了发现以下几类错误---(1)是否有不正确或者遗漏了的功能?(2)功能实现是否满足用户的需求和系统设计的隐藏需求?(3)输入能否正确接受?能否正确输出结果
2、性能测试
(1)性能测试(Performance Testing)就是用来测试软件在集成系统中的运行性能的。
(2)目标:度量系统相对于预定义目标的差距(实际结果目标与预期是否一致及差距有多少)。
(3)性能测试必须要有工具的支持,市面上有一些专门用于GUI或者Web的性能测试工具,如:Loadrunner Jmeter SilkPerformer WebLoad。
(4)性能测试收集的情况有哪些?
a.CPU的使用情况(占用百分之多少)
b.IO的使用情况(IO读写的使用情况)
c.信道占用
d.每个模块执行时间百分比
e.一个模块等待IO完工的时间百分比
f.指令随着时间的跟踪路径
g.每一组指令页换入和换出的次数
h.系统的反应时间(对输入结果多久能够响应)。
I.系统吞吐量—每个时间单元的处理数量是多少
J.所有主要指令的单元执行时间。
3、负载测试
概念:是超过被测对象标准性能负荷指标下,验证系统的负载承受能力。并要求超负荷情况下、依然正常实现业务能力。
负载测试通过不断对被测对象施加负荷,观察被测对象在不同负载下的性能表现(强调运行速度如何)。
4、压力测试(Stress Testing)--关注运行的速度有多快
目的:调查系统在其资源超负荷的情况下的表现。尤其感兴趣的是这些对系统处理时间有什么影响。这类测试在一中需要反常数量、频率或者资源的方式下执行系统。
目标:通过极限测试方法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性,找到系统薄弱环节。
- 成千上万的用户在同一时间登录到Internet;
- 同时引入大量的操作。
5、容量测试(Volume Testing)--面向数据的一个测试,关注能够承受多少数据。
目的:使系统承受超额的数据容量来发现它是否能够正确处理。
容量测试时面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
容量测试实例:
- 使用编译器编译一个极其庞大的源程序;
- 一个操作系统的任务队列被充满。
- 庞大的Email信息和文件充满Internet。
6、安全性测试(security Testing)
安全测试用来验证集成在系统内的保护机制是否能够在实际中保护系统不受非法的侵入,用来保证系统本身数据的完整性和保密性。如当系统受到恶意攻击(黑客)时,设备的自我保护能力,病毒防护 能力,自定义通信协议安全性(别人使用相同的通信协议,是不是会连接到你的系统,攻击你的系统)等。广义的还包括物理安全性测试、业务安全性测试。
一些功能性的安全性问题:
(1)没有口令是否可以登录到系统?
(2)各级用户权限划分是否合理?
(3)错误和文件访问是否适当地被记录—日志管理?
(4)系统配置数据是否能正确保存,系统故障时是否能恢复?
安全性测试内容(从哪些方面来考虑安全性测试):
(1) 系统的登录
(2) 用户管理(分级管理权限,该你看的给你看,不该你看的,你就看不到,普通用户和VIP的操作模块不同,数据保密)
(3) 防火墙(防自己、防别人—黑客)
(4) 系统数据的承载及稳定性
(5) WEB安全性,如WEB加密,解密,数字签名等(用户数据保密性,密码显示一般不会明文显示,用“*”显示,保存时也是经过一些算法对其加密后存储在文档内,防止别人找到你的文件就找到你的密码)。
(6) 数据库的安全性。
(7) 内部通信协议(测内部通信协议是否正确实现)
(8) 系统防病毒测试
7、GUI(Graphical User Interface)测试—针对软件系统GUI界面进行的测试,主要包含两个方面内容:
(1)界面实现和界面设计的吻合情况。
(2)确认界面处理是否正确。
常用的GUI自动化工具:QTP、SilkTest、QARun、QuickTestProfessional、selenium等。
GUI测试对象:
a. 简单界面元素—界面区域(功能和属性相对比较单一的),通常指各种控件(按钮等)。重点检查
b. 组合类界面元素—主要是指一些复杂的界面元素(工具栏、组合框、表格、菜单栏)等。
c. 完整界面(窗口)--由一系列界面元素通过适当的形式组合而成的界面形式,最为常见的就是各种窗口(各种对话框、单文档窗口、多文档父窗口、多文档子窗口等)。
8、可用性测试(Usability Testing)--为了检测用户在理解和使用系统方面到底有多好,主要考虑产品是否符合实际应用的情况,是否符合用户的使用习惯和特殊要求,软件的操作方式是否方便合理,设备和用户之间的交互信息是否准确易于理解,有没有遵从行业习惯,外观界面是否美观等。应该要涉及到所有和用户有交互的功能和子系统。包括系统功能、系统发布、帮助文档和过程,用来保证用户能够舒适地和系统进行交互。
一些测试人员应当关注的可用性问题:
a. 过分复杂的功能或者指令;
b.困难的安装过程;
c.错误信息不准确或者过于简单;
d.用户被迫去记住太多的信息;
e.语法、格式和定义不一致
9、安装卸载测试:
定义:系统的可安装性测试,主要是根据软件的测试特性列表、软件安装、配置文档,设计安装过程的测试用例,发现软件在安装过程中的错误
目的:系统可安装性测试的目的不仅是找安装软件本身的错误,而且还要找安装文档的错误。在安装软件系统时,会有多种选择,要分配和装入文件与程序,布置适当的配置,进行程序的联结。而安装测试就要找出这些安装过程中出现的错误
10、异常测试
概念:系统异常测试又叫系统容错和可恢复性测试,它是通过人工干预手段使系统产生软、硬件异常,通过验证系统异常前后的功能和运行状态,达到检验系统的容错、排错和恢复的能力。它是系统可靠性评价的重要手段
容错处理:
• 系统自动处理
• 人工干预处理
注意:
• 系统异常测试还与系统的指标测试有关系,当系统需要提供的服务能力大于系统的设计指标时,也属于系统异常的情况,因此应该结合起来加以考虑
• 系统的可靠性是设计出来的,而不是测试出来的。测试出来的数据有助于为我们进行进一步的系统优化设计积累经验,设计和测试是一个互为反馈的过程。
11、文档测试(Documentation Testing)
目标----验证用户文档是正确的,并且保证操作手册的过程能够正确工作。
12、网络测试(接口测试)
概念:网络测试是在网络环境下和其他设备对接,进行系统功能、性能与指标方面的测试,保证设备对接正常
内容:网络测试考察系统的处理能力、系统兼容性、系统稳定可靠性及用户使用等方面。
如通信产品,主要进行协议测试:
• 一致性测试:检测所实现的系统与协议规范符合程度
• 性能测试:检测协议实体或系统的性能指标(数据传输率、联接时间,执行速度、吞吐量、并发数等)
• 互操作性测试:检测同一协议不同实现厂商之间,同一协议不同实现版本之间、或同一类协议不同实现版本之间互通能力和互连操作能力
• 坚固性测试:检测协议实体或系统在各种恶劣环境下运行的能力(信道被切断、通信设备掉电、注入干扰报文等)
13、稳定性测试
系统稳定性测试目的是评价系统在一定负荷情况下、长时间的运行情况。包括系统在一定负荷下,再增加新的业务,原有的业务是否受影响,新的业务能不能正常工作,系统资源有没有泄漏,数据有没有不一致的情况,系统性能是否会降下来,关键点是长时间的运行后,系统的状况如何,系统平均无故障时间MTBF是否满足系统设计要求
14、兼容性测试
兼容性测试验证被测对象与硬件、其他软件之间的兼容情况。不同的浏览器,不同的设备、不同的操作系统之间的兼容
三、软件的测试方法
1、主要软件测试方法:
a. 黑盒测试、白盒测试、灰盒测试
b. 静态测试、动态测试。
c. 人工测试、自动化测试
2、 软件测试的两种极端情况:
第一种:知道产品的需求规格,但是不知道其内部逻辑实现,可以进行测试证明每个需求是否实现—黑盒测试—关心业务需求
第二种:知道产品的内部逻辑实现功能,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成分是否通过检查—白盒测试,--早期介入进行,庞大的测试系统在现实中不太现实。
现实中大多用黑盒测试。
灰盒测试是白盒测试和黑盒测试两种相结合测试。
白盒测试:依据被测软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况。
白盒测试是基于程序结构的逻辑驱动测试。
白盒测试又可以被称为玻璃盒测试、透明盒测试、开放盒测试、结构化测试、
逻辑驱动测试
白盒测试常用技术:
• 静态分析:控制流分析、数据流分析、信息流分析等
• 动态分析:逻辑覆盖测试(分支测试、路径测试等)、程序插装等
白盒测试中常见的覆盖有六种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖(测试力度逐渐增强,最常用的是组合覆盖法,路径覆盖法对大型的测试用例来讲,太复杂,时间过长)
黑盒测试:发现问题,解决成本比较高。
• 功能性测试,一种是顺序测试每个程序特性或功能,另一种途径是一个模块一个模块的测试,即每个功能在其最先调用的地方被测试;
• 容量测试,检测软件在处理海量数据时的局限性,能发现系统效率方面的问题;
• 负载测试,检测系统在一个很短时间内处理一个巨大的数据量或执行许多功能调用上的能力;
• 恢复性测试,主要保证系统在崩溃后能够恢复外部数据的能力;
黑盒测试特点:
• 对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高;
• 测试人员不需要了解实现的细节,包括特定的编程语言;
• 从用户的视角进行测试,很容易被大家理解和接受;
• 有助于暴露任何规格不一致或有歧义的问题;
静态测试:(是否运行被测软件,分为静态测试和动态试)
不运行被测试的软件系统,而是采用其他手段和技术对被测试软件进行检测的一种测试技术。例如:代码走读、文档评审、程序分析等都是静态测试的范畴。常用技术有静态分析技术。
动态测试:
按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。常用技术有动态分析技术。
人工测试:
测试活动(如评审、测试设计、测试执行等)由人来完成,狭义上是指测试执行由人工完成,这是最基本的测试形式
自动化测试:
一般是指通过计算机模拟人的测试行为,替代人的测试活动,狭义上是指测试执行由计算机来完成(主要是回归测试中使用,就是一些重复性的功能的测试,新功能不建议使用自动化测试,手工测试发现bug能力强。)
四、测试阶段及各阶段的输出:
1、测试阶段主要有:
A.测试计划阶段 – 测试计划
B.测试设计阶段 – 测试方案(设计方法的细节文档)
C.测试实现阶段 – 测试用例、测试规程
D.测试执行阶段 – 测试报告
2、测试各阶段的工作内容及输出文档:
(1) 测试计划:指明测试范围、方法、资源,以及相应测试活动的时间进度安排表的文档。--(测试的范围是多大,使用什么测试方法,资源的分配,项目测试时间进度的安排等)
(2) 测试方案:指明为完成软件或软件集成特性的测试而进行的设计测试方法的细节文档。
(3) 测试用例:指明为完成一个测试项的测试输入、预期结果、测试执行条件等因素的文档。
(4) 测试规程:指明执行测试时测试活动序列的文档。
(5) 测试报告:指明执行测试结果的文档。
(6) 测试日报:每天测试执行情况的记录和总结。
3、测试工程师系统测试各阶段任务:
软件需求阶段:评审软件需求规格说明书
软件设计阶段:评审软件概要设计说明书、软件详细设计说明书、协助编写系统测试计划
软件编码阶段:设计系统测试用例、准备测试资源(测试工具、测试环境等)、开发测试脚本、开发测试工具、准备测试数据
软件测试阶段:执行测试用例、提交缺陷单、跟踪缺陷、回归测试、提交测试报告
QA和测试的区别:
1. 从性质上看:
测试----属于技术的工作
QA----属于管理的工作
2. 从对象上看:
测试的对象----软件研发产品,大多数工作是对研发领域的检验
QA的对象----整个软件过程,覆盖各个领域
3.从手段上看:
测试----事后检查为主
QA----强调的是缺陷预防(提前预防)