软件测试人员成长必备知识篇

软件质量篇

软件质量包括两个相关但截然不同的概念

  功能性质量(Functional Quality):反映软件是否按照设计实现并满足相应的功能性需求。
  结构性质量(Structural Quality):反映软件是否满足相关的非功能性需求。

评价软件的功能性质量和结构性质量,有一系列衡量指标,有了衡量指标之后,另一个重要的问题就是如何获得这些指标的量化数值。软件测试是验证这些指标的有效方法。

测试的通过指标是根据质量的需求来定义的,系统通过了测试,可以从量化的角度说明它符合需求。

正确性(Correctness):反映了实现的功能达到设计规范并满足用户需求的程度,这是功能性质量的基本指标,通过功能测试验证。

可靠性(Reliability):衡量在规定的时间和条件下,系统维持其性能水准的程度,这是结构性需求的重要指标,通过可靠性获取。

易用性(Usability):反映用户掌握软件操作及理解软件事务所需付出的时间及努力程度,UI,Online Help等。

可移植性(Portability):衡量系统从一个平台转移到另一个平台的容易程度,高可移植性系统应该是容易安装和更新的,对多国语言的支持程度也是可移植性的一个衡量指标。

可迁移性(Migratability):衡量系统版本升级的容易程度。

效率(Efficiency):衡量系统执行某功能所需的计算机资源和时间有效程度,包括功能性能优化,内存泄漏等问题。

可维护性、可扩展性(Maintainability, Scalability):反映当环境改变或出现错误时,执行修改或修复的难易程度。

健壮性(Robustness):衡量系统的容错能力及其是否返回正确提示信息且不影响正确运作的指标。

安全性(Security):衡量系统对攻击性或不当访问的抵御能力。

有效的测试时软件质量的重要保证。

软件测试篇

软件测试的一个原则是尽早地发现问题。作为测试专家,应该考虑的问题也是如何更早地发现缺陷以及有效地解决缺陷。

有没有办法让问题“提前”暴露呢?

发现问题的可行方法:

  分析方法:也可归类为静态测试,主要使用逻辑分析推理的方法发现缺陷和评估问题的严重性,并根据所处的阶段得到解决的方法。由于缺陷没有经过测试证实,而是通过分析的方法推导认定的,这里称其为“潜在的”缺陷,但由于理据充分,本质上这个缺陷和测试发现的缺陷是一样的。在提出了解决方法之后,对设计分析时认为有问题的场景进行模拟,如果在这种场景下没有出现此前认为会出现的问题,那么这个缺陷解决方案就被认为是可以接受的。分析方法不需要等待缺陷目标的开发完成并使用测试进行验证,这种方法对分析人员技能要求较高,他们在需求分析和设计方面的经验必须比较丰富,才能准确定位问题所在。
  测试方法:设计出有针对性的场景,并在测试环境上模拟该场景。如果测试的输出和预期输出有差异,则证实问题存在。使用此方法前提是测试的场景能够在测试环境中正常工作。

无论使用分析方法还是测试方法发现的问题,都通过创建缺陷来跟踪。

Bug:一般指系统存在的问题或者需要加强的细节。

如何更早地、有效地发现问题,是测试专家的一项非常有技术含量的工作,而测试专家的另一项由技术含量的工作,就是发现问题后的问题分析。

问题分析常用的系统方法有两种

  自顶向下(Top-Down): 其着眼处在于整体。使用该方法,首先应该认同的一个观点是,系统整体的问题时系统某个部分的原因引起的,而这个局部的问题放大后悔在系统的宏观级别上表现出来。
  自底向上(Buttom-Up): 对分析者的能力要求较高,前提是,承认缺陷的全部或部分是由于系统局部细节的问题引起的。分析时,根据系统表面看到的蛛丝马迹,直接判断出现问题的根源,并验证这个判断是否正确。作为分析人员,首先应该对系统的这些细节及其在整体中的作用比较熟悉,其次要拥有直达问题根源的“直觉”。

在分析错综复杂的问题,如系统级别的结构问题或性能问题时,这两种方法能够有效地定位问题,而它们的本质也正是准确地重现和定位问题。只要问题得以有效重现和定位,离找到解决的办法也就不远了。

发现、定位和解决问题的方法,是测试人员的核心技能。作为测试专家,核心的能力其实还是思考能力。五花八门的测试方法和技术,得通过自己的实践、总结和思考,转化为系统的测试方法论。当一套属于你自己的测试方法论已经形成的时候,意味着你已经从专家成长为高手了。

像外行一样思考——追求一种新的方法或者角度,仅仅考虑某个问题是否可能存在或者某种方法是否能解决问题,不考虑方法是否有理论依据,也避免过多地考虑可行性。

执行测试消耗了很大一部分时间,而常规项目(不含自动化任务)的任务把可用时间的90%都占用了,也就是说,分析解决问题的时间很有限,那么测试工程师通过什么方法更有效地完成测试任务呢?

  提高测试效率。对于同一个测试人员,效率的提高有两种外在的表现:一是使用相同时间完成更多的测试用例执行,二是对于同一个或同一组测试用例,耗费时间减少。即,提高技能的熟练程度,能够提高效率。

  进一步提高效率考虑的方向应该是减少对测试的人工干预,让测试自动完成,即自动化测试。自动化水平的高低,在很大程度上衡量了一个测试团队的水平。

你可能感兴趣的:(软件测试)