叶鹏
摘 要:随着计算机软件行业的发展,越来越多的人开始意识到软件质量的重要性。软件测试的需求越来越大,测试的标准也越来越高。如何提高软件的测试效果和测试效率已然成为很多人研究和讨论的内容。本文抛开传统的计算机技术领域,从心理学角度对软件测试进行探究,力求更好的帮助人们完成软件测试工作,更好的提高软件产品的质量。
关键词:心理定势;问题解决;功能固着;动机;思维
中图分类号:TP311.5 文献标识码:A
Show Discussion about the Psychology Influence for Software Testing Activity
YE Peng
(1.School of Electronics Engineering and Computer Science,Peking University,Computer Application Technology,Beijing 100871,China;
2.Oracle Software Research and Development Center Beijing Co.,Ltd.,Beijing 100094,China)
Abstract:With the developing of computer software business,more and more people begin to be aware of the importance of the softwares quality.The amount of software testing requirements is getting bigger and bigger,the criterion of software testing is becoming more and more strict.How to improve the quality and efficiency of software testing has become the research and discuss contents of many people.In this article,we will have the discussion on the software testing jumping out of the traditional computer technology area and just only focusing on the psychology area,to give more good helps for the people to accomplish the software testing work and better improvement for the qualities of software product.
Keywords:mental set;problem-solving;functional fixedness;motive;thinking
1 引言(Introduction)
随着电子元器件硬件技术的飞速发展,计算机软件技术也日趋丰富和规模化。人们对计算机软件的需求和依赖也随着经济和科技的发展与日俱增[1]。借助强大的计算机软件技术,人们早已经不再局限于早期的加减法运算和科学研究,军事、医疗、生活、商业、教育……每个领域都能看到计算机软件技术带来的革新化应用和影响。伴随着规模和复杂性急剧增加的成M上G比特的计算机应用软件,软件开发成本以及由于软件故障造成的经济损失和经济风险也逐年增加。软件质量问题已然成为很多人思考和关注的焦点。因此,很多科学家在展望21世纪科学发展方向和策略时,把软件质量放在优先于提高软件功能和性能的位置上[1]。
软件测试是对软件需求分析,设计规格说明和编码的最终复审,是软件质量保证的关键步骤。从行为的角度来讲,它实际上是一种或一系列过程,用来确认计算机代码完成了其因该完成的功能,不执行其不该有的操作。随着软件系统规模和复杂性的增加,进行专业化高效软件测试的要求越来越严格,软件测试职业的价值逐步得到认可和重视,据最近10年的计算机各行业领域发展研究的有关统计,软件测试在整个软件开发中占据了一半或一半以上的工作量,软件测试从业人员急剧增长,软件测试评测中心如雨后春笋般成长[1]。
作为一门新兴并且日渐发展的技术,软件测试有其特有的理论基础和技术研究范畴,从早期的非基于计算机的“人工测试”,如代码检查、走查和评审,到后来较为传统的基于计算机的测试技术(白盒测试,黑盒测试等)和测试过程(单元测试、集成测试、系统测试、验收测试)[2],再到近期逐渐发展起来的基于敏捷开发模式下的测试,如敏捷测试、极限测试等等,软件测试技术理论变得日趋完善。测试技术的飞速发展,也大大加快了提高计算机软件技术发展水平的步伐。诚然,这些基于技术层面的软件测试理论,在指导人们从事软件开发活动的过程中,为保障软件质量,降低开发风险,提高劳动生产率上,都发挥了重要的指导作用。但软件测试是一项涉及面宽广的,复杂而又不可完全量化的高级脑力活动,人们在研究软件测试领域的时候,往往只注重其技术层面的理论和方法,而忽略了非技术因素对软件测试活动所带来的影响。毕竟,从事测试活动的主体是人而不是动物,也不是机器,所以很多软件测试活动的成败与否,往往不是单纯的靠解决技术层面的问题就能决定的。人为的因素往往也是成功与否的关键。而与人类活动密切相关的研究领域就是心理学,所以,研究跟软件活动相关的心理学问题对提高软件测试的质量具有非凡的意义。本文在探讨软件测试过程中心理学相关问题的同时,意在帮助人们提高对心理学给软件测试会带来正负影响的认识,为整体提高软件测试质量,教育和培养新一代软件测试人才,起到推波助澜的作用。
2 与软件测试活动密切相关的心理学问题(The
psychology issues closely related with software
testing activities)
心理学自兴起到发展至今,由最初的基本理论,已经发展和衍生出了多种分支,涉及的领域也越来越宽广。本文不是一篇以介绍心理学为主题的专业性文章,因此也不会在广度和深度上对心理学进行尽善尽美的详细阐述。本文只从三个主要的涉及软件测试工作的心理学领域进行分析和举例,以期帮助大家更好的认识软件测试工作中涉及到的心理学问题。
2.1 定势心理学对软件测试的影响
心理定势指一定的心理活动所形成的倾向性准备状态,通常意识不到。它是多种心理内容和心理形式整合而成的一种整体状态或效应,它引导或决定后继活动的产生倾向,使认知、思维、心理保持一种持续的惯性[3]。
在软件工程学里,对软件测试工作产生重要影响的是定势理论里的注意定势和思维定势。所谓注意定势,是指由于刚刚发生过的刺激或目标的影响,使注意处于一种准备状态,决定后继注意的趋势。所谓思维定势,就是按照积累的思维活动经验和已有的思维规律,在反复使用中所形成的比较稳定的定性化了的思维路线、方式、程序或模式[3]。
软件开发人员是软件产品的作者,他们掌握着自己软件产品的所有核心技术,熟悉所有的技术细节。这一点上,他们在软件测试上具有很大的优势。所以很多行业的软件领域,软件产品初期的单元测试用例都是由软件开发人员在开发软件产品过程中自己一并开发且参与到测试中的。但是,事物往往是一分为二的,优势换另外的角度来说就是劣势。越是熟悉的事物,越无法对开发者们造成具有显著特征的奇异刺激,因而也会自然地降低了他们关于刺激驱动的注意捕捉,产生“选择性看”和“未注意盲视”的效果[4,5]。既开发者在测试过程中,由于定型化的思维模式和处理问题的方式,往往只关注跟自己设计相关的局限视角问题,而却忽视了以用户角度进行相关软件使用的方方面面。很多时候,非开发人员测试过程中很容易看到或发现的问题,在这些开发者本人眼里却成为了“测试盲点”。
而且,从潜意识里,开发者本人是不情愿看到或承认自己开发出的产品存在缺陷或问题的。由于他们对自己开发的产品存在“符合设定需求的完美开发产品”的心理定势,造成他们对自己软件的测试往往有失客观和公正,无法发现软件缺陷也成了顺理而然的窘况。
基于以上种种关于心理定势对软件测试的影响,在如今的很多软件测试工作里,都会采取尽量避免在一个软件产品开发完后由开发者本人来进行测试的决策,换而代之的是尽可能安排非开发团队的技术人员来负责产品的质量监测。不少大公司,对于一些影响公司利益的重要产品,为了更好或更多的发现软件产品中的问题,甚至会不惜成本的专门成立不懂技术的非技术人员测试小组来进行测试。可见越来越多的人,开始意识到定势心理对软件测试的巨大影响了。
2.2 思维心理学对软件测试的影响
思维心理学主要研究人类思维的本质特点,人类思维的过程和机制,人类思维的特点和偏向,人类思维能力的发展和提升。软件测试是一种跟软件开发类似的,对智力水平要求较高的高级脑力活动。个体思维能力的高低,往往会直接或间接决定软件测试的质量与效果。思维心理学的研究领域大体包括:知识的表征,概念的掌握、推理、问题解决、创造性思维和决策等[6]。这里主要谈讨一下问题解决与创造性思维对软件测试的影响。
2.2.1 问题解决
问题解决是人类的一种基本认知能力,也是人类思维的一种重要形式[6]。软件测试人员在进行软件测试项目的时候,必然会遇到各种各样的问题,如何快速,高效的解决他们手头遇到的问题,是衡量他们测试能力的一个重要标准。是什么会对测试人员的问题解决造成影响呢?
首先是知识经验的影响[6]。在软件测试领域,测试专家和测试新手的解决问题能力的差异,很多时候并不取决于他们的智力水平,而是取决于他们对某一测试领域的相关知识的积累程度。比如一个新的测试项目,测试专家可以在很短的时间内,掌握该测试产品的技术细节,如果是在软件开发初期,他们甚至可以为一些开发人员提供建议或指出不足。越早的融如这个项目和开发团队,为后期的测试就越早的铺平道路。在遇到测试问题的时候,比如说测试环境搭建,比如说对测试失败后的问题分析,以及BUG问题的专业性描述,他们可以通过对技术文档的深入学习和掌握,自己解决或跟开发人员进行很好的沟通获得帮助而解决。
案例一:
在甲骨文公司Solaris Core OS QE部门里,曾经有这么一个项目,叫Analytics。它实际上是基于Java Web页面的,可以对Solaris的系统性能进行监测和分析的一个工具。这个项目从设计到开发并最终集成进Solaris12操作系统前后超过两年多的时间!就工具本身而言,开发工作并不是非常复杂和难以实现,但因为没有能够承接这个项目测试工作的小组及个人,该项目一拖再拖,进展缓慢。Solaris Core OS测试团队的工程师们最擅长的是系统工具集和系统指令集的功能测试,通常使用CTI/TET进行自动化测试。TET工具在进行系统测试的时候具有非常丰富的接口,但是在互联网领域应用甚少。在遇到基于Web界面的自动化测试脚本的开发问题上,很多人都不知道从何下手。后来,领导找来刚调来不到四年但SUN/Oracle工作年限将近20年的老工程师,由于他在以前IT系统维护组的时候参与过一些基于互联网的测试工作,知道一些用于Web自动化测试的工具,比如Selenium、QTP等等。通过跟开发人员的顺利沟通与短期合作,不仅有效的协助他们完成了项目的开发与测试,还利用Selenium和Framebuffer技术,成功的将自动化测试脚本整合到了CTI/TET工具中,解决了很多人多年不能处理的棘手问题。
在这个案例里,那位老工程师虽然在Core OS组里算不上资深,但他在Web测试领域的经验对胜任这项众人望而却步的测试工作的时候发挥了重大的作用。
其次,就是功能固着。所谓功能固着,就是指个体会产生一种认为物体只能发挥它传统意思的固有功能的一种心理倾向,结果导致其不能以一种新异的方法来使用这些物体。最终物体功能的固着倾向阻碍了人们对某种物体产生多种功能的表征的可能性[6]。
在软件测试中,测试资源往往是测试人员非常关注的事情。为了达到好的测试目的,测试人员往往喜欢追求高配置,高数量的测试节点,已期达到最高效的测试效果。但是,每个测试人员获得的测试资源都是有限的。如何利用有限资源完成任务繁多的测试工作,就成了测试人员经常需要面临的问题。
案例二:
给一个测试者一台Solairs SPARC T4机器,让他每周测试五个基于Solaris的应用服务软件puppet/js2ai/sysconfig-cli/distro-const/installadm.这五个测试必须在全新安装的Solaris系统上单独跑测试,也就是说,在五个装有相同版本Solaris的系统上分别跑着五个不同的软件测试。假如这名测试者是一个新手,他会选择在半天时间在这台T4机器上装一个Solaris系统,然后,用三天时间分别跑那五个应用服务测试,这样在周四就可以完成任务。但是第二周,要求在两个不同的版本的Solaris上进行这五个服务的测试,规定每个版本的Solaris上都要跑遍这五个服务软件的测试。对这位测试新手来说,恐怕很难按时完成。但是,换作一个测试老手,他是这样安排的:用半天时间写自动化脚本,然后这个脚本可以在半天时间里重装两遍系统,并且可以不分昼夜的分别跑测试,也就是说,用头1.5天昼夜跑一个版本Solaris的五个服务测试,再用后1.5天跑另外一个版本的测试。这样,周五之前,测试老手可以按时完成测试任务。但是到了第三周,疯狂的测试任务来了:要在五个不同版本的Solaris上分别跑这五个服务的测试,也就是说要跑5*5=25轮单一服务测试。这样的测试,测试新手要用四周,测试老手也要至少用2.5周。现在轮到测试专家了,他是这样安排的:在这台T4机器上搭建一个LDOM环境,并创建五个Guest,每个Guest安装一种版本的Solaris,五个Guest就是五种系统!之后就可以在这五个系统各跑那五个应用服务测试了。由于Guest是彼此独立的,所以它们可以并行跑测试且互不影响。时间汇总算下来,可能就是测试启动初期和收尾的时候会比较费时间。由于测试前期的准备和后期的测试结果汇总,都可以通过编写自动化脚本来自动完成。所以,理想情况下一天写脚本,半天环境搭建,三天自动化测试,这基本上是可行的。这样,周五之前在新手和老手眼里“不可能1周内完成的任务”在这个测试专家的统筹安排下,居然神奇地完成了。
在这个例子里,这位测试专家没有受“功能固着”现象的影响,没有局限于Baremetal System(裸设备系统)“单机单用进行测试”这一局限性思维,开创性的借用VM技术实现了一机变五机,奇迹般的解决了测试资源不足造成的测试效率低下的问题。
2.2.2 创造性思维
从广义上看,创造性思维是思维活动的高级过程,是在已有经验的基础上,通过多角度思维产生出的新颖独特的,有社会价值的产品的思维过程。从狭义上说,凡是对某一具体的思维主体而言,具有新颖的,独特意思的任何思维,都可称之为创造性思维。创造性思维在软件开发和软件测试中,都具有重要的影响作用[6]。
(1)创造型思维是集中思维和发散思维的统一
集中思维也称聚合思维,指思维过程中对信息进行抽象、概括,使之朝着一个方向集中、聚敛,从而形成一种答案、结论和规律。软件开发,很多时候要用到集中思维[6]。
发散思维又称求异思维、扩散思维,是指沿着各种不同的方向思考问题,重组眼前的信息和记忆系统的信息,从而产生大量独特的新思想。从事软件测试的时候,大部分需要发散思维发挥作用[6]。
例如,在软件开发的时候,开发人员一般是沿着用户需求的方向进行软件设计,然后再沿着设计框架和思想,通过编写代码进行实现。他们会为了达到某项功能需求,不分昼夜进行开发与调试,直到该项功能顺利实现。世界知名的民营大企业华为公司,为了给员工创造更好的集中思维的工作环境,专门成立的封闭式的研发基地,员工衣食住行都被封闭在近乎与隔绝的空间里。这就是最大限度发挥集中思维的典型管理方式的例子。
而软件产品功能实现以后,需要测试人员进行功能测试。作为一个成熟的测试人员,他并不会着急验证这个功能是不是按照需求规约设定的那样去实现的,而是静下心来,想想跟这个测试功能相关的操作都有可能由哪些,哪些是需求规约里没有定义的,有没有一些非常规操作会造成这项功能出现异常,有没有一些不在需求规约里定义的功能在这个软件中贸然出现等等。测试者需要考虑到跟被测试功能相关的各种测试可能性,仅仅考虑这个功能是否实现能够实现是完全不够的。因此,测试人员需要动用他的发散思维,多元化这个在开发者看来是个比较单一的功能实现问题。
(2)创造型思维是分析思维和直觉思维的统一
分析思维是严格遵守逻辑规约,逐步分析和倒推,最后得出合乎逻辑的正确答案和结论的思维活动[6]。软件测试人员,在得到测试失败的结果的时候,需要遵循分析思维的原则,对遇到的失败现象,进行技术分析。通常情况下,首先需要是否有问题存在于测试环境或测试脚本。因为在进行自动化测试的时候,尤其是新开发出来的测试脚本,很多时候会由于测试脚本的缺陷或者测试环境的变更造成跟软件产品本身没有任何关系的失败或者误判,这是软件测试人员首先需要排除的可能性。如果这种可能性不排除,为开发人员提交的测试报告就变得没有意义了。其次,需要对测试的失败进行划分(黑盒测试通常是领域划分,白盒测试是模块划分)。有些时候,需要借助DEBUG调试工具进行重现,以期望对问题的结症进行定位和跟踪,力争在测试报告里进行详细精准的问题描述。这样才能得出一份高质量的合格的测试报告。
直觉思维是一种没有完整的分析过程与逻辑程序而获得答案的思维,它是非逻辑的,跳跃方式的,无需主体做出有意识努力的,或然性的[6]。经验少的测试者依赖于分析思维进行软件测试,经验丰富的测试专家则喜欢运用直觉思维协助他们进行测试。比如还是刚才测试失败的例子,经验浅的工程师通过分析思维,也许只能止步到对当前的失败进行问题表述,然后就只能提交给开发组已期得到解决了。而经验丰富的专家,会想到跟目前专注的测试区域无关的其他区域问题出现的可能性。这也许找不懂任何逻辑上的联系,但他们就是能这样认为。依仗他们独特固有的直觉思维能力,往往能绕过繁琐的分析步骤直接快速的命中问题的结症。这样处理问题,不光可以避免给开发人员带来问题误区,也极大的提高了他们的测试质量和测试效率。
(3)创造性思维是横向和纵向思维的统一
纵向思维,是指在一种结构范围内,按照有顺序,可预测,程式化的方向进行的思维方式。软件测试中的按照软件测试规格说明设计测试用例,然后进行测试的过程实际上就是一个纵向思维的过程[6]。
横向思维,是指突破问题的结构范围,从其他领域(或科学)的事物,事实知识中得到启示而产生新设想的思维方式,它试图从别的方面,方向入手,其广度大大增加,有可能从其他领域中得到解决问题的启示[6]。这就好比之前讨论的发散思维,在设计测试否项软件功能的时候,不能仅仅局限于需求规约或软件使用手册上,还需要考虑一些非常规操作的情况,软件测试里的鲁棒测试,就是借助横向思维催生出来的一种非常规极限测试。
单纯利用纵向思维,固然可以设计出严谨的,逻辑清晰分明的测试用例,然而却无法顾及到一些非常规情况下的测试,而某些非常规的偏向意外性质的软件使用和操作,往往就是造成软件运行发生崩溃甚至数据丢失的根源。加入一些基于横向思维的测试用例,在丰富了的测试内容的同时,也帮助了测试人员更容易的发现一些不易发现但是又事关重大的潜在问题。
(4)创造性思维是逆向思维和正向思维的统一
逆向思维,与一般的正向思维想反,它要求思维活动时,从想法方向去观察和思考,避免单一正想思维和单向度的认识过程的机械性[6]。
软件测试理论里,有一个重要的测试过程叫单元测试,也叫模块测试。它是一种白盒测试技术,要求将软件划分成不同的模块,逐个模块进行单一测试。通常情况下,按照正常的逻辑思维,人们进行单元(模块)测试的时候,喜欢自顶向下进行测试,既从第一个模块开始累加模块,逐层进行测试。但是专家分析,这种模块测试方式存在七种缺点。而有人通过逆向思维的考虑方式,推出了自底向上测试,既从最后一个模块开始往前逐层累加模块测试,在具备跟前者相同测试优点数目(三个)的前提下,这种逆向测试模块的方式只存在两种缺点。可见,逆向思维在软件测试中往往会达到意想不到的出奇效果。
以下两个表格是两种测试方式的优缺点对照[3]。
表1 自顶向下测试的优点与缺点
Tab.1 The advantages and disadvantages of top-down testing
优点 缺点
如果主要的缺陷发生在程序的顶层将非常有利;
一旦引入I/O功能,计较测试用例会更容易;
早起的程序框架可以进行演示,并可激发积极性 必须开发桩模块;
转模块要比最初表现的更复杂;
在引入I/O功能只之前,向桩模块中引入测试用例比较困难;
穿件测试环境可能很难,甚至无法实现;
观察测试输出很困难;
使人误解涉及和测试可以交叠进行;
会导致特定模块测试的完成延后
表2 自底向上测试的优点与缺点
Tab.2 The advantages and disadvantages of bottom-up testing
优点 缺点
同表1 之优点1;
测试环境比较容易建立;
观察测试输出比较容易 必选开发驱动模块;
指导最后一个模块添加进去,程序才形成一个整体
2.3 管理心理学对软件测试的影响
管理心理学在西方又称工业与组织心理学,是研究组织管理活动中人的行为规律及其潜在心理机制的一门科学,是心理学的一个重要分支。它的研究内容包括动机管理,认知管理,情绪管理,行为管理和组织管理[7]。在软件测试工作中,与测试者关系密切的当属动机管理和情绪管理了。
2.3.1 动机管理
动机是人类一切行为的出发点和原动力。在软件测试活动中,测试者做什么或不做什么,是主动积极的做还是被动消极的做,愿意投入多大精力和坚持多长时间来完成测试任务和实现测试目标,无不取决于他的动机。它具备激发,导向,维持和调整的功能[7]。
通常情况下,正确的、强烈的测试动机,会带来很多令人吃惊的工作效率,达到理想的测试效果和测试质量。
例如,刚分配下来一个新的软件产品的测试任务,由于该产品还处于开发初期,需要测试人员重新编写新的测试用例和测试脚本。同时,为了保证不影响测试进度,在测试脚本编写之前,需要手工去执行大量枯燥和繁琐的测试,并且尽量保证在开发组将该开发版本整合进产品库之前完成第一轮的测试。时间紧迫,费时费力。如果测试人员没有正确的测试观念和测试指导思想,他们也许不会想到越早的完成第一轮测试和测试用例的编写,越会为以后的测试工作铺平道路。因而有可能一些动机性不强的测试人员会因为对测试目的和进度不明确而在早期工作拖拉舒散,造成后期时间安排不合理而潦草收尾。这样的工作,大大降低了工作效率和测试效果。相反,如果测试人员在任务之初就具备强烈的测试责任和合理的测试动机,他们就会想方设法在规定时间内(甚至加班加点利用周末假日)尽量高质量地完成第一轮的测试任务,避免为将来带来不可预期的误工麻烦。
但正如之前谈到的辩证理论,事物都是一分为二的,人们通常认为,动机越强,测试工作的热情越高,测试的次数越频繁,测试的效果越好。事实并非全如此。就拿刚才的例子,原则上讲,很多软件产品的在进行黑盒测试的时候,手动测试要比自动化脚本的机器测试准确的多,发现问题也更容易定位和分析。因为手动测试可以最大限度的模拟用户操作。这也是为啥首次测试一个新的软件产品的时候,原则上讲推荐进行人工操作的测试。但它最大的缺点就是效率低下。所以我们提出了后期采用编写测试脚本进行机器自动化测试。软件测试过程里的“回归测试”通常就是由机器来完成的。机器测试最大的好处就是效率极高,而且可以不分昼夜和节假日。但机器测试的弊端就是无法最真实的模拟人机互动的操作活动,而且由于编写测试脚本的人能力参差不齐,很多自动化测试的失败往往不是产品的问题,而是脚本自身的问题。但如果一个测试人员对测试目标太过苛刻,从测试策略上就抵触机器化测试,只相信人工测试的结果,则他很容易被茫茫的测试大海所淹没,延误了测试进度,从而影响了测试质量。而且,长时间高强度的重复的测试工作,会给测试人员带来一定的“定势心理”,就如前文介绍过的,反而不容易发现软件产品中的问题了。
2.3.2 情绪管理
情绪劳动是指人际交往中为了表达组织所期望的情绪,员工必须进行的努力,计划和控制活动。它可以被划分为四个维度:情绪的表达频率,表达规则,多样性和情绪失调[7]。软件测试跟软件开发一样,不仅仅是一个体力,脑力的付出,更是一种情绪资源的付出。从软件测试任务的启动到软件产品成功发布,软件测试人员要经历也许比软件开发人员更多的心理适应与心理挑战。比如说测试初期,需要经历短期内熟悉和适应新产品的过程;同时在与开发人员协同工作的时候需要适应开发人员的工作节奏和沟通方式;在测试遇到困难的时候,需要自己去面对测试障碍和难题;在发现Bug的时候,需要考虑如何以合理与正确的方式跟领导和开发人员进行汇报和沟通;在时间紧迫的时候,又需要能及时调整工作状态,时刻保持旺盛的工作精力和劳动激情等等。举个简单的例子,有一些软件测试人员,在部门里就经常不受软件开发部门人员的待见,就是因为他们经常会发现出一些大大小小来自开发部门的软件产品的问题或缺陷,并且直接或间接地反映到了开发组的上层领导那里,造成了不少来自领导的负面压力。在与开发人员工作相处中,很多软件测试人员都曾面临过两难的抉择,或多或少的承受着一些不明事理的开发人员的抵触情绪与负面评价。
面对种种工作问题带来的压力,测试人员除了要利用好“沟通”这一重要的工作技巧外,还需要具备良好的情绪自我控制和管理的能力,需要学会利用自主调节,表面扮演,深层扮演以及失调扮演者四种自我管理策略[7],避免由于工作中遇到的困难而造成自身的心理健康问题和工作倦怠问题,力求高效,圆满地完成好软件测试工作。
案例三:
2000年初的时候曾经在北京的中软村科技园附近有这么一家规模较小的民营软件企业X公司,公司内部的员工普遍都很年轻,是一个富有朝气的年轻创业企业。当时新近招来一批刚毕业的大学生,被分派到测试组进行软件测试。新来了一个项目,时间紧迫,所有测试组和开发组的员工都比较紧张,经常加班加点。开发组完成的一组模块,送到测试组,很快就完成了测试。但是测试结果不是很理想,发现了很多BUG。两个小组针对产品BUG专门开会进行了探讨。结果对某个BUG是否需要修复,年长的开发组和年轻一些的测试组人员产生了意见分歧。会议从早晨一直开到晚上,由于是夏天,天气炎热,空调又不是很给力,与会的人开始有些心情躁动。几个年轻的员工,由于言语用词过激,开始产生了争执。由于领导未能及时制止,最终两个小组发生了群架事件。事情过后,有的人选择辞职,有的人申请调离了该项目。不得已,大领导只能从其他小组临时抽调人手,并继续从社会上招聘新人,结果项目被拖延了很长时间。X公司也因此蒙受了不小的损失,在跟其他公司的招投标项目竞争上败下阵来。
这个案例给我们的教训就是没有良好的情绪管理和沟通技巧,不仅不会带来好的质量保证,还会影响软件测试的工作进度,为软件产品的发布带来更高的潜在风险。
3 结论(Conclusion)
软件测试既是一门高脑力活动的经验型技术,又是一个汇集各种非技术因素的讲求艺术性和实践性的社会活动。在信息爆炸,软件产品膨胀发展的今天,人们迫切需要提高软件产品的测试质量和测试效率。本文对软件测试以心理学的角度进行了分析和案例描述,意在帮助人们摆脱单纯的依靠纯技术手段解决测试瓶颈问题的理念,以非计算机技术的角度分析了影响软件测试质量的心理学相关的种种因素,并指导人们如何扬长避短的发挥心理学在软件测试活动的作用,为软件测试领域提供了更加宽广的技术规范和研究范畴。
参考文献(References)
[1] 宫云站.软件测试教程[M].北京:机械工业出版社,2008.
[2] 王立福,孙艳春,刘学洋.软件工程(第3版)[M].北京:北京大学出版社,2009.
[3] Glenford J.Myers,Tom Badgett,Corey Sandler.张晓明,黄琳, 译.软件测试的艺术[M].北京:机械工业出版社,2012.
[4] 马晓莉.注意定势对未注意盲视和注意捕捉的影响[D].河南大学硕士论文,2007.
[5] 尹瑜新,张加明.创新思维原理和方法[M].武汉:湖北人民出 版社,2011.
[6] 张庆林,邱江.思维心理学[M].重庆:西南师范大学出版社,2007.
[7] 刘永芳.管理心理学[M].北京:清华大学出版社,2008.