”创新决定了能飞多高,质量决定了能走多远”
1.前言
软件测试工作,在软件研发中的作用是显而易见的也是至关重要,研发团队往往把系统测试作为产品上线发布前的最后一道关卡。最近经历了几个大版本的开发,过程中虽然都交付了产品版本,但是交付质量差强人意,延期送测、打回送测、送测过多,线上服务不稳定等等问题屡见不鲜,大家终于,终于痛下决心来一起商讨下怎么提高软件测试质量。于是就有了下文的内容。
2.相关知识
2.1 全程测试概念
一个软件系统随着生命周期的发展,会越来越像个庞然大物。那些潜在的缺陷或问题慢慢被发现,同样也会随新的功能一起引入到系统中,以我们部分的软件系统为例,一次版本开发,前后台会涉及十几个甚至几十个项目的改动,一次送测往往能抖出几十个bug,一上线不是炸锅就是小问题不断。回首起来, 这真是一段段让人印象(tong)深刻(ku)的回忆呀。经过童鞋们一致协商后,大家决定尝试实践“全程测试”。
所谓的“全程测试”就是软件测试贯穿于整个软件过程,从项目启动第一天开始就将软件测试引入进来,可以第一时间内发现缺陷,降低缺陷带来的成本,构建更好的产品质量。
首先,我们要了解下为什么要有全程测试? 在传统的瀑布开发模型中, 修正的缺陷的成本可能会随着研发周期的进行而成指数级的提升,一个很生动的例子,测试童鞋发现了一个缺陷,然后跟相关的前后端开发确认,开发的童鞋可能觉得这个缺陷是需求或者交互的问题,然后又跟测试童鞋一起找产品经理和交互设计去确认,一大圈转下来,一个缺陷的确认就浪费了大半天的时间,如果幸运的话,开发童鞋如果发现还能抢救下快速修复好这样还能按时交付,如果发现是需求问题或技术方案问题,那就只能凉凉了。所以可看出来,缺陷产生的阶段越靠前,解决缺陷的成本和代价就越低。如果就像全程测试的概念一样,从软件需求阶段就开始接入测试/质量的管控措施,势必会极大提高软件系统的整体质量。
在全程软件测试中, 我们不仅将测试左移(左移到需求、设计阶段),而且右移到运维,如在线测试(Tip)、在线监控和日志分析等。 再进一步扩展,左移可以包括测试驱动开发(TDD),验收测试驱动开发(ATDD)。其中还可能包含了性能测试、安全测试、易用性测试等多个方面,使各种类型的软件测试覆盖全软件研发生命周期。
目前来看,很多团队的单元测试做的不够好甚至做的很少,因为编写与维护单元测试会浪费一部分的开发效率,有些童鞋甚至就不写单元测试,将代码质量完全交与研发后期的系统测试。从现实角度出发, 测试左移动包括了单元测试,并对单元测试有较高的就要求,而且强调代码编写与单元测试同步进行,写好一个类测试一个类型,而不是集中写几个类,然后再集中做单元测试,这对开发童鞋提出了更高的要求。
_**测试左移: 将测试计划与设计提前进行,以及开展需求评审、设计评审、代码评审等;
**测试右移: 将测试延伸到研发阶段之后的其他阶段,一般主要指产品上线后的测试,如在线测试、在线监控和日志分析等
_
2.2 测试驱动开发
说到单元测试不得说是敏捷开发模式中的(TDD Test Driver Development, TDD)-测试在先、编码在后 的开发实践,可以分两个层次理解:
代码层面,在编码之前写测试脚本,成为单元测试驱动开发(UTDD);
_
业务层,在需求分析实就确定需求(如用户故事)的验收标准,即验收测试驱动开发(ATDD)._
UTDD更主要的是强调一种开发意识,在打算添加新功能实,先不要着急撸代码, 而是将各种条件、使用场景等想清楚,为待撸的代码先写好测试脚本。然后,利用集成开发环境或相应的测试工具框架来执行这段测试用例,结果自然是不通过的。利用没有通过测试的错误新消息反馈,了解到代码没有通过测试用例的原因,有针对性地逐步添加代码。最基本要求是:先写好测试脚本(代码),然后在写代码并通过测试。先写测试类,再写产品类。
3.开发实践
纸上得来终觉浅,绝知此事要躬亲。
我们现在大部分的软件产品/系统都遵循敏捷开发模型, 一个好的研发模型是决定软件产品质量的重要前提,产品需求经过调研后输入到迭代中形成用户故事实例,并经过分解后形成任务列表,在版本迭代中经过编码规范、代码审核检查、单元测试、持续集成等等环节后完成一个产品/系统的发布。
目前我们整个研发迭代质量的把控按照质量模型划分为需求质量评审/设计质量评审/开发质量/运行质量四个环节,需求阶段质量评审主要关注需求的功能性和易用性,设计质量评审主要关注维护性、可靠性、效率、可移植性、安全性、互联性,在开发阶段主要关注编码规范、代码评审、单元测试、持续集成等,上线发布后主要关心性能、持续可用性、可持续性、鲁棒性等。
4.总结
全程测试是将软件测试贯穿于整个研发周期的一种做法,这种做法经过两个版本的迭代检验,目前来说有较好提升了软件的质量。本篇先是分析了全程测试的必要性,然后偏重于测试驱动开发,最后介绍了我们团队目前进行高质量代码开发的建设思路。希望大家有所体会,能够重视软件质量。