代码改变世界

服务器端测试模式总结

2009-05-13 21:17  hyddd  阅读(...)  评论(...编辑  收藏

服务器端测试模式总结

  • 最近这两星期,我一直在研究关于服务器端功能测试的方案,现在正式总结一下:>
  • 本文分为两部分,第一部分是“服务端测试的方向”,第二部分是“现有的服务器端测试方案”。

服务端测试的方向

  • 先看下图:
  • 上图描述了几个问题:
    1. 可以在服务端进行的测试类型,以及它们之间的层次关系

    2. 客户,产品,测试,代码之间的关系

测试类型(5类)

  1. Function Test:功能测试,也叫验收测试。模拟用户操作的基本功能测试,以保证产品的基本功能。
  2. PerformanceTest:性能测试。这是服务端测试中很重要的一环。首先,服务端的很多BUG其实都是在大压力下才出现的,此外,性能测试能为服务器集群,部署提供参考性数据。

  3. Stability Test:稳定性测试。在长时间运行中,测试服务端的稳定性。
    • 以上3种A类测试,绝大多情况下需要完整产品才能进行的测试。
  4. Module Test:模块测试。这里根据模块的集成度,又可以分为两类:单一模块的模块测试,多模块的模块集成测试。
  5. Unit Test:单元测试。这是粒度最小的测试,针对每个函数进行。
    • 以上2种B类测试,只需要相关模块即可展开测试,不一定需要完整产品。
  • 测试类型特性分析

    • 这里我从测试的粒度展开说一下,不同的测试粒度,测试的效果可能会有很大差距。
      1. A类测试,测试粒度较大,这样的测试会较粗的(这仅仅是相对B类测试而言的),但上面说到,绝大多情况下需要完整产品才能进行的测试,这类型的测试往往贴近实际,所以发现的问题比较基础但却最为重要。
      2. B类测试,测试粒度较小,这样的测试是比较细的,很容易发现很多内在的,复杂的,在表面不容易发现的高质量BUG。由于模块的功能单一,所以开展起来也比较简单,而且不用顾及UI,初始化环境等问题(在模块和单元测试中,可以用MOCK方式完全模拟外部环境),但B类测试有个致命的问题,就是它不能说明现在产品的具体质量到底如何(注意是产品的具体质量,不是模块质量),B类测试只是针对各个模块/集成几个模块进行的测试,到底效果如何,是很难判定的,所以 才会出现代码覆盖率这个概念,以量化的方式评定效果。但是当模块集成为产品后,到底质量如何,基本功能是否能用,模块和模块/模块和UI之间能否正常工 作,这就不得而知了(特别如果在模块测试中使用了MOCK模拟外部环境后,此类隐患更加明显),所以在模块测试完毕后,都必须再对产品做功能测试,以确保各部分串跑成功。

测试模式(2种)

  • 对产品的测试模式基本上可以分为两种(见上图的箭头),一种是从上往下的X测试模式(红色箭头),一种是从下往上的Y测试模式(蓝色箭头)。
    • Y测试模式是一种从下往上的测试模式,先从单元测试和模块测试入手,一步步往上,最后进行功能测试,我觉得以下情况非常适合对产品使用Y测试模式:

      1. 人手是足够的。因为Unit Test和Module Test是非常消耗资源的测试。
      2. 项目正处于设计/开发阶段。因为产品还没成型,所以也只能先从模块下手,当然如果可以实现测试驱动开发那是最好的。
    • 采用Y测试模式有个明显好处是:它可以从本质上提高产品的质量,因为越往下的测试类型越和代码相关,先进行单元和模块测试有利于提高开发的代码质量和软件架构,好的代码和软件设计是高质量产品的基础,所以说Y测试模式有利于从本质上提高产品质量。
    • X测试模式和Y测试模式相反,它从上往下的测试模式,先从总体的功能测试入手,一步步深入,最后进行模块/单元测试。我觉得以下情适合对产品使用X测试模式(使用情况也恰恰和Y测试模式的使用情况相反):

      1. 在人手紧缺的情况下
      2. 项目已经开发完毕/差不多完毕
    • X测试模式它先是进行功能测试,在保证了基础功能正常的情况下再进行深入测试。所以在资源(人手,时间...)有限的情况下可以最大限度地保证产品功能的稳定,这也是它优点。
  • 说了这么多,大家应该有感觉,上图中,越往上的测试类型,越贴近用户,也越重要(这里重要是相对而言的,并不是说单元测试不重要),而越往下的测试类型,越贴近代码。各位可以根据产品的特点,选择适合自己的测试方案。

  • 我对小公司的开展测试的建议是:采用X测试模式,在保证基础功能的基础上,再做打算。

现有的服务器端测试方案

  1. 针对Function Test(功能测试)的测试方案:
    1. 使用Web测试工具Selenium编写自动化测试脚本,进行服务端进行简单的功能测试。
      • Selenium是Web测试利器,支持C#,JAVA,Python在内的多种语言编写测试案例,Selenium通过内嵌入JavaScript控制浏览器的动作,实现模拟真人的操作。参考资料:http://seleniumhq.org/

    2. QTP的开源框架Saffron4Web。
  2. 针对Performance Test(性能测试)的测试方案:LoadRunner就是一个很好的选择。
  3. 针对Module Test(模块测试)的测试方案:对于Module Test,我的想法的使用现有的框架编写测试案例,用Groboutils+Cactus+(JMock)搭建起模块测试的基本运行环境。

     转载请说明出处,谢谢![hyddd(http://www.cnblogs.com/hyddd/)]