软件测试浅悟妄语[2] 软件测试
从“测试”二字说起
一个民族的文化能够得以保存,是因为有了语言和文字。其中尤以文字最为厉害,因为语言难以记录(录音机、MP3和DV那是近几年的事儿),在千万年的口耳相传中难免产生讹变和失传,而文字是相当稳定的东西,即使发生讹变和误用,机率也比语言要小得多。
特别是中国的方块字,那就是一座宝藏。古人在造字之初的含义就蕴含在这方寸之间,虽历经甲骨钟鼎、篆圆楷正,却几乎一点不变地穿越时空,把祖先想表达的意思直接带到我们面前。拉丁文等拼音文字就差一些了,它没有“形状”,只能依靠字母的排列组合来作为遗传的DNA了。
中国人把Test翻译成测试,妙哉!
先看“测”字。从“水”、从“则”。“则”为何物?我们常说的“规则”,规是用来画圆的、矩是用来画直角的,则最早是用“刀”把章法刻在“鼎”上让人们遵守的——后引申为“尺度”。这下,圆规、直尺、三角板都齐了,呵呵。拿尺子伸到水里,不就是测量水的深度吗?这就是“测”的本意——亘古未变。再进一步,其实测量不光能测水深吧,凡是与被测对象的属性打交道、进行量化的行为,都应该算作“测”。秦始皇下大力气统一“度”(长度)“量”(体积)“衡”(货币),不都是为了方便测试行业在全国的统一发展吗。请大家注意,“测”字为我们传递了一个非常重要的信息,那就是“静态”。基本上可以说,如果被测对象不是相对静态的,那么就无法测量了。量子物理中的“测不准原理”中的测,也正是说明这一点。
再看“試”字。从“言”从“式”。 试,用也——《说文》。毋庸多言,“试”字为我们传递的重要理念是“动态”——使用,当然是动态的。而且,软件测试在国际范围内的公共定义就是“为了找到软件缺陷而进行的使用”。引申一步,“试”字从“言”,又有“考试”一个含义。看来,这个考试是口试了,呵呵。既然是考试,那么问答就是必要的了,所以会有一个言字,其实这一“问”和一“答”就是软件的“输入”与“输出”。
软件的Build从拿到我们手里开始,就是处在“动”与“静”的交替状态。既然是动静交替,我们非要先把静的挑出来写成Case、再把固定某一种“动”挑出来写成Case(而不管它在什么时候出现),当然是件很麻烦的事情。那么我们应该怎么办呢?
对软件的“测”
上文提到,静者为测。让我们想想软件都在什么时候是“静”的。
我们看一个自然的流程:Build下载à下载完成à安装à安装完成à开启à使用à关闭à卸载。哪些是静?哪些是动?让我们一一剖析。
1. 下载 : 全部属性处在动态而不可测中。
2. 完成: 静态。此时可测量软件的大小、Hash验证码等。
3. 安装: 全部属性处在动态而不可测中。
4. 完成: 静态。此时可测量软件各文件大小,目录,COM注册情况,注册表情况等属性。
5. 开启: 动态。全部属性处在动态而不可测中。
6. 使用: 半动态。哈!怎么是半动态呢?因为这时候软件已经从硬盘Load进内存了,在内存中是相对静态的。你可以观察内存占用是否稳定、有否泄漏。这就叫“静中有动,动中有静”,这才是咱们中国人的哲学。
7. 关闭: 静态。检查运行后的生成物(如聊天记录、Log文件、temp文档)是应该存在还是被删除。
8. 卸载: 静态。检查有没有遗留物,硬盘、注册表,都找找看。
看,这样理顺下来,是不是写Case就轻松多了?如果要是按照Test Plan的架构来写Case,这些Case应该分布在至少是“内存检验”“注册表检验”“安装测试”“文件完整性测试”……等等分支里。总之,在软件处在相对静态的时候,你能深入想出软件的多少属性,那么就能写多少Case。进而,你能想出多少直接和间接影响软件这些属性的环境因素,就又有多少Case出现……然而,我们的思考能力是有限的,我们几乎不可能把软件的所有属性都想到,我们也不可能把所有可能影响软件静态属性的环境因素都找出来——即使是使用各种静态测试工具,比如内存跟踪工具等——也不可以完全做到。因此,有了我开篇的妄语。