软件开发流程
软件开发流程的演变
由传统瀑布模型到敏捷开发模型再到DevOps开发模型。
瀑布模型
- 按照线性方式进行软件开发
- 下行单元受上行单元结果影响
- 每一环节需要进行验证
优点
- 开发的各个阶段清晰
- 强调早期计划和需求调查
- 适合需求稳定的产品开发
缺点
- 由于是线性模型,增加开发风险
- 早期错误在后期发现,难以修改,增加开发成本
敏捷模型
XP极限编程
SCRUM
敏捷模型特点
- 采用增量迭代方式
- 使用少量多次策略
DevOps
需求频繁变化,产品迭代更新周期极短
生命周期
- 持续开发
- 持续测试
- 持续集成
- 持续部署
- 持续监控
特点
- 产品发布频繁
- 加强发布协调
- 需要自动化测试介入
CI/CD 持续集成/持续交付
- 持续集成意味着一天内可能发生多次集成,每次集成都通过自动化的构建来验证。
- 持续交付是让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持随时可以发布的状况。可以减少软件开发的成本和时间。
CD与DevOps的关系
- DevOps的范围更广,是软件交付过程所涉及的多个团队之间的合作,并且将软件交付的过程自动化。
- 持续交付是一种自动化交付的手段,关注点在于将不同的过程集中起来,并且更快、更频繁地执行这些过程。
- DevOps可以是持续交付下的一个产物,持续交付的成果直接汇入DevOps模型。
软件测试流程
软件测试
- 验证实际结果与预期结果之间是否存在差异
- 通过测试发现并修复软件中的BUG,提高用户的使用体验
- 降低同类型产品开发遇到问题的风险
软件测试原则
- 测试显示缺陷的存在
- 穷尽测试是不可能的
- 测试应尽早介入
- 缺陷集群性(2/8原则)
- 杀虫剂悖论
- 测试活动依赖于测试内容
- 没有错误是好 是谬论
软件测试的对象
在不同阶段存在不同的测试对象
需求分析阶段:需求文档,接口文档
编码阶段:源码
集成阶段:产品
测试用例
为测试而制定的输入输出数据组
软件测试模型
V模型
- 基于软件开发模型中的瀑布模型产生的
- 依旧是线性模型,具有线性模型的同优缺点
W模型
- 在W模型中测试与开发是并行的关系
- 测试尽早介入
- 对开发阶段的产出物进行验证
- 依旧具有线性缺点,无法支持迭代开发
H模型
- 将测试流程独立出来
- 对项目组的人员要求高
- 测试就绪点分析困难
软件测试流程
系统测试流程
BUG管理流程
- 使用BUG管理平台
测试左移、测试右移
测试左移
- 尽早介入
- 对代码进行测试
- 从发现到预防
测试左移手段
- 代码评审
- 代码审计
- 单元测试
- 自动化冒烟测试
- 研发自测
测试右移
- 发布后持续监控
测试右移手段
- 线上监控
- 闭环的线上问题反馈
- 业务监控
- 指标每日监控
- 生产数据监控
测试技术体系
软件测试分类
系统测试
:①功能测试 ②兼容性测试 ③性能测试 ④安全测试验收测试
:①α测试 ②β测试黑盒测试
:数据驱动测试,注重于测试软件的功能需求,只关心软件的输入输出白盒测试
:研究产品内部的源代码和程序结构,单元测试
是白盒测试
的一种
分层测试体系
自动化分层测试体系中:70%单元测试 20%服务测试 10%用户界面测试
单元测试方法
- java
- python
接口测试
- 针对软件对外提供服务的接口的输入输出进行测试
- charles、fiddler、postman、jmeter、loadrunner
- java:httpclient、restassured
- python:requests、httprunner
UI测试
- 手工方法:人工点点点
- 自动化方法:web:selenium app:appium
常用的测试平台
测试用例管理与BUG管理平台
- jira
- redmine
- testlink
- tapd
- 云效
- 禅道
- gitlab
- excel
- 思维导图
代码管理平台
- gitlab
- subversion
- github
- bitbucket
持续集成管理平台
- jenkins
- gitlab runner
- github action
- 自建devops平台:tapd、云效等
黑盒测试
常用测试方法
等价类划分法
- 明确输入域,将输入域划分为若干子集
- 从每个子集中选取具有代表性的数据作为测试用例
- 常见分类:有效、无效等价类
边界值分析
- 边界值测试法是对等价类的补充
- 来源于开发对于边界值的忽略
因果图与判定表
- 因果图为有向图
- 因果图可转换为判定表
- 是有一种表达因果关系的逻辑表达方式
决策树
- 判定表也可以用决策树表示
- 可用流程图表示决策树
场景法
探索式测试
- 是一种软件测试风格,简而言之就是同步学习 测试设计和测试执行
- 基于上下文的反馈及时调整测试执行
- 通常用于黑盒测试
- 成本低,可以不提前设计大量测试用例
- 无法满足覆盖度
白盒测试
- 白盒测试的执行手段可以涵盖单元测试、集成测试
- 使用代码覆盖率作为主要度量指标
代码覆盖率
- 语句覆盖:每行代码都要覆盖至少一次
- 判定覆盖:判定表达式的真假至少覆盖一次
- 判定/条件覆盖:判定覆盖与条件覆盖都必须覆盖
- 条件组合覆盖:判定表达式中的所有条件组合都需要覆盖
- 分支覆盖:控制流中的每条边都要被覆盖一次
- 路径覆盖:所有的路径都要尽量覆盖
- 指令覆盖:一行代码会被编译为多条指令,尽可能的覆盖所有指令
- 方法覆盖:每个方法至少要被覆盖一次
- 类覆盖:每个类至少被覆盖一次
覆盖率统计的工具
- emma
- cobertura
- jacoco