在客户端软件测试过程中,经常涉及到一个功能的测试:排序。在设计排序功能测试用例时我们会考虑各种影响因素:节点名称上的特性,节点属性,其他功能模块对数据的影响,其他功能模块对UI展现的影响等几个方面。
那么排序效果到底是如何实现的呢?这里不得不说到一个函数CompareString()。我们所需要的功能主要就是靠他了。
一. 函数定义
int CompareString(
LCID locale,
DWORD dwCmdFlags,
PCTSTR pString1,
int cch1,
PCTSTR pString2,
int cch2);
二. 参数解释
1. 第一个参数指定一个区域设置ID(locale ID, LCID),这是一个32位值,用来标识一种语言。CompareString使用这个LCID来比较两个字符串,具体做法是检查字符在一种语言中的含义。以符合当地语言习惯的方式来比较,得到的结果对最终用户来说更有意义。不过,这种比较要比基于序数的比较(ordinal comparison)慢。可以调用Windows函数GetThreadLocale()来得到主调线程的LCID。
2. 第二个参数是一组标志,这些标志用于修改函数在比较字符串时采用的方法。表2-4展示了可能的标志。
3. 第三个参数是要比较的第一个字串。
4. 第四个参数是以字节为单位指定字串长度,如设为-1,表示进行自动计算(以NULL中止字符为准)。
5. 第五个参数是要比较的第二个字串。
6. 第六个参数是第二个字串的长度。
三. 测试影响因素
那么从上面函数的参数情况来看,具体的排序功能即排序后哪个字符应该显示在前还是在后,实际上是所调用的windows函数来实现的,一般应用程序并没有去自己实现该功能(如果是自己实现的排序功能则另当别论)
那么作为测试,我们如何去设计用例来进行更有效的测试呢?
个人认为可以从如下几个方面来考虑(主要针对函数的各个参数):
1. 操作系统类型;区域语言设置;系统语言;操作系统位数。
2. 中英文、简繁体、大小写、全半角、数字、特殊字符、标点。
当然,在这里个人认为考虑的重点是各种类型的数据之间的排序是否正常,而非内部排序,因此这里几种影响因素之间实际上是组合关系的。
3. 字符串长度。
4. 排序节点类型。
例如是目录节点还是普通节点。
5. 节点展开/收缩,隐藏/显示的状态。
6. 节点相对。
7. 模块间功能影响因素。
8. 模块间UI界面影响因素。
四. 参考资料
http://msdn.microsoft.com/en-us/library/cc709428.aspx
http://msdn.microsoft.com/en-us/library/cc709428.aspx
http://msdn.microsoft.com/en-us/library/ms538658.aspx
《Windows核心编程-第五版》第二章