软件测试基础
软件测试相关概念
IT(Information technology)即信息科技和产业的意思。称呼:it男,it女,it民工,码农,搬砖
软件:一系列按照特定顺序组织的计算机数据和指令的集合(程序+数据+文件)
产品:能够给市场,被人们使用和消费,并能满足某种需求的任何东西,
包括有形的物品,无形的服务,组织,观念或它们的组合。
项目:指一系列独特的,复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间(项目周期),预算,资源限定内,依据规范完成。
-------------
什么是软件测试? 定义:使用人工和自动(通过工具来模拟人)手段来运行或测试某个系统的过程,目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。
功能测试:功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。
性能测试:
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。
--------------
软件测试发展史:
早期特点 等同于"调试"
1957年 与调试区别开来
20世纪70年代 被确定为一种研究方向
20世纪80年代 质量
20世纪90年代 工具盛行
近20年 测试模型
--------------
为什么做软件测试?
一个糟糕的测试程序可能导致任务失败,影响操作的性能和可靠性,导致维护阶段的成本提高
一个好的测试程序可以降低项目的主要成本
一个好的测试可以迫使你在工作时必须面对和处理问题,使得修改缺陷成本降低
一个好的测试不能弥补一个糟糕的软件项目,但是的确有助于发现许多问题,并且至少使得你尽早知道你处在问题当中。
软件测试任职要求:1.硬实力:学历,专业,经验,测试技术,开发技能,业务知识
2.软实力:责任心,沟通能力,团队合作精神,耐心,细心,信心,风险防范意识,持续学习能力
对自己发现的bug,自己的工作成果要有信心,不要被开发牵着鼻子走
-------------
软件生命周期及各阶段相关工作
需求调研阶段request for proposal→需求分析阶段requirement analysis→设计阶段design→代码编写阶段coding→测试阶段testing→发布上线deploy→运行维护阶段→production support→下线
(需求调研,需求分析,设计,编写代码,测试,上线,运维,下线)
产品经理从各渠道收集需求,整理需求,建立文档
项目经理建立项目负责管理,协调整个项目组每个人员的工作,制作整体开发计划
开发团队任务分解,设计编码
测试人员测试执行,分解测试需求,完成测试用例;测试通过版本,交给配置人员
配置团队:形成发布版本
软件测试的对象和原则
编写测试用例的原则:“百分之百覆盖需求”
(1)所有的软件测试都应追溯到用户需求。
(2)尽早和不断地进行软件测试。
(3)在设计测试用例时,应该包括合理的输入与不合理的输入以及相应的预期的输出结果。
(4)充分注意测试中的群集现象。
(5)程序员应避免检查自己的程序。
(6)尽量避免测试的随意性。
(7)应当对每个测试结果做全面的检查。
(8)保留测试文档,包括测试计划、用例、出错统计和最终分析报告。
------------
软件测试的对象:程序+数据+文档
了解软件开发模型(重点掌握前三模型)
1>瀑布模型 每一个环节的工作依赖于上一步工作的完成的基础上;对每一个文档的要求质量高;一旦发现问题,维护成本很高。
2>原型模型 多一个输出物,原型设计;每一环节没有“瀑布模型”文档要求质量那么高,文档没有详尽描述,会增加后期维护成本。特点:重点关注原型图的设计。
3>敏捷模型(agile development),是一种以人为核心,迭代,循序渐进的开发方法。(目前主流的开发方法)
先发布一个原始版本,再制定版本迭代计划,不断迭代版本。例如微信的不断更新的各种版本。
每个模型的工作过程和特点,都要能描述出来…….
4>其他模型了解一下
掌握软件测试模型及各模型的特点
1)"V"模型 左边是软件开发过程,右边是测试过程。
需求分析>概要设计>详细设计>编码;;单元测试>集成测试(依赖详细设计文档;模块与模块,接口与接口,模块与接口,例如支付宝和第三方银行接口。)>系统测试(依赖概要设计文档;除了功能还包含非功能特性)>验收测试(依赖用户需求;最终使用系统的人去验收)。
2)“W”模型(实际工作中用的最多的模型)
优点: 1如果测试文档能尽早提交,那么就有了更多的检查和检阅的时间,这些文档还可用于评估开发文档
2测试者可以在项目中尽可能早的面对规格说明书中的挑战
3测试还可以尽可能早的找出缺陷所在,从而帮助改进项目内部的质量。
局限性:无法支持迭代,自发性以及变更调整。
上面两个模型要掌握,其他模型了解
---------------------
根据软件测试阶段划分:
需求测试,返工:70%~85%由于需求
重点:检查需求规格说明书 SRS
1)完整性;2)正确性;3)一致性;4)可行性
5)无二义性;6)健壮性;7)必要性;8)可测试性;9)可修改性 checklist,<检查依据,判断标准>
单元测试:
单元:函数,类
单元测试是针对软件基本组成单元(软件设计的最小单位)来进行
集成测试:
是对单元之间及单元与第三方接口之间的测试,目的是验证接口是否与设计相符,是否与需求相符。(即检测软件模块对《概要设计说明书》的符合程度)
集成策略:自底向上(上面的模块需要调用下面的模块,所以需要先测最底层模块,再逐渐向上与上一级模块进行集成测试,一步一步往上测;同时需要开发一个驱动模块使上一级可以调用下一级模块。),自顶向下(先测最顶层模块,之后一步一步调用下一步模块;需要开发“桩”来调用下一层模块) 渐增式。
自顶向下的集成是从主控模块(主程序,即根结点)开始,按照系统程序结构,沿着控制层次从上而下,逐渐将各模块组装起来。在从上向下的集成测试过程中,需对那些未经集成的模块开发桩模块。在集成过程中,可以采用宽度优先或深度优先的策略向下推进。
自底向上的集成是从最底层模块(即叶子结点)开始,按照调用图的结构,从下而上,逐层将各模块组装起来。在从下而上的集成测试环境中,需对那些未经集成测试的模块开发驱动模块。
系统测试:系统是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试工作
系统测试的目的在于通过与《需求规格说明书》做比较,发现软件与系统需求定义不符合
确认测试:又称为有效性测试,它的任务是验证软件的有效性,即验证软件的功能
验收测试:交付给用户部署前,进行验收测试;以用户为主,验收组:项目组成员,用户代表或者系统的其他利益相关者。根据合同。《需求规格说明书》或《验收测试计划》对成品进行验收测试。
Alpha测试:尽量模拟真实环境测试(内部,模拟、真实);Beta测试:外部,真实。
UAT测试:(User Acceptance Test) 用户接受度测试,验证系统的可用性
回归测试(Regression Testing):软件在测试或其他活动中发现的缺陷经过修改后进行的测试。目的是验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能。
回归测试可以发生在任何一个阶段,包括单元测试,集成测试,系统测试。(穿插在测试过程的各个阶段)
回归测试策略:1>完全重复测试,重新执行所有在前期的测试阶段建立的测试用例,来确认问题修改的正确性和修改过的扩散局部影响
2>选择性重复测试,即有选择的重新执行部分在前期测试阶段建立的测试用例,来测试被修改的程序。
3>选择性重复测试,覆盖修改法,针对被修改的部分,选取或重新构造测试用例验证没有错误再次发生的用例选择方法。 周边影响法:该方法不但要包含覆盖修改法确定的用例,还需要分析修改的扩散影响,对那些收到修改间影响的部分选择测试用例验证它没有收到不良影响,该方法比覆盖修改法更充分一点。
指标达成法:这是一种类似于单元测试的方法,在重新执行测试前,先确定一个要达成的指标,如修改部分代码百分之百覆盖
自动化测试不能代替手工测试。
冒烟测试:该种测试耗时短,仅用一袋烟功夫足够了。
对象是每一个薪编译的需要正式测试的软件版本,目的是确认软件爱你基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。
单元,集成,系统,验收,回归,α测试(内侧),β测试(公测)
-----------------
软件测试类型:功能测试:功能测试是根据产品的需求规格说明书和测试需求列表,验证产品的功能实现是否符合产品的需求规格
目标:是否有不正确或遗漏了的功能?功能实现是否满足用户需求和系统设计的隐藏需求?输入能否正确接收?能否正确输出结果
性能测试:就是用来测试软件在集成系统中的运行性能的。
目标:度量系统相对于预定义目标的差距
性能测试必须要有工具支持,GUI,Web性能测试工具:Loadrunner,Jmeter(接口功能,自动化,性能测试),SilkPerformer,WebLoad
负载测试:超过被测对象标准的性能负荷指标下,验证系统的负载承受力。并要求超负荷情况下,依然正常实现业务功能。是通过不断对被测对象施加符合,观察被测对象在不同负载下的性能表现。
软件测试质量:是许多质量属性的综合体现,各种质量属性反映了软件质量的方方面面。人们通过改善软件的各种质量属性,从而提高软件的整体质量。一个人跑100米需要多少时间;一个人拎50斤东西跑100米需要多少时间。
压力测试:调查系统在其资源超负荷的情况下的表现。尤其感兴趣的是这些对系统的处理时间有什么影响。这类测试在一种需要反常数量,频率或资源的方式下执行系统。目标通过极限测试方法,发现系统在极限或恶劣环境中
例子:成千上万的客户同一时间登陆到Internet;同时引入大量操作。
容量测试:目的是使系统承受超额的数据容量来发现它是否能够正确处理。例子:使用编译器编译一个极其庞大的源程序;一个操作系统的任务队列被充满。
能力:功能性;非功能性
安全性测试:用来验证集成在系统内的保护机制是否能够在实际中保护系统不受到非法的入侵。
GUI测试:针对软件系统界面进行的测试。包括:界面实现与界面设计的吻合情况;确认界面处理的正确性。GUI自动化工具:QTP, SilkTest, QARun、
QuickTestProfessional,selenium等。
可用性测试
异常测试:
兼容性测试:验证被测对象与硬件,其他软件之间的兼容情况。
SRS:需求分析文档;
HLD:概要设计文档;
LLD:详细设计文档;
BD :基本设计;
DD :详细设计;
FD :结构设计;
自动化测试工具:
Web自动化测试工具selenium、QTP。
性能自动化测试工具:loadrunner、jmeter。
接口自动化测试工具:SoapUI、postman。
手机自动化测试工具:robotium、appium。
杀虫剂悖论:测试用例需要根据实际情况去优化
测试是为了证明系统存在bug;而不是证明其不存在bug。没有哪个测试员说这个程序我测试过了,我保证它一个bug都没有了!!
----------------------------------------------
软件测试方法:测试活动从不同角度出发,可以有不同分类。主要用对照比较的方式讲解下面一些测试分类:黑盒,白盒,灰盒;静态,动态;人工,自动化测试;还有一些其他分类方式,要搞清每一种分类的具体含义。
软件测试的两种极端情况:
任何软件产品都可以使用以下两种方法之一进行测试:
已知产品的需求规格,但不知道其内部实现,可以进行测试证明每个需求是否实现。
已知产品的内部实现过程,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成分是否已经过检查。
------------------
白盒测试:1.依据被测软件分析程序内部构造,并根据内部构造设计用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况。
2.白盒测试是基于程序结构的逻辑驱动测试。
3.又被称为玻璃盒测试,透明盒测试,开放测试,结构化测试,逻辑驱动测试。
为什么进行白盒测试:1.一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能基本得到消除。
2.白盒测试能保证内部逻辑结构达到一定的覆盖程度,能够给予软件代码质量更大的保证。
3.白盒测试发现问题后解决问题的成本较低。
白盒测试常用技术:1静态分析:控制流分析,数据流分析,信息流分析等
2动态分析:逻辑覆盖测试(分支测试,路径测试等),程序插装等
逻辑覆盖方法:语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖
----------------
黑盒测试:把测试对象看成一个黑盒子,只考虑其整体特性,不考虑其内部具体实现。
黑盒测试针对的被测对象可以是一个系统,一个子系统,一个模块,一个子模块,一个函数等。
黑盒测试又被称为基于规格的测试。
常见黑盒测试类型:(采用黑盒测试手段的类型)
1功能性测试;2容量测试;3负载测试;4恢复性测试
黑盒测试的特点:对更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高;
测试人员不需要了解现实的细节,包括特定的编程语言
从用户视角进行测试,很容易被大家理解和接收
有助于暴露任何规格不一致或有歧义的问题
-------------
灰盒测试:根据利用的被测对象信息的不同,会采用不同的方法进行测试
利用被测对象的整体特性信息,采用黑盒
利用被测对象的内部具体实现信息,采用白盒
既利用被测对象的整体特性信息,又利用被测对象的内部具体实现信息,采用的就是灰盒。黑白盒占用的比例不同灰度就不同。
--------------
静态测试:不运行被测试的软件系统,而是采用其他手段和技术对被测试软件进行检测的一种测试技术;例如:代码走读,文档评审,程序分析。
动态测试:按照预先设计的数据和步骤去运行被测软件系统,从而对被测软件系统进行检测的一种测试技术。
---------------
静态分析技术:不通过执行程序而分析程序执行的技术。
人工和自动化测试
人工测试:测试活动(如评审,测试设计,测试执行等)由人来完成,狭义上是指测试执行由人工完成,最基本的测试形式。
自动化测试:通过计算机模拟人的测试行为,替代人的测试活动,狭义上指测试执行由计算机来完成。
自动化测试意义:(代替不了人)
------------
软件测试流程:(面试问的最多)
测试计划阶段-测试计划
测试设计阶段-测试方案
测试实现阶段-测试用例,测试规程
测试执行阶段-测试报告
主要的测试文档:
1测试计划:指明测试范围,方法,资源,以及相应测试活动的时间安排表的文档。
2测试方案 :指明为完成软件或软件集成特性的测试而进行的设计测试方法的细节文档。
3测试用例(核心操作):指明为完成一个测试项的测试输入,预期结果,测试执行条件等因素的文档
4测试规程:指明执行测试时测试活动序列的文档
5测试报告\缺陷报告:指明执行测试结果的文档
6测试日报:每天测试执行情况的记录和总结
系统测试过程与开发阶段:
系统各阶段的输入,输出(1)
系统各阶段的输入,输出(2)
测试工程师系统测试各阶段任务:
--------------
软件测试与QA的区别
1从性质上看:测试属于技术的工作 ;QA属于管理的工作
2从对象上看:测试的对象是软件研发产品,大多数工作是对研发领域的检验;QA的对象是整个软件过程,覆盖各个领域
3从手段上看:测试以事后检查为主;QA强调的是缺陷预防。
质量保证活动与软件测试的关系
测试最丢脸的事情,发现缺陷遗漏!!