从换位思考到测试驱动开发转

在人于人之间的相处中,换位思考有利于人们理解彼此的需求,进而促成共赢的局面。把换位思考用到软件的设计中,能够提升软件的质量。这是我在Michael Feathers的培训里,领悟到的最巧妙的一个思维方式。如果你对Michael的名字不熟悉,那么他写的Working Effectively with Legacy Code这本书,你可能听说过。

如何在软件的开发中做到换位思考?在回答这个问题之前,让我们看看换位思考为什么能提升软件质量。

不用不知道,一用吓一跳

你代码敲得很High,把属于你的那部分模块写完了。旁边的小组终于可以调用你的代码了,然而,不用不知道,一用吓一跳。没想到,调用你的代码,得给你准备好十个依赖关系,一个方法要传二十个参数。当然我是夸张了点,可软件的设计中经常会出现这样的问题。

当一个工程师设计代码的时候,如果仅仅站在自己的角度上考虑问题,那么他很难能体会到别人用他代码时的感受。不能从对方的角度出发考虑问题,往往会无法满足对方的需求,甚至损害对方的利益。

拿上面那个例子来说,如果我们能早早的站在对方的角度上思考,就不至于写出来一个需要二十多个参数的方法,换成是你,你也不愿意去用这样的代码。所以换位思考,理解对方的痛点,可以帮助软件设计者降低软件的复杂度,设计出别人方便用,也喜欢用的代码。

测试驱动开发

通过上面的分析,我们理解到了换位思考在软件设计中所能起到的重要作用。那么,怎么才能做到换位思考呢?测试驱动开发是一个极佳的工具,能够引导我们进行换位思考。

我之前对测试的理解,大部分是停留在正确性的层面,比如测试可以保证软件的正确性,重构的时候,测试可以保证已有的功能受到保护。其实,测试还有它的另外一个巨大的作用。它通过让开发者本人,先写测试调用自己的代码的方式,不知不觉的站在了被人的角度上去考虑问题。在让别人用自己的代码之前,先自己用用,看看会不会被吓一跳。这种换位思考写代码的方式,可以很即时,很明显的发现设计上的缺陷。

结语

测试驱动开发,不仅是一种工具,更是一种思维方式,它第一时间帮助工程师去为他人着想,从他人的角度,审视自己的代码。

时间: 2024-10-14 12:42:24

从换位思考到测试驱动开发转的相关文章

测试驱动开发实践

总是以为自己了解了测试驱动开发,其实做起来和了解根本不是一回事.原来觉得代码清晰得很,后来试验了一下才知道那是自己的错觉.这次,让我们抛却Eclipse的自动补全功能,来一场真正的测试驱动开发吧. 项目描述:这是一个很简单的项目,目标是扫描磁盘上所有特定格式的文件,将其路径存储下来,通过程序可以快捷搜索到文件路径并自动定位到该文件. 用户故事(简单点写了): 1.              扫描磁盘,将目录下的所有文件列出来,将特定格式的文件信息存储到磁盘. 2.              所有

测试驱动开发与Python

最近在看一本书<Test-Driven Development with Python>,里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目.刚好这本书中使用了我之前所了解的一些技术,Django.selenium.unittest等.所以,读下来受益匪浅. 我相信不少开发都写单元测试,不过,一般是先写功能代码,然后,再写单元测试用例,在编写单元测试用例的过程中,可能需要调整功能代码,从而使单元测试用例通过.但是TDD就特别要求先写测试用例,后写实现代码.这一开始确

测试驱动开发(TDD)

在编写程序之前,先确定程序中的变量.控件等元素允许的值.若在编写程序时,变量.控件中的值与事先确定的值不相符,就说明程序的某处有bug,这种测试方法就是TDD(Test Driven Development,测试驱动开发).TDD与OpenGL ES一样,只是一套标准或一套API.Android SDK中提供了一套测试框架(JUnit),可用于对Android应用程序进行TDD测试.测试框架的特性如下: Android的测试框架基于JUnit.可在无需调用Android SDK API的情况下测

测试驱动开发笔记【初学者】

[基本步骤及流程]       1. 根据问题进行初始的需求分析,提取出初始而不完备的[to-do]列表:    2. 选择[ to-do]列表中的某个[to-do], 编写相应的测试:    3. 运行测试,发现无法通过:    4. 作出最简单的的改进,并运行测试使之通过:    5. 一小步一小步地重构代码.运行测试,并使之通过:    6. 跳转至[2].        [关键要素]    1.[to-do]列表: 需要完成的任务.当前要做的事情.标识完工.    2. the effe

测试驱动开发(Test-Driven Development)

1.背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦.国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从.最近兴起的一些软件开发过程相关的技术,提供一些比较高效.实用的软件过程开发方法.其中比较基础.关键的一个技术就是测试驱动开发(Test-Driven Development).虽然TDD光大于极限编程,但测试驱动开发完全可以单独应用.下面就从开发人员使用的角度进行介绍,使开发人员用最少的代价尽快理解.掌握.应用

浅谈测试驱动开发(TDD)

1. 优势 TDD的基本思路就是通过测试来推动整个开发的进行.而测试驱动开发技术并不只是单纯的测试工作. 需求向来就是软件开发过程中感觉最不好明确描述.易变的东西.这里说的需求不只是指用户的需求,还包括对代码的使用需求.很多开发人员最害怕的就是后期还要修改某个类或者函数的接口进行修改或者扩展,为什么会发生这样的事情就是因为这部分代码的使用需求没有很好的描述.测试驱动开发就是通过编写测试用例,先考虑代码的使用需求(包括功能.过程.接口等),而且这个描述是无二义的,可执行验证的. 通过编写这部分代码

测试驱动开发(TDD)及测试框架Mocha.js入门学习

组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅存很少的QA用于系统模块间的集成测试. 因此代码的测试与开发都将由开发者(Developer)来保证. 这就需要借助优秀测试框架的帮助,尤其是支持TDD开发模式的自动化测试框架更为重要,因为我使用的编程是语言是Node.js,那么广泛使用的Mocha.js将成为我的首选. 在团队转型过程中,很多事情

简单了解测试驱动开发---单元测试

The idea is to begin development of a new software unit with its specification, followed by its implementation (which, by definition, must satisfy the specification). 测试驱动开发背后的理念是我们在开发之前定义一个标准(specification), 然后去实现它(implemention),当然实现要完全满足标准. 举一个现实生活

测试驱动开发基础

以下是我个人对测试驱动开发的一点理解,如有不足请指正 测试驱动开发的大致步骤是 写一个测试(基本上无法运行甚至编译) 小改动使之能够编译运行(建立需要调用的函数存根,不实现,或伪实现——直接返回定值) 逐渐使代码一般化(用变量代替常量定值) 通过改动,消除重复设计(提取为公用的变量或函数) 具体每一步我的理解如下(对应上述4步骤) 写测试时,只从主函数视角考虑,不考虑我要    调用的函数是否存在,而是直接写出我要调用XX函数,得到XXX返回值等 第1步的代码必然报错,此时针对报错进行修改,补上