韩小明@xiammy的专栏

没水的地方挖井,有水的地方修渠

用户操作
[即时聊天] [发私信] [加为好友]
韩小明
韩小明的公告
作者毕业于浙江大学,非常热爱体育运动。现在尤其热爱羽毛球运动。在休息时间非常热爱技术文章写作。
最近垃圾评论泛滥,为了不污染大家的视听,暂时关闭评论,请大家理解。
欢迎转载,但请注意,除非特别声明,本站采用Creative Commons License许可:署名,非商业。

最近评论
Norse:从纯逻辑的角度而言,只要加上一个条件就可以严谨地解决问题:此题是可解的。
这样的话顶多从半真是真还是假来加一层推理,易知半真是真的情况下是无解的,所以半真只能是假,最后就可以按标准答案推出结果了。
Norse:太钻牛角尖了,既然题目这么出,那就是隐含字条真假对应对金块判断的正误,而不是独立的
thesameway:51旧书网 同城易书
www.51jiushu.com
www.51jiushu.net
二手书、旧书同城交易平台
分类齐全、快速发布、准确搜索
xiammy:你说的就是推广策略,是不是采用矫枉过正?
sharkw:可以试一试SqliteSpy,支持sqlite数据库的加解密
文章分类
收藏
    相册
    图书
    链接
    宗刚的专栏(RSS)
    快乐学习(RSS)
    陈亮亮的专栏(RSS)
    朋友
    张恂论 OO
    橘子懒懒的BLOG(RSS)
    言之有李(RSS)
    赵伟的小家
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 从业余台球娱乐想到"敏捷开发"收藏

    新一篇: 同学意外离去,停写博客一月 | 旧一篇: 羽毛球 vs. 软件开发

    细心的朋友,可能会发现,我最近一段时间比较热衷一些运动活动。台球虽然不是很耗体力,但小丁哥带给国人的振奋,不能不让人对台球的爱好也提高到了一定的程度。

    近来和朋友们娱乐之余,总容易想到去台球室。说实话,台球室并不是一个我愿意去的地方。主要是台球室的环境大多比较简陋、卫生条件差、烟雾缭绕。打完球后,衣服一定发臭了!烟臭!

    但不管怎么样,娱乐还是很快乐的。快乐的根源往往是我能赢上几盘。要再说根源,那就是我们几位都是很菜!大部分是靠运气来进球的。

    当然了,在过程中也在琢磨如何进行瞄准,如何打各种旋转球。最近忙于项目的单元测试,突然想到台球。发现可以用台球来很好地解释敏捷开发的精义。

    我们都是菜鸟。在这个前提下,我们进行台球娱乐。往往都是现场进行练习。对于准度、力度、角度都只是简单想到而已。往往是有心去练习,但对于其结果,却不能做很好的检验并对现有技术进行校正!

    对!校正,这是很重要的。菜鸟对于台球的评价往往只是通过结果来评定。但是高手往往可以关注到细节上。而每一个细节的提高,也必然是通过反复地练习,并进行反复的校正来提高的。

    我们做软件不也正是如此吗?简单的软件开发,往往是通过开发阶段完成之后的测试人员甚至客户验证的。当我们回头来总结我们软件开发的时候,就会联系到很多方面的原因,什么管理啊、什么时间啊、什么环境啊...

    我并不是说软件开发不涉及那些因素,但是显然的是,对专项进行联系提高,显然比整体调整要简单地多了!

    比如说练习台球,通过比赛进行练习,显然没有专项练习来的快速、有效!为什么呢?在于及时快速的反馈!我能很快知道我现在的方式是不是有效的,偏差多少。而对于修改也更容易呢。

    软件开发也是这样,我们开发出来的功能模块,与其放到开发完成之后测试,还不如立即进行验证调试。单元测试的思路也正在这里。通过及时快速的测试反馈,让你可以及时快速地发现开发过程中存在的偏差,而修正过程,也会因为你刚刚开发完成,对于原有思路还很熟悉清晰,变得更加容易!

    这一点我想大家都能理解,也都能想到。现在我们再反过来看,光是进行单独的练习,对于系统的开发也是不够的。因此应该意识到单元测试并不能解决所有问题!我们应该在单元测试之上,针对系统开发的不同阶段,制定不同的测试策略。

    敏捷开发理论,提出了很多有明显特点的概念,包括“单元测试”,“结对开发”等等。各个团队在实践这些理论的时候,往往容易进入误区的就是,想用这些新理论解决所有问题。针对这点,我们应该真正认识到各种理论的适用范围。摆正想法,才容易真正掌握!

    总结一下:

    1. 单元测试,重点在于提供了快速及时的反馈。
    2. 单元测试,并不能解决所有问题。系统级别的问题,需要系统级别的解决方案。 

    发表于 @ 2007年06月17日 23:23:00|评论(loading...)|编辑

    新一篇: 同学意外离去,停写博客一月 | 旧一篇: 羽毛球 vs. 软件开发

    评论

    #1073X 发表于2007-06-18 17:55:17  IP: 222.209.223.*
    衡量脑力劳动好坏的途径唯有通过其结果,对脑力劳动过程的测量是不可能的。好比球手击球,观众无法看见他的大脑是如何进行计算的,却可以看见他是否把球打进了,进球之后的走位是否合理。
    之所以只考虑球手击球过程中的计算,而忽略其他方面的特性,是因为我认为台球与程序开发只在这一点上有可比性。我们不能拿球手对球杆的掌控能力和程序员打字的速度来比较,那没啥意思,根本不是一个等级上的身体技巧。
    如果把台球中的一个过程单位定义成一次击球,这是指一个完整的可测量的过程。那么该如何定义程序开发中的一个过程单位呢?
    这是一个很主观,很灵活的问题,没有标准答案。可以是一次重构的结束;可以是一个新功能的某一个必要步骤的完成;还可以是整个程序开发完成。
    虽然这是个没有标准答案的问题,但是存在更优的决策逼近最佳解决方案。比如上面提到的把整个程序开发完成作为我们可测量的单位,就是楼主也不赞同的开发结束以后进行测试,这个就很槽糕。
    我多么庆幸自己是个程序员,而不是台球球手。我有一个细小的过程单位,我可以很频繁的检验自己的决策,可以花费很小的代价修正自己的失误,比如按住Ctrl和Z;不需要处在球手的险恶位置---某次错误的决策可能带来惨痛的失败,却没有足够的空间衡量各个子决策。
    单元测试正是程序员利用这个细小过程的第一步,充分发挥测试的本质特性---获取反馈的途径,捕获来自各个过程单位的反馈。
    #xiammy 发表于2007-06-19 10:00:00  IP: 124.42.3.*
    哈哈,楼上的话真是精辟啊
    #1073X 发表于2007-06-19 10:24:40  IP: 222.209.223.*
    何精辟之有呢?我很想听听你对我所说的“测试的本质---获取反馈的途径”的看法,这对我很重要。还望不吝赐教。
    #xiammy 发表于2007-06-19 14:25:24  IP: 59.108.103.*
    对于程序员这个值得庆幸的行业,我也是深有感觉的。程序员是在将现实世界用代码表现出来,并在此基础上构建新的事物。对于程序员来说 ,麻烦的是表现现实的过程,庆幸的是,最终只是代码级别的构建。就算错了,就算翻到过来重来,对于伟大的程序员来说,也不会感觉是什么天塌下来的大事情:)
    上面的话,虽然夸张,但却清晰地说明了软件工程和传统行业的区别。而您讲到的“测试的本质---获取反馈的途径”,正是在这一特定条件下的特定的修正过程。
    事实上,软件工程中,这个修正过程被认为是理所当然的。测试的目的是为了修正,而测试提供给修正的,正是当前实现版本和期望版本之间的差异的反馈。
    当然了,单纯说测试的本质,我认为得看你关注的方面了。
    #xiammy 发表于2007-06-19 14:29:04  IP: 59.108.103.*
    说到修正的代价小,我想到另外一个很有意思的类比:
    星际争霸这类优秀的即时战略游戏,其在战争中,表现出来的选手的战略战法,都和现实战争中相似。不一样的是,游戏中,玩家可以反复琢磨,反复演练。而现实中,战争往往只有一次机会。
    #1073X 发表于2007-06-20 12:58:19  IP: 222.209.223.*
    嘿,我们在有关代价的问题上的共识真让我吃惊:)。之前的回复我总觉得有欠缺,想来就是没有清楚表达到这一点。
    不过您还是没有回答我的问题,那我就先发表一下看法吧。测试是一种观察的方法(甚至可能是观察程序最廉价的方法),这就是所谓“本质 是 获取反馈”。为什么这样说?因为测试作为一个过程本身不能修正任何错误,只能发现他们的存在;修正错误的任务要由对反馈的响应来完成,不应该包含在测试范畴中。
    #xzaww 发表于2007-07-12 09:46:48  IP: 58.49.250.*
    个人对于C++编程是个菜鸟,但是在台球方面海兽有点经验的,可却从没象LZ这样有过这么贴切的想法,呵呵,感谢LZ的提点。
    #mastudio 发表于2007-07-16 12:43:39  IP: 222.95.55.*
    都是飘渺的空话, 好比皇帝的外衣!

    敏捷自己什么产品也没有, 也不做开发,

    就TMD这么神奇有个"方法"就横空出世了?

    "方法"又是什么哩? 看过马路上江湖卖艺的就就明白了, 废话搞的漫天飞, 你永远都看不到实质的东西, 看不到你想看的那么神奇的表演.
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 韩小明