ThoughtWorks暑期特训——任务五 ·学习笔记

2017-08-04  本文已影响0人  沙子粒儿在西安

一 、编程精进之法

“敏捷”之TDD

TDD(全称Test Driven Development)测试驱动开发,是一种软件开发的流程,其由敏捷的“极限编程”引入。
开发过程是从功能需求的测试用例开始,先添加一个测试用例,然后运行所有的测试用例看是否有问题,再实现测试用例所要测试的功能,然后再运行测试用例,查看是否有case失败,然后重构代码,再重复以上步骤。

其理念主要是两件事:

“敏捷”之BDD

BDD:行为驱动开发(Behavior Driven Development)
行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。

“敏捷”之ATDD

ATDD:验收测试驱动开发(Acceptance Test Driven Development)
TDD 是开发人员的职责,通过单元测试用例来驱动功能代码的实现。
在准备实施一个功能或特性之前,首先团队需要定义出期望的质量标准和验收细则,以明确而且达成共识的验收测试计划(包含一系列测试场景)来驱动开发人员的TDD实践和测试人员的测试脚本开发。面向开发人员,强调如何实现系统以及如何检验。

保证编程质量,提高编程效率

任务列表法+PDCA

plan:任务列表法(预估时间)

do:做可以check的事情(计时完成任务)

check:反思计划与实际的差距(对比时间,反思)

action:在反思后采取改进措施(针对反思要采取的措施)

二 、像机器一样思考

Analytical Thinking(按照输入输出 对问题进行分解)

思考过程:

数据类型与结构

类的结构表达对比:
JS

{
  name: String,
  age: Number,
  children: [{
    name: String,
    age: Number
  }]
}

JAVA

Person {
  name: String,
  age: Number,
  children: [Person]
}

分析问题的基本原则:完全穷尽各自独立

各自独立,是指,在划分任务的过程中,每一个任务都对应一个 代码块 或一个 函数 ,这些代码块和函数,是互相不包含的(不是不依赖,Exclusive不是Independent)

完全穷尽,是指,需要穷尽这个代码块或函数里 所有的输入和输出 。不能遗漏任何一个输入,任何一个输出。每一项的 属性 也不能有遗漏

一图抵千言部分

画图的规则

我们的画图方法受时序图启发而发明,具体的规则如下:
1 图中基本元素由方块和带箭头的线组成
2 一个方块只代表一个函数或一个代码块,通常是函数,方块中可以写字,可以表达函数是属于哪个类或哪个实例等信息。
3 指向方块的线代表该函数的输入,背离方块的线代表函数的输出。
4 数据流动的时间轴遵守先从左到右,再从上到下的顺序。
5 每一对输入输出(输入在上,输出在下)加一个方块,表达了一次函数调用。

测试驱动的任务切分
按照模块的分析方法拆分成任务时比较复杂的话,我们可以按照测试的角度来切分成任务。这个思维的切换是TDD的核心。我们需要按照测试的视角来切分任务,从一个函数的实现视角转为一个函数的调用视角。

测试视角的优点:

1 封装复杂性,按照模块去拆分的时候,复杂性会变高,思考负担会加大。而按照测试的视角来切分,复杂性当然不会消失,但是被封装了,方便我们在分析的时候减少思考负担。
2 跳出盒子外来看盒子的视角。我们在画前面的图的时候,实际上是在我们要实现的这个程序内在看,完全没有使用者的视角,也就是所谓的在盒子内。当我们站在测试的视角看的时候,我们就跳出了盒子外,他更容易让我们发现哪里可能设计上有问题,比如设计出的接口是不是好用。
3 在TWs有一个观点:叫做任务不是步骤。当按步骤来考虑问题的时候,对怎么算做完这个问题的答案往往是模糊的(往往只落在行为上,而不是结果上)。只考虑函数实现的时候,也会有类似的问题,因为一个数据类型包含的情况太多了,想到某种类型的数据我们就会停止思考当前问题转而去想其他问题,于是我们很容易漏掉一些情况,以测试角度看待任务会让我们更容易看清楚我们的工作是不是真的做完了。


附 学习中遇到的专用词:

上一篇 下一篇

猜你喜欢

热点阅读