软件测试—概念篇
什么是软件测试
概念: 验证软件功能是否满足用户的需求
测试与调试的区别:
- 目的不同:测试的任务是发现程序中的缺陷;调试的任务是定位并且解决程序中的问题。
- 参与角色不同:测试主要是由测试人员和开发人员来执行,黑盒测试主要由测试人员完成、单元/集成测试主要是由开发人员执行。调试由开发人员完成。
- 执行阶段不同:测试贯穿整个软件开发生命周期,调试一般在开发阶段。
什么是需求
需求:满足用户期望或正式文档规定的条件和权能,用户需求和软件需求
用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略。
软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能。软件需求是测试人员进行测试工作的基本依据。
什么是bug
bug:有规格说明书且正确,程序与规格说明书不匹配的是缺陷,无规格说明书,以用户期望为标准
凡是实现效果和需求不相符的都可以认为是BUG.
什么是测试用例
测试用例:向被测试程序输入的一组集合,包含:测试环境、操作步骤、测试数据、预期结果、前置条件、备注等要素……
开发模型
1.瀑布模型(Waterful Model)
瀑布模型在软件工程中占有重要地位,是所有其他模型的基础框架。
瀑布模型的每一个阶段都只执行一次,因此是线性顺序进行的软件开发模式。
优点:
强调开发的阶段性;
强调早期计划和需求调查;
- 强调产品测试
缺点:
- 依赖于早期的唯一一次需求调查,不能适应需求变化
- 单一流程,开发中的经验教训不能及时反映到产品过程
- 险往往在后期测试阶段才显露出来,失去了及早纠正的机会(重要)
这种开发模式一般要为后期测试留足时间,否则测试不充分,bug会留给用户
2.螺旋模型(Spiral Modal)
采用渐进式的开发模式。
这种模式在开发初期需求不是很明确,测试与开发同时进行,测试要随着开发的迭代而迭代,回归测试此时就十分重要了。
优点:
- 强调严格的全过程风险管理
- 强调各开发阶段的质量
- 有机会讨论项目有没有必要继续下去
缺点:
- 引入非常严格的风险识别、风险分析和风险控制,对风险管理的技能水平提出高要求
- 需要投入大量人力、资金、时间
适合那些规模庞大、复杂度高、风险大的项目。
3.增量、迭代
增量是逐块构建,迭代是反复求精。
这种模式鼓励用户反馈,对需求进行更改和完善,开发人员构建新的可执行软件版本,这样的话,测试就要频繁进行,测试和开发人员配合要更加紧密。
4.敏捷
敏捷开发是一种以人为核心,迭代,循序渐进的开发方法。
前面所说的瀑布开发模型,它是以文档为驱动,开发过程要写大量的文档,开发人员都是根据需求文档来开发,一切以文档为根据。而敏捷开发模式是轻文档的,只写必要的文档,尽量少写文档,它注重人与人间之间,面对面的交流,以人为核心。
《敏捷宣言》:通过身体力行和帮助他人来揭示更好的软件开发方式。
主要特点有:
- 个体与交互重于过程和工具
- 可用的软件重于完备的文档
- 客户协作重于合同谈判
- 响应变化重于遵循计划
这样做主要是为了激发开发人员的兴趣。
需要了解一下scrum
一种典型的敏捷开发方式是scrum
scrum:原意是 “争球”,可以想象到这种模式一定能够是大家你追我赶,积极热情的来完成一个项目的。
scrum开发流程中的三大角色:
- 产品负责人(Product Owner):负责确定产品功能和达到要求的标准,维护产品订单,代表利益相关者的利益。
- 流程管理员:负责Scrum流程在项目中的顺利实施和进行,召开各种会议,协调项目。
- 开发团队:由不同技能的成员组成,人数一般为5~9人,大家紧密合作,完成每一次迭代的目标,交付产品。
scrum的基本流程:
敏捷中的测试:
- 以敏捷的原则,测试人员核心工作还是找bug
- 测试人员不能依赖文档,测试用例作用减弱,更多采用思维导图、探索性测试、自动化测试。
- 敏捷更讲求合作,测试人员与开发人员一块讨论,研究bug出现原因。
软件测试模型
1.V模型
V模型实质是基于瀑布模型,明确描述了开发与测试不同阶段的对应关系。
单元和集成测试检测程序是否满足软件设计的要求
系统测试检测系统功能、性能是否满足系统要求的指标
验收测试检测软件的实现是否满足用户需求或合同要求
局限性:仅在编码之后进行测试,不能及时发现需求等阶段的bug
2.W模型
在V模型的基础上进行改进,在开发阶段的同时同步进行验证和确认活动,二者并行进行。它由两个v字形模型组成,将开发与测试分开。
特点:测试对象除了程序外,还要对需求、设计等进行测试。
优点:有利于尽早全面的发现问题,降低后续测试难度和风险,对已发现的bug及早处理,加快项目进度。
局限性:需求、设计、编码这些都是串行的,前一阶段结束,下一阶段才能开始。无法支持敏捷开发模式。
软件配置(SCM):
配置管理( Configuration Management)是通过对在软件生命周期不同的时间点上的软件配置进行标识,并对这些被标识的软件配置项的更改进行系统控制,从而达到保证软件产品的完整性和可溯性的过程。
实施SCM的好处:
- 能够对项目中的文档、代码等的变化进行有效管理。
- 能够方便地重现某个文件的历史版本。
- 能够重新编译某个历史版本,使维护工作变得容易。
- 能够使异地多团队开发、并行开发成为现实。
- 从公司级看,实行统一的配置管理流程可提高项目组间人员流动时的工作效率
测试人员在SCM中起很大作用。
假设开发人员修正了一个Bug,然后找测试人员过去讨论,测试人员在开发人员的机器上重新测试了一下,发现Bug没再出现了,修复了,这时候,如果测试人员把缺陷关闭了,则可能导致缺陷莫名其妙地在用户那边又出现了。其实,原因可能仅仅是开发人员把这个Bug修改的代码没有提交的到配置管理数据库中。但是作为测试人员有没有责任呢?当然有,因为测试人员也没有按照规范的配置管理流程执行测试,测试人员应该从配置库取源代码编译后再测试,只有看到新的构建版本不再出现那个Bug,才能把缺陷库中的Bug关闭。