您的位置:首页 > 其它

计划的本质

2010-03-11 13:35 113 查看
软件开发的计划应该由技术人员来做,项目计划应该由项目管理人员来做。软件开发计划和项目计划分别包含哪些具体的内容,这不是本书讨论的重点(略有涉及),我们关注的是计划的本质。
什么是计划?

计划是在行动之前对行动的任务、目标、方法、措施所做出的预见性确认。在这个定义中,预见性是最重要的关键词。

预见是指从现实事物的发展规律中把握其未来发展的趋势。和猜测不同,预见必定基于现实事物的发展规律。这些发展规律往往表现为严密的逻辑推理和科学的计算方法。

例如,围棋棋手预见到10步棋后的中腹局面,这是经过了大量计算得到的。再例如,气象局预报3天后的天气状况,也是经过了卫星采集的信息并经过大量计算得到的。而猜测,是通过经验性的直觉来完成的。

所以,按照计划的定义,由猜测产生的计划不是真正的计划。

我所遇见过的绝大多数计划都不是真正的计划。这些计划的制定没有自圆其说的逻辑推理,没有严格的计算过程。它们往往是项目管理人员拍脑袋(甚至是拍大腿)的结果。很明显,这种基于猜测的计划和事物的实际发展趋势相去甚远。

在如何有效地制定计划上,CMM正尝试为项目管理人员提供一些帮助。

CMM建议,软件开发组织应该好好地维护自己的知识资产库。一般地,组织的知识资产库中包括以往项目的各种统计数据、软件开发人员的生产率数据、项目上曾经遭遇到的风险以及相应的解决方案等。

按照CMM的说法,基于这些信息,并通过一定的计算方法和逻辑关系来制定计划,可以得到比较好的效果,换句话说,按照CMM的说法,用它推荐的方式来制定的计划,与事物的实际发展趋势更接近。

事实上呢?接近了一些,但是离预见性的目标还很远。

这些年,在软件开发领域中,基于预见性的软件开发方法,例如,瀑布模型 ,正在被越来越多的软件开发人员质疑。

瀑布模型是一个非常理想化的模型。它的出现是基于这样一种假设,我们预见的每一步都是正确的。
按照瀑布模型制定的计划是一份长期的、静态的、精细的计划。在这份计划中,各个任务之间环环相扣,一个任务的失败,会对计划造成很大的影响。这种影响体现在,一个任务的失败,会使相关任务的时间点发生改变,会使开发成本发生改变,会使人员安排发生改变等。为了保持计划对行动的指导性,我们必须重新预见未来,并调整计划。

可是,由于任务失败或延迟完成是经常发生的,所以,计划也必须经常进行调整,而每一次调整都几乎无一例外地牵涉到大量的人力和时间。
这种精细计划有意义吗?它对行动的价值究竟有多大?

根据我们的实践经验,计划总是处在不断的变化之中。因此,我们有理由怀疑,未来真的是可以预见的吗?如果可以预见,又可以预见到什么程度呢?

有一种理论认为,非线性系统具有多样性和多尺度性,换句话说,未来是无法确定的,如果你某一天确定了,那是你撞上了。这就是混沌理论,由美国气象学家爱德华•诺顿•劳仑次 于1963年提出。

混沌理论认为,在一个动态的系统中,即使初始条件发生了十分微小的变化,但是,经过不断放大,对其未来状态会造成极其巨大的差别。
有一首流传的西方民谣,非常形象地说明了这个理论。

这首民谣说:
丢失一个钉子,
坏了一只蹄铁;
坏了一只蹄铁,
折了一匹战马;
折了一匹战马,
伤了一位骑士;
伤了一位骑士,
输了一场战斗;
输了一场战斗,
亡了一个帝国。

混沌理论可以解释很多现象,我们也完全可以用它来解释软件开发过程中的一些问题。

例如,由于没有考虑(或考虑不周全)用户的一个潜在需求,导致软件架构的变化;软件架构的变化,导致开发成本的增加;开发成本的增加,导致项目亏损;项目亏损,导致相关人员利益受损;相关人员利益受损;导致人才流失;人才流失,导致新项目的开发成本增加。
以此类推,没有谁知道这件事的影响到底有多大。

话说回来,我在上面举的例子或许有点夸张,但是,混沌理论的科学性已经在很多领域中得到了验证,却是一个不争的事实。有兴趣的读者可以去查阅相关的资料。

盖米尼咨询公司的咨询顾问奈尔•格拉斯在谈到企业决策时指出:

过去作为决策基础的三个主要假定已经不再成立。

这些假定是:

假定1:企业是一个“说到做到”的封闭系统。外界对企业决定采取的行动没有多大干扰。

假定2:经营环境是稳定的。管理者能够充分把握经营环境,从而制定出详尽具体的战略。

假定3:管理者对事件的因果关系有着足够的认识。他们能够顺藤摸瓜,找出每一事件将会导致的变化。

这些旧的假定已经被三个新的现实所代替:

现实1:企业是复杂的“开放”系统,既影响着其所处的环境,又在很大程度上受环境的影响。这意味着,企业的行动可能无法达到它所预期的结果。
现实2:环境是瞬息万变的(不断创造着机会和威胁)。高层管理者不能指望制定出在付诸实施时仍完全有效的详尽战略。

现实3:作为传统决策理论基础的简单线性因果关系模型已经失灵。因此,各种事件的后果是无法预料的。

混沌学家总是自豪地说:“相对论,消除了关于绝对空间和时间的幻想;量子力学,消除了关于可控测量过程的牛顿式的梦;而混沌,消除了拉普拉斯关于决定论式可预测的幻想。”
的确如此,混沌理论在如今的气象、航空及航天等领域的研究中,都正在发挥着重大的作用。

我们不妨对前面讨论的思路做一次重新整理。

我们说,首先,建立在猜测基础上的计划是没有任何预见性的;其次,完全基于科学计算产生的计划(拉普拉斯的决定论是可预测理论)不适用于动态系统;再次,混沌理论提供了一种兼具质性思考与量化分析的方法,它建议用整体、连续的数据关系对未来进行预测;最后,从混沌中理出规则存在着可能性,但对于软件开发这类工程没有实用性。

基于上面的思路,我们也许要重新考虑软件工程中的计划的作用。该如何来为软件项目制定计划呢?

在这一点上,敏捷方法似乎走在前面,它非常明智地强调计划的适应性而非预见性。

适应性的计划不会描述中长期的具体工作内容(会有个轮廓),它更多地描述短期的、可以预见的工作内容,更重要的是,它时时刻刻都在准备着对计划进行调整。

我赞同敏捷方法的思想,也想用简单的一句话来表明自己的结论:对于软件项目来说,制定长期的、静态的、精细的计划是没有价值的;最有效的方法是建立短期的、精细的计划,以及长期的、粗放的计划。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: