软件测试(一):概念篇

一、作用 1、含义:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。 2、五大要素:质量、人员、

一、作用

1、含义:使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。

2、五大要素:质量、人员、资源、流程、技术;两个目标:测试覆盖率、测试效率。

二、遵循的准则

测试显示缺陷的存在,但不能证明系统不存在缺陷;

2、穷尽测试是不可能的,应设定及时终止的条件;

3、测试应该尽在进行;

4、缺陷具备群集特性;

5、测试的杀虫剂孛论;

6、测试的2/8原则;

7、测试活动依赖于测试背景。

三、分类

A.按测试阶段来分类

1、单元测试

含义:对软件中的最小可测试单元进行检查和验证。

单元测试的原则:a、尽可能保证各个测试用例是相互独立的;b.一般由代码的开发人员来实施,用以检验所开发的代码功能符合自己的设计要求。

优势:a.能尽早发现缺陷;b.有利于重构;c.简化集成;d.文档;e.用于设计

限制:1.不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误;2.每一行代码,一般需要3-5行测试代码才能完成单元测试,所以存在投入和产出的一个平衡。

2、集成测试

含义:是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。

方案;1.Big Bang;2.自顶向下;3.自底向上;4.核心系统集成;5.高频集成。

***集成测试和单元测试的区别

  1. 测试的对象不同

    单元测试对象:软件的基本单元,最小的单元

    集成测试对象:模块与模块之间接口的关系

  2. 测试的依据不同

    单元测试依据:针对软件的详细设计

    集成测试依据:针对软件的概要设计

  3. 测试的方法不同

    单元测试方法:单元的类

    集成测试方法:模块与模块接口的集成

3、系统测试

含义:是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。(功能测试,性能测试,稳定性测试)

系统测试关注点:1.关注系统本身的使用;2.关注系统与其他相关系统间的连通;3.关注系统在不同使用压力下的表现;4.关注系统在真实使用环境下的表现。

***系统测试与集成测试的区别

  1. 测试对象不同

    集成测试对象:由通过了单元测试的各个模块所集成起来的构件

    系统测试:除了软件之外,还包括计算机硬件及相关的外围设备、数据采集和传输机构、支持软件、系统操作人员等整个系统。

  2. 测试时间不同

    集成测试介于单元测试和系统测试之间测试

    系统测试在集成测试之后

  3. 测试内容

    集成测试:各个单元模块之间的接口

    系统测试:整个系统功能和性能

  4. 测试角度

    集成测试:偏于技术角度的验证

    系统测试:偏于业务角度的验证

4、验收测试

含义:也称交付测试,针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准、由用户、客户或其他授权机构决定是否接受系统。

细分:1.用户验收测试;2.运行验收测试;3.合同和规范验收测试。

alpha测试:是由开发者提供操作环境,用户进行执行的

Beta测试:脱离开发者,用户操作环境,用户执行。

B.按测试手段来分类(一黑一白,两动两静)

根据测试对象的可见度:黑盒测试、 白盒测试;根据状态:静态测试、动态测试;执行方式:手工测试、自动化测试。

1、黑盒测试

含义:着眼于程序的外部结构,不考虑内部的逻辑(一般来说针对界面和可见的功能测试),在适当的输入下能否有正确的输出。

优点:容易实施,不需要关注内部实现;更贴近用户的使用角度。

缺点:测试覆盖率较低,一般只能覆盖到代码量的不到40%;针对黑色的自动化测试,复用效率较低,维护成本较高。

关注点:a.功能是否正确或者有遗漏;;b.接口上,输入是否能正确接收,输出结果是否正确;c.是否有数据结构错误或外部信息访问错误;d.性能上是否满足。

设计方法:

1.等价类划分法:针对程序的输入条件进行分类,输入典型的数据。

2.边界值分析法:特殊的边界数据,测试代码的边界状态。

3.错误推测法:基于经验,直觉,判断错误的地方;特殊字符,文件不存在。

4.因果图法:根据输入输出看做原因和结果,形成因果图。(因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。)

5.正交试验分析法:选出代表性的数据,作为输入数据。

6.状态迁移图法:软件审批的过程,各种状态迁移。

7.流程分析法:处理程序逻辑执行的路径。

2、白盒测试

含义:又称结构化测试,对测试人员来说是透明的,针对程序的逻辑结构来设计测试用例,用逻辑的覆盖率来衡量测试的完整性。

主要的逻辑单位:语句覆盖:保证每条语句执行一次 ;分支(判定):保证每条分支至少执行一次;条件:条件表达式,至少计算一次;条件组合:所以不同条件下的组合情况;路径:程序中,每个可能的路径至少执行一次。

优点 1.迫使测试人员去仔细思考软件的实现,理解原理 2.可以检测代码中的每条分支和路径 3.揭示隐藏在代码中的错误 4.对代码的测试比较彻底

缺点 1.昂贵。 2.无法检测代码中遗漏的路径和数据敏感性错误 3.不能直接验证需求的正确性

3、静态测试

含义:是指无需执行被测程序,而是通过评审软件文档或代码,度量程序静态静态复杂度,检查软件是否符合标准,借以发现编写的程序不足之处,减少错误出现的概率。

4、动态测试

含义:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等。

5、手工测试

含义:由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。更适用针对深度的测试和强调主观判断的测试。 众包测试,探索式测试。

6、自动化测试

 含义:使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。 单元测试、接口测试、性能测试等。

C.按测试模式来分类

瀑布模型、敏捷测试、基于脚本的测试、基于风险的测试、探索式测试等。

1、瀑布模型:项目计划->需求分析->软件设计->程序开发->软件测试->集成维护

2、V模型(最广泛) 需求分析->概要设计->详细设计->软件编码->单元测试->集成测试->系统测试->验收测试

3、W模型(双V模型) 开发与测试并行,可以尽早发现问题

4、X模型 解决交接和频繁集成周期的问题

5、H模型:把软件测试看成一个独立的流程,与其他流程并发进行,比如设计流程,并发流程,甚至是测试流程。

敏捷测试

含义:遵循敏捷宣言的一种测试实践。敏捷宣言(价值观): 个体与交互重于过程和工具;可用的软件重于完备的文档;客户协作重于合同谈判;响应变化重于遵循计划;在每对比较中,后者并非全无价值,但我们更看重前者

特点:强调从客户角度进行测试;重点关注迭代测试新测试,不在强调测试阶段;尽早测试,不间断测试,具备条件即测试;强调持续反馈;预防缺陷重于发现缺陷。

探索式测试ET

含义:完全抛开测试脚本的测试;它是一种测试风格,思维不单单是一种测试技术

ST:系统性强;容易管理,控制;设计在先,执行在后;主要是验证自己的思路;可预见性

ET:自由灵活;与ST是互补的,执行和设计并行;不断和系统交互,带着问题测试;学习的过程(重在测试人员)

优点:更能激发测试人员的创造性和工作乐趣;增加了发现新的或较深入的bug的可能性;在较短时间内找到更多的bug以及对SUT(被测程序)作一个快速的评估;有利于更加有效的实施自动化;更加适用于敏捷项目;减少了在简单,繁复上用例的无谓编写时间

缺点:测试管理上有局限性,较难协调和控制;对于bug的重复利用和重现上作用有限;对测试人员的测试技能和业务知识深度要求高;只有在SUT一完全可用的前提下才更有作用;ET的生产率很难定义;ET本身较难进行自动化

局部探索式测试:输入;状态;代码路径;用户数据;执行环境

全局探索式测试:漫游测试法

基于风险测试——(RBT risk-based testing)

定义:一种基于对软件失效的风险评估并以此指导测试计划、设计、执行、结果评价的软件测试类型

风险: 质量风险(软件功能,易用性,性能,软件代码缺失); 管理风险(人员能力不足,环境风险,被测系统的需求不清晰,被测系统关联的第三方系统不能联调);风险级别=风险可能性*风险严重度

识别风险: 可能性: 复杂性;时间压力;高变更率;技能水平;地理分散度

严重程度: 使用频率;失效可视性;商业损失;组织负面影响和损害;社会损失和法律责任

D按软件测试类型分类

按测试类型: 功能测试、性能测试、兼容性测试、部署测试、易用性测试、文档测试、本地化测试、安全测试、无障碍测试、可靠性测试

功能测试

含义:根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。

针对的问题: 功能错误或遗漏、界面问题、性能错误、数据及访问错误、初始化及终止错误。

功能测试工具: 商用: QTP(web)、winrunner(桌面)、silkTest、Rational robot 开源: selenium、Watir、Sikuli(基于屏幕截图)

性能测试

含义:负载测试:在测试过程中,逐步加入负载,最后确认最大负载; 压力测试:在极限情况的压力情况; 稳定性测试:稍大于正常业务量的情况下持续长时间的测试。

性能指标: 并发用户数VU、每秒事务数TPS、系统响应时间、设备性能。

性能测试工具: LoadRunner、Silkperformer、Jmeter、WebLoad、Apache Bench、LoadUI。

静态性能评估: 开发Web应用时,基于一系列Web应用页面性能优化的最佳实践对Web应用的页面进行静态分析,并给出评估结果的性能分析方法。评估的标准/工具(YSlow,PageSpeed)

应用性能管理(APM): 提供对系统的实时监控以实现性能管理、故障管理的解决方案

按测试类型分类: 功能测试:主要的类型,根据产品特性、操作描述和用户方案,测试一个产品特性和可操作 行为以确定他们满足设计需求。

针对的问题:功能错误或遗漏、界面问题、性能错误、数据及访问错误、初始化及终止错误

功能测试工具:QTP,silkiest,Rational、

安全测试

含义:对软件产品进行测试以保证其符合产品安全需求和质量标准。

渗透测试:通过模拟对软件系统的恶意攻击行为来评估系统安全性的一种测试。

渗透测试VS安全测试 (对系统进行一个点到面的测试)

  渗透测试:选择一些薄弱的点攻破系统以证明系统有问题

  安全测试:对整个系统的防御就行一个检验,从整个防御面来考虑系统的安全性

 

OWASP:Open Web Application Security Project  开放网络应用安全项目

OWASP Top Ten Project 2013:

1.Injection 注入脚本漏洞使用户访问到不该访问的数据的目的

2.Broken Authentication and Session Management 失效的身份认证和会话管理  会话劫持漏洞

3.Cross—Site Scripting(XSS)跨站脚本

4.Insecure Direct Object References 不安全的对象直接引用  参数的保护

5.Security Misconfiguration   安全配置类错误

6.Sensitive Data Exposure    敏感信息泄露   信息传递没有对关键信息进行加密

7.Missing Function Level Access Control   功能级别访问控制缺失   比如访问网站可以访问到用户没有权限到达的地方

8.Cross-Site Function Level Access Control(CSRF)  跨站请求伪造  

9.Using Components with Known Vulnerabilities    使用了已知有漏洞的组件   

10.Unvalidated Redirects adn Forwards    未被验证的重定向和转发  (钓鱼网站)

 

安全测试工具各种针对的点:

Appscan,Webinspect,W3AF:web应用

Nessus:服务器,主机

Nmap:端口开放

MetaSploit:攻击软件,渗透测试

WebScarab:代理劫持

Fortify:针对白盒,源码中的安全问题

兼容测试

1.软件本身的兼容性:主要是软件的向后兼容,如软件升级,以前版本的功能也能使用。

2.不同平台下的兼容性:如在Linux系统下的ubuntu、openSUSE等,进行平台的兼容性测试。

3.对不同的设备的兼容性:如32位、64位、如小型机、PC等。

4.软件的互操作性:如和一些主流应用的兼容,也就是说和大众软件互通。

文档测试

含义:针对软件产品的交付品,配套的文档类部件的测试。如用户手册,使用说明、用户帮助文档等。

文档测试关注要点:完整性、正确性、一致性、易理解性、易浏览性

可靠性测试:软件的可靠性和硬件的可靠性

易用性测试:测试用户软件时是否感觉方便,是否能保证用户体验的测试类型

本地化测试:针对软件的本地化版本实施的针对性测试

本地化主要测试内容:

1.语言,书写习惯;

2.时区。日期格式、货币;

3.当地风俗、法律法规;

4.政治敏感内容。

部署测试:也称安装测试,主要验证系统部署过程,并确保软件经过安装测试后可以正常使用。

部署测试的主要测试内容:

1.在不同环境下的部署验证;

2.参照部署文档执行,过程的合理、正确性;

3.基础数据。

无障碍性测试:也称可访问性测试,指软件需要提供便于特殊人群使用的功能,包括视障、听障、老年人、身体残疾用户等,无障碍测试则是针对这部分功能的测试。

四、测试时间、测试方案

五、测试流程、找bug、报告写法

六、自动化作用、方法