测试是什么
软件测试本质上和其他测试没有区别,通俗的说法,就是试试软件产品好不好使,具体的说来就是选择输入到软件,看看输出结果是否达到预期,就这么简单,所谓各个级别的测试、各测试技术,只要是测试,都是选择输入,判断结果。
测试的局限性
绝大多数情况下,仅仅通过测试,无法确保被测的软件没有缺陷,这种局限性是由测试本身天然注定,因为测试不是证明。这就如同想表明勾股定理是正确的,即使举了不计其数的服从勾股定理的例子也不能否定存在意外的情况,这里的例子就如同软件测试的测试用例,因此对于软件测试,即使执行通过了不计其数的测试用例也不能否定存在意外的情况,而存在这种意外情况就表明软件存在缺陷。这种局限性如此简单以至于很少有测试书籍直接指出来,倒是有不少书说测试是门艺术,显得高端大气上档次,但是我觉得跟中文字面上的艺术没有半毛钱关系。正是由于测试的局限性,不得不采取一些启发式技术来确保测试的充分性,例如测试要达到95%的分支覆盖就可以给人足够的信心。也正是因为启发式技术,达到同样的95%分支覆盖,有的测试人员能够给人测试充分的信心,有的却不能,这就取决于测试人员的能力、责任心等等。
自动化随机测试是个好想法
编写自动测试框架,有效自动随机选择测试输入,自动判断测试结果,持续不断的反复运行并记录结果。现在无论是个人PC还是机群,价格不贵,性能很好,完全有能力执行自动测试。问题的关键在于编写自动测试框架,而这不亚于一般的软件开发,不过如果你希望得到高质量的软件,这绝对是不二选择,看看微软的windows操作系统系列,现在为何漏洞越来越少,高效的自动化随机测试肯定功劳不小,其他的如Adobe Reader,软件测试也采用了这个技术,软件质量也明显提升。因此如果你想从事软件测试,了解一下自动化随机测试,很有必要。
你的软件你最懂
当前,国内流行第三方测评,我认为最最关键的软件测试人员就是开发人员自己,因为只有他才最了解自己软件实现的弱点,前提当然他必须认真负责。而其他测试人员只能作为补充,这种补充是需要的,智者千虑,必有一失。但是将其他测试人员尤其是那些根本不了解具体实现的测试人员作为关键测试人员,是极不明智的。
是不是不可以将软件测试的任务完全交给第三方呢?也不是。有些重要场合是可以完全交给第三方测试,但必须有详细的各种文档,从需求到设计到实现,当然这种成本高了去,谁能承受?
软件测试追求的不是覆盖率,不是花哨测试技术,终极追求还是软件质量,永远不要把手段当成目的。