读书人

创业型的软件公司如何做项目管理呢

发布时间: 2012-03-04 11:13:33 作者: rapoo

创业型的软件公司,怎么做项目管理呢?
诚心的请教。

[解决办法]
既然你是在“敏捷开发”这个论坛里问,我就给你复制文档《访谈 Kent Beck:仅作必要的事情》先看看吧。

tensile: 能否谈谈XP 和UML 的关系

Kent Beck: XP是一个软件开发的社会(social)系统,UML是一个描述软件的标记法(notation)。你可以在XP中使用UML,但团队良好的进展并不需要许多文档,除了代码及测试外。

yhufo: XP 中的文档重要吗?需要写什么样的文档?

Kent Beck: 你要写的文档就是代码及测试。

superlong: XP 如何用在一个可视化项目中?

Kent Beck: XP程序员并不是不做视觉上的思考(think visually),他们只是一般不储存图片(picture)。

notyy: XP 可以解决什么问题?

Kent Beck: 当你有许多关于需求的不确定性,XP让你快速得到一个具体、运行中的系统,同时让你以一个相当稳定的速度(pace)修改。以这种方式你无须在开始之前知道所有的事。

yhufo: 但CRC 卡及故事--这些都不是文档。

Kent Beck: 你无须永远保存。你从CRC卡及故事获得内容,然后把他们丢掉。

joe_lee: XP 是一种递归过程(recursive process)吗?

Kent Beck: 是的,或者我可能说『不规则碎片形(fractal)』。以一年为期,描述你所想要的(故事)然后去做。以一分钟为期,描述你想要的(单元测试)然后去做(编写代码)。分解的不规则碎片形是经过相当的深思熟虑的(deliberate)。

taoxie: 你提到了单元测试。我同意rerun 所有的单元测试是合理的,那么rerun 所有的集成测试也是合理的吗?

Kent Beck: 如果你有适当的准备而且够快的话,你可以随时执行测试。

yhufo: 如果我们没有文档,我怎么知道怎样能控制软件中的变更呢?我想我们必须建立文档!

Kent Beck: 当你们说『控制变更』,我则说『鼓励变更(encourage change)』。控制来自测试、双人编程、大家坐在一起讨论及持续集成。XP对于受过良好训练的程序员运作得很好,但是如果目前不觉得有良好的训练,别担心。你的搭挡可以帮你,不然你的集成工作无法达成,你必须把你的代码丢弃。

dggh: 能谈谈xp practise games 吗?

Kent Beck: 我做过一个练习让人们描绘一个咖啡壶的图像。从这里显示有更好的game。在伦敦有人建造乐高(Lego)机器人。Joshua Kerievsky有一个团队写了一个剧本(电影的脚本)。

gigix: 我想我们必须先小心地设计。如果我们忽视了设计的重要性,XP(或重构)将不能对整个项目有改进。对此你如何看?

Kent Beck: 我就知道迟早要讨论这个。我,同样地,坚持我们需要小心地设计。我宁愿等待并且在我有一些经验后再做,而不愿依据猜测(speculation)做设计。前置设计(Up front design)是一种正向反馈的循环(positive feedback loop)。你越有经验,你越可以考虑前置设计,直到你完全无用(useless)。另一种使用设计经验的方式是等待你的好想法,直到这些想法显露出来,立即就可以用得上。

joe_lee: 如果没有文档,我们怎样维护软件?

Kent Beck: 你有两个非常有价值的文档-代码及测试。如果测试总是能够100%执行而且绝不会允许逆行(regress),你还需要什么?

yhufo: 在双人编程中,两个人应该经常变换角色吗?一天或两天,我是说多久换一次,一天或两天?

Kent Beck: 在比较大的团队中,每天变换(switch)2-4次。在一天之中我无法维持一个双人组6个小时以上,因为专注的程度太过激烈。

xlp223: 既然XP 没有专家,那XP leader 在程序员当中扮演什么角色,客户,经理?

Kent Beck: XP是有专家,但他们的角色并不像以前一样是固定的。专家的出现是由团队中的每一个人依据经验挑选出来的。促使这种专家的出现是管理者扮演的角色。

yhufo: 在双人编程中,当一个人编写代码时,另一个人在干什么?只是看和说话吗?

Kent Beck: 双人编程并不是看着别人编写代码。编写代码就像是在沟通。键盘每几分钟便传来传去。双人编程时,你们讨论相关的想法,试试一个,建议另一个测试,把你下一个想法画个草图,写成代码,做些重构等等,持续进行下去。

dggh: 如何处理“程序员很少接触客户”的情况?

Kent Beck: 我想这些接触一般运作得不是很好。这就是为什么我说XP是软件开发的社会系统。频繁地和其生活受你写的软件影响的人接触,这能使你重视它。

tensile: 软件开发的社会系统?

Kent Beck: 首先,所有的团队成员聚集坐在一个大房间内:程序员、管理者、客户、分析师、测试员、用户文档、交互设计。其次,“客户团队”(customer team)提出编程团队必须通过的验收测试(acceptance tests)。学习如何通过这些测试需要沟通。

skyin: 每个人都有自己的任务,那如何双人编程时如何分配任务呢?

Kent Beck: 今天早上我将与你共同做你的任务,下午你可以帮我做我的。

yhufo: 能否介绍一些XP 的工具?

Kent Beck: 我使用Eclipse作为Java工具,我真的很喜欢它。有时我也使用IntelliJ,还有,JUnit或它在其他语言的姊妹产品,在单元测试及建立验收测试架构时非常有帮助。

xlp223: 每对双人编程都有自己独特的风格和水平,重构怎样才能使它变得一致和平衡?and person or group to do refactoring need be arranged in addition.

Kent Beck: 合唱团中的人,每人都有自己的声调。他们是如何让这些声音和谐?他们先决定最重要的和声然后“以他们的方式”唱出。在程序员团队中也是同样的道理。团队中所有人的成功,比个人的闪耀更重要。

notyy: 安排一个“在场客户”(on-site customer)在某些情况下实在困难。

Kent Beck: 想办法找到一个,否则准备接受失败。旧的Taylorist 软件开发社会结构没有用了,要有新的社会结构。如果让软件开发运作成功是重要的,坐在一起是绝对关键的。如果想做好却不认为那是重要的,或许这个项目应该取消。

yhufo: 为什么XP 不需要文档!

Kent Beck: XP确切需要两种文档-代码及测试。如果你的团队觉得需要更多的文档,那么去做就是了。大多数的团队发现他们并不需要其他的内部(internal)文档。

taoxie: 你说客户注重合同型(Contract-style)的项目,我就碰到了这种情况。XP 怎样应用在套装软件产品开发中?

Kent Beck: 对于套装软件(shrink-wrap)开发公司而言,客户团队(行销、测试、可用性、客户服务)是比使用自制型(in-house)开发的公司要大。除此之外,大家都同意使用单一的需求序列(故事)可以让软件开发越来越平滑(smoothly)。

tooliu: 不介意解释一下WinDNA 和XP 的关系吧?

Kent Beck: XP是Extreme Programming,不是操作系统。

xlp223: 做重构的人或组需要额外安排吗?

Kent Beck: 设计是每一个人的责任。当我们坐在一起而我们看到需要重构的地方,我们就重构。如果你还需要去安排进度,那你就等得太久了。

notyy: 我们应该首先教育客户吗?

Kent Beck: 客户需要知道XP吗?绝对需要。他们是团队的一份子,因此他们需要知道团队如何运作。故事及验收测试是需要先教给他们的两个最重要的事情,然后是发行(release)(3-12个月)及迭代(iteration)(1-3周)的计划。

skyin: 看起来XP 更适合客户导向的应用软件,那其他类型的软件呢?

Kent Beck: 还有其他类型吗?如果没有客户,为什么要写这些软件?


Charity_Zhou: 因此我想XP 对客户有更高的需求。

Kent Beck: XP当然对于客户有更多的要求。他们是可以看到的而且可以控制,同时他们负责挑选系统的范围。

smilemac: 我觉得XP 和演化(evolution)过程很象,你能解释一下区别吗?

Kent Beck: XP确实使用演化或成长的隐喻(metaphor)。然而XP指定许多实践来支持长期的持续性成长。Gilb的演化式的交付工作在概念上是类似的,但对于如何达成目标。他没有说明太多。XP说:先测试、双人编程、坐在一起、随时集成然后你就能使你的软件成长及演化。

fpeng: 发行计划(release planning)和迭代计划(iteration planning)的区别是什么?

Kent Beck: 发行与业务循环同步,所以它们是3-12个月的时间。迭代与工程师需要的里程碑同步,所以它们是1-3周的时间。

dggh: XP 需要团队中的每一个人都是系统分析专家吗?这也太难了!

Kent Beck: 团队需要系统分析专家,但不意味着每一个人都需要做系统分析。类似的,团队可能需要数据库专家,但只需3-4个人深入了解数据库的知识,而其他所有的人如果需要可以协助做数据库的任务。我不认为推卸责任是在中国的特别问题,我认为这是任何地方的特别问题。我们从Fred Taylor那里获得工作的社会结构概念,一位上个世纪初的工业工程师。他假设工人是懒惰而且愚笨的,因此他们需要有人为工人计划并有人检查工人的工作(品质保证(QA))。这个社会结构在软件中并不能良好运作,因为大部分的程序员既不懒惰也不愚笨。不管如何,Taylor的范例执行得非常深入以致多数人甚至不知道概念是来自何处。

dggh: 当团队速度变慢时,我们能做什么?

Kent Beck: 我今天刚写了一封长信到Yahoo小组的XP邮件列表中。简单的回答就是要让团队速度加快,唯一的方式就是鼓舞团队的士气。

zhujigang: 我们的团队确实使用了双人编程,但如果有一对完成了他们的故事,而其他人还没有完成时,这一对该做什么?他们需要等别的人吗?

Kent Beck: 在每一次迭代中每个程序员签认一些任务。如果一个任务完成了,开始另外一个,或帮助你的同伴开始做他的任务。

simplebest: 你是否使用设计模式?

Kent Beck: 我绝对使用模式。如果你检视JUnit,到处都是设计模式。它是我曾经做过的设计最密集的部分之一,不管如何,设计模式被应用是因为我们需要它们,而不是因为我们认为它们可能是有用的。我们写一个测试,使之运行,然后注意到,如果我们引进设计模式,代码是否可以更清晰。我们通过重构来把设计模式放到正确的地方。4 年后我们仍将做相同的事情。熟练的设计师可以通过使用设计模式,把讨论设计的时间从几小时缩短到几秒钟之内。

skyin: 你认为XP 象管理领域里的“学习型组织”吗?

Kent Beck: 是的。XP依赖整个团队持续学习如何更好地互动。

yhufo: 是不是团队中的每一个人都应该测试软件?

Kent Beck: 如果我们要协调权力与责任,那么每一个程序员,他们有权力产生缺陷,必须同时有责任去测试。我看不到其他的方式可以解决这个难题。

fpeng: 你认为我们在使用XP 时,是否需要软件来管理整个XP 的过程?

Kent Beck: 当初我对XP所做的第一件事情,就是写一个项目管理工具,实际上这是浪费时间。XP是一种新的习惯。用最简单可能的设备(几张纸贴在墙上就不错了)养成这个习惯。只要养成这种习惯同时团队找到其精神,你就可以开始引进软件来管理,而不至于破坏过程。

adylee: 你如何看待CMM 和XP?

Kent Beck: CMM起源于制造业。那是从所谓的制造业成熟模式(Manufacturing Maturity Model)复制而来。软件并不像实体的制造业。每一个软件的开发都不一样,而有时候根本就是如此(and sometimes radically so.)。

simplebest: 你认为RUP 和XP 哪种更适合中国的程序员?


[解决办法]
看了这么多xp ,我觉得有些晕。
几点看法,仅个人观点:
一,适当的选择工具
哪些工具可选,哪些暂不能用,要清楚。
就几个人,技术还不是很强,就使用UML,客户不明白,成员也不太清白,就先不要用。要用都会用的。
我开始时使用了vss 后改成了svn,主要原因可以在互联网上用。
测试管理用了TD。
脑图软件,与程序员理清思路时用。
project 项目计划时用。
与客户谈分析时多数是word+ppt+excel 以客户能看明白,老板能看明白为准,当然程序员也要看明白。
数据库设计用了powerdesin
还有自己编写的一些工具做配合使用。
压力测试,客户没有太重视,没有用,只是查询时,多做了审查。
二,开发规范
代码规范,专家术语,交流总结一些内容都慢慢形成。
三,交流
要及时总结交流,管理人员要及时发现问题处理。
主程要在开始多审查代码,不要为后来留患。
四,形成一个开心和谐的氛围,让大家有一个目标,踢出对团队不利的人员。

[解决办法]
谈谈个人看法,不对的地方请大家指正:

我觉得项目管理要根据实际情况来定,书本或者理论的东西只能是一个参考

对于我们来说,客户需求是最重要的,但是软件质量同样也是不低估的,所以需求分析、概要设计、详细设计、测试等每个环节都不能少
但因为我们规模小,所以流程上不能按照教程上的来走,要适当地根据需要做一些改变

力争做到“麻雀虽小,但五脏俱全”

读书人网 >软件开发

热点推荐