时隔2年,我又回来了~

单元测试讨论

上一篇 / 下一篇  2011-09-22 11:14:08 / 个人分类:指点迷津

我10:40:45
我想问一下,这个单元测试的单元是如何划分的?
高手 10:41:04
这个问开发
我10:41:46
就是说单元测试的单元的划分是由开发人员自己划分的咯?
高手 10:42:02
是的

高手  10:42:52
如果是java,理论上每个class就是一个单元,当然纯java bean的可以忽略,因为上面没有行为。
高手  10:43:49
当然这样做得单元测试工作量比较大了,所以可以粗一些,例如可以按照一些重要的包划分来确定哪些是要做单元测试
高手  10:44:06
这个就要涉及到当初的设计模式了
高手  10:44:28
例如一般我这里会对service类进行单元测试
我 10:45:14
ok
我 10:45:40
那我觉得一般以一个功能为一个单元,是不是太粗了?
高手  10:45:57
一个功能一个单元,你的维度本来就是矛盾的
我 10:46:55
矛盾?是说这个功能应该由多个更小的部分来组成,而这个更小的部分就可以作为一个单元?
高手  10:47:04
比如对于业务功能来说,所谓的功能是说,要上传一个文件,到开发层面,可能会有很多服务来支持,例如有一个权限服务,一个验证服务,一个文件服务,一个数据库服务
高手  10:47:31
所以从这个角度来说,开发说的功能和测试说的功能可能是不一样的
深圳_卡卡  10:47:33
一个对象作为一个单元好不好 很细吧
高手  10:48:05
理论上应该就是一个class一个单元的,当然我说了,纯java bean除外
我 10:48:09
哦,是这样哦,那这个单元测试的单元划分由开发来确定好了
高手  10:48:26
一些proxy类,也可以酌情除外
高手  10:48:30
对的
高手  10:48:38
因为划分维度不一样
我 10:48:43
恩,好的
我 10:48:56
给他们培训的时候就告诉他们自己划分吧,(*^__^*) 嘻嘻……
高手  10:48:58
比如测试可能会说:订单保存,领料单保存
但是对于开发来说,也许就是一个功能
高手  10:49:18
你要给开发培训单元测试?
我 10:49:25

我 10:49:31
是不是太夸张了?
高手  10:49:45
有点夸张,呵呵,比较难做
我 10:49:49
但是我们这边开发确实不做写单元测试的代码
我 10:49:55
我也是以这个为借口
我 10:50:01
顺便学习一下
高手  10:50:05
我倒是建议你先给开发做接口测试的培训
我 10:50:25
现在所谓的单元测试就是开发把自己做的模块手动测试一下
高手  10:50:27
例如所有对前端开放的服务必须进行测试
高手  10:50:38
 
高手  10:50:45
这个不叫单元测试了
我 10:50:47
是啊
我 10:50:52
但是现在就是这个状态
高手  10:50:55
unit test是很开发的东西
我 10:51:12
导致了我继承测试的时候问题非常多
我 10:51:21
哎,
我 10:51:28
公司还是小啊
我 10:51:43
开发都不大在意unit Test
高手  10:51:45
我不知道你们的技术路线是什么,如果是严格的三层结构,还是建议先从service层开始做测试
高手  10:52:03
service层的测试需要代码实现的
我 10:52:11
接口测试之后呢?
高手  10:52:35
比如你提供给外部/内部的一个服务,例如文件操作,数据库操作,那就应该对这个服务进行测试
高手  10:52:53
至于这个服务后面调用的具体哪个实现类,可以先放一下
我 10:53:35
就是说,如果有个上传文件的功能,就要对这个功能进行测试,先不管这个功能是由多少个class组成的?
高手  10:53:41
这个慢慢来了
高手  10:54:01
我是觉得如果你能把接口/服务测试执行好了,就已经很好了
我 10:54:12
ok
我 10:54:19
我看一下
高手  10:54:30
我现在这里开发基本也是这种模式,这块测试做好了,后面可以少80%那种初级bug
我 10:55:07
是啊,我也觉得开发如果把单元测试做好了,后面会剩下很多的麻烦
高手  10:54:01
我是觉得如果你能把接口/服务测试执行好了,就已经很好了
我 10:55:14
ok
高手  10:55:28
但是真正的单元测试对开发技能要求很高的
我 10:55:32
我先看一下下
高手  10:55:37
主要和设计模式都有关系
我 10:55:47
也就是说单元测试要技术很高的人才能做单元测试
卡卡  10:56:04
我 10:55:47
也就是说单元测试要技术很高的人才能做单元测试
没有这样的说法
高手  10:56:06
应该说是设计的能力
我 10:56:06
而接口/服务测试是任何一个开发都可以做的?
高手  10:56:15
是的
卡卡  10:56:18
那只是说做得好不好而已
卡卡  10:56:23
不是能不能做的而已
我 10:56:27

高手  10:56:31
这个和技术水平关系不大,但是和设计水平有关
深圳_卡卡  10:56:47
其实跟工作经验有关
我 10:57:04
设计水平?是和业务等有关系还是和架构有关系?
卡卡  10:57:04
搞程序久的人自然会有那种设计架构的理念
高手  10:57:32
没那么高深
我 10:58:07
ok
高手  10:58:10
因为可以说,每个类,都承担一个职责的
高手  10:58:22
这个职责的划分很关键
高手  10:58:45
但是这个职责又是从开发角度去看的,并不纯从功能的角度出发的
高手  10:58:58
这里面是有一些方法论的
我 10:59:00
这个职责的划分就是由开发来分咯
高手  10:59:09
比如设计模式,领域模型
高手  10:59:23
是的,开发划分的,而且只能是由开发来划分
我 10:59:28
bingo,这就真的涉及到测试理论了
我 10:59:37
 
高手  10:59:40
因为这个东西就是仅仅为开发服务的
Jerry  10:59:52
单元测试那是开发的工作内容
高手  10:59:57
测试并不需要知道你的划分
我 11:00:27
收到,明白了~
我 11:01:04
再问一下,接口测试和服务测试有区别么?
高手  11:01:08
功能测试人员的工作是:我不管你怎么做,反正我要得是结果
开发测试人员的工作是:我要知道怎么做得,并且对里面的关键点进行测试,以保障组装起来是正确的
高手  11:01:22
有区别
高手  11:01:33
接口可以是服务,服务不一定是接口
我 11:01:48
是啊,我现在就是功能测试人员
我 11:02:15
我刚才g哥了一下服务测试
Jerry  11:02:25
95%以上都是
我 11:02:50
没有找到关于服务测试的一些资料
高手  11:02:51
关于接口和服务,可以举一个例子。
例如淘宝买东西,我们可以查看物流信息,那么这个物流信息一定物流公司提供的服务,当然它也是一个接口
我 11:03:04
对头
高手  11:03:44
但是如果你提供的是一个很底层的服务,例如对数据库的一个通用操作,这个服务是仅仅对开发开放的,那么它就没有必要开放成一个接口
我 11:03:53
web服务测试,这个和服务测试有关系么?
高手  11:04:19
但是从开发角度讲,那个通用操作一定是要进行测试的,因为他错了,就影响一大片。
我 11:04:32
这个服务就像API中的一个方法么?
高手  11:04:39
对头
我 11:05:37
好,我再理解理解

高手  11:09:13
所以从这个角度讲,你会发现测试的两个路线:一个是从测试角度看,所谓的 T2L,而开发测试的路线是 L2T
高手  11:09:40
top to low,low to top
高手  11:10:59
开发一般的模式是 low to top,从单元测试开始,保证最后的组装是正确的;另一种模式,是从外围开始(例如接口测试),然后发现问题,再向下追踪。

高手  11:11:12
而刚才说的基于服务的测试,是介于两者之间的
高手  11:11:20
说完了,over
我  11:13:52
基于服务的测试是介于两者之间,也就是介于开发和测试之间,那么基于服务的测试到底是有开发来做还是由测试来做呢?
高手  11:14:05
开发
高手  11:14:17
因为那个有可能是开发内部的东西
我  11:14:22

高手  11:14:30
接口是对外开放的东西,所以可以开发做,也可以测试做
高手  11:14:39
这个是一般规则
我  11:14:51
ok
高手  11:15:10
当然你们测试够牛,都能读懂开发的设计,那测试去做那些服务类的测试,也未尝不可
高手  11:15:33
 
我  11:15:35
服务类的测试一定要写代码来完成么?
高手  11:15:43
肯定的了
高手  11:15:54
接口测试也是要写代码的
高手  11:16:24
当然如果开发愿意,可以开发好一些接口测试用的工具,然后测试去用也可以
高手  11:17:09
我原来一个项目就是这样,做一个统一的页面,下拉框里面列出所有的接口,测试选择接口,输入相应的参数进行接口测试

高手  11:19:33
嗯,所以我说这个和开发设计有关的
我  11:19:36
开发的设计:是指的开发的文档么?
高手  11:19:47
 
我  11:20:00
咕~~(╯﹏╰)b
高手  11:20:01
不是
我  11:20:03
理解了
我  11:20:07
恍然大悟
高手  11:20:10
文档只是交付物而已
我  11:20:19
果断理解了开发设计
我  11:20:27
是整个系统的设计~
我  11:20:32
是这样么?
高手  11:20:41
你可以找一下G哥先了解一下这个设计
我  11:20:50
ok
高手  11:21:04
不过这种技能是需要开发做了一段时间后才能领会的

我 11:25:07
开发设计是指什么快速模型,瀑布模型那些?
高手 11:25:49
快速模型,瀑布模型偏理论了
卡卡 11:26:13
现在都是敏捷开发,敏捷模型
高手 11:26:18
或者说是一种思想,真正做设计的时候,会去应用这些思想
高手 11:26:32
但是具体的做法上有另外一些方法的
我 11:26:38
不是也有敏捷测试么?
我 11:26:55
就是具体问题具体分析呗
高手 11:27:03
方法分:思想方法和操作方法
高手 11:27:27
当然你可以说,我领会了那些思想,然后进行了实践,然后自己归纳出一下做法
高手 11:27:39
这个就是所谓的best practice了
卡卡 11:27:40
思维与执行
高手 11:27:46
最佳实践,呵呵
我 11:28:19
理论结合实践,(*^__^*) 嘻嘻……
卡卡 11:29:26
等你做一行坐久了,然后你就会发现
我 11:29:29
既然说到了敏捷开发,我头段时间看到敏捷测试,这个敏捷测试有木有实践过啊?
卡卡 11:29:33
你说的是概念
卡卡 11:29:43
你下面的人说的是操作
卡卡 11:29:45
实现
高手  11:31:38
所以才会有一个UML出来了
高手  11:31:57
这个就是想再思想和实践之间搭一个桥梁,或者提供一个工具
高手  11:32:03
最后变成是可操作的
卡卡  11:32:57
其实就像建楼房一样
卡卡  11:33:00
现有设计图
我  11:33:00
开发模型-->UML-->实践?实际开发中是这样的模式?
卡卡  11:33:19
把每一个处都设计好了,之后施工起来
卡卡  11:33:27
才不会有什么问题
高手  11:33:28
开发模型或思路从UML体现,UML来指导最后的coding
我  11:36:28
最先确定需求,再确定开发模型,再UML,在coding?还是先确定开发模型,然后是需求?
卡卡  11:37:17
最先肯定是获取需求
卡卡  11:37:28
没有需求,就不知道该怎么设计
卡卡  11:38:08
设计好了在编写
卡卡  11:38:27
设计完了一般都需要评审

TAG:

 

评分:0

我来说两句

Open Toolbar