一个软件测试工程师的成长日记(连载一)

发表于:2013-4-28 11:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:《从菜鸟到测试架构师    来源:51Testing软件测试网采编

分享:

  测试得到的是一种相对客观的结果,通过事实和数据对软件的质量进行定义,为软件的拥有者提供决策的参考。测试通过执行程序或应用的方式,达到发现存在的错误或缺陷的目标。至于测试,使用的方法则是多种多样的。理论上,任何方法,只要发现的错误或缺陷是确实存在的,都是可行的测试方法。但是在项目实践中,我们不可能把所有可能的方式都用上,而只能采取最有效和可控的方法。有效,是指这种方法有效模拟真实的应用,并有效地暴露潜在的问题;可控,指的是使用方法有明确的步骤,通过相应的步骤可以使暴露的问题重现。

  真正的测试中,有效可控的测试方法通常有两类,分别是白盒测试(White-box Testing)和黑盒测试(Black-box Testing)。

  白盒测试指测试人员可以直接访问内部数据结果、算法及其代码实现的测试,常见的方法包括编程应用接口测试、代码覆盖率测试、缺陷注入方法等。通过调用应用程序的公有或私有接口,验证返回内容的正确性的方式,是很常用的白盒测试方法。通常一个测试用例可以用于验证一个被测的接口。如果需要验证一个代码分支,还可以把分支需要使用的多个接口调用放在一个用例中。

  代码覆盖率测试是检验代码是否满足指定覆盖率的测试。例如,可以设计一个测试,通过改变输入条件,使程序中所有代码行都被执行至少一次,并检验输出是否符合预期。覆盖率测试在一般条件下,最大限度地覆盖代码,评估代码的整体质量。缺陷注入关注代码在错误和临界条件的表现。错误和临界条件在所有输入条件中只占小部分,但这部分输入却非常关键,而且存在问题的可能性较大。测试涵盖了错误和临界条件,就能保证代码的健壮性。健壮的程序不仅能处理期望的输入,对于“不速之客”,同样能够从容应对。

  白盒测试用最直接的方式,从根源上发现程序中的缺陷。然而,底层代码的逻辑往往错综复杂,分支繁多,白盒测试的方法需要测试人员对实现的细节比较了解,方可设计出有效的测试用例。而且,因为时间等条件的限制,要覆盖所有分支的所有条件,简直是个“不可能的任务”。于是便有了黑盒测试,通过触发业务相关的功能点,检验集成条件下系统的正确性。虽然不能期待黑盒测试方法能覆盖更多的代码分支,但这些方法针对的都是和实际系统应用相关的分支,因此黑盒测试对于评估系统是否达到需求是至关重要的。理论上,只要黑盒测试的用例设计得足够细致,测试能发现所有应用中可能存在的问题。当然,因为进行黑盒测试的时候系统是集成的,所以发现问题后,需要“打开黑盒子”,用额外的工作定位问题的确切原因。相对而言,白盒测试发现问题后,定位原因的过程会简单得多。

  综合应用白盒测试和黑盒测试,可以达到有效测试系统的目的。

  定义了测试方法,测试工程师应该明确的下一个内容是测试的执行。大型电子商务系统的业务逻辑非常复杂,集成测试往往需要涉及多个功能模块。如何执行测试用例问题,实际上是如何提高工作效率的问题。

  对于界面操作、简单的功能验证用例,通常可以使用直接手工操作的测试方式;但是对于大多数逻辑复杂或者有特殊要求的测试用例来说,自动化测试是主要的测试执行方法。

  手工操作的优势是方便灵活,只需有明确的测试用例作为指导便能执行,不需要花额外的时间准备完备的自动化测试材料。我们甚至可以通过手工操作的方式执行随机测试(Adhoc Testing)。探索式测试不使用可识别的测试用例,而采用相对“随机”的方式验证某些功能点的正确性。但是手工操作的重复开销是测试策略的设计人员必须重视的。由于测试步骤必须通过手工的方式执行,重复执行测试用例的时间与资源开销和第一次执行基本上没有任何区别。对于一线测试工程师而言,不停地重复手工测试用例是个无法摆脱的梦魇,至少热衷于接受新挑战的小艾这么认定。

  自动化测试则能弥补手工测试在重复开销方面的不足。自动化测试,顾名思义,就是测试过程并不需要人工干预的测试方式。其优点是一旦测试的材料(包括自动化工具、自动化测试环境和测试脚本)准备好,测试可以在无须人工干预或在有限度的人工干预的条件下重复执行。对于流程复杂的测试场景,自动化测试在节省重复执行的资源的同时还能很好地控制测试质量和效率。当然,自动化测试对测试团队的组织和技术要求更高。要进行自动化测试,首先,测试团队必须有一套完备的测试工具集;其次,测试人员需要掌握测试工具的使用方法,包括如何编写自动化测试代码,如何执行并收集结果等;最后,对测试资源的维护也有更高的要求。自动化测试脚本和对应的测试环境应当严格归档保存,以备日后查询和重复使用。

  作为一个成熟高效的测试团队,手工测试和自动化测试都是不可或缺的测试执行方法。两者优势互补,可以有效保障软件产品的质量。

  在产品开发过程中,特别在使用敏捷开发模式的项目中,新功能的完成大多是分阶段的。功能点在不同的迭代中陆续发布,同时,在新的发布中还会包含对老版本的问题修复。作为测试,除了需要测试新发布的内容,还必须验证已经存在的功能是否正确,存在的问题是否已经修复。这是测试执行中很重要的一环--回归测试。就理论而言,只要有新的软件版本发布,对执行所有测试用例的回归测试是必需的,因为只有这样,才能从事实上保证所有功能在最新版本中的正确性。随着开发完成的功能越来越多,回归测试中要执行的测试用例也随之增加。自动化测试在重复执行方面的优势正好能满足回归测试的这种要求。

  作为测试工程师,掌握了测试执行方法,可以认为已经掌握基本的专业技能了。然而测试工程师专业技能的涵盖范围其实非常广,因为高质量的测试要求工程师掌握更多的技术,包括架构设计、软件开发技术等。更好地掌握这些专业技术,目的是更好地服务于测试,测试的目的则是发现和排除软件中存在的问题。

  “发现、解决问题其实是一种艺术。”凯文语重心长地指导小艾,“等你熟练掌握基本的测试专业技能的时候,我们还会从更深入的层次探讨测试的核心价值和技术。”

  (未完待续)

55/5<12345
100家互联网大公司java笔试题汇总,填问卷领取~

精彩评论

  • 黑鱼白
    2013-7-01 14:48:06

    如果是一个普通院校的大专生,结果会是这样嘛?怀疑甚至连面试的机会都没有吧

  • yanying0203
    2013-7-01 10:41:59

    向往这样的测试,毕业就能有这么好的系统的学习,难得

  • zww820
    2013-5-02 09:21:17

    写得很好。

  • lyj0418
    2013-4-28 11:26:07

    不错

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号