从需求出发来设计测试用例,这是一种很普通的思想,但是如何实现从需求到测试用例、如何做好这件事?大家并不清楚,还缺乏清晰的思路。下面将讨论如何从用户的需求演绎出测试用例。让我们先看如图4-1所示的金字塔,金字塔顶是用户需求,经过中间几个环节——功能特性、用例、应用场景,到达底部,就获得所需要的测试用例。
图4-1 从需求到测试用例的演绎
用户表示他们的需求,这是很自然的,甚至是随意的,但又是软件产品开发的源泉。产品中要实现的功能都来源于用户的实际需求,而设计好的功能也都能回溯到需求。理解了需求,也就是了解了功能设计的背景,这样才能真正理解产品的功能特性(features)。基于这样的思想,我们要测试产品的某个功能,就有一连串问题要问自己或问产品经理:
●这项功能解决了客户的什么问题?
●这项功能对客户的价值是什么?
●客户有了这项功能可以做什么?
●客户如何使用这项功能?
●客户在什么情况下会使用这项功能?
●不同的用户在使用这项功能时有什么差异?
●一个用户在不同的应用场景下使用该项功能,又有什么不同?
●这项功能,和以前某项功能有没有冲突?
这样可以帮助我们更好地理解功能特性和用户的需求。同时也看到,针对某个功能特性,可能有多种用例(use case),而每个用例又可能有多个不同的应用场景,所以,从需求到功能、从功能到用例、从用例到应用场景,可以逐步分解,形成一对多的关系。最后,我们为一个应用场景设计一个到多个的测试用例,这样的结果,才能很好地覆盖用户的需求、覆盖用户操作软件的各种情况。
例如,用户使用聊天工具时,看到一幅漂亮的图片却无法用语言描述,就会产生这样的需求——将桌面上某个界面快速地呈现给对方。这一需求可以用桌面共享、应用共享来实现,但效率不是很高,有时会不小心泄露某些不该泄露的信息。所以,更多人会使用聊天工具的发送截屏功能,该功能会定义屏幕拷贝、传给对方,如图4-2所示。
图4-2 聊天工具的发送截屏功能
从功能特性角度可以这样考虑用例:
●有了这个功能,用户如何使用它?
●该功能有哪些基本的使用方法?
这里有4种最基本的用法,即4个用例:
●聊天窗口隐去,截取屏幕后直接发送。
●聊天窗口隐去,截取屏幕,在截屏上做些标记,然后发送。
●聊天窗口隐去,截取屏幕,在截屏上做些标记,保存下来。
●聊天窗口不隐去,截取聊天记录,保存下来。
针对功能、用例,可以进一步考虑有哪些应用场景。例如,针对用例“聊天窗口隐去,截取屏幕后直接发送”,考虑下列应用场景:
●要截取的屏幕很大,在发送后如何显示?
●发送方机器的分辨率和对方分辨率不一致,会出现什么情况?
●待截取屏幕所在的窗口不在桌面上,如何先激活这个窗口,再截取屏幕?
然后,就可以针对这些应用场景来设计测试用例。