zoukankan      html  css  js  c++  java
  • 软件测试基础(1)

    目录

    l 软件测试基础

    l 掌握软件测试相关的概念

    l 掌握软件生命周期以及各阶段相关的工作

    l 掌握测试的对象和原则

    l 了解软件开发模型

    l 掌握软件测试模型及各模型的特点

    l 掌握软件测试的方法和类型

    l  了解软件测试质量及测试与QA的关系、区别

     测试相关概念

     IT( information technology )信息科技和产业的意思

    1. 软件:一系列按照特定顺序组织的计算机数据和指令的集合程序+数据+文件
    2. 产品:能够供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物品、无形的服务、组织、观念或它们的组合。
    3. 项目:指一系列独特的、复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间、预算、资源限定内,依据规范完成。

    C/S架构:客户端/服务器架构需要安装客户端才可进行管理操作。

    B/S架构:客户端基本上没有专门的应用程序,应用程序基本上都在服务器端。由于客户端没有程序,应用程序的升级和维护都可以在服务器端完成,升级维护方便。

    软件测试

    1983,IEEE(Institute of Electrical and Electonice Engineers)提出的软件工程标准术语,软件测试的定义如下:使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。

    软件测试的发展史

    1957 等同于调试 ;

    20实际70年代         被确定为一种研究方向

    20世纪80年代早期     质量

    20世纪90年代         工具盛行

    近20年                测试模型

    为什么做软件测试

    1. 一个糟糕的测试程序可能导致任务的失败,影响操作的性能和可靠性,导致维护阶段的成本提高
    2. 一个好的测试程序可以降低项目的主要成本。
    3. 一个好的测试程序可以极大的帮助你定义需求和设计。
    4. 一个好的测试可以迫使你在工作时必须面对和处理问题,使得修改缺陷成本降低。
    5. 一个好的测试不能弥补一个糟糕的软件项目,但是的确有主于发现许多问题并且至少使得你尽早知道你处在问题当中

    测试的作用

    1、         尽早介入发现缺陷,减少返工、降低开发维护成本

    2、         持续改进过程、帮助定义需求和设计

    3、         提高客户满意度、扩大市场份额

    4、         对产品质量完成全面评估、为产品发布、部署、鉴定和决策者提供信息

    5、         预防缺陷,通过缺陷分析和原因总结,规避后续同类缺陷的产生再犯

    软件测试的重要性

    测试就是对项目开发过程的产品(编码、文档等)进行差错审查,保证其质量的一种过程。

    软件测试任职要求

    1、硬实力:学历、专业、经验、测试技术、开发技能、业务知识

    2、软实力:责任心、沟通能力、团队合作精神、耐心、细心、信心、风险防范意识、持续学习能力

    软件生命周期

    1、需求调研阶段

    2、需求分析阶段

    3、产品设计阶段

    4、代码编写阶段

    5、软件测试阶段

    6、发布上线阶段

    7、运行维护阶段

    8、产品下线阶段

    项目组成员

    1、产品经理:收集需求、建立产品

    2、项目经理:管理分工、协调成员、建立项目、关联产品、开发计划

    3、开发团队:任务分解、设计工作、编写代码、估算任务周期

    4、测试团队:分解用例、测试执行

    5、配置人员:版本发布、环境部署

    测试基本原则

    1、测试是上下文相关的

    2、穷尽测试是不可能的  

    3、测试尽早介入

    4、杀虫剂悖论

    5、缺陷群集性

    6、测试证明存在缺陷

    7、无错谬误

    软件测试的对象

    程序 + 数据 + 文档

    研发模型——瀑布型

     

    每一环节都是在上个环节完成才会继续下个环节,对每个环节文档质量会比较高,但是在后阶段发现需求问题对于维护成本会很高。

    研发模型——原型

     

    瀑布型的优化,重点关注在需求分析阶段输出的原型设计,但是对每个环节文档详尽描述质量要求没那么高。

    研发模型——敏捷模型

    敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

     

    敏捷模型中,测试人员不再是一个独立的部门。分为开发、测试和生产环境。

    软件测试模型

    测试模型—— V模型

     

    优点:既包括底层测试又包括了高级测试,底层测试是为了源代码的正确性,高层测试是为了使整个系统满足用户的需求。

    局限性:把测试过程作为在需求分析、概要设计、详细设计及编码之后的一个阶段,不能体现“尽早的和不断地进行软件测试”的原则。

    测试模型—— W模型

     

    优点:1、如果测试文档能尽早提交,那么就有了更多的检查和检阅的时间,这些文档还可用于评估开发文档。

    2、测试者可以在项目中尽早可能早的面对规格说明书中的挑战

    3、测试还可以尽可能早的找出缺陷所在,从而帮助改进项目内部的质量。

    局限性:无法支持迭代、自发性以及变更调整。

    PS:W模型是现实工作中使用最多的测试模型。

    软件测试阶段

    需求测试

    返工:70% ~ 85%由于需求有问题

    重点:检查需求规格说明书 SRS

    1)完整性;2)正确性;3)一致性;4)可行性;5)无二义性;

    6)健壮性;7)必要性;8)可测试性;9)可修改性

    单元测试

    单元:函数、类

    单元测试是针对软件基本组成单元(软件设计的最小单元)来进行正确性检验的测试工作

    单元测试的目地是检测软件模块对《详细设计说明书》LLD的符合程度

    集成测试

    集成测试是对单元之间及单元与第三方接口之间的测试,目的是验证接口是否与设计相符,是否与需求相符。(即及检测软件模块对《概要设计说明书》的符合程度)。

    集成策略:自底向上或自顶向下(模拟开发驱动模块调用集成格) 渐增式(每次测试逐渐测加一个未测试的模块进行测试)。

    系统测试

    系统测试是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试工作

    系统测试的目的在于通过与《需求规格说明书》做比较,发现软件与系统需求定义不符合或与之矛盾的地方

    确认测试

    又称为有效性测试,它的任务是验证软件的有效性,即验证软件的功能和性能及其它特性是否与用户的要求一致。

    若能达到这一要求,则表明开发的软件是合格的。

    验收测试

    交付用户部署前,进行验收测试

    以用户为主,验收组:项目组成员、用户代表或者系统的其它利益相关者。

    根据合同《需求规格说明书》或《验收测试计划》对成品进行验收测试

    Alpha测试和Beta测试

    Alpha:内部,模拟/真实

    Beat:外部,真实

    UAT测试

    User Acceptance Test 用户接受度测试验证系统的可用性

    回归测试(Regression Testing

    软件在测试或其他活动中发现的缺陷经过修改后进行的测试。目的是验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能。

    回归测试可以发生在任何一个阶段,包括单元测试、集成测试和系统测试。

    回归测试策略

    完全重复测试:

    重新执行所在前期测试阶段建立的测试用例,来确认问题修改的正确性和修改的扩散局部影响性

    选择性重复测试:

    即有选择的重新执行部分在前期测试阶段建立的测试用例,来测试被修改的程序

    1、覆盖修改法:即针对被修改的部分,选取或重新构造测试用例验证没有错误再次发生的用例选择方法。

    2、周边影响法:该方法不但要包含覆盖修改法确定的用例,还需要分析修改的扩散影响,对那些受到修改间接影响的部分选择测试用例验证它没有收到不良影响。该方法比覆盖修改法更充分一点。

    3、指标达成法:这是一种类似于单元测试的方法,在重新执行测试前,先确定一个要达成的指标,如修改部分代码100%的覆盖与修改有关的接口60%的覆盖等,基于这种要求选择一个最小的测试用例集合。

    回归测试流程

    以下流程适用于单元测试、集成测试和系统测试

    1、在测试策略制定阶段,制定回归测试侧策略

    2、确定需要回归测试的版本

    3、回归测试版本发布,按照回归测试策略执行回归测试

    4、回归测试通过,关闭缺陷跟踪单

    5、回归测试不通过,缺陷跟踪单返回开发人员,开发人员重新修改问题,再次提交测试人员回归测试。

    回归测试自动化

    1、回归测试是一种重用以前成果的测试,很难预料到要经过多少次回归系统才能达到满意的水平,结果,这种回归测试将可能演变成一种重复的、令人心烦意乱的工作,效果与人员的积极性将大打折扣,因此,在回归测试道路上的自动化便是我们工作的追求

    2、回归测试的自动化法包括测试程序的自动运行、自动配置,测试用例的管理和自动化输入,测试的自动执行,测试信息与结果的自动采集,测试结果的自动比较和结论的自动输出,尤其前面提到的各种数据的共享决策

    3、对系统测试功能比较简单、测试界面相对稳定并且测试用列良好组织的测试来说,采用“捕捉回放”工具比较合适的,这类工具有Selenium等。

    冒烟测试

    测试耗时短,仅用一袋烟功夫足够了。

    冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。

    软件测试质量

    质量:软件质量是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,提高软件的整体质量。

    质量属性:功能性和非功能性两大方面

    软件质量模型

    主要是:功能性和非功能性(可靠性、易用性、效率、维护性、可移植性)。

    软件测试类型

    功能测试

    1、概念:根据产品的需求规格说明书和测试需求列表,验证产品的功能实现是否符合产品的需求规格

    2、目标:功能测试主要是为了发现以下几类错误

    1)、是否有不正确或遗漏了的功能?

    2)、功能实现是否满足用户需求和系统设计的隐藏需求?

    3)、输入能否正确接受?能够正确输出结果?

    性能测试

    1、测试软件在集成系统中的运行性能的

    2、度量系统相对于预定义目标的差距

    3、必须要有工具支持,失眠上有一些专门用于GUI或Web的性能测试工具,如Loadrunner、Jmeter、SilkPerformer、Webload。

    性能测试收集的信息

    CPU使用情况

    IO使用情况

    内存使用情况

    信道使用情况

    每个模块执行时间百分比

    一个模块等待IO完工的百分比

    指令随时间的跟踪路径

    每一组指令页换入和换出的次数

    系统反应时间

    系统吞吐量,即每个时间单元的处理数量

    所有主要失灵的单元执行时间

    负载测试

    负载测试是在超过被测试对象标准性能负荷指标下,验证喜用的负载承受能力。并要求超负荷情况下,依然正常实现业务功能

    负载测试是通过不断对被测对象施加负荷,观察被测对象在不同负载下的性能表现。

    压力测试

    概念:调查系统在其资源超负荷的情况下的表现。尤其感兴趣的是这些对系统的处理时间有什么影响。这类测试在一种需要反常数量、频率或资源的方式下执行系统。

    目标:通过极限测试法,发现系统在极限或恶劣环境中自我保护能力。主要验证系统的可靠性,找到系统薄弱环节。

    容量测试

    概念:使系统承受超额的数据容量来发现它是否能够正确处理。是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。

    PS:负载、容量和压力都是功能性测试的一部分。

    安全性测试

    概念:用来验证集成在系统内的保护机制是否能够在实际中保护系统不受到非法的侵入。用来保证系统本身数据的完整性和保密性。如当受到恶意攻击时,设备的自我保护能力,病毒防护能力,自定义通信协议安全性等。

    内容:

    系统的登录

    用户管理

    防火墙

    系统数据

    WEB安全性

    数据库的安全性

    内部通信协议

    系统防病毒测试

    GUI测试

    针对软件系统GUI界面进行的测试

    主要包括两方面的内容;界面实现与界面设计的吻合情况;确认界面处理的正确性。

    一般业界常用的GUI自动化工具有QTP、SilkTest、QARun、Seleniun

    GUI测试对象

    1、简单界面元素:指功能和属性相对比较单一的界面区域,即通常所指的各种控件

    2、组合类界面元素:主要指一些复杂的界面元素,让比如工具栏,组合框,表格,菜单栏等

    3、完整界面(窗口):由一系列界面元素通过适当的形式组合而成的界面形成,最为常见的为各种窗口。包括各种对话框、单文档窗口、多文档父窗口、多文档子窗口等

    可用性能测试

    是为了检测用户在理解和使用系统方面到底有多好。主要考虑产品是否符合实际应用情况,是否符合用户习惯或特殊要求,操作方面是否方便合理、设备和用户间的交互信息是否准确易于理解、是否遵从行业习惯、外观/界面是否美观。

    一些测试人员应当关注的可用性问题:

    1、过分复杂的功能或者指令

    2、困难的安装过程

    3、错误信息不准确或国语简单

    4、用户被迫去记住太多的信息

    5、语法、格式和定义不一致

    安装卸载测试

    概念:系统的可安装性测试,主要格局软件的测试特性列表、软件安装、配置文档,设计安装过程的测试用列,发现软件在安装过程中的错误

    目的:系统可安装性测试的目的不仅是找安装软件本身的错误,而且还要找安装文档的错误。在安装软件系统时,会有多种选择,要分配和装入文件与程序,布置适当的配置,进行程序的连接。

    异常测试

    概念:系统异常测试又叫下同容错和可恢复性测试,他是通过人工干预手段使系统产生软、硬件异常,通过验证系统异常前后的功能和运行状态,达到检验系统的容错、排错和恢复的能力。它是系统可靠性评价的重要手段。

    容错处理:系统自动处理;人工干预处理

    注意:1)系统异常测试还与系统的指标测试有关系,当系统需要提供的服务能力大于系统的设计只表示,也属于系统异常的情况,因此应该结合起开加以考虑

              1)系统的可靠性是设计出来的,而不是测试出来的。测试出来的数据有助于为我们进行进一步的系统优化设计积累经验,设计和测试是一个互为反馈的过程

    文档测试

    验证用户文档是正确并且保证操作手册的过程能够正确工作。

    网络测试(接口测试)

    概念:网络测试在网络环境下和其他设备对接,进行系统功能、性能与指标方面的测试,保证设备对接正常

    内容:考察系统的处理能力、系统兼容性、系统稳定可靠性及用户使用等方面。如通信产品,主要进行协议测试:

    1)一致性测试:检测所实现的系统与协议规范符合程度

    2)性能测试:检测协议实体或系统的性能指标(数据传输率、联结时间、执行速度、吞吐量、并发数等)

    3)互操作性测试:检测同一协议不同实现厂商之间,同一协议不同实现版本之间、或同一类协议不同实现版本之间互通能力和互联操作能力

    4)坚固性测试:检测协议实体或系统在各种恶劣环境下运行的能力(信道被切断、通信设备掉电、注入干扰报文等)

    稳定性测试

    系统稳定性测试目的是评价系统在一定负荷情况下、长时间的运行情况。包括系统在一定负荷下,在增加新的业务,原有的业务是否受影响,新的业务是否能正常工作,系统资源有无泄漏,数据有无不一致的情况,系统性能是否会降下来,关键点是长时间的运行后,系统的状况如何,系统平均无故障时间MTBF是否满足系统设计要求。

    兼容性测试

    兼容性测试验证被测对象与硬件、其他软件之间的兼容情况。

  • 相关阅读:
    Python正则表达式(3)--字符串匹配开头结尾
    Python正则表达式(2)---字符串匹配多个字符
    Python正则表达式(1) --匹配单个字符
    Navicate Premium 永久破解
    升级pip指令
    爬虫(自学)之User Agent 第三方库my_fake_useragent 和 fake_useragent
    django drf 反序列化上传图片
    git的使用
    python 爬虫 基本库使用urllib之urlopen(一)
    吉他入门第三讲~~~~~和弦
  • 原文地址:https://www.cnblogs.com/zhouhaihao/p/8545285.html
Copyright © 2011-2022 走看看