作为芸芸众程序员的一员,我对软件开发中的一切都有着自己的问题。今天是关于测试,作为一名唯物主义者,我相信众物都有其神,于是我找到了测试之神。
我问:神仙哥哥,为什么我们需要测试呀?
大神用他那一贯充满怜悯的眼神看着我,说到:我可怜的孩子们啊,愿上帝保佑你们。之所以需要测试,都是上帝的错啊,上帝创造了你们,但是因为没有测试,所以你们都是不完美的、不理智的,你们会犯错。
我说:我明白了,因为我们每个人都各不相同,我们会被情绪、环境左右,不理智、价值驱动,而我们的大脑也是有限的,更糟糕的是那狭小的大脑只有该死的5%得到了开发,所以我们需要测试。
大神点点头,他对5%这个数字充满了怜悯,当然,他对任何事情都充满怜悯。我想,我该叫他怜悯之神。
我接着问:我们需要测试,可是,为什么我看测试人员只是天天敲键盘而已啊?
怜悯之神说:你的工作难道不也是天天敲键盘吗?
我想了一下,说:那不一样,我敲键盘是在写代码,那些漂亮的页面、增删改查都是代码实现的。
怜悯之神说:开发人员敲键盘是在写代码,测试人员敲键盘是在获取当前系统的信息,这两者真正的工作都是那些脑力活动,是在敲击键盘这个物理行为之前以及伴随这些物理行为的脑力活动。如果你敲击键盘的时候没有进行思考,那么你就不是在进行开发和测试;而且,如果你在思考但是没有敲击键盘,你还是可能在进行开发和测试。
我说:关键是思考。
怜悯之神说:是的。他显然对后半句犹豫了一下,但是还是说了,人类一思考,上帝就带领我们发笑。
我想,这有什么好笑的吗,连朝鲜昨晚都进球了。我说,其实对软件开发人员来说,我们也应该通过使用自己的产品来对他进行测试。
怜悯之神点点头,说,如果你都对自己的产品感到担心和鄙夷,别人为什么要买它?
我说,可是,除非我们开发的是开发工具,否则我们根本不可能用它。地球人都知道,在某个神奇的地方,做减肥药的从来不喝自己的减肥药,买火腿肠的从来不吃火腿肠....人人都需要是化学家。
怜悯之神说:完全由软件开发人员构成的测试样本不太可能代表整个用户群。
我自言自语道,所以我们需要测试人员,需要另一个角度的思考。
等等,我说,尽管测试人员测试了,但是为什么系统还是存在缺陷哩,难道他们不对所有可能性都进行测试的吗?
怜悯之神翻了我一个白眼,他叹了口气,说道,该死的5%啊。作为报复,在下面的叙述中,我将称他为白眼之神。
白眼之神说,对任何程序而言,可能进行的测试数据都是无限的。测试也许可以令人信服的表明存在缺陷,但是永远无法表明不存在缺陷。
我想了想,说,你说的有道理,我们现在的系统需要导入客户的遗留数据,光报表就多达20万,如果一张张的校验报表内容和样式,那么一定会死人的。
白眼之神说,那你们是怎样测试的哩?
我说,抽取样本测试哈。我说,我明白了,由于我们无法测试所有的可能性,那么任何测试实际上都是某种程度的样本测试,这些样本以某种方式代表整个可能测试集合的一个部分或者片段。测试只是采样!
白眼之神点点头,说,实际上,采样也是一个心理过程,而且是一个感性过程,令某人满意的样本也许会让另外一个觉得一点都不满意。
我接着说,由于不可能进行穷举测试,所以我们往往在两个目标间徘徊:希望测试能够覆盖所有令人感兴趣的条件,希望测试集减少到可以管理和承受的程度。就像吃自助餐,希望吃到所有东西,但是又要不把肚皮撑破。
白眼之神说,所以我们需要尽可能选择那些具有最强代表性的样本进行测试,而这是专业测试人员的优势。另外,多样化样本发现的问题可能超过大样本发现的问题,同样,测试团队多样化也可能发现更多的问题。
我说,我想想,我们现在也在进行测试,在开发中,我们采用了TDD的方式,我们单元功能测试的覆盖率很不错,这样,我想单元测试可以减少测试人员?减少系统测试?