我从事软件工程研究多年,曾遇到过大大小小的很多问题,这里,我想谈谈软件外包中的需求问题。软件外包,最基本的意思,是指在软件开发生命周期的某一时间点,将软件开发工作移交给另一个团队。而绝大多数人在此过程中最容易犯的错误,是没有标明确切的时间点。很多人随随便便抛出一份需求说明,就希望别人据此开发出整个软件。这样做最大的问题是,你根本无法准确地描述出自己的需求,进而可能得不到符合需求的软件。
那么,如何把握这个交付需求的时间点?根本而言,这个时间点,应该以你能够掌控整个系统的架构为准。因为在此之前,你还不能掌握确定软件总价所需的足够信息。根据RUP的理论,软件生命周期可分为先启、精化、构造和交付四个阶段,通常,经过了精化阶段,就可以得到整个系统的架构,并且掌握了60%~80%的需求,甚至更多,此时便可以确定软件的固定总价了,也意味着,可以考虑将软件交付给外包厂商进行开发。
很多人容易低估精化工作的难度,我们可以用建造房子的过程来比喻。如果想建造一座房子,首先就要清楚自己想要的房子是什么样的。但是达到这个目标也并非易事,我们需要一份非常详尽的需求说明书。软件开发也如此,到了外包阶段,外包厂商同样也需要这样一份说明书,才能保证交付的软件符合你的需求。外包的结果,是将软件开发的责任转移给另一个团队,这个团队可能是本公司内部团队,也可能是印度的某家外包公司。在建房子之前,要具有整座房子的设计架构图,同时还要加入对于各种建筑材料的要求。软件开发也是一样,一旦选定了外包公司,就一定要说清楚需求。
在建造房子方面,我们有许许多多可以借鉴的优秀经验,但是软件开发则不然,至今而言,全世界在需求描述问题上,都还很不成熟,这恰是我们现在需要解决的问题。所以,你需要做的第一件事情,是说明白你想要的东西是什么样子。此外,你可能还希望软件开发时使用了你认为正确的技术、数据管理系统、操作系统,甚至开发语言。由于软件的维护成本很高,因此当你和厂商缔结合约时,你还应该重点说明软件的开发和维护方式。大多数规范的软件需求,都应该要求软件具有良好的可维护性,能一直扩展。在设计需求时,必须验证这些需求的可实现度,这不是一件易事。就像我们说的建造房子:假如你要求房子要承受300英里/小时的大风或10分钟100厘米的降雨。显然这些要求都是不合理的,因为根本办不到。建造房子需要订立一个好的建筑标准,比如我们要求隔离墙厚度10厘米……而且这些指标应该是你可以测量的。相应地,对软件来说,你也需要设计合理的需求,并保证其可以测量。你过去也许使用了一些实践规范,以保证开发出强壮的软件,那么在面对新的接包厂商时,也可以要求他遵循相同的规范。由此可见,需要你说清楚的事情很多很多,都应该在细化阶段结束前完成。如此才能够保证系统最后不会出现严重的问题。
不难看出,光是弄清需求,就不是一件容易的事。但是事情远不止这些,因为需求是会随着时间而改变的。所以,尽管在将软件外包之前,要尽可能详尽地描述现有需求,但是不要奢望100%地说出最终需求,即便当时是100%,最后也通常会有改变。俗话说,好的开始是成功的一半。需求作为软件开发中最基础的环节,其重要性是毋庸置疑的。如果你想得到完美的软件,那么就从现在开始规划你的需求吧!
本文来自《程序员》杂志0809期
雅各布森国际股份有限公司董事长 Ivar Jacobson
【发表评论0条】