咱搞软件开发的都知道,大多数团队都盼着能快点发布高质量的软件系统,还不想牺牲质量,可这事儿平衡起来,真挺难的。
速度为什么重要?快速发布那是商业现实啊,能让产品赶紧打进市场。质量呢,高质量的软件系统能给用户带来好体验,还能促进销售。但想一直又快又好地发布软件系统代码,真就跟做梦似的,太难实现了。

平常啊,要是追求快速高效发布,那质量很可能就被牺牲掉了。有时候企业为了赶紧发布软件,抢占市场,比竞争对手快一步,就顾不上软件质量了,想着之后再慢慢解决质量问题。可软件质量怎么样,直接关系到这应用能不能成功啊。
所以说,团队得想法子在速度和高质量代码之间找平衡。
什么叫速度?就是团队开发、测试一个迭代功能,再把更新部署到生产环境,这一整套流程花的时间。质量呢,就是软件系统性能好不好。要是客户用的时候发现各种毛病,像有影响使用的缺陷、性能不行,或者新功能不好上手,那用户体验就大打折扣了。
客户既想快点用上新功能,又希望软件系统性能好,没毛病,用起来还得方便,不用看什么文档就能轻松上手。但软件系统要是复杂点,想同时满足客户对速度和质量的要求,可就不容易了。
有些情况下,QA测试人员和开发团队确实会更注重发布速度。
比如说,搞社交媒体互动的软件系统,或者新出现、竞争对手少的软件系统,再或者把旧软件系统,或者客户少的软件系统发布到没什么活力的市场,还有开发纯娱乐目的的软件系统,以及更关注部署而不是测试,这些时候敏捷团队往往更看重速度。
敏捷方法通过把开发过程分成一个个迭代周期,能加快开发速度。团队在每个周期里测试,保证软件系统符合质量标准。看重速度的团队,一般会把精力放在开发人员的单元测试,还有QA支持的测试自动化上,争取在软件开发早期就找出关键缺陷。
QA测试人员通常不会去做回归测试,除非这些测试包含在持续测试自动化里。他们还经常用探索性测试来手动测测可用性。有些公司还会找外部QA团队,在冲刺结束时测测用户接受度,看看客户对质量的评价。
这种速度优先的做法,有好处也有坏处。好处是客户能很快收到测试版本,团队可以直接把缺陷修复放到下一个版本,产品能迅速进入市场。坏处就是发布次数多,错误修复也多,测试需求跟着增加,代码还不稳定;用户体验因为缺陷变得不一致;软件系统性能不好,客户就跑了;而且软件系统越复杂,生产中出问题的可能性越大。不过要是团队在测试自动化和持续测试方面经验丰富,采用持续集成/持续部署模型,测试更侧重于代码,缺陷对客户来说可能就没那么明显。
要是开发的软件系统涉及敏感个人数据,集成度高,或者得符合特定监管标准,那团队就得把质量放在速度前面。像那些不能出岔子的软件系统,质量更是首位。比如说银行业、经济、医务保养、零售、物联网、航空航天这些行业,很多组织都更注重质量。
处理敏感和私人数据的软件系统,得进行大量的安全、功能和性能测试,还得有备份和故障切换系统,保证系统出问题时功能还能正常运行。而且这些行业的软件系统相互关联,像很多医务软件系统,会和经济、图像处理、通信系统什么的连接。所以彻底测试对保证每次发布的质量,维护高度集成系统的完整性,特别重要。
选择质量优先的软件开发团队,在测试和开发中也讲究效率。他们还是按敏捷迭代的方式工作,但更重视测试,因为测试对保障质量太关键了。QA测试团队会制定高效的测试流程,节省时间,保证测试围绕交付高质量软件系统展开。这样一来,敏捷团队就能又快又好地交付软件系统。
质量优先也有优缺点。优点是发布的版本质量高,缺陷少,可用性和用户验收测试更好,用户体验好,缺陷、安全、性能等问题也少。缺点就是软件开发和测试周期变长,发布日期可能因为测试结果或者缺陷修复受到影响,要是团队在迭代过程中修不完所有缺陷,还会积累技术债务。
要给客户提供优质软件系统,开发高效的QA测试流程是个好办法。测试在软件开发团队里的作用,就是保证测试有条理、有计划,还能及时进行。敏捷测试既强调速度,又注重准确的测试实践。把测试当成每个冲刺或迭代的一部分,软件开发团队就能既保持频繁发布,又维持稳定的质量水平。
团队可以通过这些办法提高测试执行速度:
- 用敏捷测试实践。
- 搞好团队沟通,积极合作。
- 能自动化测试就自动化。
- 在冲刺里采用测试驱动开发(TDD)。
敏捷测试实践需要和开发团队协作。团队沟通好了,就能少浪费时间自己找答案,在团队协作环境里很快找到解决办法。团队还应该开发自动化测试框架,用来创建、执行和排除自动化测试。测试人员能用自动化在冲刺里完成回归测试,或者在TDD里对新功能做功能测试。

团队还能通过这些办法提高测试效率:
- 做好测试计划。
- 通过自动化创建测试实例,快速刷新测试数据。
- 进行并行测试。
- 用探索性测试辅助测试自动化。
- 能自动化流程就自动化。
制定测试策略或计划,可以让测试团队和工作更有条理,提高效率。团队从计划里就能知道要做什么、在哪做、谁来做,测试人员就不用浪费时间琢磨该测什么了。要是可能的话,团队应该用流程自动化创建QA测试实例,能按需快速启动。每个QA实例都得提供准确又容易刷新的测试数据。团队还应该在不同的QA实例上并行测试,这样就能在同样时间里执行更多测试。
流程自动化能大大提高测试的效率和速度。团队按需用探索性测试,不用记录步骤。探索性测试没什么限制,测试人员就能发挥经验和创造力,找出可能被忽略的缺陷。
速度和质量的争论肯定还会继续。团队得靠QA测试来平衡这两者。每个软件开发团队都想在保证质量的同时,按时发布软件系统。没哪个团队愿意没事处理客户投诉或者缺陷报告。
每个软件系统都得测一测。先确定每个软件系统发布能接受的质量水平,再制定发布计划。团队得一起努力,搞出全面又高效的测试实践,这样才能在速度和软件系统质量之间找到好的平衡。