上一讲介绍了敏捷测试与传统测试之间的区别,从测试的独立性、阶段性、计划性、自动化测试等多个方面进行了对比,其实敏捷测试与传统测试之间最大的区别不在那里,而是在测试原则(第 1 讲已讨论)和测试思维方式(Test Mindset)上。

有时,Mindset 也被翻译成心态,我们熟悉的一句话:态度决定一切。也可以说,一个人的心态决定着一个人的行为,一个人的思维方式决定着一个人的行为方式。

固定思维与敏捷思维

2013 年,我参加中国敏捷大会,听敏捷大师 Linda Rising 说,传统软件开发思维是固定性思维,而具有敏捷思维的人认为:

能力是可以不断成长的,而不是固定的

目标都是可以学习的

面对挑战是拥抱它而不是躲开它

面对失败不是责备同事而是需要搞清楚为什么失败了

 ……

具体对比,如表1所描述。

表1 传统的固定思维和敏捷思维的对比

Lisa 虽然没有直接提到“成长性思维(Growth Mindset)”,但和固定性思维进行了对比,其实就是成长性思维。固定性思维(Fixed Mindset)和成长性思维体现了应对成功与失败、成绩与挑战时的两种基本心态。今天我们推崇敏捷,其实就是推崇成长性思维,那什么是成长性思维呢?

成长性思维

成长性思维是由斯坦福大学心理学教授卡罗尔·德韦克(Carol Dweck)提出的。在数十年心理学研究之后,她坚信思维模式的力量,确定拥有成长性思维的人在遇到困难和挑战时更加乐观积极,他们相信自己的不懈努力,能够帮助他们克服困难,最终走向成功。

卡罗尔·德韦克就“成长性思维” 在 Ted 上做过一次演讲,演讲题目是“相信你自己能进步的信念具有巨大威力”,该演讲到目前已有一千多万人浏览。她还为此写了一本书——《终身成长:重新定义成功的思维模式》,这本书影响了很多人。书中举了很多例子,例如职业经理人李·亚科卡和企业家杰克·韦尔奇的对比,但印象更为深刻的例子是网球明星麦肯罗和篮球明星乔丹的对比。

麦肯罗是典型的具有固定性思维的人,最看重自己的名声——“世界冠军”称号,总认为自己没错,喜欢把一切责任推给别人,所以很容易发脾气,最终也只能红极一时,职业生涯很短暂。

但乔丹就不一样,他虽然日后成为了篮球巨星,但并没有篮球天赋,因为他连高中篮球队都没被选上,完全靠不断地苦练,才成为了篮球高手。他就是拥有成长性思维,胜不骄、败不馁,每次打输一场比赛,没有任何抱怨和责备,而是去练球。即使赢了,他觉得某几次没投好篮,也马上去练、努力改进。正因为他拥有成长性思维,才不看重当前所取得的成就,能从如日中天的篮球运动转到他不熟悉的棒球运动;也正因为他拥有成长性思维,其职业运动生涯很长,从 1984 年入选 NBA 到 2003 年退役,差不多整整 20 年。

固定性思维会让你更关注结果、关注对还是错,通常会忙于捍卫自我或通过避免挑战来提高自尊心、来努力保护自我;相信天赋,夸自己拥有某种天赋,以彰显与别人不一样;或者抱怨自己没有这种天赋,能不努力就不努力,结果就是:要么自大、要么自卑,喜欢抱怨,拒绝接受挑战,面对困难全力以赴找借口,容易妥协和绝望,并最终成为失败者。

而成长性思维的人相信能力是可以被培养的,总是努力、不断成长;可以接受失败,但不会成为失败者,因为自信,内心有力量,今天的失败不代表明天会失败,相信自己的潜力是未知的,一定能克服困难,因此越战越勇,最终走向成功。

听到这里,是不是感觉:拥有成长性思维,对我们来说太重要了?

以实例来辨析不同思维的测试工程师

回到测试领域,我们可以比较一下,拥有成长性思维的测试工程师和拥有固定性思维的测试工程师有什么不同?为了更直观地比较,特地做了一张表,如表2所示。不过要注意,每一个人都同时拥有固定性思维和成长性思维,只是在那个时刻,哪种思维占主导地位。我们说他是拥有成长性思维的人,是指他的成长性思维此时占主导地位。

表2 比较拥有两种不同思维的测试工程师

要举的例子还很多,成长性思维是敏捷思维最具代表性的,不仅支持个人快速成长和学习型团队的建立,而且也从理论上支持“快速迭代”这样的实践,不断改进,持续满足业务和客户的需求。

团队对质量负责的思维

“成长性思维”不等于敏捷思维,敏捷思维还有更多的内涵。同样是 2013 年,我在第 8 届敏捷中国大会上做了一次演讲,演讲的主题是“测试价值越小则企业的收益越大”,虽然我从事测试领域工作,但在敏捷环境下没有过分强调测试的价值。

测试守护质量、提供质量信息,甚至帮助团队改进质量,自然很有价值,但是如果依赖测试来保证质量,其实是很难保证质量,而且成本很高,而应该让整个团队关注质量,从需求开始尽可能把事情做对,从而构建出高质量的产品,这对企业来讲更有价值——效率更高、成本更低。

如果我们犯了错误、产生了缺陷,就需要做缺陷分析,缺陷预防比发现缺陷(测试)更有价值。所以,当一个企业在测试上投入越来越少,同时还能维持原来有的质量水平,则说明这个企业努力的方向是正确的,“测试价值越小则企业的收益越大”就是这个含义。有了这样的思维,TDD/ATDD 就容易被接受。

上下文驱动思维与用户思维

敏捷测试中还包含上下文驱动的思维,认识到上下文一直是在变的,所以要小步快跑,测试的策略和方法也是要根据上下文及时进行调整,不断优化,尽可能达到更有效、更高效的测试状态。什么是上下文呢?可以简单理解为“项目所处的环境、所要满足的条件等”,包括项目人员、风险变化、研发状态、质量要求等。

基于上下文的思维,一个简单的例子就是:不存在最佳实践,虽然我们经常提“Best Practices”, 因为 它只代表昨天,不代表今天、更不代表明天;也因为它只是相对某个团队是最佳的,而对我们团队则不一定是最佳的。

敏捷测试更需要用户思维、价值思维,这些比较易懂。例如,不要追求技术的复杂性,而是做对客户有价值的事情,所以多数情况下越简单越好。而像系统性思维、批判性思维、结构化思维等,是传统测试和敏捷测试共同拥有的,在此就不做介绍了,有兴趣的同学,可以去我的个人公众号“软件质量报道”阅读相关文章。

小结

最后总结一下,敏捷测试思维方式(Mindset)如下:

(1) 成长性思维,通过不断学习和解决问题来提高个人的测试技能,不躲避问题,而是迎难而上,克服测试困难或解决测试问题。

(2) 用户思维,一切从用户角度出发,只做对客户有价值的事;想客户所想,基于客户的角度来判定这是不是缺陷。

(3) 团队对质量负责的思维,质量是构建的,缺陷预防胜于发现缺陷,开发承担更大的质量责任;质量不能靠测试人员,测试也不只是测试人员的事情,而是靠整个团队。

(4) 上下文驱动思维,没有最佳实践,只有优秀实践;基于上下文不断调整测试策略,精益求精,持续改进测试流程和方法。

你可能会问,敏捷测试思维很好啊,如何训练呢?那就要求我们在工作中不断提醒自己、在实践中不断训练自己,更具体的讨论,请关注后续的第 9、10、21、26…讲等内容。

最后,给你出一道思考题:在敏捷测试思维方式中,我侧重介绍了成长性思维、团队对质量负责的思维和上下文驱动思维等三种,你认为哪两种思维关系更紧密?哪种思维对测试效率的提升更有帮助?为什么?欢迎留言讨论。

-– ### 精选评论 ##### *五: > 最近刚看完纳德拉的《刷新》,里面特别强调了成长型思维,和朱老师的敏捷思维不谋而合,而且都提到了用户至上以及团队至上的观点,大赞👍 ##### Kiwi_wang: > 我认为团队对质量负责的思维和上下文驱动思维联系更紧密,而上下文驱动思维对测试效率的提升更有帮助。 ##### *达: > 我认为成长型思维和上下文驱动思维联系更为紧密;我认为上下文驱动思维对测试效率的提升更有帮助,因为不断调整测试策略,精益求精,只有持续改进测试流程和测试方法,找到适合团队的测试流程,找到既提升了效率,也保证了质量的测试方法,这样整体效率就会提高很多