敏捷开发,QA面临的10个挑战
1、没有MRD,如何管理好需求? 2、没有需求评审,怎么保证需求质量? 3、研发模式变更,怎么把握进度? 4、没有详细设计如何保证设计没有问题? 5、没有测试设计如何保证测试质量? 6、何时提测?提测频繁,如何降低提测成本?提测时间不固定,如何分工? 7、如何提高RD代码质量? 8、没有准入,怎么保证提测质量? 9、如何避免新增story影响已有功能造成质量问题? 10、上线频繁,如何降低上线的成本?
1、没有MRD,如何管理好需求?
(1)使用story模式来管理需求,将庞大的MRD划分为一个个合适粒度,且可独立交付的story(通常每个story能在1~5天内完成,包括设计、开发、测试),需求清晰明了,易达成一致,且可节省大量的需求评审时间。
(2)要求PM在第i个迭代上线前,完成所有第i+1迭代的需求拆分,和RD、QA达成理解一致,且辅助QA一起补充完验收标准,在第i个迭代启动前完成所有story的相关工作。
(3)每个story都有自己的优先级、估点(即预计花费时间),以此为依据判断是否纳入某迭代。
(4)PM随时待命,快速响应,答疑解惑、修改设计不足。
2、没有需求评审,怎么保证需求质量?
challenge:需求不评审了?开发时遇到一堆问题怎么办?测试时发现一堆问题怎么办?作为质量的监督者,QA面临着很大的冲击和挑战!
虽然没有需求评审会议,但每个story都是经过仔细推敲和沟通过的。
(1)首先,一个story被PM提出时,需写好用户故事卡片和详细描述;
(2)接着,PM会找RD、QA的leader进行讲解,并交review,review人提出问题及改进意见;
(3)然后,PM和负责具体开发RD、测试QA进行讲解和讨论,RD、QA提出问题、疑问,PM解答,并对详细描述进行修改。
(4)后,所有参与者觉得没有问题后,PM辅助QA补充详细的验收标准,RD对其进行review,并作为自测和自动化case编写的参考。
(5)此外,在开发和测试的过程中,若发现新问题,PM随时响应,答疑解惑,修改设计的不足。
上述每一个步骤都被落实后,不仅需求质量被保证了,QA也成了需求管理的核心。即使有未考虑到的问题,敏捷团队也能够很快消化,在下个迭代迅速优化。
3、研发模式变更,怎么把握进度?
challenge:没有详设计划?没有开发计划?什么,连测试计划都木有?QA怎么保证项目保质保量按时上线?
(1)定期发布
定期发布上线,把整个项目划分为一个个迭代,每个迭代时间大小固定,迭代结束时上线交付一次。
(2)迭代规划
迭代规划相当于整个迭代的计划,帮助我们管理并保证每个迭代的交付。
A)迭代规划的前提:
story沟通及验收条件的补充完成。
PM给出story的优先级
RD、QA给出story的估点,估点可取范围为(1、2、3、5),若有大于等于5点的story,尽量拆分成更小的story。
B)迭代规划
估算团队交付能力(通常经历几个迭代,团队的交付能力会很明了了):基于“昨天的天气”(很可能他们在当前迭代完成的工作量与上一个迭代相同,除非工作环境或是团队构成发生重大变化)和常识,估算自己能够在当前迭代中完成多少工作。然后团队会基于自己的工作交付能力,选择当前迭代要开发的工作。
有了团队交付能力值,便进行以下步骤安排本迭代的工作:
1)按照优先级顺序,列出story,并注明它们的故事点数大小。
2)判断一个迭代中可以交付多少故事点数。
3)考虑团队需要完成的非用户故事工作可能产生的影响,比如在早期的迭代中,由于工具和工作环境不到位,工作效率会受到影响。
4)向计划中加入一个新的迭代。
5)向迭代中加入故事,直到用掉所有的工作能力。
6)询问:是否所有的故事都已经解决、版本发布目标是否达成。
7)如果没有,那么向计划中加入新的迭代,并重复步骤5和步骤6.
8)一旦所有的故事都已经分配完成,与大家计划进行交流,并征求他们的反馈,看看这些计划是否现实并且可以完成。
PS:通常只会进行到第五步,剩余的stroy放入需求池,下个迭代启动时再规划。
(3)每日站会
站会的目的有三个:
(1)周知进度
仅从用户故事和任务的层面周知进度,任务进度只有两种状态:完成或未完成(完成百分比)。
(2)周知计划
你将会在下次会议之前做哪些工作?
(3)抛出问题
哪些东西阻碍你的进度?(“没有问题”,意味着你能够交付自己当前的任务,而且符合估算的时间范围)如果遇到需要解决的问题,可以在每日立会之后处理。
实现一项目的必要前提:
1)站
2)敏捷项目必须提供能够“安全失败”的环境,团队成员不会因为没有达成任务承诺遭受惩罚。
大家要能够安全说出任务状态的真实情况,并且了解项目环境的现实情况。有时,我们的估算可能很糟糕(只是估算而已,又不是承诺),又或者某些事情的发生让某些成员无法完成任务,整体环境必须让他们能够说出真实情况,这样团队成员能调整他们的日程表,将任务排序,并调整适应项目的现实。
站会的主要内容:
从PM、RD到QA,每个人发言,内容为:1. 昨天干了什么,2.遇到什么问题,3.准备干什么。如果有想要分享给大家的知识,也可以在此分享。
后主持人总结一下,然后根据实际遇到的问题,少数人进行线下沟通、跟进、解决。
站会的时间尽量控制在十分钟左右。
开站会的一些技巧
(1)轮流主持
轮流主持能提高团队成员的参与度,且如果主持人临时有事,也不会因此无法开展,通常每次站会结束时指定下次站会的主持人。
(2)解决问题不放在会议中
会议中仅抛出问题,解决问题放在站会结束后,相关人参与。目的是避免浪费大家的时间。
(3)早上举行
可以让所有人按时来,按时工作。
可以让每个人更清楚自己该干什么。
晚上每个人进度不一,作息时间不一样,早上说昨天干了什么更准确。
(4)卡片墙
有了迭代的总体计划,还需要细化到对每个story进行管理,除了之前的估点外,我们使用卡片墙对其进行管理。
需求池:所有新建的story(一般为未经过估点的)卡片贴在此处。
待开发:所有待开发的story卡片贴在此处。
需求池->待开发:讲解沟通完需求、估完点、补充完验收标准后,移动。
开发中:所有正在开发的story卡片贴在此处
待开发->开发中:RD将story拆分完task,并给QA讲解task实现思路,QA同意后,移动。
待测试:所有开发完成,等待QA测试的story卡片贴在此处。
开发中->待测试:RD开发完成story,且完成单测、集成测试编写,和经过仔细的自测后,移动。
测试中:所有QA正在测试的story卡片贴在此处。
QA singn off:所有经过QA测试,QA认为可以上线的story卡片贴在此处。
测试中->QA singn off:QA经过仔细测试,bug都被修复验证,认为story符合上线标准时,移动。
已验证:所有经过PM验收,可上线的story卡片贴在此处。
QA singn off->已验证:PM在验收环境中验收,认为符合需求后,移动。
加速区:所有需要加速解决的story卡片贴在此处。如卡片中有block测试的bug急需修复,等。
block区:所有被一些问题block的story卡片放在此处。
卡片:story卡、task卡(story编号、估点数、用户故事)。
角色卡:FE、RD、QA的名字,以不同颜色区分,分别写上人名,用于贴在story上。谁在做什么,谁忙谁闲,有多少剩余人力,一目了然。
上线时间:略。
(5)燃烧图
使用燃烧图,计划及其变化,以及每天进度一目了然。
1)X轴为时间,一般是迭代周期的每;
2)Y轴为工作量,根据项目情况,可以用已完成估点或已完成story点数来表示;
3)开始,计算出本次迭代要完成的所有工作量(作为y轴刻度,迭代天数作为x轴刻度),然后,每天站立会议时,了解前已经完成的工作量,并计算出迄今为止完成的工作总量。把其画在Y轴上,以此类推(并把y点连接成线)。如果计划比较(理想)准确,燃烧图的后”燃烧“折线将和总工作量折线相交;
(6)总结
以上五项,简单易实现,用很低的时间成本能做出“计划”,并保证计划的落实,且能快速适应变化!
4、没有详细设计如何保证设计没有问题?
challenge:如何让设计上的问题在开发前暴露出来,并解决?
在敏捷开发中,我们认为沟通交流胜过面面俱到的文档,相对于编写详细设计文档,RD更愿意给相关人员讲解他的设计,甚至给QA讲解代码,因此对详细设计不做要求。
那么,没有详设,如何让设计上的问题在开发前暴露出来,并解决?
我的解决方案如下:
增加详设交流环节,且由RD推动
1)在开发之前,增加详设交流环节,RD进行task拆分和详设讲解。
2)由RD推动此环节,在开发之前主动给相关QA和关注的leader讲解, QA提出需要了解一些复杂逻辑的实现方法,RD进行讲解。讲解后,卡片才能从待开发移到开发中。
3)story较复杂时,RD会提供简略的详设,一方面理清RD思路,一方面便于QA理解达成一致。
此外,在QA测试之前,如有需要,RD还会给QA讲解详细的实现方式,弥补没有文档的不足。
5、没有测试设计如何保证测试质量?
challenge:没有之前那么严密的测试设计,如何保证无漏测?
虽然没有之前那么标准的测试设计,但我们摸索出了自己的规避风险的方法:
每个story,都有一个固定的测试设计环节,以自己喜好的方式,如:画简图、脑图、列list等,仔细考虑等价类、边界条件、异常分支等,作为实际测试的思路,以便真正理清自己思路,规避测试模式变更带来的风险。
在每个story中,都会有验收标准,验收标准和PM一块编写,由RD review,也作为RD自测和编写自动化测试的依据与要求,一方面提高代码质量,一方面保证测试质量。
PS:
1)如果有测试经验较少的新人加入,可以在初期让新人和之前一样编写测试设计,作为story的附件。待训练成熟后,再过渡到敏捷的模式,以规避新人经验不足导致的漏测风险。
2)如果团队中测试人员较多时,建议编写简单的测试设计,以便整个项目的质量可控。
6、何时提测?提测频繁,如何降低提测成本?提测时间不固定,如何分工?
challenge:没有固定提测时间?没有正式提测?随时提测?
(1)随时提测
没有固定的提测时间,RD完成一个story ,满足上述提测条件,便通知QA提测(无论以什么方式通知),QA即可部署新版本进行测试。
(2)自动化部署
随时提测,意味着需要更频繁的部署,此时,不能再依赖手工部署,必须实现部署自动化。
通过在hudson上调用编写的自动化部署脚本,已可一键自动化部署,收益不错,其他项目也有效仿。
(3)测试分工
因为随时提测,stroy的完成时间不确定,如果事先分好了谁测什么,很可能造成QA某时候空着,有时候工作堆积,这样时间利用率低。
因此,我们需要每个QA熟悉所有模块,迭代开始时不分工,在迭代中临时分工。这无疑也是对QA的一个很大的挑战。
7、如何提高RD代码质量?
challenge:提高代码质量、降低RD和QA的人力比!
提高RD代码质量对QA来说是一个亘古不变的问题,路漫漫而修远兮。。。
目前我们的解决方案是:要求并监督RD做单测和集成测试。终目标为测试驱动开发(TDD)。
在敏捷团队中,QA的负担已经很重了,此时应该果断把之前从RD那边分担过来的集成测试自动化(IT)再还回去,并且推动RD把单测(UT)落地,从而提高RD的代码质量,降低bug率,减少回归时间,终降低RD、QA人力比,成为真正的敏捷QA。
A)UT
完全由RD编写,目前QA正在对RDs进行一对一的单测培训,将对RD整体的单测水平有很大提升,目前已有RD为提高代码可测性进行了代码重构。培训完成之后,将对RD单测覆盖率会有一定要求。后续所有单测将会被加入到quick build中。
B)IT
新增代码的IT将全部由RD编写,QA对其进行review,有时间的话会帮助RD设计一些case,由RD来实现。
IT被作为story达到提测质量的一个必要条件,RD必须对story中新增功能的验收条件达到全覆盖。
C)ST
ST由QA负责,目标是覆盖所有的主干流程,既可弥补自动化覆盖不到前端代码的不足,又能减少QA回归工作量。
8、没有准入,怎么保证提测质量?
challenge:没有准入,RD提测质量太差怎么办?
以前的瀑布流程,为保证提测质量,QA会做一个准入冒烟,通常一个模块几个case,如果case pass率小于85%,则会打回。QA在准入测试也会花费比较大的时间成本。
如今story粒度相对较小,提测太频繁,做准入是不太现实了,但提测质量还是得保证,经过不断地摸索,我们的应对措施为,限定卡片从开发中移动到待测试必须满足的前提条件,具体如下:
1)QA将提测story的验收条件分为两部分(a、新增功能;b、原有相关功能)
2)RD提测之前,需保证所有验收条件通过,否则视为提测质量不合格,产生的bug在迭代回顾会议中进行总结学习。
3)RD提测之前,需保证验收条件中所有新增功能的service层代码,都被自动化集成测试case覆盖,若有特殊情况,提测时需做特殊说明。若QA review时不满足新增功能全覆盖,将在迭代回顾会议上进行case study,后续还得使用工具保证。
4)RD提测前,需完成必要的单测(还待完善)
5)RD提测前,需要进行复杂逻辑的CR,CR规则还在试行中。
使用以上的5条,不仅保证了提测质量,且QA几乎不再需要为准入投入时间,同时,集成测试被落地后,后续的回归工作也会慢慢减少。
经过两个迭代的试行,bug量显著降低了,取得了不错的效果。
9、如何避免新增story影响已有功能造成质量问题?
challenge:没有全面回归,如何保证质量?
基于Story的敏捷,要求每个story测试完成都可直接上线,也是说story从测试中移动到QA sign off后,质量达到上线标准,且须保证不破坏已有功能。
如果QA在sign off每个story之前,都对前面的story和已有的功能做全面回归的话,估计很快会被累死。
怎么解决此问题呢?
临时解决方案:
(1)code frees环节
RD在主干上开发(减小大量merge产生的风险),在上线之前,会有一个code frees环节,从主干上拉出一个release branch(简称RB),用于本迭代的上线。
根据敏捷的经验,在所有story都移到QA sign off区后,再拉RB,因为RB拉得太早,QA的工作量会double,敏捷周期本不太长,测试和开发在stroy间也是并行的,因此 开发完所有story的时间点和QA测试完所有stroy之间的时间不会很长,因此原则上在所有story都移到QA sign off区后,再拉RB,如果情况特殊,也要等QA大致过一遍stroy后,QA点头后再拉RB。否则RB上提交次数太多,工作量和风险都相对较大,拉RB的意义不明显了。
(2)迭代回归
RD继续在主干上开发下一迭代的story,QA在此RB中回归本迭代的内容及可能影响到的原有功能,并测试上线步骤。
用迭代回归,而不是每个story完成之后都回归,减少回归工作量,作为临时方案。
长远目标:
推动RD完成UT、IT,QA完成ST,使自动化测试覆盖已有功能,终将QA从回归中解放出来。
10、上线频繁,如何降低上线的成本?
challenge:每次上线都会花时间去测上线步骤,上线频繁,如何降低成本?
答案当然是自动化上线。
将web和server这种每次上线除配置文件修改,其余操作都一样的上线做成自动化上线。
将文件替换这样的上线步骤做成脚本,QA测试脚本,上线执行脚本即可。