测试开发体系总概述:
-----体系L1:了解、认识软件开发与测试-----
【加课】测试开发体系与学习方法介绍 - 霍格沃兹测试学院校内交流 - 测试人社区 (ceshiren.com)
应该学什么:
知识图谱:测试开发的整体的学习体系和范围; 饿了么质量体系搭建实战阅读记录 - 学习笔记 - 测试人社区 (ceshiren.com)
- 互联网技术体系(测试的技术体系都是围绕这一部分去展开的)
- 网关产品(Nginx、Apache、Httpd)
- Web应用开发(Vue、React)
- 移动应用开发(Android、IOS、RN、Flutter)
- 后端应用开发Java(Spring Boot)
- 底层引擎(C/C++、Go、Rust)
- 消息队列/管道(KafKa、RabbitMQ)
- 缓存(Redis、Memcached)
- 数据监控-日志(Logstash、ElasticSearch、Kibana)
- 性能监控(Prometheus、Grafana)
- 大数据处理(Hadoop、spark、Flink)
- 人工智能深度学习(TensorFlow、Pytorch)
- 分层测试(按一定的规则去拆分–按业务模块拆分、按技术架构拆分、按人员的技术能力拆分)
- 自动化测试策略(自动化框架核心:领域建模、自动化测试、结果分析)
- 持续交付与DevOps体系
- 测试左移
- 测试右移
- 精准测试
业务:业务形态、产品类型;
软技能:汇报能力、沟通能力、总结能力测试;
软件开发的流程:
- 软件开发流程演变: 传统瀑布模型–>敏捷开发模型–>DevOPs开发模型
- 传统瀑布模型:需求分析–设计–编码–实现–测试–完成–维护
- 敏捷开发模型(XP/SCRUM):XP模型难以实现;SCRUM模型:根据不同的功能权重去制定不同的迭代,一个迭代一个迭代的去完成(需求分析–编码实现–测试);增量迭代,小步快跑-目前使用的比较多(简单理解,进行周期性迭代)
- DevOps: 开发/运维/测试相互协作,自动化的去完成部署/测试/交付。(可以持续的去进行发布新功能);持续开发–持续测试–持续集成–持续部署–持续监控
上面3种模式的迭代周期不同导致的:第一种2-3个月,第二种2-3周,第三种每天发布。需求变更的更快,导致需要频繁的去迭代一些功能去到线上,这样就衍生出来了越来越频繁的发布,越来越自动化的去完成开发–测试–部署。- 持续集成(CI): 是软件开发的实践,团队开发成员需要经常集成他们的工作,通常每个成员每天都需要进程集成,也就意味着每天需要发生多次的集成,每次集成都通过自动化的构建(编译/发布/自动化测试)来验证,根据测试结果判断是否新代码与原有代码能否正确的集成到一起;
- 持续交付(CD): 是一种软件工程实践,让软件产品的产出在一个短周期内完成,以保证软件可以稳定的,持续的保持在可以随时发布的状态,目标就是让软件的构建,测试与发布变的更快以及更频繁,这样来减少软件的开发的成本与时间,减少风险;
软件测试的概念:
- 通过手工/工具,去测试软件系统,去验证实际结果是否符合预期结果,去验证是否满足用户的需求;
- 测试用例:为特定的目的设计的一组测试输入,执行步骤和预期的结果,以便测试产品是否满足某个特定的需求的文档;
软件测试的流程:
- 软件测试的原则
- 测试显示缺陷的存在
- 穷尽测试是不可能的
- 测试尽早介入
- 缺陷集群性(2/8原则)
- 杀虫剂悖论(一直使用一种杀虫剂,就会起到抗药性,反观一直使用同样的数据去测试就会发现不了bug)
- 测试活动依赖测试内容
- 没有错误是谬论
- 软件测试的对象
- 需求分析阶段:需求文档、接口文档
- 编码阶段:源代码
- 系统功能阶段:软件程序
- 软件测试模型
- V模型(标明的是测试过程中不同的阶段): 需求分析–>概要设计–>详细设计–>编码–>单元测试–>集成测试–>系统测试–>验收测试
- W模型(2个V模型的的并行)目前都是增量迭代导致W模型很难实施:
- H模型: 软件开发中需求、设计,执行都是被分几段执行的,实践中往往都不是串行的更多的是交叉进行,更多的是迭代进行;这样就把测试活动单独的独立出来,形成一个独立的过程,将测试准备活动和执行活动更清晰的体现出来;
- V模型(标明的是测试过程中不同的阶段): 需求分析–>概要设计–>详细设计–>编码–>单元测试–>集成测试–>系统测试–>验收测试
- 软件测试的工作流程
- 传统测试流程:
- 单元测试–>集成测试–>冒烟测试–>系统测试–>回归测试–>验收测试
- 系统测试:
- 需求分析–>测试计划–>测试设计–>用例评审–>测试执行–>bug管理–>发布维护
- Bug管理流程:
- 上面的流程都是需要等产品功能开发完毕之后才能进行测试的流程,这样就导致了有个时间的问题,这样就引出了测试左移测试右移的概念,这两个概念也都是为了软件的质量去服务的。
- 测试左移:
- 左移是往测试之前的开发阶段移
- 测试团队在软件开发周期之前就开始提前的介入
- 对代码进行测试
- 从发现bug到预防bug
- 测试左移的质量保证手段: 代码评审、代码审计、单元测试、自动化冒烟测试、研发自测
- 测试右移:
- 右移是往发布之后移
- 产品上线后的线上监控
- 线上监控都可以监控哪些:
- 线上的问题反馈-检查-解决-更新流程
- 日志的查看,回传的服务
- 有效的log,便于问题更快速的定位
- 丰富的监控指标(服务器监控、业务异常点的监控、流量的监控、生产数据监控等)
- 线上监控都可以监控哪些:
- 传统测试流程:
流程管理平台:
- Jira–演示Jira平台的使用
- Jira的定制性非常强,并且插件也非常多
测试平台:
- 测试用例管理平台:Jira、redmine、testLink、tapd、禅道、云效
- 代码管理平台:gitlab、svn、github、gitee、bitbucket
- 持续管理平台:jenkins(持续集成/持续交付平台)、gitlabrunner(gitlab的持续交付方案)、github action(github的开源方案)、自建的DevOps平台(企业定制平台、tapd、云效);目前主流的就是前2个
软件测试的技术体系:
- 软件测试分类
- 按开发阶段分:单元测试、集成测试、系统测试、验收测试
- 系统测试包括:功能测试、兼容性测试、性能测试、安全测试
- 按是否查看代码分:白盒测试、灰盒测试、黑盒测试
- 按执行方式分:静态测试、动态测试
- 按是否手工测试分:手工测试、自动化测试
- 其他分类:冒烟测试、回归测试、随机测试、探索性测试
- 按开发阶段分:单元测试、集成测试、系统测试、验收测试