质量意识
提高软件和服务的研发质量和研发效率
- 项目管理三要素:质量、时间、成本
- 质量保证与测试:质量保证应贯穿项目的整个过程
- bug修复:测试人员激活bug;开发人员收到激活bug后,进行修复,bug状态为处理中,修复完成后状态设置为解决状态。Open(激活)、In Process(处理中)、Resolved(解决)、Closed(关闭)、Reopen(重启)。内部+外部用户反馈渠道,bug提交格式:标题、问题描述、复现步骤、能否复现、问题来源、问题影响、补充描述。
- 项目开发的整体路径:需求阶段、设计阶段、开发阶段、测试阶段、发布阶段、上线阶段、线上阶段。
质量保证工作
需求与设计阶段
- 需求评审(站在用户的角度思考和挖掘需求、设计和开发的前提性条件)
- 需求变更管理(用户的需求始终在改变、建立一套完善机制去即时适应需求的变更)
- 设计评审(通过评审需求的可行性和设计的相关风险,可极大降低设计风险,避免人力浪费)
开发与测试阶段
- 单元测试(调试代码,确保代码实时可编译;验证逻辑,减少代码中的bug;作为一个最细粒度回归测试,实施反馈代码的质量)
- 代码评审(保持代码风格的一致和可读性,利于贯彻编程规范;提高代码质量,减少bug;促进互相交流学习,提升团队的整体研发能力,进而提高企业的整体竞争力)
- 测试流程:测试人员编写测试方案并提交开发人员评审;开发人员进行单元测试,编写用例并提交测试人员评审;测试人员设计和编写用例进行功能性测试;测试人员根据项目情况决定是否进行性能/压力等测试;自动化和持续集成;撰写测试报告
- 测试方法:黑盒测试、白盒测试、静态测试、动态测试、自动化测试、手工测试、验收测试、
α
\alpha
α测试、
β
\beta
β测试、单元测试、模块测试、集成测试、联调测试、系统测试、功能性测试、性能测试、压力测试、异常测试、安全测试、接口测试、用户场景测试、回归测试、探索性测试
- 自动化:流程自动化(编译、部署、发布、回滚、上线、测试阶段);测试自动化(可以降低成本并保证测试结果,降低风险)
- 测试报告:测试结果、质量风险评估、质量评估、测试过程描述、缺陷分析、评估改进意见、测试版本/测试人员/测试时间
上线与线上阶段
- 线上测试:众包测试,用户反馈和业务监控(收集、分发、定位、解决),产品评测(用户反馈分析,产品bug分析,Top问题梳理,竞品问题分析)
代码单元测试
单元测试基础
单元测试问题
- 使用system.out输出测试结果,依赖人去判断测试是否正确
- 不使用Assert(断言)对测试结果进行判断
- 没有边界检查
- 多个测试分支放入一个单元测试方法中
- 测试case环境依赖相关
- 测试方法执行有先后顺序
优秀的单元测试原则
- 独立性
- 可重复
- 可自动化:自动化运行与判断
- 彻底:覆盖被测试对象的全部分支
单元测试好处
- 更高的测试覆盖率
- 提高团队效率
- 自信的重构和改进实现
- 预期的行为文档化
注意点
- Java Web项目:BO/DAO工具自动生成,无需额外单测;Action(Controller)须通过集成测试发现问题;核心逻辑主要存在于Service层,需要着重进行单元测试
- 平台类单元项目:交叉混合时可能存在问题,场景复杂,分支较多,单元测试需覆盖全面
- Hadoop的MAR任务:特殊的Java程序
python单元测试
- 单元测试、模块测试、联调测试、系统测试、交付测试
- 单元测试:验证代码中的函数是否符合预期,聚焦于函数的逻辑以及核心算法是否正确
- 质量:单元测试主要针对函数,颗粒度小,测试针对性强,bug更容易暴露;覆盖面较窄,无需考虑其他函数或者所依赖的模块,所以它的场景易构造,核心功能验证更充分;保证整体代码结构良好,使代码具有较高的可测性和可维护性。
- 效率:单元测试进行的时间较早,测试场景构建快,可有效减少调试时间;只针对修改代码展开测试,无需考虑额外内容,所以在短时间内可以把预期的逻辑测试充分;在项目开发初期发现bug,单元测试可加快开发效率,缩短开发周期。
单元测试框架
- unittest:python标准库中原生自带框架
- pytest
- Nose2
单元测试规范
单元测试对编码的要求
- 代码一致性
- 统计单元测试覆盖率
- mock简化单元测试:基于实际进行单元测试的场景而产生
单元测试实践
|