看了很多关于测试用例重要性的文章,答案都不尽人意要么太理论化了,让人看了显得生硬,看完一头雾水;要么太过时了(不知道停留在那个年代的认识)。笔者很想系统的认识一下测试用例,所以写了这篇文章:
  软件测试的工作,都少不了写用例的时候,我想大部分的用例都是在产品需求出来一部份之后已经开始了,因为这个时候,已经有了写测试用例的依据。有了大致需求之后对编写用例来说一般只是一个开始,我们还需要更多的信息,比如UE(用户交互设计稿)、UI(用户界面设计图)、需求的描述、产品大纲,功能模块图来提供更多的信息来完善用例。往往产品在开始设计的时候,正是用例生命周期的开始。为什么这么说呢,在以下的文章当中,我们让他慢慢的浮现出来:
  我们有时候很困惑,为什么要写测试用例,测试用例对后来的测试到底起到了什么作用?有时我们甚至怀疑,项目测试中是否需要测试用例。好,我先举个测试用例的运用场景。
  假设,这里新成立了一家新公司叫“豆比科技”,他们自己设计了一款软件产品“逗你妹”。产品的需求,用户交互,设计图,各个功能模块的详细描述都有了,产品开始投入到开发当中。而开发好的产品肯定是有很多问题的,必须要又人来保障产品的质量。
  那么谁来保障产品的质量呢,首先,产品可以做这事,因为产品是他们设计的,他们需要对产品负责,但是产品们都很忙,因为他们需要制定产品的战略规划,功能的设计等;设计可以做这事,因为UI是他们设计的,他们对UI了解,但是设计们也很忙,因为他们需要更多的时间来调整UI;开发们也可以做测试,因为产品是他们开发的,有什么bug他们第一时间知道,但是开发们也很忙,他们在忙着实现各种复杂的功能模块,忙得焦头烂额;他们都腾不出时间做这事儿,于是需要交给专门的测试来进行了。而测试既不是产品的规划者,也不是产品的设计者,更不是产品的开发者,可以说测试对产品完全是局外人(恰恰相反,测试是对产品了解的人,产品有哪些功能,哪些bug,如何高效的操作,如何解决某些问题这些都是测试了解的,甚至测试可以扮演一个超级客服的角色,这些我都到“测试人员的自我修养”中来解释);那么测初步要测试该产品只能建立在对需求,设计,交互等方面入手了。于是测试需要向产品,设计要相关的文档 ,熟悉产品的各个模块。
  但是即使测试熟悉了,一旦产品开发出来,测试拿到参评开始使用找bug吗,我想即使测试熟悉了产品,在测试的过程中肯定对产品的功能有所遗忘,即使是熟悉过文档,由于一款产品的功能模块实在太多;如果测试只是凭着对需求文档的熟悉度,开始乱点,没有计划没有目标开始测试,到头来自己做过哪些操作都忘记了,更别谈测试效率,能把测试工作做好了。所以在产品的规划设计阶段,测试 已经开始参与到产品中来,开始熟悉产品,收集各种文档整理成一些操作步骤,这样形成了测试用例,于是用例的生命周期开始了。 所以用例的第一个作用是,把产品需求转换为一种可操作的步骤,方便以后有步骤有计划的进行测试。 而在这样的转换过程中,由于这种很强操作的逻辑在进行,往往测试能发现产品中设计的bug,因为在设计用例的过程中,实际上是在脑海中模拟使用产品;所以,在写用例的过程实际上是对产需求进行测试的一个过程。 所以写用例的第二个作用是验证产品的需求是否合理。 如果发现产品需求不合理,或需求有矛盾的地方,甚至不明确的地方,这时候我们的用例进行不下去了;因为我们写的前一个步骤可能有多个结果,那么产品要的是那个结果呢,或者那几个结果呢。于是我们需要找产品确认;产品一看,这确实需要优化,或需要考虑或者需要想出更好的方案。所以这里又体现了测试用例的第三个作用: 监督产品对需求做出更加详细的设计。 而当产品想出好的方案之后,给了测试回复,于是测试把他写进测试文档。这有体现了测试用例的第四个作用: 记录产品的设计细节,保障以后的查阅。 而测试有了这样一个与产品沟通的过程,对该模块有了更深的印象,这里体香了测试用例的第五个作用: 加深测试人员对产品的认识和印象。 当产品开发出来了,测试这边的准备也差不多了,于是测试人员开始按照测试用例的描述测试,每过完一个用例标记完成;这样测试也知道自己做过哪些操作,避免没有目的随机测试,并且通过测试用例的执行条数,大致了解该模块的测试进度,这又体现了测试用例的第六个作用: 反应测试进度。 而测试人员在执行用例的过程中往往会突然发现当初设计的用例步骤中,还可以做这样一个操作,于是发现了bug,这又体现了测试用例的第七个作用: 帮助发现拓展测试范围,扩大测试覆盖面,发现软件中潜藏的缺陷。
  好了到这个时候,测试用例已经成长为一个青壮年啦。软件测试的过程中,我们按照测试用例描述的执行,大致能确定测试的进度。在测试的过程中,我们会发现bug,而这个bug也许没有在测试用例里面有步骤描述,但考虑到他也许会在以后的版本中复现,于是我们把它的步骤整理出来,形成一个新的用例,以放便测试他是否会在以后的版本中出现,这里又体现了测试用例的另外一个作用:方便回归测试,复查bug是否还会出现。
  软件版本上线后,由于用户的各种使用习惯,以及各式各样的使用场景,以及各式各样的终端环境,会出现一些测试过程中没有发现的bug,大致这样的bug对产品的影响比较小,但也是产品的优化点。在第一个版本发布之后,由于用户的使用反馈,以及产品对用户操作行为的统计,产品有了更好的方案,或是产品要尝试新的东西,于是需求开始变动。需求的变动导致测试用例部分失效,于是测试需要更新测试用例,删除无效用例。这体现了测试用例的一个缺陷: 增加了测试的维护成本。 有时候由于产品上线的时间比较紧,写用例会花掉很多时间,而相对的给测试的时间少了,这有体现了测试用例的另外一个缺陷: 消耗了时间成本。 往往在这样的情况下,为了避免测试时间不够用,我们会花很短的时间列出重要的测试点开始测试。为了避免漏测,我们会参考以前相关模块的测试用例进行。这体现了测试用例的又一个优点: 为紧急情况下的测试提供参考信息。
  好了说道这里,继续。产品测试的过程中总会少不了人员的变动问题。而新人进来大多不熟悉产品,而让他们根据以前的需求测试,肯定会漏测。因为产品在上线过程中已经经历了需求变化,而且也发现了很多潜在的问题,新人肯定是不能从产品需求以及产品中看到这些。所以他们需要测试用例来辅助测试,了解以前出现的潜在的问题,更加熟悉的了解产品以及他的测试;这里再增加一条测试用例的作用:培训新人,节省对新人的指导时间。为什么说这节省了对新人的指导时间呢,因为新人看到产品往往会有很多不理解的地方,所以他们回经常去问“前辈们”,而如果前辈们安排她们执行维护好的测试用例,那么很多问题在执行测试用例过程中解决了,所以问的问题会减少,节约了对他们的指导时间。
  而我们看看现在的手机外包测试。
  我们知道手机的有些功能在好多年以内一般不会变化,特别是同一系列的手机。比如短信、通话、蓝牙、手机记事本、收音机、录音机等等。而测试这些手机功能的人也不是固定不变的,因为人员的流动性,一旦人员流走,那么很少有人熟悉这些功能的测试;他会出哪些问题,哪些行为是多余的功能,哪些功能不正确这些都需要熟悉的人才能执行测试。公司很聪明,在长期的经营当中他知道会发生这样的事情,于是他们把手机容易出现问题的地方,或以前有问题的地方,或是刚开始设计的一些信息都整理成一个个可以操作的文档,记录下来,这形成了我们看到的测试用例。那么新来的员工有了测试的依据,他们往往会被分到一些测试用例去执行,一方面的原因是测试产品是都符合文档的描述,另一方面让新来的员工熟悉产品,以及产品测试的大致步骤。
  因此测试用例的目的对新人来说,提高了新人的测试效率,并且起到培训新人的作用。
  假如一款产品停止维护了,那么所有的测试用例随之失效,到此测试用例的生命周期结束。而新起一款产品,新的生命周期又开始了。所以,测试用例伴随着整个产品的生命周期。
  文章写道这里,我们来总结一下测试用例的优点与缺点:
  优点:
  1、把产品需求转换为一种可操作的步骤,方便以后有步骤有计划的进行测试。
  2、验证产品的需求是否合理
  3、监督产品对需求做出更加详细的设计
  4、记录产品的设计细节,保障以后的查阅
  5、加深测试人员对产品的认识和印象
  6、反应测试进度
  7、帮助发现拓展测试范围,扩大测试覆盖面,发现软件中潜藏的缺陷
  8、方便回归测试,复查bug是否还会出现
  9、为紧急情况下的测试提供参考信息
  10、培训新人,提高新人测试效率,节省对新人的指导时间
  缺点:
  1、 增加了测试的维护成本
  2、 消耗了时间成本