项目组采用XP的实践开发已经有一个多月了,主要是采用了测试驱动开发,重构,结对编程,还要引入持续集成。经过这么长时间的实践,我觉得组建敏捷团队,开始敏捷开发的最关键问题是要统一价值观。

测试驱动开发

      我发现实际上掌握这些实践其实并不是最困难的,比如测试驱动开发,虽然我也是个初学者,但是我知道,只要经历一个学习和实践的过程,我们就能掌握这项技术。我们使用JUnit测试,最开始将整个Spring框架和Hibernate一起都测试了,后来发现这样做是不对的,单元测试应该不依赖于框架。于是我们改了。这个很容易改。

     可是我发现比较难改的是大家编写测试的习惯。虽然使用着JUnit,但是他们依然会在产品代码编写完之后写测试,而非在其之前;他们依然是写了大量产品代码之后写测试,而非写一点测试,写一点产品代码。起初我觉得是因为大家不明白测试驱动开发的好处,因为先写测试有以下几个好处:

    1、单元测试是需求说明书

    2、单元测试是用户手册

   3、帮助设计

   4、有助解耦

   5、观测性能

  6、界定特性是否完成

  7、系统集成出现问题便于排错

 8、是重构的保护伞

 9、在大多数情况下不需要调试,只需要测试,节省时间

10、提高产品质量

     应该还可以举出很多好处,这些在很多著作,讨论中都已经重复千万遍了,不必细说,重点是,我发现即便人们都明白所有这些,但是依然会回到过去的方式。我觉得其根本问题在于对于敏捷背后的两个价值观他们是不认同的:重视质量小步前进。他们并不认为质量对于系统的开发会有怎样的作用,认为质量是无关紧要的。质量的重要性其实已经不需要说了,Fowler等人的论述已经够多了,可是他们依然还是坚持自己的观点,这类人有以下几个表征:

   1、认为测试驱动开发会增加成本。因为他们觉得测试驱动开发时编写的测试是多余的,如果不采用测试先行,这些测试是可以不编写的。这实际上是对质量的不重视。

  2、认为测试脚本和测试数据是难以编写的。因为他们觉得使用完整的一套测试数据来进行测试是不可行的,而在我看来这是必须的,用户必须提供平时他们使用的典型数据来进行测试,以保证质量。

3、认为有了集成测试和用户测试,就不需要单元测试,这样做是非常冗余的。

诚然,QA等级和软件成本是挂钩的,但是单元测试保证的质量应该是必须的。

如果上述观念无法达成共识的话,TDD中所说的,当遭遇失败时,首先写一个测试,对于他们而言就更是天方夜谭了。

 重构

虽然我们使用Eclipse内置的重构工具完成一些典型重构,比如抽取接口,renamemove,提取方法等,但是为什么要进行重构的价值观却很难建立。具体现象是:

1、在代码很混乱的情况下继续添加新的代码,而不是考虑先将代码重构

2、认为重构会降低开发效率

我觉得其背后隐藏的依然是对于敏捷价值观的不认同:重视质量简单

他们通常觉得只要能运行就不要去破坏它,质量问题是最后要考虑的问题(有一部分人还会将重构和性能调优画上等号)。

重构可以获得一个简单的设计,而简单设计意味着没有重复,有充分理由的依赖关系和继承体系。可是我发现,没有重复这样一件事情,就很难达成共识,有的人认为重复代码是代码重用的一种方式。

 

 

结对编程

结对编程的有效进行也对于提高质量和使设计简单有同样的好处,这个不必细说。

问题还在于大家是否对于这两个价值观认同。

 

以人为本

Fowler的《新方法论》中,Fowler认为敏捷最重要的两个特性之一就是以人为本,而非以过程为本。如果听到下列言论,我觉得意味着你的组织文化可能不是以人为本的:

1、随便找几个人进行简单的培训(这些人只使用过VB开发过课堂作业程序),就可以很好的编程了

2、制定一个执行步骤规范,人手一本,只要按照上面一步步操作就可以了

3、谁离开了,马上找一个人来就可以来替换他的工作。

 

我觉得这已经表明老板认为程序员只不过是生产线上可替换的零件了。

我觉得不以人为本的团队,也体现了对于如下几个价值观的不认同:

1信任。程序员不值得信任,并不是像Fowler所说的程序员是担负责任的专家。

2沟通反馈。虽然通常他们会强调沟通的重要性,但是他们很少强调反馈的重要性。他们所谓的沟通是单向的下命令,而非交互式的。

3尊重。团队中其他人的工作是不值得尊重的,架构师可以有一万个理由瞧不起编写代码的程序员,在这样的团队中,架构师通常都是不参与编程的。

迭代,小步前进

我非常喜欢Kent那个开车的比喻,可是领导认为每天总结(站立式会议)或者每隔一段时间进行总结都是没有必要的。

设立短小的、可控的计划是无用的。

还有一个最根本的

 

我觉得敏捷开发最根本的一个观念就是实事求是,也就是Kent在《解析极限编程》中所说的,XP就是将有益的事情做到极致。所以敏捷方法都是一堆实践原则的集合。

Johnson讲的循证框架也是在强调这点。我们可以笼统的说自己在实践敏捷开发,或许不是那么纯粹的XPKent的说法也是建议循序渐进的使用XP,但是觉得有用,可以解决你遇到的问题,又不会有很大的副作用,那么就把它引进来,即使这个方法是CMMI阵营的。

    我认为每件事都要经过科学的论证,而不是猜测,可是这一点也得不到认同。

敏捷叫停

我们的团队请了一个日企的强调使用V模型,严格文档驱动的顾问,意味着我们的敏捷之旅结束了。

我想我们之所以没有沿着敏捷的道路走下去,并不是因为实践的问题,也不是因为原则的问题,而是价值观的问题,总结如下:

1、我们的老板觉得程序员就是可替换的零件

2、质量不重要

3、开会就是下达命令

4、简单就是把所有的代码都写到一个文件里

5、对于大家不信任

6、个性不应该被尊重,服从命令是第一位的,海军陆战队风格

7、实事求是

 

Kent说,如果你的团队的价值观是与XP抵触,那么就不要使用XP

我觉得透过种种敏捷实践的实施不力,其背后隐藏的其实是价值观的难以统一,至少我觉得我在项目中推行敏捷,挣扎了一个半月终于要搁浅,原因就在于实在难以在价值观上达成共识,最困难的是难以说服老板改变观念。

 

Ps:我是研究生一年级的学生,我们的项目很大,可是人不多,我觉得非常适合使用XP。我认为XP是非常好的天才的想法,可以解决很多问题,可是今天来给我们做指导的那个日企的人说在大公司做大项目都是要听话的,不会用敏捷之类的新方法。可是我看到的那些软件开发大师的书,和论坛上各位的讨论,都觉得这个方法应该是经过很多大型项目的验证了,可是我们导师询问了几个公司里的人,却都没有用过,他们也觉得TDD很好,但是就是没用过。

  我是作为我们团队的技术主管,其实就是矬子里面拔大个,但是这是我接触敏捷1年来,并且在这个项目前期时使用敏捷的想法,或许我的所有观点都很幼稚,所以还请各位有工作经验的多多指点~

评论
abcx 2007-10-08
sslaowan 写道
JavaInActoin 写道
ozzzzzz 写道
JavaInActoin 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。

3、4个月就上一套ERP不失败才怪。实际上类似的企业应用往往重点和难点在实施阶段,软件只是一个陪衬,关键还是业务流程的分析和重组。
所以你的这个例子举的不好。

你说的是理论,我说的是实践,你用一个教条的理论武断地否定一个活生生的实践,恐怕不太合适。
ERP的实施周期要视规模和条件来确定,不能一概而论,一般来说,缩短实施周期可提高成功率。业务流程重组也很容易导致实施失败,比较稳妥的做法是利用流程管理,逐步优化流程,流程是柔性的,不必一步到位,BPR在中国基本行不通,BPM才是实践之道。
有点偏题,不宜多说。

最近在研究BEA的产品线,AquaLogic BRM Suite和WebLogic Integration,觉得很复杂,不过,业务组件不是照样还要人编吗?尤其是虽然都叫计税,这个在各个企业都是不同的,所以能复用的可能行还是很小的


平台当然可以提高生产效率,我们原来的公司就有两个部门,一个是产品部,一个是项目部,项目是基于产品来开发的,这样生产效率还是比较满意的,不过公司的技术架构是多年前建立的,比较陈旧,用的是EJB 2,Struts 1,对struts的使用也用得不好,过程是RUP,比较笨重。专注与特定的行业,不断地对业务进行抽象,还是可以做出一些可重用的东西出来。
sslaowan 2007-10-07
JavaInActoin 写道
ozzzzzz 写道
JavaInActoin 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。

3、4个月就上一套ERP不失败才怪。实际上类似的企业应用往往重点和难点在实施阶段,软件只是一个陪衬,关键还是业务流程的分析和重组。
所以你的这个例子举的不好。

你说的是理论,我说的是实践,你用一个教条的理论武断地否定一个活生生的实践,恐怕不太合适。
ERP的实施周期要视规模和条件来确定,不能一概而论,一般来说,缩短实施周期可提高成功率。业务流程重组也很容易导致实施失败,比较稳妥的做法是利用流程管理,逐步优化流程,流程是柔性的,不必一步到位,BPR在中国基本行不通,BPM才是实践之道。
有点偏题,不宜多说。

最近在研究BEA的产品线,AquaLogic BRM Suite和WebLogic Integration,觉得很复杂,不过,业务组件不是照样还要人编吗?尤其是虽然都叫计税,这个在各个企业都是不同的,所以能复用的可能行还是很小的
ozzzzzz 2007-10-04
JavaInActoin 写道
ozzzzzz 写道
JavaInActoin 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。

3、4个月就上一套ERP不失败才怪。实际上类似的企业应用往往重点和难点在实施阶段,软件只是一个陪衬,关键还是业务流程的分析和重组。
所以你的这个例子举的不好。

你说的是理论,我说的是实践,你用一个教条的理论武断地否定一个活生生的实践,恐怕不太合适。
ERP的实施周期要视规模和条件来确定,不能一概而论,一般来说,缩短实施周期可提高成功率。业务流程重组也很容易导致实施失败,比较稳妥的做法是利用流程管理,逐步优化流程,流程是柔性的,不必一步到位,BPR在中国基本行不通,BPM才是实践之道。
有点偏题,不宜多说。

确实有点跑题,不过有研究的必要。等我把材料准备好,在行业板块我们可以讨论一下这个问题。
然而不管怎么说,我依然认为就我们讨论的这个问题,你举的例子十分的不合适。因为不可否认的一点是,开发费用在这样的项目中仅仅是少部分,而且也不是关键部分。这一点不管你拿出SAP ONE还是NC或者是任何一个叫的出名头的产品来都是如此。因此就平台的作用来说,从基础上讲就不可能大幅度的提高生产率。
至于你究竟是要实现BPM还是要去做BPR,我看技术方面不会有多少问题。关键还是实施的策略。
JavaInActoin 2007-10-04
gigix 写道
sslaowan 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?


同学有在某Web报表公司做咨询,据说他们公司新做一个项目只需要使用IE拖拽一些控件就可以了;还有同学在方正实习,每天就是拖拽一些业务对象,比如现金。还听说用友也是只是拖拽就可以了(听我们的甲方说的,不知道他们是不是被用友的人忽悠了)

不过就像您表示怀疑一样,我们做这个行业的项目已经有6年了,其业务之复杂,之不规范,之多变,根本没法通用,使用平台估计效果不会大幅度提高,如果可以的话那岂不成了银弹?不过在特定领域特定行业这还是有可能的,Broocks不也在人月神话20周年纪念版中说过吗。o6z所言的BPR,基本上不可能,涉及到的一系列问题就像你让房价赶紧下降到5年前一样困难,就像在北京彻底实现无人售票一样困难!

重点是,这些项目在维护阶段、尤其是需求发生变更时的表现如何
开发阶段的成本和工作量,只是整个软件生命周期的40%以下

平台上的开发和维护其实是同一种工作,都是定制/二次开发。
平台一般具有很强的灵活性,维护起来也比较简单。比如增加或减少字段,更改业务流程这些都是图形化的界面操作。象表单、查询这些是有模板的,模板也是可以方便地定制的。
平台的某些业务组件还有一些参数配置,有些维护只是更改一下运行参数而已。
JavaInActoin 2007-10-04
ozzzzzz 写道
JavaInActoin 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。

3、4个月就上一套ERP不失败才怪。实际上类似的企业应用往往重点和难点在实施阶段,软件只是一个陪衬,关键还是业务流程的分析和重组。
所以你的这个例子举的不好。

你说的是理论,我说的是实践,你用一个教条的理论武断地否定一个活生生的实践,恐怕不太合适。
ERP的实施周期要视规模和条件来确定,不能一概而论,一般来说,缩短实施周期可提高成功率。业务流程重组也很容易导致实施失败,比较稳妥的做法是利用流程管理,逐步优化流程,流程是柔性的,不必一步到位,BPR在中国基本行不通,BPM才是实践之道。
有点偏题,不宜多说。
sslaowan 2007-10-03
gigix 写道
sslaowan 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?


同学有在某Web报表公司做咨询,据说他们公司新做一个项目只需要使用IE拖拽一些控件就可以了;还有同学在方正实习,每天就是拖拽一些业务对象,比如现金。还听说用友也是只是拖拽就可以了(听我们的甲方说的,不知道他们是不是被用友的人忽悠了)

不过就像您表示怀疑一样,我们做这个行业的项目已经有6年了,其业务之复杂,之不规范,之多变,根本没法通用,使用平台估计效果不会大幅度提高,如果可以的话那岂不成了银弹?不过在特定领域特定行业这还是有可能的,Broocks不也在人月神话20周年纪念版中说过吗。o6z所言的BPR,基本上不可能,涉及到的一系列问题就像你让房价赶紧下降到5年前一样困难,就像在北京彻底实现无人售票一样困难!

重点是,这些项目在维护阶段、尤其是需求发生变更时的表现如何
开发阶段的成本和工作量,只是整个软件生命周期的40%以下


这个我就不清楚了,不过就像您说的,我们刚开始使用MyEclipse的Hibernate的代码生成工具,发现很好,可以直接从数据库生成POJO,描述文件和Spring版的DAO,觉得很方便,可是等需求变更时就傻了,还不是得手工去修改。忽然想到J2EE厂商宣传EJB时说拥有先进的代码生成工具如何如何,使用JBuilder确实不需要写那些描述,配置配置就OK了,那问题是需要修改实体类时怎么办呢?

我还有个疑问,在迭代开发中,什么情况算是进入维护阶段了呢?因为总是边开发,用户边提需求,感觉永远也没法验收。
gigix 2007-10-03
sslaowan 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?


同学有在某Web报表公司做咨询,据说他们公司新做一个项目只需要使用IE拖拽一些控件就可以了;还有同学在方正实习,每天就是拖拽一些业务对象,比如现金。还听说用友也是只是拖拽就可以了(听我们的甲方说的,不知道他们是不是被用友的人忽悠了)

不过就像您表示怀疑一样,我们做这个行业的项目已经有6年了,其业务之复杂,之不规范,之多变,根本没法通用,使用平台估计效果不会大幅度提高,如果可以的话那岂不成了银弹?不过在特定领域特定行业这还是有可能的,Broocks不也在人月神话20周年纪念版中说过吗。o6z所言的BPR,基本上不可能,涉及到的一系列问题就像你让房价赶紧下降到5年前一样困难,就像在北京彻底实现无人售票一样困难!

重点是,这些项目在维护阶段、尤其是需求发生变更时的表现如何
开发阶段的成本和工作量,只是整个软件生命周期的40%以下
sslaowan 2007-10-03
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?


同学有在某Web报表公司做咨询,据说他们公司新做一个项目只需要使用IE拖拽一些控件就可以了;还有同学在方正实习,每天就是拖拽一些业务对象,比如现金。还听说用友也是只是拖拽就可以了(听我们的甲方说的,不知道他们是不是被用友的人忽悠了)

不过就像您表示怀疑一样,我们做这个行业的项目已经有6年了,其业务之复杂,之不规范,之多变,根本没法通用,使用平台估计效果不会大幅度提高,如果可以的话那岂不成了银弹?不过在特定领域特定行业这还是有可能的,Broocks不也在人月神话20周年纪念版中说过吗。o6z所言的BPR,基本上不可能,涉及到的一系列问题就像你让房价赶紧下降到5年前一样困难,就像在北京彻底实现无人售票一样困难!
ozzzzzz 2007-10-01
JavaInActoin 写道
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。

3、4个月就上一套ERP不失败才怪。实际上类似的企业应用往往重点和难点在实施阶段,软件只是一个陪衬,关键还是业务流程的分析和重组。
所以你的这个例子举的不好。
JavaInActoin 2007-10-01
gigix 写道
引用
确实有平台会大幅度提高生产率

证据?

如果没有平台,3、4个月能上一个ERP吗?
企业管理软件有很多功能都可以抽象成很通用的几类功能,表单、流程、查询、打印、报表、BI,这些东西在某些平台里都是现成的,你真正要实现的业务逻辑很少。
gigix 2007-09-30
引用
确实有平台会大幅度提高生产率

证据?
sslaowan 2007-09-30
cm4ever 写道
sslaowan 写道
hlxiong 写道
越来越觉得平台的重要性。
做项目如果能有一个成熟稳定的平台,每开始一个新的项目,所要做的只是完成业务代码而已。做好了需求,敏捷或者传统,都能很好地完成项目。

不知道您是想做开发平台的人呢,还是想做在平台上开发的人呢?
我常常在使用框架的时候在想这些问题

不用平台也得用sdk,sdk也是平台;算了,sdk也不爽,自己写吧;但是还是得运行在冯.诺伊曼体系的硬件;还是不舒服,自己再做一个体系的硬件;连开发硬件的工具也不顺手,自己到车间做;车间的机器都是外国的,多没面子,自己再造个机器......

通用的工具是什么?是对一个技术方向的共通性总结而出的模块。我的定义不准确,但大体如此。
不要把开发业务和开发平台相抵触,这是一个过程中的两个阶段,没有多年的业务开发积累,怎么可能开发出针对该业务的平台?


很多大的企业在用平台,拖拽一些领域模型就可以了,真挺不错,我当然不反对在平台上开发了,就像我不反对使用框架一样,并且支持使用框架,同意不要重复造轮子的观点。不过这样就享受不到OOD的乐趣了,体会不到TDD的乐趣了。不过确实有平台会大幅度提高生产率,希望自己能成为编写平台的人吧~尚是学生,仍在努力~
cm4ever 2007-09-28
sslaowan 写道
hlxiong 写道
越来越觉得平台的重要性。
做项目如果能有一个成熟稳定的平台,每开始一个新的项目,所要做的只是完成业务代码而已。做好了需求,敏捷或者传统,都能很好地完成项目。

不知道您是想做开发平台的人呢,还是想做在平台上开发的人呢?
我常常在使用框架的时候在想这些问题

不用平台也得用sdk,sdk也是平台;算了,sdk也不爽,自己写吧;但是还是得运行在冯.诺伊曼体系的硬件;还是不舒服,自己再做一个体系的硬件;连开发硬件的工具也不顺手,自己到车间做;车间的机器都是外国的,多没面子,自己再造个机器......

通用的工具是什么?是对一个技术方向的共通性总结而出的模块。我的定义不准确,但大体如此。
不要把开发业务和开发平台相抵触,这是一个过程中的两个阶段,没有多年的业务开发积累,怎么可能开发出针对该业务的平台?
sslaowan 2007-09-27
hlxiong 写道
越来越觉得平台的重要性。
做项目如果能有一个成熟稳定的平台,每开始一个新的项目,所要做的只是完成业务代码而已。做好了需求,敏捷或者传统,都能很好地完成项目。

不知道您是想做开发平台的人呢,还是想做在平台上开发的人呢?
我常常在使用框架的时候在想这些问题
hlxiong 2007-09-27
越来越觉得平台的重要性。
做项目如果能有一个成熟稳定的平台,每开始一个新的项目,所要做的只是完成业务代码而已。做好了需求,敏捷或者传统,都能很好地完成项目。
sslaowan 2007-09-26
bluse 写道
我也做文档驱动开发的项目,感觉很浪费时间,效率很差
如果每天对程序员下命令,分任务,程序员每天就为了完成任务,那么这就是赶场,何来质量


深有感触,感觉所有的事情都是在做亡羊补牢的工作。
sslaowan 2007-09-26
dearwolf 写道
"可是今天来给我们做指导的那个日企的人说在大公司做大项目都是要听话的,不会用敏捷之类的新方法。"

这个说法也很有意思


实际情况究竟是怎样的呢?
sslaowan 2007-09-26
gigix 写道
引用
质量不重要

这个很有意思
因为质量不重要实际上就意味着赚钱不重要
可能是你的老板没有意识到这一点
如果他意识到仍然如此,你就没有任何办法


是客户觉得没那么重要?我也说不清楚,因为做项目除了技术问题还包括很多“政治问题”,往往技术人员忙乎好几天,不如老板几杯酒。所以质量和赚钱并不挂钩了,老板只关心能不能用,代码烂就烂吧
sslaowan 2007-09-26
yiding_he 写道
我想结对编程也许是规避这种风险的一个好办法。


这个我也深有体会啊,我起初的设想是和每个开发人员结对编程,帮助他们培养出好习惯,而且没过多久他们都喜欢上了结对编程,问题来了,由于我们是学生,大家都在不同的时间有课,两个搭档配合在一起的时间变得很难找了。
sslaowan 2007-09-26
JavaInActoin 写道
用不用XP都能做出好产品,先写代码还是先写测试没有本质区别,后写测试一样能保证质量,XP有它的局限性,不是什么项目都能用的,XP是个很复杂的方法,是高手到了心中无剑的境界,不是一般的团队能掌控的,如果你们的能力和经验不足以应付XP过程中的灵活性,会加大项目风险,项目失控


其实这就是我要说的价值观的重要性,先写测试还是后写测试对于产品质量(缺陷率)的影响可能不是很大,关键是在观念上要注重质量。XP和其他敏捷方法比过去任何方法都更加注重质量。如果不注重质量,那么先写测试会和后写测试一样糟糕。

本来我是觉得应该请一个XP教练来指导我们,可是老板找了一个重型方法论的支持者,他们的团队是CMM3级,所以为了避免“能力和经验不足以应付XP过程中的灵活性,会加大项目风险,项目失控”,我想我也不打算说服老板采用XP了~
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

sslaowan
搜索本博客
最近加入圈子
存档
最新评论