Infoq已经发表了文章(http://www.infoq.com/cn/articles/whole-software-testing-practice-requirements-to-operational),这里把原文公布下:html
以前一篇文章《软件测试转型之路》 web
(http://www.infoq.com/cn/articles/transformation-way-software-testing/)介绍过转型的一些实践,下文将介绍从2011年3月至今,持续改进的全程软件测试实践活动。 架构
传统的软件测试,能够简单描述为下图所示: 工具
图-1-传统交付测试 单元测试
开发人员完成任务以后,最后交付给测试人员,这种模式下,测试人员不能及早发现需求阶段的缺陷,同时测试工做的开展也滞后了,产品质量得不到有效的过程控制和分析,整体进度可能会因为返工问题形成拖延。 测试
那什么是全程软件测试,以下图所示: ui
图-2-全程软件测试图 编码
在整个SDLC中,三条角色主线和四个阶段。 spa
三条角色主线:开发、QA、测试,文中主要讲解测试。
四个阶段:需求、开发、发布、平常运营。
简单来讲能够概括为下图所示:
图-3-全程软件测试概述
测试人员贯穿这四个阶段,开展测试活动,测试实践活动简单描述以下图所示:
图-4-测试实践活动
每一个阶段也有开发人员对应的活动,以及QA人员对应的活动。
对于产品而言,每次版本迭代,都会经历:需求、开发、发布,最后推向平常运营,发布阶段虚线指向的需求阶段和平常运营阶段,并非一个终止阶段,而是不断迭代的过程。
那测试人员是如何开展全程软件测试活动的呢?
在需求阶段,开发人员、测试人员、QA人员主要作的事情,以下表所示:
阶段 |
开发人员 |
测试人员 |
QA人员 |
需求阶段 |
? 用户故事分析 ? 用户故事估时 |
? 参与用户故事分析、挖掘故事含混性 ? 参考经验库质疑开发的时间估算 |
? 保证确认需求活动符合需求管理过程 ? 管理用户故事评审 ? 管理需求变动 |
做为测试人员的主要实践以下:
? 参与用户故事分析、挖掘故事含混性
在sprint会议上,对用户故事进行分析,检查功能性需求和非功能性需求是否描述清晰,其中能够将非功能性需求做为验收要点,例如一个用户故事:
“客户但愿提升响应时间”
测试人员应当协助开发人员消除故事的含混性:提升什么的响应时间和响应时间为多少?能够建议修改成:
“客户信息普通查询返回结果的响应时间为5s内”
说明在“客户信息”模块,进行“普通查询”操做,返回结果的时间在5s内,这个陈述句已经清晰表达了,也达到了消除含混性的效果。一样,测试人员能够编写提升查询效率的用户故事:
“客户在信息查询模块,进行普通查询,可以在5s内返回结果”
“备注:5s为非功能性需求,也是验收要点”
? 参考经验库质疑开发的时间估算
在sprint会议上,开发人员根据经验出牌(团队本身定义的规则,用扑克牌)估算时间,当给出最终结果的时候,测试人员应当对其进行质疑。测试人员借鉴历史经验库:开发人员在某方面的技能如何、该模块曾经产生过何种程度的缺陷、修复缺陷的消耗时间是多少等等,综合考虑,提出疑问,让开发估算最终的时间,尽量考虑这些因素。固然,测试人员可以质疑的其中一个前提是:测试人员具有相关开发经验。
小结:在需求阶段,测试人员要发挥做用,减小含混性需求引入到开发阶段、同时协助开发作好时间估算。
在开发阶段,开发人员、测试人员、QA人员主要作的事情,以下表所示:
阶段 |
开发人员 |
测试人员 |
QA人员 |
开发阶段 |
? 架构评审 ? 功能要点确认 ? 编码开发 ? 单元测试 ? 开发自测 ? 代码评审 ? Bug Fix |
? 功能要点确认 ? 测试用例设计 ? 用例评审 ? 测试探索 ? 功能测试 ? Bug Tracking ? 回归测试 ? 系统测试 ? 验收测试 |
? 管理评审活动 ? 管理文档产物
|
做为测试人员的主要实践以下:
? 功能要点确认
Xmind是一个很是好用的脑图工具,一般在开发人员进行编码前,测试人员会针对需求处理的用户故事,与开发人员进行确认,修正理解误差,确保需求理解一致。
图-5-脑图用例模板
? 测试用例设计
测试人员主要设计测试故事点,使用DSL(Domain Specific language),infoq文章(敏捷测试 之 借力DSL:http://www.infoq.com/cn/articles/leveraging-dsl-in-agile-test),对测试用例进行描述,包括三个基本要素:
Feature、Scenario、Example,补充要素:xmind、Requirement。
Feature:把测试分类到某个模块,并对这个特性自己的业务目的进行相关描述,带进业 务目标,传递业务知识。
Scenario:标明这个Feature的测试场景,可使用文字描述步骤,或者使用xmind脑图
描述,场景中的数据使用Examples中列出的。
Example:引出具体的数据表格把用到的数据都展现出来,避免相同步骤由于测试数据 的变化而重复若干遍形成冗余。
Xmind:脑图文件,展现测试故事点
Requirement:关联需求管理系统的需求id。
? 用例评审
主要是坚持同行评审的原则,主要在测试组内进行,负责该任务的开发人员也会参与,简单来讲就是对测试用例进行查漏补缺的工做。
? 测试探索
进行了“功能要点确认”和“用例评审”后,为了保证测试场景的覆盖率,须要再进行测试探索。在开发人员完成雏形以后,使用探索式测试的策略,对功能基本流程进行有目的的快速走查,挖掘功能不肯定的地方和补充测试场景,避免不肯定的因素拖延到开发阶段后期,形成返工。
其中:功能测试、Bug Tracking、回归测试、系统测试、验收测试都是平常测试工做所需环节。
? 燃尽图发布
另外,测试人员还有一项重要工做,每日发布燃尽图,让团队了解当前进度状况,总结问题
所在,寻求耗时超过预期时间任务的解决办法。
图-6-燃尽图
图形特色:
1)剩余工时在计划基准上方,表明进度有所延迟,应抓紧进度;
发现此类问题,须要分析总结,原则是保证交付时间,对相应任务进行调整,拥抱变化,发现任务粒度太大,该拆分的继续拆分;对于重构须要慎重,不要过分深刻重构,给测试带来额外工做量,影响整个进度,对于整个版本而言,只有开发、测试在承诺的时间内完成任务,才是真正完成,仅仅开发完成交付算不上成功。
2)剩余工时在计划基准接近,表明进展良好,继续保持;
此时也须要查看在这种进度下,优先级高的任务是否获得时间保证,而不是由于处理完简单任务才使得燃尽图长的好看。每每有些开发人员,喜欢挑着任务来作,把简单易作、优先级低的任务先完成了,由于这些总在预期内可以完成,因此前期燃尽图的趋势看起来没有问题。
? 缺陷经验库
每一个团队都存在开发/测试新人和开发/测试老人,当测试人员与开发新人进行需求确认的时候,还须要进行缺陷经验教训的提醒,避免多走弯路。
图-7-缺陷总结
? 提高开发自测质量
测试人员能够提供相关checklist(参考:http://www.ibm.com/developerworks/cn/web/1303_sujg_webchecklist1/index.html,你们能够根据原做者提供的修改成符合团队的)帮助开发人员在编码过程当中关注开发自测的要点,从而提高质量。
图-8-web软件测试checklist
? 持续集成
利用持续集成(Jenkins)平台,作到快速的构建开发代码,自动的单元测试化,来提升开发代码的效率和质量。
负责单元测试的开发人员,会收到失败构建的邮件;
负责集成测试的开发人员,会收到失败构建的邮件;
负责自动化测试(Selenium)的测试负责人员,会收到失败构建的邮件;
这种方式,确保单元测试、集成测试、自动化测试,有相关人员关注和维护。
图-9-持续集成
? Sonar反馈
Sonar is an open platform to manage code quality. As such, it covers the 7 axes of code quality。
图-10-sonar分析结果
测试人员主要反馈问题以下:
Code coverage:团队要求代码覆盖率在80%以上;
Test success:团队要求测试成功率在100%;
Duplications:团队要求代码重复率在10%如下;
Violations:团队要求Major类别的代码规则缺陷在20如下;
开发团队必须保证每一个环境的质量目标,才可以保证整个的质量目标。
小结:
测试人员与开发人员永远不是敌对关系,而是协助关系,确切来讲是质量天枰的两边,任何一边的工做没有作好,都会失去平衡。
在发布阶段,开发人员、测试人员、QA人员主要作的事情,以下表所示:
阶段 |
开发人员 |
测试人员 |
QA人员 |
发布阶段 |
? 上线申请 ? 上线部署 ? 服务监控 |
? 测试报告 ? 线上功能检查 |
? 管理评审活动 ? 管理文档产物
|
做为测试人员的主要实践以下:
? 测试报告
完成验收测试,提供测试报告,给出测试数据度量,例如:
1) 测试发现缺陷总数:测试过程当中产生的去除状态为“无效”、“不用改”的缺陷数目。
2) 测试发现严重缺陷数:测试过程当中产生的并去除状态为“无效”、“不用改”的、且严重性为“Major”和“Critical”的缺陷总数目。
3) 测试发现缺陷修复数:测试过程当中产生的状态为“已关闭”的缺陷数量;
4) 未解决缺陷数:去除状态为“无效”、“不用改”、“关闭”的缺陷总数。
5) 缺陷修复率:(测试发现缺陷的修复数)÷(测试发现缺陷总数)×100%
6) 严重缺陷率:(测试发现严重缺陷数)÷(测试发现缺陷总数)×100%
7) 严重缺陷修复率:(已修复的严重缺陷数)÷(测试发现严重缺陷数)×100%
8) 测试需求覆盖率:已测试需求个数÷需求总数×100%
? 缺陷统计分析报告
另外,测试人员还有一项重要工做,对当前版本的缺陷进行统计分析:
按缺陷级别统计:
|
Critical |
Major |
Medium |
Minor |
总计 |
首页 |
0 |
0 |
1 |
0 |
1 |
模块一 |
0 |
0 |
0 |
2 |
2 |
模块二 |
0 |
1 |
2 |
10 |
13 |
模块三 |
0 |
0 |
1 |
4 |
5 |
模块四 |
0 |
0 |
1 |
2 |
3 |
模块五 |
0 |
0 |
3 |
2 |
5 |
模块六 |
0 |
1 |
0 |
1 |
2 |
模块七 |
0 |
2 |
0 |
6 |
8 |
sonar |
0 |
1 |
2 |
0 |
3 |
总计 |
0 |
5 |
10 |
27 |
|
图-11-缺陷统计
按缺陷来源统计:
|
开发1 |
开发2 |
开发3 |
开发4 |
开发5 |
遗留 |
Critical |
0 |
0 |
0 |
0 |
0 |
0 |
Major |
1 |
2 |
0 |
0 |
0 |
2 |
Medium |
1 |
7 |
0 |
1 |
0 |
1 |
Minor |
1 |
7 |
4 |
6 |
3 |
6 |
总计 |
3 |
16 |
4 |
7 |
3 |
9 |
按缺陷状态统计:
缺陷总数 |
已关闭缺陷数 |
遗留 |
缺陷修复率 |
严重缺陷数 |
严重缺陷率 |
已关闭严重缺陷数 |
严重缺陷修复率 |
42 |
40 |
2 |
95% |
5 |
12% |
5 |
100% |
测试进度和问题分析:
1、从BUG的严重级别分布来看,Major级别以上的BUG占12%,占的比重不高,说明大部分的主要功能已经实现了;
2、其中在sonar定义级别的缺陷,主要集中在代码规范和单元测试覆盖率,说明代码质量有待提升;
3、版本测试的前期时间较充足,后期随着开发提交完成的功能点增多,BUG数量增多,剩余测试时间变得紧张;
4、在版本测试期间,发现测试环境存在一次代码被覆盖、两次因开发人员操做失误影响测试执行的状况;
小结:
测试人员应当持续反馈、改进、总结每一个版本发生的问题(不论是缺陷,仍是过程当中出现的),并对缺陷进行分析,总结出一些规律,帮助开发人员创建良好的习惯,改进代码的质量。
在平常运营阶段,开发人员、测试人员、QA人员主要作的事情,以下表所示:
阶段 |
开发人员 |
测试人员 |
QA人员 |
平常运营 |
? 生产故障登记 |
? 版本问题反馈和改进提议 ? 生产故障分析 |
? 管理平常运营活动 |
平常运营阶段,并非终止阶段,即使需求、开发、发布阶段暂停活动,只要产品提供服务,平常运营都存在着。
做为测试人员的主要实践以下:
? 版本问题反馈和改进提议
对平常运营发生的问题,总结反馈,提出改进建议,而且跟踪实施。
? 生产故障分析
协助开发排查生产故障,避免测试场景的遗漏。
软件测试并非保证产品质量的最后一道防线,测试人员也不是,测试人员的工做彻底能够由更加资深的开发人员来完成,不过现实老是残酷的,目前测试与开发的比例为:1:3,在成熟的团队是这样子,另一些还在持续改进的团队,因为资源不足,可能去到1:7。开发人员在至关长的一段时间内不可能彻底替代测试人员,有个关键要素:思惟方式不一样,有句古话来形容:江山易改本性难移。当开发人员的思惟方式改变的时候,那就成为测试人员了,倒不如把测试人员独立出来更好,而且培养给开发人员必定的测试素养,这个对保证产品质量都是有帮助的。
全程软件测试实践,强调的是贯穿每一个阶段的测试活动,不管是开发、仍是测试,要理解双方的活动价值,何时该作什么事情,什么事情该作到什么程度才算好,保证每一个环节的质量,才可以保证产品的全程质量,另外产品质量不是测试出来的,而是构建过程当中沉淀下来的,开发人员的素养、测试人员的素养、以及团队对开发测试过程的重视程度,决定了产品质量。产品质量就如同一块蛋糕,应当切分为小块,落实到每一个人手里,让每一个人尝到甜头,担当起来。