猛禽的编程艺术

编程是一门艺术

用户操作
[即时聊天] [发私信] [加为好友]
猛禽ID:Raptor
425454次访问,排名112好友19人,关注者74
编程序——通常有BUG
写BLOG——都是些八卦
拍MM——没人给偶拍
Raptor的文章
原创 135 篇
翻译 0 篇
转载 0 篇
评论 866 篇
猛禽的公告
本站作者:猛禽
号:老鸟,别号:大叔,英文名:Raptor。

Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
联系方式:

我常用的Extensions

微笑图书室 多背一公斤

最近评论
hacker47:既然说放宽技术的视界,那么就宽到把MS的技术也能放下的程度吧,对MS有偏见,与对别的什么东西有偏见,并没有什么本质的区别。

MS是不公开源代码,但是其详尽的MSDN,个人认为使用起来比开放的源代码还好,且不说有些人的代码也不一定写的很好,是不是?

hacker47:我的观点你可能不认同,不过没关系,可以讨论。

我认为你喜欢linux是你的自由,
别人喜欢Windows也是别人的自由。

都是自由,没啥好说的。

没大见到Windows的用户说为什么linux的用户不喜欢Windows,倒是看到很多用linux的人特别讨厌Windows,不知道为什么?


kwlong2008:我是做网站建设的,来看看你的空间,不错,欢迎踩我的网站制作空间!
kwlong2008:我是做网站建设的,来看看你的空间,不错,欢迎踩我的网站制作空间!
lxd121:一旦掌握了IT技术里最重要要的语言,呵呵,楼主的问题就解决了。不过俗话说的话,达则兼济天下,所以恳请楼主们大力宣传新技术,为我等开阔视野。忘了说是什么语言,其实不说大家也都明白,呵呵
文章分类
收藏
    相册
    附图
    0. 个人链接
    1. 猛禽的河蟹BLOG(RSS)
    2. 寻找世界的美丽(RSS)
    3. Mental Studio-个人主页(RSS)
    5. 猛禽专栏-CSDN上的个人专栏
    6. 猛禽文档-CSDN个人技术文档
    7. CSDN电子报
    1. CSDN BLOG
    1. 令狐虫
    2. 韩磊(RSS)
    3. lxpbuaa(桂枝香在故国晚秋)
    4. 一竿残照.金棣@CODELPHI
    5. deadcat's blog
    6. gigix(透明思考)
    7. ozzzzzz
    8. 蝈蝈
    2. 技术BLOG
    chechy
    CoolSlob
    FrameSniper(FS)
    hkbarton
    leeon
    SnowFlacon
    小伍
    小小
    小眼镜
    我的ACE,TAO
    摩托
    百合MM
    3. 洋人BLOG
    Allen Bauer
    Anders Ohlsson
    Danny Thorpe
    Don Box
    Herb.Sutter
    James Gosling
    Martin Fowler
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 单元测试的规划收藏

    新一篇: 第二届CSDN英雄会上海站 | 旧一篇: 绿毛乌龟

    令狐写了一篇《单元测试》,源于我们上周的一次关于测试的讨论。TR说到的原子性、独立性、正交性的确也都是值得讨论的问题。不过我比较关注的是粒度和覆盖度。

    讨 论是缘起于我们几个最近在合作的一个基于Pylons开发的小项目。Pylons本身是一个基于MVC的WEB框架,我们的应用可以简单地分层为: Controller, Function, Model 这样三层。Model里都是表结构的定义,没有什么好测试的;Function部分是主要的功能实现部分,所以我们在这里使用了Python的 unittest框架进行测试;当然,Pylons为Controller的测试提供了一个基于nose的测试环境,不过我们没用——因为在我们的应用中 Controller只是作为View与Function之间的接口。

    但是问题就在这里了,实际开发中发现,某人的Controller代码居然也有错误——具体是谁我就不说了。原因自然是因为我们省略了对Controller的测试,所以这里的错误就不能被及时发现,或者说这部分功能代码没有被测试所覆盖到。

    令狐在文中说到的第三点——单元测试应该能保证每一个函数的可靠性——应该说是一个完备的测试所要做到的,但是实际上总会有一些取舍。这其中的原因除了一些特别简单而且基本不会修改的函数可以不必测试以外(这点也要小心,有时越是简单的函数越可能出错),另外一部分原因在于一些函数的依赖性,比如对数据库或网络这样的外部资源的依赖。

    回到我们那个具体的项目上。

    我们当初之所以只对Function部分进行测试,就是因为这部分被我们设计为最主要的功能实现部分,结果现在出现问题——未被测试所覆盖的部分出错了。

    最圆满的解决办法就是再给Controller加一层测试,确保测试的完备。但这样的话就要多一些编写测试的工作了。当然,多写点测试也不是什么坏事,但问题在于我前面已经说了,Controller层很薄,没有多少代码,专门为它写一套测试似乎有点多余。

    关于测试的量应该控制在多少,ajoo兄的观点很值得参考。如果测试代码的代码量与被测试代码差不多,那么这样的测试似乎就没有意义了。

    好吧,剩下的问题就是:如果减少了测试的代码量,如何保证覆盖范围足够大?答案是把粒度放得粗一些。

    以这个案例来说,我 的观点是:实现对Controller层的测试,而放弃对Function层的测试——因为Controller层调用了Function层所有功能,也 就是说,测试可以确保同时覆盖Controller层和Function层。但是代价是失去了测试的准确定位功能,一旦出现测试不通过的情况就无法判断问 题是出在Controller层还是出在Function层。不过幸好Controller层很薄。

    当然,令狐是不赞成我这个观点的,所以他写了那么一篇长文章。

    其实这样的事情我是干过的。前两年为某商业软件写过一个他们的专用协议所需的反弹端口代理程序,因为如前面所说,这个程序有对网络的外部依赖,所以精确的定点测试比较困难,最后我在开发的时候是用了最偷懒的办法,也就是最粗粒度的测试:

    用DUnit写了一个独立的测试程序,在其中实现了两个Mock,分别模拟通讯的两端与代理程序之间用专用协议连接,只要这两个Mock之间通过代理的通讯是正确的,就返回测试通过。

    最后我就是用这样的方法把那个程序开发完成的。当然,中间也少不了很多DEBUG LOG的分析处理工作。囧。

    总的来说,还是不推荐将测试粒度放得太粗,因为这将失去单元测试的一个很大方面的作用,增加DEBUG的工作量。但是同样不应该将粒度做得太细,这样测试就没有意义了。

    发表于 @ 2008年06月12日 10:51:19|评论(loading...)|收藏

    新一篇: 第二届CSDN英雄会上海站 | 旧一篇: 绿毛乌龟

    评论

    #yanyiwei2003 发表于2008-06-14 13:30:41  IP: 222.171.23.*
    新建一个c/c++群 63774360 欢迎加入
    希望是大家学习探讨的空中园地 爱灌水者请勿加,因为希望大家都是真心真意为了学习,共同进步走在一块的,当然探讨程序员的方方面面,我们也热烈欢迎!谢谢!
    发表评论  


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