项目级别的质量保障方案

Posted by DanteYu on April 26, 2019

本文是我在当前项目上设计的质量保障方案,在进行项目信息脱敏后,总结如下。


质量 = 正常工作的软件 + 满足项目干系人的需求


主动性质量管理 –> 预防 + 评审

流程

  1. 开发流程
    • 每一个环节明确的进入退出条件
    • 多轮质量反馈机制 ** 开发团队日常的反馈 ** 站会 ** IPM ** 开卡&结卡 ** 客户/用户的反馈 + showcase
  2. 持续集成/持续部署流程 2.1 加入代码扫描,自动化测试等 2.2 失败处理
  3. 与上下游方的沟通联调流程

需求

  1. 需求分析和澄清
  2. 需求符合INVEST原则,无二义性和歧义性
  3. PO积极性,能够及时响应和回答
  4. AC的定义,完工的定义,测试结束的定义

开发实践

  1. Code Review 代码审查
  2. Peer Review (via PR) 同行评审
  3. TDD
  4. Pairing 结对编程

代码质量

  1. 静态测试 1.1 统一的编码规范:比如命名规则,注释,代码格式,函数复杂度等 1.1.1 可以结合业界标准。比如Sun Code Convent和Google Style等 1.1.2 使用工具扫描代码。比如JS的ESlint 1.2.3 可以在IDE装相关插件,做到编码时检测 1.2 静态代码扫描 1.2.1 集成到CI流水线中。SonarQube 1.2.2 IDE插件,做到编码时检测
  2. 动态测试 2.1 前端单元测试 2.2 后端单元测试

风险管理

  1. 可视化风险
  2. 及时暴露和管理风险

项目实践

  1. 定期Retro
  2. 知识管理
  3. API文档管理
  4. 新人培训
  5. 追求技术卓越
  6. 面对面沟通
  7. 集中办公

被动型质量管理 –> 测试 + 检验

质量属性

  1. 功能性
    • 完成度
    • 精准度
    • 互用性
    • 效率
    • 并发
  2. 性能
    • 资源利用率
    • 吞吐量
    • 持久力
  3. 安全
    • 认证
    • 授权
    • 隐私
  4. 兼容性
    • 应用兼容
    • OS兼容
    • 硬件兼容
    • 向后兼容
  5. 可用性
    • 易学性
    • 易操作性
    • 可达性
  6. 可靠性
    • 稳定性
    • 健壮性
    • 可恢复性
    • 错误处理
    • 数据完整性
  7. 可维护性
    • 可扩展性
    • 修复
    • 构建
  8. 可移植性
    • 重用
  9. 可安装性
    • 配置
    • 升级卸载

测试活动

质量属性 测试类型
功能性 功能测试、集成测试、探索式测试、用户验收测试、流测试、回归测试
性能 压力测试、负载测试
安全 渗透测试、威胁建模
兼容性 兼容性测试
可用性 用户测试、Alpha测试、Beta测试
可靠性 风险测试、场景测试、域测试(domain testing)、流测试、压力测试
可维护性 单元测试
可移植性 专项测试
可安装性 专项测试

测试策略

SDLC 测试类型 方法 框架/工具 策略
Code 单元测试 自动化 Junit, pytest, mocha, jasmine 采用TDD,覆盖率检查,QA review UT,每次构建在CI执行
Test 冒烟测试 手工/自动化 webdriver 针对每次build在CI执行地自动化冒烟测试,在shoulder check环节的冒烟测试,与Build Verification Testing类似,每次build都要通过的测试
Test 功能测试 (系统测试) 手工/自动化 webdriver 故事卡测试 - 探索式测试,故事卡测试 - 场景验收测试,自动化UI测试,自动化API测试,自动化测试在CI流水线执行,自动化测试也可以单独在CI执行
Test 集成测试 自动化 Rest assured,pact 覆盖依赖服务的测试,可以使用mock
Test 性能测试 自动化 locust,gatling 压力测试,负载测试
Test 兼容性测试 手工/自动化 Browserstack 确定产品支持的主流平台和浏览器
Test 安全测试 自动化 HP Fortify 渗透测试
Test 回归测试 手工/自动化   故事卡缺陷的回归测试,AC的回归测试,相关代码配置改动引起的回归测试,缺陷卡回归测试,上线前的回归测试 - Candidate testing, PVT
UAT 用户验收测试 手工   每个故事卡QA测试结束后,需要客户进行在UAT环境进行测试。只有当UAT通过了,才表明这个故事卡done,QA需要在此环节和business进行协调

质量度量

  • 缺陷统计度量
    • 解决率
    • 解决时间
    • 分布
    • 触发原因
    • 严重性
    • 优先级
    • 数量变化趋势
  • 覆盖率
    • 需求覆盖率
    • 故事卡AC覆盖率
    • 代码覆盖率
      • 函数覆盖数量
      • 运行使用到的功能覆盖数量
      • 条件覆盖数量
      • path覆盖数量
    • 自动化测试覆盖率
      • 运行通过的测试比率
        • 功能稳定程度
      • 不同开发阶段的比率
  • 兼容
    • 支持哪些浏览器
    • 移动端支持多分辨率机型
  • 代码质量
    • 静态代码扫描问题数
  • 技术负载率
    • 剩余技术负债点数
  • 用户/客户反馈
    • 线上问题反馈
    • 满意度反馈

事后检查处理的代价其实是最高的。质量是规划、设计、建造出来的,不是检查出来的。预防高于检查,预防错误的成本通常比在检查中发现并纠正错误的成本低得多。

如何更好地规划质量管理活动

  1. 质量规划,明确标准 规划质量,是识别项目及产品的质量要求和标准,并确定用哪些保障方法、改进措施来达到这些标准的过程。 在业务生命周期的不同阶段,质量标准应该是动态变化的 只能结合具体项目和具体阶段的质量诉求,对质量的标准进行合理定义。 exec1 exec1

其中,你需要特别关注研发过程中的质量保障手段,制定适当的编码规范、提交规范和分支规范,同时设计代码准入标准,确保代码 Review、单元测试、接口验证和 UI 验证等手段与你的项目质量要求相匹配。

  1. 质量分析,追根溯源 质量分析,是指识别项目运行期间,整体质量上遇到的问题和制约因素,分析根本原因,并制定相应的预防措施和解决方案。
    • 每月坚持开线上 Bug 分析会
    • 持续进行内部 Bug 分类
    • 建立质量大盘,拉通不同业务线或模块的每月 Bug 趋势
  2. 质量控制,层层卡点 质量控制,就是将一些明确下来的质量规范和做法,真正落地到各个环节。质量控制及卡点行为,是要结合项目的质量要求和团队的质量成熟度,一层一层地加强质量把关和收口 exec1

质量管理过程中的工作,你可以从三个方面入手,分别是质量规划,明确项目的质量标准;质量分析,追根溯源,找到质量差距的根本症结;质量控制,在需求到发布的过程中,设置层层卡点来控制质量