在人于人之间的相处中,换位思考有利于人们理解彼此的需求,进而促成共赢的局面。把换位思考用到软件的设计中,能够提升软件的质量。这是我在Michael Feathers的培训里,领悟到的最巧妙的一个思维方式。如果你对Michael的名字不熟悉,那么他写的Working Effectively with Legacy Code这本书,你可能听说过。
如何在软件的开发中做到换位思考?在回答这个问题之前,让我们看看换位思考为什么能提升软件质量。
不用不知道,一用吓一跳
你代码敲得很High,把属于你的那部分模块写完了。旁边的小组终于可以调用你的代码了,然而,不用不知道,一用吓一跳。没想到,调用你的代码,得给你准备好十个依赖关系,一个方法要传二十个参数。当然我是夸张了点,可软件的设计中经常会出现这样的问题。
当一个工程师设计代码的时候,如果仅仅站在自己的角度上考虑问题,那么他很难能体会到别人用他代码时的感受。不能从对方的角度出发考虑问题,往往会无法满足对方的需求,甚至损害对方的利益。
拿上面那个例子来说,如果我们能早早的站在对方的角度上思考,就不至于写出来一个需要二十多个参数的方法,换成是你,你也不愿意去用这样的代码。所以换位思考,理解对方的痛点,可以帮助软件设计者降低软件的复杂度,设计出别人方便用,也喜欢用的代码。
测试驱动开发
通过上面的分析,我们理解到了换位思考在软件设计中所能起到的重要作用。那么,怎么才能做到换位思考呢?测试驱动开发是一个极佳的工具,能够引导我们进行换位思考。
我之前对测试的理解,大部分是停留在正确性的层面,比如测试可以保证软件的正确性,重构的时候,测试可以保证已有的功能受到保护。其实,测试还有它的另外一个巨大的作用。它通过让开发者本人,先写测试调用自己的代码的方式,不知不觉的站在了被人的角度上去考虑问题。在让别人用自己的代码之前,先自己用用,看看会不会被吓一跳。这种换位思考写代码的方式,可以很即时,很明显的发现设计上的缺陷。
结语
测试驱动开发,不仅是一种工具,更是一种思维方式,它第一时间帮助工程师去为他人着想,从他人的角度,审视自己的代码。