蜕变分析
实际测试结果在
./results 目录里的文件里.这些结果会与
./expected
目录里的预期结果用 'diff'进行对比.任何区别都为你保存在
./regression.diffs
里。(或者如果你愿意地话,你可以自己手工运行
diff)
这些文件可能不能精确地匹配.测试脚本把任何区别当作“失败”报告,“失败”
的测试的失败原因可能是因为微小的跨平台的错误信息,数学库,或输出格式等的差别.这类"失败"
并不表明 Postgres 有问题.
因此,有必要对每个“失败”的测试的实际差别进行检查,以发现这是否是一个真正的问题。下面的段落会试着提供一些判断这些区别的重要与否的指导。
错误信息差别
有一些蜕变测试涉及到有意的非法输入值.错误信息可能会来自 Postgres 代码或来自主机平台系统路径.对于后者,信息可能在平台之间区别比较大,但应该反映相似的信息.这些信息上的差别将会导致一个"失败"的蜕变测试,我们可以通过检查文件发现这一点.
日期和时间差别
大多数日期和时间结果依赖于时区环境变量。参考文件是为时区 PST8PDT (伯克利,加州)准备的,因而如果测试没有设置为那个时区是显然会失败的。蜕变测试的驱动器把环境变量
PGTZ 设置为 PST8PDT 以保证正确的测试。
如果你在改为夏时制的日切日或者该天的前天或者后天测试时,在 "timestamp"
测试里的一些查询可能失败.这些查询假设昨天午夜,今天午夜和明天午夜之间的间隔是精确的
24 小时... 如果是夏时制开始或结束的日切日,这些(假设)是错的.
有些系统不能接受我们推荐的显式设置时区的语法;在这样的机器上你可能要用不同的
PGTZ 设置。
有些使用旧的时区库的系统在对 PDT 1970 年前的时间使用夏时制时会出毛病,导致
PDT 1970年以前的时间显示为 PST。这会导致在测试结果里的本地化区别。
浮点数差别
有些测试涉及到对表中的数据列进行 64位 (
float8)
计算的问题.我们观察了涉及到 计算
float8
字段的数学函数的结果的差别.float8 和 geometry(几何类型)测试尤其容易在不同平台之间产生小差别。这时需要肉眼对这些差别进行比较,以判断这些差别究竟有多大,我们发现是在小数点右边10位数。
有些系统在 pow() 和 exp() 出错时产生的信号与目前 Postgres 代码里期望的机制不一样.
多边形差别
有些测试涉及到关于加州奥克兰/伯克利街区图的地形数据(译注:原文是'date',怀疑是'data').这些地图数据是用多边形表达的,多边形的顶点使用一对
float8
数据表示的(数字纬度和经度).一开始,先创建一些表再把地理数据装入,然后创建一些用多边形相交的操作符(##)联合的两个表的视图,最后对视图进行选择操作.对比平台不同产生的差异,差异发生在小数点右边第二位和第三位以后.出现问题的
SQL 语句是下面几条:
QUERY: SELECT * from street;
QUERY: SELECT * from iexit;
随机数差别
在 random.out 里至少有一个测试会产生随机结果.这会导致回归测试中的随机测试失败(可能每五次到十次出现一次).键入
diff results/random.out expected/random.out
会产生仅仅一行或几行差别.你不必担心这些,除非随机测试总是失败.(另一方面,如果在多次蜕变测试中随机测试
从来不失败,你可能
也要担心.)
“预期的”文件
./expected/*.out 文件是从最早的单个的由 Jolly Chen 提供的
expected.input
文件修改出来的.为不同开发平台生成的这些文件的更新版本在经过仔细(?)的检查后代替了原先的.许多这样的开发机运行着在
Ix86 硬件上的 Unix OS 的变种 (FreeBSD,Linux等).最初的
expected.input
文件是在一台使用
postgres5-1.02a5.tar.gz 源码树的 SPARC Solaris
2.4 系统上生成的.我们将它与在一台 I386 Solaris 2.4 系统上生成的文件进行对比,发现只有多边形浮点数小数点右边第三位数后有差别(参阅后文).最初的
sample.regress.out
文件来自 Jolly Chen 构建的 postgres-1.01 版本,我们在这里一起附上以供参考.该文件可能是在一台
DEC ALPHA 机器上创建的,因为 postgres-1.01 版本的
Makefile.global
文件里有 PORTNAME=alpha.