论坛首页 软件开发和项目管理版 TDD

这样的TDD实践方式有问题?请教大家的TDD实施方式.

浏览 23507 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-09-15
hax 写道
抛出异常的爱 写道

你的例子说明了你与别人沟通有一定的问题。


自从我看了楼主的第一篇帖子之后,我就想说这句话。到你这楼终于说了,我终于舒坦了。。。

还有一句我憋不住了,先说了:可怜的gigix……


再来两句成语:

刻舟求剑

对牛弹琴

可怜的hax,净说实话,结果挨骂了吧。。。实话不能常说。。。我看完前面都笑得趴在地上了。如果TDD就是这样,估计kent beck能气死再气得诈尸。。。。
   
0 请登录后投票
最后更新时间:2007-09-15
gigix 写道
引用
在我看来,不论你是直接返回字符串常量也好,还是采用之前的那个比较复杂的循环方式转换也好,也或是其他方式,只要它让这个测试通过,那我就认为他们的功能是一样的,都实现同样的需求。

怎么说呢?人,不仅要会看书,会听话,还得会动脑子。人得有常识,知识再多,要是连常识都没有,那就叫傻子。
就比如说吧,你说这两个代码:
# code A
result = []
(1..5).each{|i| result << i*2}
# code B
result = (1..5).map{|i| i*2}

没有区别(虽然它们实际上可能还是有那么一点点速度或者空间上的区别),行,这是符合常识的。可是你硬要说这两个代码:
// code C
public Object reverse(String str) {  
  return "technology devolopment software a is Tdd";  
}
// code D
public String reverse(String str) {  
  String[] words=str.split(SPACE);  
  StringBuilder result=new StringBuilder();  
  for (int i = words.length-1; i >=0; i--) {  
    result.append(words[i]).append(SPACE);  
  }  
  return result.toString().trim();  
}

没有区别……哎,就算你吹出大天来,我还是要说:你就算没有知识也该有点常识吧?也甭跟我讲什么测试啦什么重构啦之类的大道理,道理再大也大不过个合情合理。就您这样掰扯下去,人家不明白的还以为学重构学得岔了气呢。

gigix,你真的不觉得他故意来消遣大家么?
   
0 请登录后投票
最后更新时间:2007-09-16
楼上的朋友,如果你认为我是来消遣你你可以不回帖,你也可以叫管理员删贴。
对于你说的,在junit newsgroup上kent beck先生未进行回复,但是很多其他的朋友都回复了,就像testng的作者,Cédric Beust,Michael Feathers ,Jeff等等也都回复了,我倒是未见他们气死再气得诈尸,相反,他们却告诉了很多我想知道的东西。
如果你想知道kent beck先生是否会如你所说,你不妨给他发邮件了解了解.
   
0 请登录后投票
最后更新时间:2007-09-16
to gigix:
我承认我没你聪明,而且我还是有点傻,所以才会向你请教,:)
不过我发现,我的关注点好像一直和你都对不上号。
也许这就是聪明人跟傻子的区别哦,:)

你实践TDD的方式的确和我的方式有很大的不同,不过很荣幸的是,从你的谈话中,我总能学到很多东西,非常感谢.

顺便说一句,我一向都很尊重你,尤其是你对软件图书行业贡献,:),非常感谢.
   
0 请登录后投票
最后更新时间:2007-09-16
此外,我声明一下,我发起本帖,主要目的就是寻找答案,讨论(借鉴大家的)适合的实践方式,如果哪位朋友不是为了讨论而来,请不要回帖,如果回帖,和该问题无关,我不会回帖,请谅解。

对于不是为了讨论而来的朋友,我希望仔细思考Ilja跟你说的:

Hai,
I couldn't tell whether you are agreeing or disagreeing with my point.
Please elaborate if you feel like it.
Thanks, Ilja

最后,本帖在junit newsgroup上已经有了讨论结果,大家感兴趣的话自己去看,地址:http://tech.groups.yahoo.com/group/junit/message/19846

由于时间上的原因,我不在回帖了,请谅解,如果想进一步沟通的朋友,请给我邮件,谢谢.
   
0 请登录后投票
最后更新时间:2007-09-18
hyysguyang的精神可嘉,毕竟我们都是一步步走过来的,走在前面的应该拉走在后面的一把,而不是一脚踩死。
   
0 请登录后投票
最后更新时间:2007-09-18
gigix虽然语气重了点,但都说到点子上了.我这里总结一下:
1. 你的Requirement不是测试驱动出来的;
2. 你的两段代码严格意义上不叫重构,可你却拿"自己重构的步骤有点大"为自己辩护;
3. 在真实的世界,你的第一段代码根本不需要重构;

我再加一句, 面试你的人绝对不是在跟你讨论TDD的学术问题,你却自己钻到牛角尖(这句话他们评价的很对). 很多好心人给你指出这一点,你却认为他们不是在讨论学术,而是在人身攻击.你的虚心态度不光要用在学术上.
   
0 请登录后投票
最后更新时间:2007-09-18
怎么这么多说风凉话的人。。。
我觉得楼主一开始之所以给出个极其简单的实现,无非是想(极端地)演示TDD,就好像那个著名的money的例子,同样很罗嗦,只不过那是kent beck写出来的,没人敢说他sb
而那两个面试的人,显然没有想清楚自己是在考察TDD还是在考察算法问题
对重构的理解确实有误
沟通能力需要加强一下,共勉
   
0 请登录后投票
最后更新时间:2007-09-20
引用

code1:
package org.opensource.test;   
public class StringReverser {   
    public Object reverse(String str) {   
        return "technology devolopment software a is Tdd";   
    }   
}  

重构代码 ==>
code2:
package org.opensource.test;   
public class StringReverser {   
    private static final String SPACE = " ";   
    public String reverse(String str) {   
        String[] words=str.split(SPACE);   
        StringBuilder result=new StringBuilder();   
        for (int i = words.length-1; i >=0; i--) {   
            result.append(words[i]).append(SPACE);   
        }   
        return result.toString().trim();   
    }   
}   



看到楼主能把code1重构成code2这个样子
忽然想起见过的公务员考试里那种题目,类似这样的推理题:

引用

1.问:请观察下面一堆数字,说出其中的规律
2,4,8,16
答:2的X次方

2.问:请观察下面一个数字,说出其中的规律
16
答:2的4次方


感觉楼主的重构跟第2道推理有点神似.
按您上面的那个死需求,个人感觉如果您把code2重构成code1比较能让人接受.
   
0 请登录后投票
最后更新时间:2007-09-20
xmx0632 写道
引用

code1:
package org.opensource.test;   
public class StringReverser {   
    public Object reverse(String str) {   
        return "technology devolopment software a is Tdd";   
    }   
}  

重构代码 ==>
code2:
package org.opensource.test;   
public class StringReverser {   
    private static final String SPACE = " ";   
    public String reverse(String str) {   
        String[] words=str.split(SPACE);   
        StringBuilder result=new StringBuilder();   
        for (int i = words.length-1; i >=0; i--) {   
            result.append(words[i]).append(SPACE);   
        }   
        return result.toString().trim();   
    }   
}   



看到楼主能把code1重构成code2这个样子
忽然想起见过的公务员考试里那种题目,类似这样的推理题:

引用

1.问:请观察下面一堆数字,说出其中的规律
2,4,8,16
答:2的X次方

2.问:请观察下面一个数字,说出其中的规律
16
答:2的4次方


感觉楼主的重构跟第2道推理有点神似.
按您上面的那个死需求,个人感觉如果您把code2重构成code1比较能让人接受.


不能自己删除回复吗??
   
0 请登录后投票
论坛首页 软件开发和项目管理版 TDD

跳转论坛:
JavaEye推荐