敏捷测试的“要”与“不要”-- 朱少民

敏捷测试的“要”与“不要”

2017-09-11   朱少民 编辑   软件质量报道

最近在看 Craig Larman和Bas Vodde写的 Practices for Scaling Lean & Agile Development (精益和敏捷开发大型应用实战)这本书,感觉作者挺重视“测试”的。多数敏捷开发类图书很少单独去谈测试,敏捷宣言和敏捷开发原则中也几乎没有谈到测试,而本书的作者在讲产品管理、计划、需求与PBI、设计与架构...之前就专门用一章的篇幅先谈“测试”,而且有50页的内容,超过其它十四章各个主题。作者叙述这章的方式也特别,用:

  • “尝试”做什么

  • “避免”做什么

来表达作者的观点、所提倡的测试方式、方法和具体的实践,这些也来自于他们多年(敏捷咨询项目的)实践经验。


这里把他们50页的内容浓缩为一张表,左边是尽量避免的项,右边是尽量尝试去做的项,供大家思考,看看是否对大家有启发?你们也可以对照自己公司的做法,在下面留言,谈谈你们自己的想法。


(讽刺的事:一方面他反对certified tester,但自己却被Certified LeSS)


这张表包括三部分:总体上测试的思考面向用户的测试(褐色内容)开发者测试(蓝色内容)


 不要/尽量避免

要/努力尝试去做

  1. 假定测试就只意味着测试

  2. 将开发与测试分开

  3. 成立测试部门

  4. 单独的自动化测试团队

  5. 在迭代中使用缺陷跟踪系统

  6. 商业测试工具

  7. TMMTPI等模型

  8. ISTQB等认证

  9. 复杂的测试术语

  1. 测试不再仅仅是测试(帮助理解左边内容)

  2. 测试人员不再只是进行测试

  3. 培训和指导测试工作

  4. 测试人员和程序员一起工作

  5. 特性团队作为自动化测试团队

  6. 所有的测试都要通过,否则停止并修复

  7. 绝不容忍Open的缺陷(见注1)

  8. 测试社区/社团

  9. 技术文档工程师进行测试

  10. 辨认出项目测试的臭味(见注2)

  11. 挑战关于测试的假定(见注3)

  12. 简单的测试分类

                                          面向用户的测试
  1. 传统的需求交接

  2. 认为ATDD只适用于测试人员

  3. 混淆TDD与ATDD

  4. ATDD使用传统的测试工具

  5. 多个需求描述

  6. “优化”需求研讨会

  7. 在研讨会上使用电脑和投影仪

  8. 混淆验收与用户验收测试

  9. 测试中和测试件的重复

  10. 通过UI测试

  11. 可追溯性(两边都有,辩证地看)

  12. 昂贵的测试(两边都有,辩证地看)


  1. ATDD

  2. ATDD与迭代节奏相吻合

  3. ATDD并行开发

  4. 利用ATDD教练与专业引导员

  5. 尝试Product Backlog提炼时采用研讨会形式讨论

  6. “确认”(需求)优先于“编写测试”

  7. 使用示例(用例)

  8. 产品负责人编写测试

  9. 压缩工作流程到业务规则中

  10. 使用表格来表达商业规则

  11. 通过工作流(业务流)进行测试

  12. 测试墙

  13. 典型的研讨会日程(见注4)

  14. 提取重点的测试

  15. 集成测试框架/FitNesse

  16. Robot框架或其它ATDD兼容工具

  17. 将传统的测试工具封装进ATDD工具中

  18. 在Sprint review会议上展示测试

  19. 探索式测试(不同于传统的手工测试)

  20. 为探索式测试期间加上计划和时间盒(session)

  21. 自动化所有测试

  22. 为不可自动化的需求编写ATDD测试

  23. 持续运行所有测试

  24. 持续集成系统

  25. 可维护的测试

  26. 删减测试

  27. 可追溯性

  28. 昂贵的测试

  29. 自动化昂贵的测试

  30. 把非功能性测试当作功能性测试对待(自动化和持续性)

  31. 为非功能性需求设定需求域

                                         开发者测试
  1. 由单独的人员进行单独的测试

  2. 编写自己的xUnit框架

  3. 缓慢的单元测试

 

  1. 单元测试

  2. 适合于C的C++ xUnit框架

  3. 编写自己的xUnit框架(当没有可用时)

  4. TDD

  5. 利用(内聘/外聘)TDD教练

  6. 在开发环境下运行测试

  7. 在实际硬件上运行测试

  8. 函数到函数指针的重构

  9. 学习测试

  10. 为硬件编写“学习测试”

  11. 重构测试

  12. 只测试一项的小测试

 

注1: 绝不容忍Open的缺陷是指:找到一个缺陷就会尽快修复,其好处就是防止:

  • 在跟踪许多bug上花费精力

  • 花费精力在优先级排序上

  • 延迟学到当修复缺陷时产生的知识

  • 花费额外的时间修复Bug,因为开发人员不再记得代码

 

注2: 项目测试的臭味

  • 多故障的测试

  • 开发人员不编写测试

  • 测试高维护

  • 产品多故障

 

注3:关于测试的假定

  • 测试必须是独立进行的,因此要与开发相分离

  • 必须有单独的测试部门

  • 必须有测试经理

  • 测试必须由“测试人员”完成

  • 测试不可以在代码完成前开始

  • 测试必须在最末尾进行

  • 测试必须是“计划周详的”

  • 必须有“测试策略”和一个“主测试计划”

  • 测试遵循以下顺序:I)测试用例设计,2)测试用例执行,3)测试用例汇报(一个测试瀑布流程)

  • 百分百测试覆盖率太昂贵。

  • 百分百自动测试太昂贵。

  • 测试需要精密的测试管理工具。


注4:典型的研讨会日程:

  1. PO介绍研讨会目的

  2. TeamPO选择要工作的条目

  3. PO对选取的需求做概述发言

  4. 发散:分局成几个子团体,就某个item讨论,写case

  5. 聚合大家的成果

  6. 重复发散-聚合几次

  7. 结论

  8. 提取

猜你喜欢

转载自blog.csdn.net/cc297322716/article/details/78431421