测试模型
测试是一个过程,首先确定要测试什么(范围和条件)然后确定软件产品如何被测试,之后建立测试环境,执行测试,最后评估结果,检查是否达到已经完成的测试标准,并报告情况。一般流程还不够,根据很多测试者的经验,还要对开发过程中容易发生问题的地方进行测试。这就是测试流程
最具有代表性的测试模型(V模型)在传统开发中,仅仅把测试过程中作为在需求分析、概要分析、详细设计以及编码之后的阶段,V模型的推出是对这种思想的该进。其中V过程代表了开发过程又代表了软件测试过程。体现了开发过程中对系统进行持续测试的基本思想。
开发小组进行开发系统的时候,设计小组同时就进行系统测试的计划过程,开发小组负责定义开发的需求,并完成相应文档,测试小组也会使用同样的需求。但目的是测试系统,在开发过程的适当点,测试小组对开发过程进行测试。
开发过程需要4个步骤,输入、执行过程、检查过程和输出。执行和检查过程是测试人员工作流程的核心。执行过程的内容越多,检查阶段要执行的任务就越多,
在开发过程中,从需求阶段到编码阶段,只要采用验证手段进行测试,如需求评审,设计评审,代码自查,走查已经代码审查。从而完成对开发的中间结果正确性的评估,编码完成经过代码审查之后测试,这个时候的测试主要在软件的可执行模式下进行,利用确认手段进行测试,确认测试包括单元测试,集成测试,系统测试以及用户验收测试
- 单元测试主要针对编码过程中堪称在的各种错误。
- 集成测试只要是针对详细设计中可能存在的问题,尤其是各单元与其它程序部分之间的接口上可能存在的错误。
- 系统测试主要针对概要设计、检查系统作为一个整体是否有效的运行
- 验收测试通常由业务专家或用户进行,确认产品是否真正符合用户业务上的需求。
软件测试的分类
按照阶段开发阶段划分,软件测试可分为单元测试,集成测试,系统测试和验收测试
- 按开发阶段划分
- 单元测试,又称模块测试,是针对软件设计最小单位,程序模块进行正确性检查的测试工作。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行的进行单元测试。
- 集成测试:又称组装测试,在单元测试的基础上,将所有的程序模块进行有序递增的测试,软件集成的过程是一个持续的过程,分成很多个临时版本,在不断集成的过程中,功能集成的稳定性是真正的挑战。在每个版本提交时都会进行冒烟测试,是对主要功能进行测试。冒烟测试也叫版本验证测试,提交测试
- 系统测试:是在真实模式系统运行的环境下,检查完整的程序系统能否和系统(包含硬件,外设,网络和系统软件)正确的配置,连接,满足用户需求。
- 验收测试:按照项目任务书或合同,供需双方约定的验收依据文档,进行对整个系统的测试与评审。决定是否接受或拒绝系统。
软件测试可分为,开发方测试,用户测试和第三方测试按照测试实施组织划分
- 按照测试实施组织划分,
- 开发方测试:也叫验证测试或A测试,开发方通过检查和提供客观证据,证实软件是否满足规定的需求。验证测试是在软件开发环境下,由开发者检查与证实软件是否满足软件设计说明或软件需求说明的要求,主要是指软件开发完成后,开发方要提交的软件进行全面的自我检查与验证,可以和软件的“系统测试”一起执行。
- a测试是由一个用户在开发环境下测试,也可以是开发机构内部的用户,在模拟实际操作环境下进行的测试。A测试可以从软件产品编码结束之时开始,也可以模块(子系统)测试完成之后开始。
- 用户测试:用户的应用环境下,用户通过运行和使用软件,检测与核实软件实现是否符合预期的要求,通常情况下用户测试测试不是值用户“验收测试”,而是指用户的适用过程中不断发现错误和缺陷。并对使用质量进行评价。
- Beta测试通常被看成用户测试,Beta主要是把软件产品有计划的免费发到目标市场,让用户大量的使用,评价,检查软件,通过用户的大量使用,来发现软件存在的问题与错误。把信息反馈给开发修改。
- 是整个测试的最后阶段
- 开发方测试:也叫验证测试或A测试,开发方通过检查和提供客观证据,证实软件是否满足规定的需求。验证测试是在软件开发环境下,由开发者检查与证实软件是否满足软件设计说明或软件需求说明的要求,主要是指软件开发完成后,开发方要提交的软件进行全面的自我检查与验证,可以和软件的“系统测试”一起执行。
- 第三方测试:介于软件开发方和用户方之间的测试组织的测试,第三方测试也叫独立测试,软件第三方测试是由技术、管理、和财务上与开发方和用户相对独立的组织进行软件测试。一般情况下,是在模拟用户真实应用环境下,进行软件确认测试。
按照技术划分,软件测试可分为白盒测试和黑盒测试,也可以分为静态测试和动态测试分析技术。静态测试是不允许程序,人工对程序和文档进行分析和检查,静态测试也可以叫静查,静态测试包括走查,符号执行,需求确认;动态测试:是指人工或使用工具运行程序进行检查,分析程序的执行状态和程序的外部表现,白盒测试和黑盒测试,在实现测试方法上包括动态测试和静态测试。
- 按照测试技术划分
- 白盒测试:又叫结构测试,通过对程序内部结构的分析 。检查。来寻找问题。白盒测试可以把程序看成装在一起透明盒子,也就是清楚了解程序结构和处理过程,检查是否所有结构及路径都是正确的,检查软件内部动作是否按照设计说明的规定正常运行
- 黑盒测试:通过软件外部表现来发现缺陷和错误,黑盒测试把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理结构。黑盒测试是在程序界面处进行测试,他只是检查是否按照需求规格说明书规定正常实现
软件测试方法和技术的分类与软件开发过程相关联,它贯穿于整个软件生命周期,走查、单元测试、集成测试、系统测试、验收测试用于整个开发过程的不同阶段。
软件测试的原则
软件测试的原则没有标准的说法,大多是经验之谈,一般下面几条可作为测试的基本原则。
所有测试都应该追溯到用户需求。
最严重的错误(从用户的角度)是那些导致软件无法满足需求的错误,程序中的问题根源可能在开发前期的各阶段,解决,纠正错误也必须追溯到前期工作,所以要尽早的、不断的进行测试。
- 用户要求:我要什么
- 需求说明书:我可以提供什么
- 设计说明书:我要让软件做什么
- 源程序:我要让计算机怎么做
- 运行结果:程序运行得到的结果
运行结果是否与客户要求相符合
由于软件的复杂性和程序性,在软件生命周期各个阶段都可能产生错误,所以不应该把软件测试仅仅看做是软件开发的一个独立阶段的工作,而应当把它贯穿到软件开发的各个阶段中,软件开发的需求分析和设计阶段就应该测试工作,编写响应的文档。同时坚持在软件开发的各个阶段进行技术评审与验证,这样才能在开发过程中尽早发现和预防错误,杜绝某些缺陷和隐患,提高软件质量。
设计时应该完成测试计划,详细的测试用例定义可在设计模型确定后开始,测试可在代码产生之前进行计划和设计
软件测试不等于程序测试。
pareto原则:测试发现的错误中80%很可能起源20%的模块中,应孤立这些疑点模块,进行重点测试
完全测试是不可能的,测试需要终止,想要进行完全的测试,在有限的时间和资源条件下,找出所有软件缺陷和错误是不现实的,
主要原因
- 输入量太大,
- 输出结果太多
- 路径组合太多
软件测试策略
为了检验开发软件能否符合规格说明书的要求,活动测试可以采用各种不同的策略
- 要使用的测试方法
- 确定质量风险
- 测试完成和测试成功采用的评价标准
- 有关资源要求或涉及进度的特殊考虑
测试类型、评估标准以及测试方法
测试类型如,功能测试,容量测试,性能测试,可用性测试,分布测试,使用评估标准可以是基于代码的测试覆盖,基于需求的测试覆盖,缺陷数量
使用测试的方法(人工测试)(自动测试)
确定资源
一旦确定了测试对象和测试方法,就需要确定执行测试的人员及测试活动需要的支持。确定资源需求包括确定需要的元。包括
- 人力资源:人员数量和技能
- 测试环境:包括硬件和软件
- 工具:声明何种软件工具(将被使用,被谁使用,以及使用工具可以获取那些信息)
- 数据:软件测试在很大程度上取决于输入数据(创建或支持某一测试用例)和输出数据(同预期结果做比较)的使用,确定解决以下与测试数据有关的问题和策略:收集或生成用于测试的数据(输入和输出):数据库的应用(隔离外界影响的手段,以及在测试完成后将数据返回初始状态的方法)
软件测试的策略包含内容中最主要的部分有两个,
- 一个是要进行的测试过程
- 一个就是要执行的测试类型
测试过程,在软件交付周期的不同阶段,通常需要对不同类型的目标应用进行测试,从独立程序模块开始,到最终进行验收测试一共分为4个测试
- 单元测试:单元测试在迭代的早期实施,侧重于软件最小可测试元素,单元测试通常应用于实施模型中的构建,核实是否覆盖控制流和数据流。已经构建是否按照预期工作。
- 集成测试;集成测试是将模块按照设计要求组装起来进行测试,主要目标是发现与接口有关的问题,由于产品提交到测试部门前,产品开发小组都要进行联合调试,所以大部分企业是由开发人员来完成集成测试的,但也可以来到测试部门后再次进行集成测试,主要测试模块之间数据传输是否正确、模块集成后功能是否实现,模块接口功能与设计需求是否一致。集成测试是紧接在单元测试后,在单元测试通过后,便可开始配置集成测试环境,执行集成测试目的是为了确保当个个模块集成起来还可以正常运行
- 系统测试:系统测试是将被测试的软件作为整个基于计算机系统的一个元素,与计算机硬件,外部设备,数据和人员等其它系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列测试。
- 系统测试的测试用例应根据需求分析规格说明书拉力设计,并在实际使用环境中运行,检查软件系统运行时有其他相关的要素(硬件,数据库,,操作人员)的协调工作情况是否满足要求,包括性能测试,恢复测试
- 验收测试:验收是按规定的需求,逐项进行有效性检查,检查软件的功能和性能及其他特性是否与用户的要求相一致,一般采用黑盒测试法,验收测试的基本事项是功能确认和测试确认
- 功能确认是以用户需求规格说明为依据,检测系统需求规定功能的实现情况
- 配置确认是检查系统资源和设备的协调情况,确保开发软件的所有文档资料编写齐全,能够支持软件运行后的维护工作,文档资料包括设计文档,源程序,测试文档和用户文档。
以上4个过程相互独立且顺序相连,依次进行。开始分别完成单元的测试任务,以确保每个模块正常工作。单元测试大量采用白盒测试,尽可能的发现模块内部的程序差错,然后再已测试的模块组装起来,就进行集成测试,其目的在于检验与软件设计相关的程序结构问题,用的是黑盒测试方法来设计测试用例,完成集成测试后,为了检验被测试的软件能否与系统的其它部分(硬件,数据库,操作人员)协调工作,需要进行系统测试,最后验收测试,是按照规定的需求,对开发初期制定的确认准则进行检验。验收测试是检验所开发的软件能否满足使用功能和性能的最后手段,通常采用黑盒测试方法
测试类型
测试类型是在测试生命周期上没有通用的分布模式,工具迭代次数,迭代大小,项目种类的不同,可以重点执行不同的测试类型
- 功能测试:主要是针对需求说明书进行测试,验证功能是否符合需求,包括原定功能的检验,是否有冗余功能,遗漏功能,这类测试应由测试员做,
- 健壮性测试:侧重于程序容错能力的测试,本测试在单元测试阶段和系统阶段进行。如数据边界值测试,非法数据测试,异常中断测试。主要是验证程序对各种异常情况能否进行正确处理。为了执行方便,建议健壮性的大部分测试用例尽量编写在功能测试用例中
- 接口测试:程序员对各个模块进行系统联调的测试。包含程序内接口和程序外接口测试。这个测试在单元测试阶段进行一部分工作,而大部分都是在集成测试完成的
- 强度测试:检查程序对异常情况的抵抗能力。强度测试是在系统异常的配置下运行。例如,当中断的正常频率为每秒1~2小时,运行每秒生产10个中断的测试
- 压力测试:对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供最大服务级别的测试
- 性能测试,在交替进行负荷和强迫测试时常用的术语。性能测试关注的是系统的整体。压力测试与性能测试时一同进行
- 用户界面测试:测试用户界面是否友好,是否方便易用,设计是否合理,位置是否正常等一系列界面问题。
- 安全测试:主要测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏是如何处理
- 可靠性测试,安装和反安装测试
- 文档测试:主要测试开发过程针对用户的文档,以需求,用户手册,安装手册等。检验文档是否和实际应用存在差别。文档测试不需要编写测试用例
- 兼容性测试:测试系统不同平台/硬件/操作系统/网络运行情况。
二三十到三十