本文发表在 rolia.net 枫下论坛(1) do all test cases before implementation;
作为consultant company而言,好像很难做到这点。BA gather the client's requirements, 然后我们implement。 但这些requirements常常是不完善和不确定的,我们完成后,show给客户,客户修改要求,我们修改code, 这是一个iteration的过程。我很难想象do all test cases before implementation。 如果每次客户提出新的requirements或修改requirements, 我们都先做all test cases再implementation,进度会严重拖慢, 客户未必会高兴。
(2) try 100% code coverage;
我想这需要相当多的时间。test code所花的时间会超过implementation的时间。 客户愿意pay么?比如我昨天重写了一个method based on the new requirements, 这个method本身就20-30行code,但它的test的cases有10多个,近300行。而以前的test code全部作废。这些时间到底值不值?
(3) some people online suggest to test service layer but not dao layer;
我承认绝大部分business logic应该放到service layer。 但dao layer的query很多时候也不是简单的对一个entity的update/query/save。很多时候dao layer的query也有很多logic也很复杂。很多时候bug都是这些query产生的。要不要对dao layer的query做test呢? 对我而言, 很多时候, unit test是我debug DAO layer 的一个主要手段。
(4)关于Coupling的问题
我更倾向这是design的问题, 而不能依靠TDD。解决Coupling,一般靠选取framework, 比如用现在流行的spring 和spring.net等架构, 基本上就解决了Coupling的问题。而且Coupling的问题主要是architect负责,而TDD是由developer的负责。好像应该各司其职吧。
我们现在开始要求完善test cases, 并不是真正的TDD。一般都是developer完成implementation, 然后给QA去test。 当qa test时, 我们做test cases, 能完成多少test cases看情况而言。每次PM问我什么时候可以给QA做test, 我告诉他implementation已经完成, 正在做test cases, 他就等不及了(因为QA, UAT无所事事,等做测试),让我直接deploy给QA和UAT。基本就完全违背了TDD的原则。
而且一个sprint一般都是3-4周,要等develope先做test cases, 再implementation, 然后给QA/UAT 测试,那一个sprint就做不了啥事了。
另外无论是先做test case还是先implementation, 因为是同一个developer,大部分bug是由对requiremnet的描述或理解的偏差造成的,所以很多implementation的bug在test cases中一样存在。
并且test case完成后,很少去维护它,时间长了,基本就失去意义了。
很希望知道到底有没有公司是完全按TDD的模式来做开发的。谢谢。更多精彩文章及讨论,请光临枫下论坛 rolia.net
作为consultant company而言,好像很难做到这点。BA gather the client's requirements, 然后我们implement。 但这些requirements常常是不完善和不确定的,我们完成后,show给客户,客户修改要求,我们修改code, 这是一个iteration的过程。我很难想象do all test cases before implementation。 如果每次客户提出新的requirements或修改requirements, 我们都先做all test cases再implementation,进度会严重拖慢, 客户未必会高兴。
(2) try 100% code coverage;
我想这需要相当多的时间。test code所花的时间会超过implementation的时间。 客户愿意pay么?比如我昨天重写了一个method based on the new requirements, 这个method本身就20-30行code,但它的test的cases有10多个,近300行。而以前的test code全部作废。这些时间到底值不值?
(3) some people online suggest to test service layer but not dao layer;
我承认绝大部分business logic应该放到service layer。 但dao layer的query很多时候也不是简单的对一个entity的update/query/save。很多时候dao layer的query也有很多logic也很复杂。很多时候bug都是这些query产生的。要不要对dao layer的query做test呢? 对我而言, 很多时候, unit test是我debug DAO layer 的一个主要手段。
(4)关于Coupling的问题
我更倾向这是design的问题, 而不能依靠TDD。解决Coupling,一般靠选取framework, 比如用现在流行的spring 和spring.net等架构, 基本上就解决了Coupling的问题。而且Coupling的问题主要是architect负责,而TDD是由developer的负责。好像应该各司其职吧。
我们现在开始要求完善test cases, 并不是真正的TDD。一般都是developer完成implementation, 然后给QA去test。 当qa test时, 我们做test cases, 能完成多少test cases看情况而言。每次PM问我什么时候可以给QA做test, 我告诉他implementation已经完成, 正在做test cases, 他就等不及了(因为QA, UAT无所事事,等做测试),让我直接deploy给QA和UAT。基本就完全违背了TDD的原则。
而且一个sprint一般都是3-4周,要等develope先做test cases, 再implementation, 然后给QA/UAT 测试,那一个sprint就做不了啥事了。
另外无论是先做test case还是先implementation, 因为是同一个developer,大部分bug是由对requiremnet的描述或理解的偏差造成的,所以很多implementation的bug在test cases中一样存在。
并且test case完成后,很少去维护它,时间长了,基本就失去意义了。
很希望知道到底有没有公司是完全按TDD的模式来做开发的。谢谢。更多精彩文章及讨论,请光临枫下论坛 rolia.net