软件测试概论
文章目录
一、什么是软件
软件是由文档、数据及程序组成的。(实际上是由开发写的代码生成的可执行的文件)
二、软件测试的基本概念
- 经典定义:是在规定的条件下对程序进行操作,以发现错误,并对软件质量进行评估。
- 软件测试应该是对软件形成过程中的文档、数据以及程序进行测试,而不仅仅是对程序进行测试。
三、软件测试的目的
- 证明:
1、获取系统在可接受风险范围内可用的信息。
2、尝试在非正常情况和条件下的功能与特性。
3、保证一个功能产品时完整的可用的。
(早期就是表明软件能够正常使用工作。) - 检测
1、发现系统的缺陷和错误。
2、定义系统的能力与局限性。
3、提供组件、工作产品和系统的质量信息。
(中期就是为了探测软件产品中间的缺陷。) - 预防
1、澄清系统的规格和性能。
2、为预防和减少可能的错误提供相关的信息。
3、在测试过程中尽早的检测错误。
4、确认问题和风险,并提前确认解决问题和风险的途径。
(为了提高软件的质量。) - 质量与效益:
1、现代的互联网行业, 软件开发周期越来越短, 要求软件的质量高并且开发及测试的效率也要高。大量使用了自动化测试技术。
三、软件的生命周期
1、计划(planning):
- 软件开发的总目标:(由公司高层,产品经理、项目经理等进行讨论决定)
- 性能、功能、接口、可靠性等方面的分析
- 通过对项目的可行性、以及开发过程中的资源、成本、等情况制定开发任务的实施计划。
2、需求分析(requirement analysis)
- 由需求分析人员和用户共同讨论决定。并拟定需求说明书(SRS PRD 需求说明书的简写)
- 需求来源::市场调研、客户要求。
3、设计(designing)
- 概要设计(HLD ):把各项需求转换成项对应的体系结构,明确每一部分的功能。
- 详细设计(LLD):根据项目概要设计的功能模块,进行对每一个部分的功能模块进行具体的描述。
4、编码(coding)
- 通过开发工程师,进行将设计说明书的功能进行编程将功能设计成计算机能够识别的语言。
5、测试(testing)
5.1、独立的测试小组
5.2、测试工作分类:
- 单元测试:(参照LLD设计文档)对代码的小单元进行测试(如一个函数,进行测试)、一般单元测试都是由开发人员做。
- 集成测试:(参照HLD设计文档)对多个单元功能进行合并集成,在合并集成的过程中进行测试。(一般由开发人员进行联调测试)(接口测试也是集成测试的一种)。
- 系统测试(SRS参照需求说明书测试):对所有的功能进行集成为一个整体,然后对每个功能以及性能进行测试。(由测试人员进行测试)。
6、运行(runing )
- 进行上线运行、以及运行前做α测试或者是β测试,通过试运行来发现问题并解决问题后,确认最终版本,并正式运行。
7、维护(maintenance)
8、评价(回环到计划步骤)
四、软件的研发流程模型
1、瀑布型
核心思想是按工序将问题简化,将功能的实现与设计分开,便于分工协作,采用结构化的分析和设计方法将逻辑实现与物理实现分开。
- 优点:
1、为项目提供了按阶段划分的检查点。
2、当完成前一阶段后只需关注下一阶段。 - 缺点:
1、阶段的划分,导致阶段之间产生大了的文档,极大的增加了工作量。
2、由于是线性开发,用户只有等到开发后期才能看见开发成果,增加了开发的风险。
3、不适应用户需求的变化。
瀑布模型适用于项目小,需求明确的场景。
2、V模型(快速应用开发模型)
V模型通过开发和测试同时进行的方式来缩短开发周期,提高开发效率。
V模型是瀑布模型的改进, 但是测试仍然介入较晚
- 局限性:仅仅八测试过程作为需求分析、概要分析、详细设计和编码之后的一个阶段,容易让人认为测试是软件开发的最后一阶段,从而导致到最后才发现需求分析阶段中隐藏的问题。
3、W模型(也称为双V模型)
W模型强调:测试便随整个软件开发周期,而且测试的对象仅仅是程序,需求、功能和设计同样需要测试。这样只要响应开发阶段完成,我们就开始开始测试。测试也开发是同步进行的,有利于尽早的发现问题。
双V模型是V模型的改进, 测试工作与其他工作并行开展, 测试介入较早
4、敏捷模型
将大的需求,分解为多个迭代版本来做。每个版本周期较短。
五、测试方法的分类
1、是否查看代码进行测试
- 白盒测试:
对代码内部逻辑进行测试,保证代码的质量。白盒测试是可视的,需要对系统内部的结构和工作原理由一个清楚的了解。
白盒测试的技术:
1、静态分析技术:控制流分析技术、数据流分析技术、信息流分析技术
2、动态分析技术:主要有逻辑覆盖率测试(分支测试、路径测试),程序插装等
优点:
1、可以检测代码中的每条分支和路径
2、揭示隐藏在代码中的错误。
3、优化测试
缺点:
1、成本昂贵。
2、无法检测代码中遗漏的路径和数据敏感性错误。
3、无法验证规格的正确性。
- 黑盒测试
黑盒测试又称为功能测试,这是因为在黑盒测试中主要关注被测软件的功能的实现,而不是内部的逻辑。
黑盒测试技术:
1、没用用户参加的测试方法:(容量测试、负载测试、恢复性测试、标杆测试)
2、用户参与的测试方法:外场测试(类似于β测试)和实验室测试(类似于α测试)。
优点:
1、对于更大的代码单元。相对于白盒测试来说黑盒的效率更高。
2、测试人员与编码人员彼此独立。
3、从用户的角度测试,更容易被人们理解和接受。
4、有助于暴露任何规格下不一致的问题。
缺点:
1、对于输入流测试不全,只能测试一小部分。
2、规格不够清晰简明,测试用例比较难写。
3、会存在很多程序路径不会被测到。
- 灰盒测试:
介于白盒测试盒黑盒测试之间的测试,(接口测试,主要测试子系统之间的数据传递和调用。)常见的灰盒测试是集成测试。
2、 白盒测试与黑盒测试的比较
-
黑盒测试会发现遗漏的缺陷,指出规格的那些部分没有完成。
-
白盒测试会发现代码哪方面的缺陷,指出实现那些部分的错误。
-
白盒测试成本高于黑盒测试。
3、根据代码是否运行划分
-
静态测试
静态测试也叫静态分析,是一种不通过执行程序而进行的测试技术。
手动:检视(通过会议形式对代码进行评审)、走读(不同的开发人员看另一个开发人员的代码,是否有问题)
自动(也不是执行代码,而是对代码进行扫描(PMD、findbugs、checkstyle)):使用自动化代码分析工具软件进行代码分析可能存在的问题。 -
动态测试
对软件系统运行进行分析,包含在受控环境下使用特定的结果来运行程序。显示了一个系统在检测状态下是否正确。
4、根据是否人工/自动执行划分
手动测试和自动化测试:手动测试就是通过人工进行对具体规则进行测试。自动化测试是一种测试手段,可以在全过程中使用。
六、软件测试的阶段
1、单元测试
对最小组成单元进行测试(属于白盒测试)。
目的:是检测软件模块与详细设计说明书的符合程度。
范围:单元内部的数据结构、逻辑控制、异常处理等。
2、集成测试
将各个小单元合并集成,主要是测试集成过程中的测试。(灰盒测试)
目的:是检测软件模块与概要设计说明书的符合程度。
范围:模块之间接口与接口之间的数据传递关系,以及模块组合后的整体功能测试。
3、系统测试
对一整个系统集成合并完成后进行的测试。不仅仅是功能测试,比如:性能,兼容、安全测试,都是在系统测试阶段开展的。(黑盒测试)
目的:通过与需求说明书做比较,发现软件与系统需求定义是否符合。
范围:整个系统与需求的符合程度
4、验收测试
主要是由客户进行测试。
5、 回归测试
回归测试的目的:是验证缺陷是否得到正确的修复,同时对系统的变更有没有影响到以前的功能。(回归测试发生在任何一个阶段,贯穿软件的整个生命周期)。
- 完全重复测试:
在缺陷修改后对所有功能进行在测试一遍。 - 选择性重复测试:(覆盖修改法、周边影响法、指标达成法)
1、覆盖修改法:只测试修改的部分
2、周边影响法:只测试更改之后的功能以及关联部分的功能
3、指标达成法:定一个指标,测试百分之几的功能,或者测试过程中发现多少问题,而进行回归测试。
七、软件测试的缺陷
1、软件缺陷出现的原因
1、缺乏沟通
2、软件复杂度高。
3、存在编程错误。
4、需求的不断变更。
5、周期时间短。
6、缺乏文档的代码(没有遵循代码规范)。
7、软件开发工具存在的问题。
2、软件缺陷的严重性和优先级
1、严重性:
- 致命:造成系统的崩溃、数据丢失、数据毁坏。
- 严重:出现操作性错误、错误结果、遗漏了功能。
- 一般:表示为提示信息错误。
- 轻微:不影响使用的错误。
2、优先级: - 最高优先级:立即修复软件缺陷。
- 次高优先级:产品发布之前必须修复软件缺陷。
- 中等优先级:如果时间允许应该修复软件缺陷。
- 最低优先级:不影响产品的发布,肯能会修复。
八、缺陷的管理
1、缺陷的定义
软件缺陷是指系统或系统部件中那些导致系统或部件不能实现其应有功能的缺陷。一般定义缺陷有以下5条原则:
1、软件未实现产品说明书要求的功能。
2、软件出现产品说明书指明不应该出现的错误。
3、软件实现了产品说明书未说明的功能。
4、软件未实现产品说明书虽未明确提及但应该实现的目标。
5、软件难以理解,不易使用,运行速度慢,或者软件测试员认为最终用户会认为不好。
2、缺陷管理的目的
是为了保证缺陷能够得到有效的跟踪和解决。
3、缺陷报告单
测试工程师在测试的过程中发现了软件缺陷,需要向开发工程师提交缺陷报告单,开发工程师会根据缺陷报告单中的描述进行复现修复缺陷。
例子:
4、缺陷管理流程
5、缺陷管理工具
JIRA, ALM(是HP的测试管理工具), 禅道, TAPD,redmine,还有些公司自己研发的管理系统,开源免费的工具有:Bugzilla、Mantis、Jira。
九、测试用例
1、测试用例的定义
测试用例(test case)就是设计一个情况,软件程序在这个情况下进行运行,并将运行的结果与预期结果进行比对。
测试用例作为测试的规范与测试执行的参照文档,将需要测试的操作或数据安装标砖末班写下来,可以避免测试IDE随意性,也保障了测试的覆盖。
测试用例的好处:
1、在实施测试用例之前设计好测试用例,可以避免盲目测试,提高测试效率。
2、测试用例的使用可以明确测试的重点,目的明确。
3、版本更新后,只需修改少部分用例就可以开始测试,降低工作强度,缩短项目周期。
2、测试执行的定义
测试执行就是通过测试用例进行对软件进行测试,,并将得到的结果进行与预期的结果进行比较。符合就通过。
十、软件质量模型
1、软件质量的定义
什么是质量:国际标准组织(ISO)关于质量的定义是一个实体的所有特征,基于这些特性可以满足显形和隐性的需求。
2、软件质量管理体系
- ISO:普遍适用的质量管理体系。
- CMM:特定针对软件行业的质量管理体系。
1、老的标准模型(ISO9126)
2、新的标准模型(ISO25010)
ISO25010软件产品质量模型由8个特性(涵盖31个子特性)组成。
1、软件生命周期的质量
1、过程质量:过程设计的完善程度和执行的力度。其中的测试活动是软件质量的保证(Software Quality Assurance ,SQA)。
2、产品质量:软件研发过程中,中间过程产品(中间件),及软件最终产品的质量。(静态测试包含(SRS、HLD说明书、LLD说明书、代码的评审、)、动态测试包含(系统测试、单元测试、集成测试))
3、使用质量:就是最终用户在其真实环境下运行软件系统时,所感受到软件各个方面特性与其目标的符合程度。(验收测试、α测试、β测试)
2、软件产品质量模型的特性
-
运行效率:软件在一定条件下,使用资源和产出性能的对比。包括时间特性(规定条件下,完成某个功能所需时间)、资源利用性(规定条件下,完成某个功能所需的时间)、容量(产品最大限度满足要求的容量)。
-
功能适用性,软件在指定条件下满足满足所有相关要求的程度。包括正确性(提供正确结果的程度)、完备性(功能完整程度)、适合性(软件所提供的功能与用户的需求匹配度)。
-
可靠性:软件规定的条件和时间下,软件维持正常的性能产出的程度。包括成熟性(避免因为错误导致失效的能力)、可用性(使用软件时的操作和访问的程度)、容错性(出现错误的情况下,软件维持性能产出的能力)、易恢复性(软件失效后,恢复正常性能产出的能力)。
-
易用性:软件的操作难度和满足用户的使用需求程度。包括可辨识性(用户是否可以识别此产品是否符合需求)、易学性(用户是否可以轻松学会使用该软件)、易操作性(用户是否可以轻松操作该软件)、用户错误保护(为用户操作提供指导,避免错误输入导致错误结果)、用户界面美观(软件的界面是否符合对应用户的群体喜好)、可访问性(用户是否可以无障碍使用产品而不受限)。
-
安全性:产品保护信息和数据,方便用户使用和访问。包括保密性(信息只能供有权访问的用户使用,防止信息泄露给非授权人使用的特性)、完整性(信息在使用和传输等过程中可以不被破坏和丢失的特性)、不可抵赖性(记录操作痕迹,无法抹除的特性)、可核查性(相关操作可以追溯到操作者)、真实性(用户身份可被证实)。
-
可移植性:从当前环境将软件移植到另一环境的能力。包括适应性(无需修改软件即可在不同平台使用的能力)、易安装性(在不同环境中安装产品的能力)、易替代性(替代其他相同用途产品的能力)。
-
兼容性:在不同的软件硬件条件下,产品是否可以正常使用。包括共存性(在与其他产品共享环境时,是否可以在不被其他产品影响的情况下,正常执行本产品的功能)、互操作性(是否可以使用其他产品的数据,以及其他产品是否可以使用当前产品的数据)。
-
可维护性:维护者可以修改产品的有效性和效率的程度。包括模块化(修改单个模块对其他模块的影响程度)、可复用性(程序可重复调用的程度)、易分析性(软件可被轻易分析问题、解决问题的能力)、易修改性(可以有效且高效修改,而不会引入新的缺陷的能力)、易测试性(软件出现故障后,发现故障并隔离定位故障的能力,以及在一定的时间和条件内,可被测试的能力)。
十一、项目流程
1、立项:项目经理进行立项申请。总体项目规划。
2、产品经理或产品设计人员进行对项目需求说明书进行编写(通过市场调研、客户沟通)。
3、需求评审会: 确定项目需求书的最终版本。
4、测试负责人做测试计划(方案)。开发经理做开发方案(计划)。
5、测试人员根据测试计划,分工安排,编写测试用例(根据需求文档)。测试用例的评审。开发人员进行开发设计以及编码。(同步进行)
6、开发提测(将开发好的软件,放在指定的环境下)让测试人员执行测试。如发现bug并提交到缺陷管理系统,并跟踪bug的修改情况。
7、对每个版本进行测试,并生成简略的测试报告。确定最终版本,出一份正式的测试报告。
8、给客户定制的,需要给客户进行验收测试。自己公司的就不需要验收测试。
9、对于手机APP上线前可能存在beta测试环节,推送给部分用户。
10、对于网站系统,直接在生产服务器上运行。上线的部署完成后,还要在线简单的测试。如果发现bug,开发需要立即更改。如果发现更新后发现存在严重bug,需要回滚到前一版本。
项目有新的需求后,在按照项目流程在走一遍。
十二、软件工程师的主要工作
1、检视代码,评审开发文档。
2、进行测试设计,编写测试文档(测试计划、测试方案、测试用例)等。
3、执行测试,发现软件缺陷,提交缺陷报告,并确认缺陷最终得到修正。
4、通过测试度量软件的质量。
未完待补充…