测试的心理学!






3.49/5 (25投票s)
2007年2月14日
10分钟阅读

52495
本文讨论的是软件测试的心理学,重点关注软件测试人员的角色和特征。
引言
软件测试人员是测试软件的任何人类。那么,如果有人问你“软件测试需要专门的技能吗?”,你会怎么回答?这个问题看起来很简单,不是吗?但当然不是。软件测试不像你想象的那么容易。毋庸置疑,它是整个软件开发生命周期过程中最重要也最艰巨的任务之一。
在这个复杂的世界里,人类的反应会因情况、环境、情绪、需求、要求、时间、金钱、视野、信仰、教育、知识、专业技能、直觉等因素而大不相同。人类的本性就是如此复杂,在工作场所也绝无例外。因此,断言软件测试人员所做的工作简单而完整,是愤世嫉俗的。
然而,软件测试人员工作质量的优劣,与其在年龄和经验中获得的、采用的和发展的心理成熟度和深度成正比。
“进行测试的人员的心理状态会对测试过程产生影响[Meyer 1979]。”
让我们通过在三种情况下描述软件测试的定义来审视所讨论人员(测试人员)的心理。
1. “软件测试是证明软件正常工作的过程”
上述定义听起来不错。如果所讨论的人员(软件测试人员)是开发软件的人,他/她会试图使用上述定义。此人的意图将主要围绕证明软件有效运行这一点。他/她只会提供那些能得到正确结果的输入。
上述解释是软件开发人员典型的测试心理。
2. “测试是证明软件不起作用的过程”
这个定义听起来非常好,特别是当测试人员的目标是证明软件未能按预期工作时。这种心理能够发现软件中的大多数缺陷。因此,软件测试人员应该具备这种将软件推向极限的心理。
然而,这个定义存在一个实际的困难——如果你问“软件应该测试多少天才能得出软件完美工作的结论?”,答案可能又会变成一个问题本身。
如果有人说“经过一周、一个月或一年的测试,软件仍然没有 bug”,就断定软件没有 bug,或者说软件完全可靠,这都不是正确的结论。
测试并不能保证软件始终没有缺陷或零 bug,它只能减少或最小化已知缺陷,因为 bug 的本质本身就是不稳定的。如果严格执行上述定义,那么我们今天使用的绝大多数操作系统和其他商业软件可能都无法上市。如果是这样,那么上述定义似乎就不切实际了。
3. “测试是检测缺陷并最大限度地降低与残留缺陷相关的风险的过程”
这个定义似乎听起来很现实。在实际操作中,一旦开始软件产品开发,测试过程就应该开始,并跟踪检测到的 bug 的数量,同时进行纠正。
在计划测试的某个阶段,会出现一个阶段,即经过数天、数周甚至数月的测试后,再也找不到 bug,这在统计上允许你得出软件“足够好”可以发布到市场的结论。也就是说,可能仍然存在一些未检测到的 bug,但与残留缺陷相关的风险不高或可容忍。
因此,发布软件的决定可能取决于许多其他因素,例如商业价值、时间限制、客户需求和满意度、公司质量政策等。
从以上三个定义可以看出,软件测试人员的心理在整个软件开发周期和软件测试的质量过程中起着至关重要的作用。
“测试的目的是尽可能多地发现 bug。测试必须在不带任何情感依恋的情况下进行。如果有人指出 bug,那只是为了提高软件质量,而不是为了挑你的毛病。”
软件测试人员的角色和特征
软件开发和软件测试相辅相成。两者都旨在满足预定的需求和目的。两者在本质上都是高度创造性的工作,但人们对这两种人的看法是心理上的,而不是基于区别的分类。
如果成功被视为实现有建设性或创造性的事物,例如开发可工作的软件,那么与此相比,软件测试在大多数人眼中被视为破坏性或负面工作。尽管如此,软件测试本身也应被视为一项与开发工作同等重要的创造性工作,但这只能通过不同的视角和思维方式在实践中实现。
软件测试人员需要与其开发同行相似的技术技能,但软件测试人员还需要掌握其他技能。
- 敏锐的观察力
- 侦探技能
- 破坏性创造力
- 理解产品是其组件的集成
- 以客户为中心的视角
- 多疑但友善的态度
- 有条理、灵活且有耐心
- 客观中立的态度
敏锐的观察力 – 软件测试人员必须具备“注重细节”的品质。敏锐的观察力是任何软件测试人员必须具备的首要品质。并非所有 bug 都肉眼可见。通过敏锐的观察,测试人员可以轻松识别或检测许多关键 bug。观察软件在“外观和感觉”GUI、数据表示错误、用户友好性等方面是否符合既定参数,需要这种特性。
侦探技能 – 理想情况下,待开发软件在开发过程之前、之后和整个过程中都会有文档记录。不幸的是,由于时间和资源限制,文档(规范、缺陷报告等)总有可能未得到更新。
待测试的软件将在称为规范或 SRS 等文档中,在定义明确的函数库和设计规范中得到完整描述,这些文档需要不断更新。因此,测试人员应运用其理性知识,通过正式系统(如系统规范、设计和功能规范)来了解产品。利用这些信息,测试人员应通过其他非正式信息来源(如开发人员、支持人员、 bug 和相关产品文档、相关(以及看似不相关)文档的评论)来研究更多分析信息。
因此,测试人员应具备“侦探”的品质,以更理性地探索待测产品。
破坏性创造力 – 测试人员需要培养破坏性技能——即扰乱和崩溃软件工作流程及其功能的技能。换句话说,测试人员“不应害怕破坏软件”,以免购买它或对开发人员的创作产生同情。在软件测试中,边界就是要被跨越,而不是被遵守。
测试软件时,需要一种创造性的破坏性方法,才能使软件更健壮、更可靠地发展。
“待测软件应像梅赛德斯-奔驰汽车一样进行测试。”
理解产品是其组件的集成 – 软件(可理解为产品)是代码行与用户界面和数据库中的数据交互的结晶。
它是多个代码组的集成,这些代码组相互交互,组装在一起以作为一个整体产品运行。开发人员可能在各自的代码模块上工作,一次只关注正在进行的工作模块。
如果开发人员有时甚至不了解产品的完整工作流程,这并不奇怪,而且也并非必要。而对于测试人员来说,作为待测软件的使用者,应该理解并了解产品的完整规范(操作和工作流程要求)。
测试人员可能不是任何一个软件模块的最佳专家,但他们肯定应该在产品的整体运行方面获得专业知识。事实上,测试人员应该具备产品的“系统”视图,因为他们是唯一能够看到并测试客户在产品交付给客户之前,客户规定的软硬件规格之间相互依赖的模块和兼容性的完整功能的人。
以客户为中心的视角 – 测试人员需要具备以客户为中心的视角。客户(可理解为用户)不必像软件工程师或测试人员那样精明。随着计算机用户数量的日益增长(不必像工程师或测试人员那样精明),最终用户可能既不习惯也不容忍任何 bug、解释或频繁的升级来修复 bug。就像任何客户只想通过获取其价值来消费产品(软件)一样,软件测试人员在测试软件产品时必须采用以客户为中心的视角。
因此,测试人员必须发展自己的能力,把自己放在客户的位置,以普通最终用户的身份测试产品。
多疑但友善的态度 – 无论项目性质如何,测试人员都需要坚持不懈地质疑任何微小的模糊之处,直到得到证实。换句话说,测试人员必须在整个测试周期中奉行“我们相信上帝——其他一切都经过测试”的格言。
在测试过程中可能会出现一些情况——异常地遇到大量 bug,这可能会进一步推迟产品的交付。这可能会导致测试人员与其他开发团队之间的关系变得紧张。测试人员应该平衡这种关系,但不能以 bug 为代价,而是要通过说服和维护他们的意图——“攻击软件,但不要攻击软件开发者”。
有条理、灵活且有耐心: 软件测试人员必须记住,随着互联网和网络的出现,世界在不断缩小,变化非常动态,现代软件也不例外。并非所有计划的测试都能完全执行,而某些依赖于其他测试的测试可能需要推迟到以后进行。
这需要测试人员采取有条理的方法来逐步消除 bug。有时,需要重新运行重要的测试,这会改变软件的基本功能。因此,测试人员应该有耐心重新测试计划中的 bug 和可能出现的任何新 bug。
对于测试人员来说,在动态的开发和测试模式下保持耐心和准备就绪更为重要。随着需求的不断变化和技术的快速发展,开发也在不断变化,测试也应该如此。测试人员必须考虑到这些变化,并计划进行测试,同时保持对测试环境的控制,以确保有效的测试结果。
客观中立的态度 – 没有人愿意听到和相信坏消息,对吧?好吧,在软件项目团队中,测试人员有时被视为坏消息的传播者。难怪,无论测试人员多么优秀(意味着非常负面)并且在其工作中多么出色(发现 bug——没有人喜欢这样做,但大多数人从小就自然而然地非常擅长这一点),他/她可能总是传播软件的负面部分,而软件的创造者(开发者)不喜欢这一点。
“没有人喜欢看到自己建造的房子被烧毁。”
测试人员必须能够处理这种情况,即他/她因为工作做得太好(发现 bug)而被指责。开发团队应该赞赏测试人员的工作,并欢迎 bug,因为测试人员发现的每一个潜在 bug 都意味着少了一个最终客户可能会遇到的 bug。
尽管这是一项技术要求很高的工作,但测试人员的角色始终是客观中立地诚实报告产品中遇到的所有已知 bug。