背景
大型旅行社的主干系统重建项目
客户端以及公司内部会使用到各种系统,伴随着这些主干系统的老化,各种各样的问题就开始层出不穷。
■客户端系统
无法再应对客户的多样化需求。
(例)外国入境旅客不断增长,但系统不支持多国语言。
(例)酒店、旅行地设施,店内的既有选项无法实现客户定制化服务。
(例)没有现代化的UI,而是传统UI,客户使用不便。
■公司内部系统
业务效率方面开始落后于竞争对手。
(例)在提供旅行商品时,不具备将各种模式组合搭配自动生成产品等的功能。因此,只能根据不同模式,逐个生成旅行商品。
为了解决这些课题,决定重新构建主干系统。
该项目规模达到10亿日元、持续2年时间,规模庞大。
实际推进项目时,发生了测试工时膨胀的课题。
课题
庞大的测试量带来的开发成本/开发期间的膨胀
如背景部分所述,本项目开发规模较大,因此功能测试(集成测试)量也成比例地庞大,开发期间/开发时间也随之膨胀,存在项目进度延迟的风险。
但是测试量和品质是互相牵制的关系,如何权衡选择是个难题。
假如削减测试量,可能会有因测试不足产生系统故障的风险。最终不得不投入大量的测试资源来完成测试,这种案例也屡见不鲜。
为了解决这一课题,我们决定制定一个测试计划。
【参考】
■开发规模
约100万SLOC (1,000KSLOC)
■功能测试CASE数的预估
IPA相对应的基准值50.5件/KSLOC(※1)×1,000KSLOC=50,500件
※ 参考:https://www.ipa.go.jp/files/000069381.pdf
图表 7-5-20 ● 各个测试工序的 SLOC 规模相应的测试CASE数、故障检出数的基本统计量
措施
制定测试计划
为避免交期延误、且保证测试品质不下降,我们采取了以下4个方面的措施
①品质目标的定义
通过测试可以将品质保证做到何种程度,将明确定义这个目标是第一重要的。
因为想要做到覆盖所有模式下的测试是不可能。
换句话说,把系统BUG降至0件是不可能实现的。
那么具体的来说,系统BUG的容忍度是多少?这个度就是我们定义的目标所在。
该项目中的案例
原则上为了控制损失金额较大的系统BUG,我们将目标定义成(图1)所示。
(图1)
②将品质目标具体细分到各个功能
按照品质目标,测试可以覆盖到何种程度的加权是很重要的。
因为要做到保证品质同时减少测试量,上述加权是基本立足点。
具体来说,我们重点实施与品质目标直接相关的功能测试, 削减其他非直接相关的功能测试。
测试量削减到哪一步为宜?这个问题我们将在下文解答。
该项目中的案例
从品质目标出发,针对主干系统的各功能,将其品质目标区分为高/低两档。
出于信息保密考虑无法全部记述,大致提炼内容如(图2)所示。
(图2)
③为各个品质目标设定测试目标
品质目标较低的项目,即无需全覆盖测试也可以达成品质目标。
也就是说,如果按照(图3)这样的测试方针,能够削减测试工时。
提升测试效率的关键在于采用全对偶测试法(All Pairs) 。
(图3)
【全对偶测试法】
大多数的故障都是由于最多不超过2个因子的相互作用而产生的。基于这个考虑,我们采用了覆盖2个项目间的全部组合的测试手法。
※参考:http://www.pairwise.org/
大约7成以上的BUG都是由于2个因子的组合而产生的。
※参考:https://www.atmarkit.co.jp/ait/articles/1505/29/news015.html
【可削减的测试CASE数目标】
例如:5个因子(1个因子的模式分别与剩余4个模式组合)的情况下 、 可以削减864个CASE。
●全部组合的情形
4×4×4×4×4=1,024模式
●全对偶测试法的情形
5C2×16=160模式
该项目中的案例
按上述测试方针执行。
④创建具体的测试CASE
按照品质目标,使用判定表 or 全对偶测试法创建测试CASE。判定表的使用不再赘述
【全对偶测试法的最佳实践方案】
使用工具自动生成是全对偶测试法的最佳实践方案。因为全对偶的测试CASE由人手工作业创建是十分困难的,如果不使用工具很容易发生测试CASE遗漏的情况。
【自动生成全对偶测试法测试CASE的工具】
2种工具搭配使用(图4)。
工具的使用方法和步骤将在下文中展示(图5,6)。
(图4)
(图5)
(图6)
成果
确保品质的同时,成功降低了测试量。
削减功能测试(集成测试)的量,在预定的开发周期内完成了测试。
同时,也按照预定的BUG密度成功提取了BUG。
■成功之处
①在早期阶段计划
在早期阶段(测试计划阶段)提出提高测试效率的想法,并加以实现这点是成功之处。
最终,通过事先与利益相关方共享全对偶测试法的概念,使得项目得以顺利导入。
②工具导入
导入了创建全对偶测试法的测试CASE所需的工具也是成功之处。
最终,实现了测试CASE的高效化创建,防止了测试CASE的遗漏。