TDD的误解

news/2024/7/5 21:17:36

(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 


(2006-08-12)

前几天看到一篇《都在说TDD开发,那到底TDD是什么?》,感觉这个作者根本就没明白什么叫TDD。

TDD还远达到如作者所说的“过份强调”的程度,甚至应该说还强调得不够。不可否认,“高质量的程序是程序员编写出来的,而不是测试出来的”,但是如果没有有效的测试手段,如何能够客观地判定一个程序是不是“高质量”的。

至 于认为TDD会导致程序员变成代码工人的说法更是无稽之谈。TDD的Test case只负责检查某个功能是否得到完整正确的实现,至于如何实现的细节依然是掌握在程序员手中,他们完全可以充分地发挥他们的创造力。从某种角度上说, TDD不但不是束缚,反而是一种解脱,因为有TDD作保障,程序员可以更加放心大胆地去创造。

那么TDD是否会增加工作量?表面上看是这样 的,因为需要额外的精力去编写Test case。但是只要真正实践过TDD,就会发现Test case的编写远比实现具体功能要容易得多,增加这少量的工作量可以换取如Debugging之类的工作量的大量减少,总的来说反而是减少了不必要的工作 量。

测试用例的错误和失误风险和程序的风险等效”? 这又是一个对测试的误解。Test case的本质是需求的代码表达,写出正确的Test case的基础是对需求的准确理解。而如果Test case错了,说明对需求的理解就是错误的,那么即使不写Test case直接编码的话,不论这个代码写得多么完美,它不能正确地实现需求,结果不过是一堆废品。Test case的编写恰恰能够在很大程度上防止这种需求错误的风险发生。

对于重构来说,TDD更是不可或缺的保障。每个程序员都希望能够一次就把 代码写好,但现实是残酷的,一个功能的第一次实现通常都是看上去很美的,但是面对需求的变化以及对软件的强壮性、安全性、灵活性的要求,修改代码不可避 免。既然修改不可避免,那么重构就不可避免,如果没有TDD,如何能够保证重构以后的代码所实现的功能与原来一致呢?

版本升级意味着需求的 变化,Test case必然也要跟着变化,按着TDD的思路做来,就必须保证Test case与实现代码的同步,否则就不是TDD了。相对于文档来说,写Test case同样是写代码,对于程序员来说,这种同步工作相对来说更容易被接受,所以保持同步的难度也小一些。至于说ugly的Test case与滥文档一样,这点我同意,不过如果一个程序员写的Test case很滥的话,那也就不要指望他能够写出什么sexy的实现代码了。

Thinking-driven Development的说法固然没错,但有什么事情不是Thinking-driven的呢?这种空话没有一点可操作性,说了也是白说。

很多人对一些新生事物还是充满了误解和偏见,比如这篇《 我之所以站出来骂RoR》。其实不论是TDD还是RoR,都不是靠骂别人而起来的。 



http://www.niftyadmin.cn/n/3650461.html

相关文章

常用电源IC

导读: 74系列芯片功能大全 7400 TTL 2输入端四与非门 7401 TTL 集电极开路2输入端四与非门 7402 TTL 2输入端四或非门 7403 TTL 集电极开路2输入端四与非门 7404 TTL 六反相器 7405 TTL 集电极开路六反相器 7406 TTL 集电极开路六反相高压驱动器 7407 TTL 集电极开路…

Android本地缓存和远程图片获取的实现

概述对于客户端——服务器端应 用,从远程获取图片算是经常要用的一个功能,而图片资源往往会消耗比较大的流量,对应用来说,如果处理不好这个问题,那会让用户很崩溃,不知不觉手机流量 就用完了,等…

用fstab自动mount windows分区

我把家里台式机也装上了Ubuntu 6.06,不过原来的硬盘里还有三个Windows分区,其中两个是FAT32,一个是NTFS,有时需要访问盘上的内容还是不太方便。找了些资料,配置了一下fstab让这三个分区自动mount,这样就方便…

74系列芯片资料

导读: 74系列芯片资料 反相器 驱动器 LS04 LS05 LS06 LS07 LS125 LS240 LS244 LS245 与门 与非门 LS00 LS08 LS10 LS11 LS20 LS21 LS27 LS30 LS38 或门 或非门 与或非门 LS02 LS32 LS51 LS64 LS65 异或门 比较器 LS86 译码器 LS138 LS139 寄存器 LS74 LS175 LS373 反…

程序员编程技术迅速提高的终极攻略

前言 你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出…

常用运算放大器

导读: 常用运算放大器 CA3130 高输入阻抗运算放大器 CA3140 高输入阻抗运算放大器 CD4573 四可编程运算放大器 MC14573, ICL7650 斩波稳零放大器 LF347 带宽四运算放大器 KA347 LF351 BI-FET单运算放大器 LF353 BI-FET双运算放大器 LF356 BI-FET单运算放大器 LF357 …

Android中StatFs获取系统/sdcard存储(剩余空间)大小

StatFs 一个模拟linux 的df命令的一个类,获得SD卡和 手机内存的使用情况 StatFs 常用方法:getAvailableBlocks() 解释:返回 Int ,获取当前可用的存储空间 getBlockCount() 解释:返回 Int ,获取该区域可用的文件系统数 getBlockS…

谁更需要新心态

很高兴在EricLee这篇《"微软收购Zend"假新闻看开源需要新心态》里知道,原来那是个假新闻。但是他们对于开源软件和自由软件的误解实在是太多了,我无话可说。其实技术话题也是很有意思,这几天卡卡西与我争论.net的话题。正如令狐所说…