1. 测试行业的生存挑战:
- XP Scrum CI CD DevOps的流行加大了测试压力
- 原有质量保证体系从理论到技术思想已经全面落伍,缺乏工程化体系建设
- 互联网发展快,导致测试工程师跟不上发展速度
- 现有的知识体系缺乏完整的梳理和总结,导致新人学习困难且不成体系
- 网络和培训结构充斥着过时、落伍的知识体系
- 研发工程师也在进入质量保证和测试领域,研发主导就更不会招聘技术落后的测试工程师
- 部分测试服务公司鼓吹独立测试团队无存在的必要
2 .移动互联网服务架构

3. 项目实施的关键过程

4.1.1 研发工程师的交付物
```#xml 设计文档:需求文档、设计文档、接口文档 代码:Java、python 数据:SQL Mysql PG索引文件 可部署的产品:构建的二进制包、联调环境 ```4.1.2 研发阶段常见的质量保证手段
研发阶段的质量保证手段能够对阶段性的工作产出进行有效的评估度量,从而能更早的发现问题,有效的提升产品质量
4.1.2.1 代码评审(code review)
```#xml 定义: * 指对计算机源码系统化的审查、常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。 价值点: * 代码规划约束,培养良好的代码习惯和追求 * 深入了解业务,实现知识和规划的传承 * 沟通设计思路并改进,互相评审防止代码烂设计进入 行业观点和落地: * 行业经验普遍认为代码评审是最有效的质量保证手段 * 借助标准的代码管理工具即可,比如gitlab的pr机制 * 整个过程测试工程师参与度低 ```4.1.2.2 代码审计
```#xml 定义: * 是一种以发现程序错误、安全漏洞和违反程序规范为目标的源代码分析。是防御性编范式的一部分。该范式的目标是在程序发布前减少错误。 综合性的代码分析平台: * sonar支持自定义规则,较多的公司使用,推荐 * 360火线 IDE辅助功能: * Xcode,Android studio * 阿里巴巴Java开发手册,IDE插件支持 独立的静态分析工具: * findbugs * pmd * androidlint * scan-build 静态分析技术分类: * lint系列:通过分析语法树和源代码分析代码规范 * 字节码检查:findbugs为代表:通过分析编译器给出的调用链和二进制字节码的调用链寻找逻辑缺陷 静态代码的在线规则库: * 自定义规则 * sonar https://docs.sonarqube.org/display/DEV/Adding+Coding+Rules * pmd https://pmd.github.io/pmd-5.5.5/customizing/howtowritearule.html * 在线规则库 * 360火线 http://magic.360.cn/ * FindBugs的规则库:http://findbugs.sourceforge.net/bugDescriptions.html 代码审计关注的质量指标: * 代码坏味道 * 代码规范 * 技术债评估 * bug和漏洞 * 代码重复度 * 单测与集成 * 测试用例数量 * 覆盖率 ```4.1.2.3 单元测试
```#xml 定义: * 是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法。 价值: * 最底层的质量保护网 * 用于验证修改的影响范围 责任: * 单元测试是研发同学的责任和义务 * 建立持续集成快速返回的机制 * 单测可测性是决定单测成败的关紧啊 * 覆盖度评估很关键 几乎所有的开源项目都有单测用例 ```4.1.2.3 自动化冒烟
```#xml debug版本的冒烟: * 自动打debug包 * 基于debug包的自动化专项测试 * monkey健壮性测试 * 自动化遍历+专项测试 * LeakCanary自动检测内存泄漏 * Bugly等检测崩溃 * BlockCanary检测卡顿 test版本的冒烟 * 少量的自动化冒烟用例 * 自动遍历+功能探索 ```4.1.2.4 研发自测
```#xml 研发自测: * 防止低质量的产品进入下游浪费成本 * 保证高质量交付有助于缩短项目工期 * 自查和自测试是负责人的态度,也是优秀的研发工程师的习惯 产品自测: * 评估产品流程和UI设计是否符合预期 自测行为的监督与推动参照后面的监控体系 ``` 单元测试与review ### 4.2 测试阶段的质量保证4.2.1 app交付策略 ```#xml 内部交付 * Jenkins自动打包 * 提供内部网站下载入口,供整个项目团队手工验证 公测: * 使用fir.im bugly testflight服务 正式发布 * 打包渠道包推送到各市场 * 上传到app store ```
4.2.2 建立测试准入机制
```#xml 建立合适的自动打包机制 * 自动对研发、测试分支进行打包 * 自动对相关分支进行测试 * 对研发分支进行自动化冒烟,确保研发分支无重大问题 * 对测试分支建立完善的测试 * 打回 or 测试 建立合适的版本管理机制 * 版本号的使用规范 三位+四位 * 根据版本号和commit id定位代码 ``` 特性分支->研发分支->测试分支->tag_第一轮-->tag_第二轮-->tag_第三轮->发布分支常见后段发布机制
```#xml 代码编译和发布包构建 * 后端打包mvn * 移动端打包gradle cocospod * 二进制部署打包 rpm docker 环境构建 * docker等容器技术 * jendins等自动构建和部署平台 测试推送 * 后段升级自动触发接口测试 ``` 特性分支->研发分支->sep分支->rc分支->prod分支基本的测试checklist和手段
```#xml 业务测试 回归测试 专项测试 质量监控 ```