什么是软件测试?
最常见的理解是:软件测试就是找BUG,发现缺陷。
概念:软件测试就是一系列活动,这些活动是为了评估一个程序或者软件系统的特性或能力,并确定是否达到了其预期的效果。
需求
- 需求的定义
用户需求:可以简单理解为甲方提出的需求,如果没有甲方,那么就是终端用户使用产品时必须要完成的任务。该需求一般比较简略。(一句话)
软件需求:或者叫功能需求,该需求会详细描述开发人员必须实现的软件功能(一个文档,描述用户需求如何实现) - 为什么有需求
明确开发和测试的模块或者功能 - 测试眼中的需求
在具体设计测试用例的时候,首先需要搞清楚每一个业务需求对应的多个软件功能需求点,然后分析出每个软件功能需求点对应的多个测试需求点,然后针对每个测试需求点设计测试用例。
过程如下,业务需求—>软件功能需求点—>测试需求点—>测试用例
测试用例(Case)
- 什么是测试用例
测试用例是一组集合,测试环境,测试数据,预期结果,操作步骤等 - 为什么有测试用例
测试用例是提高测试人员工作效率,降低测试人员工作的重复性问题
是建立自动化测试的基础
BUG
实际结果与软件需求(规格说明书)结果不匹配
错误不是bug
软件生命周期
如果把软件看成是有生命的事物,那么软件的生命周期可以分成6个阶段,即需求分析、计划、设计、编码、测试、运行维护。
需求分析:分析需求是否合理,需求是否完整
计划:工作人员和测试的安排
设计:软件页面设计和结构设计
编码:编写代码
测试:测试软件可能出现的问题发现问题反馈给开发人员
运行维护:如有问题,协助开发人员定位解决问题
开发模型和测试模型
开发模型
- 瀑布模型
特:线性的
优:每个阶段的任务和产出非常清晰
缺:风险到后期才显露,失去早期纠正问题的机会
适:周期短的项目 - 螺旋模型
优:避免线上问题
缺:风险分析可能会出错,需要人力财力
适:适用于风险多 比较大的项目 - 增量迭代模式
增量:登录开发完成——>创建课程——>上课
迭代:登录开发有办法——>创建课程开发一部分——>开发上课模块一部分 - 敏捷模式
敏捷宣言:
个体与交互重于过程和工具
可用的软件重于完备的文档(开发文档 需求文档)
客户协作重于合同谈判
响应变化重于遵循计划
在每对比对中,后者并非全无价值,但我们更看重前者。
敏捷中的scrum开发模式:
三大角色:product owner(产品经理)、scrum master(项目经理)和team(研发团队)
其中product owner负责整理user story(用户故事),定义其商业价值,对其进行排序,制定发布计划,对产品负责。
scrum master 负责召开各种会议,协调项目,为研发团队服务。
研发团队则由不同技能的成员组成,通过紧密协同,完成每一次迭代的目标,交付产品。
迭代开发:与瀑布不同,scrum将产品的开发分解为若干个小sprint(迭代),其周期从1周到4周不等,但不会超过4 周。参与的团队成员一般是5到9人。每期迭代要完成的user story是固定的。每次迭代会产生一定的交付。
产品负责人负责整理user story,形成左侧的product backlog。
发布计划会议:product owner负责讲解user story,对其进行估算和排序,发布计划会议的产出就是制定出这一期迭代要完成的story列表,sprint backlog。
迭代计划会议:项目团队对每一个story进行任务分解,分解的标准是完成该story的所有任务,每个任务都有明确的负责人,并完成工时的初估计。
每日例会:每天scrum master召集站立会议,团队成员回答昨天做了什么今天计划做什么,有什么问题。
演示会议:迭代结束之后,召开演示会议,相关人员都受邀参加,团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来,由po整理,形成新的story。
回顾会议:项目团队对本期迭代进行总结,发现不足,制定改进计划,下一次迭代继续改进,已达到持续改进的效果。
测试模型
- V模型
用户需求:PM将用户需求收集形成软件需求
需求分析与系统:验证需求是否正确,确定编程语言
概要设计:项目结构如何设计
详细设计:每个接口涉及那些库表,涉及那些任务
编码:写代码
单元测试:java中测试每一个方法
集成测试:许多方法集成到一起测试
系统测试:模块和模块之间无影响
验收测试:验收的人 产品,运营
特点:左边是开发,右边是测试
优点:测试被划成许多类型
缺点:测试人员介入太晚,发现问题的时机晚 - w模型
特点:开发是一个v,测试是一个v
优点:测试人员尽早介入了需求
缺点:测试人员和开发人员一定程度上还是串行的 不能拥抱变化,不能适用于敏捷