软件和需求的实践01

林星 转载自IBM DeveloperWorks

从猴子说起
有这样一个笑话:一个旅客走进硅谷的一家宠物店,浏览展示的宠物。这时,走进一个顾客,对店主说:”我要买一只C猴。”店主点了点头,走到商店一头的兽笼边,抓出一只猴,递给顾客说:”总共5000美元。”顾客付完款,然后带走了他的猴子。这位旅客非常惊讶,走到店主跟前说:”那只猴子也太贵了!”店主说:”那只猴子能用C编程,非常快,代码紧凑高效,所以值那么多钱。”这时,旅客看到了笼子中的另一只猴子,它标价10000美元。于是又问:”那只更贵了!它能做什么店主回答:”哦,那是一只C++猴;它会面向对象的编程,会用Visual C++,还懂得一点Java,是非常有用的。”旅客又逛了一会儿,发现了第三只猴子,它独占一个笼子,脖子上的标价是50000美元。旅客倒抽一口气,问道:”那只猴子比其他所有猴子加起来都贵!它究竟能做什么店主说:”我们也不知道它究竟能做什么,不过它是做项目顾问 出身的。”
虽然这只是一个笑话,但是有一点是可以肯定的,项目管理是非常重要的,而项目管理的人才又是极为缺乏的。在软件工业发达的国家,大家多少都知道点软件工程规划的重要性 。在我们身边的台湾、印度、日本,都不乏因实施软件工程而成功的软件团体,更不用说身为软件大国的美国,已经从较低级的软件实现摆脱出来,进入了设计和营销的境界 。软件首先是一种产品(软件是服务还是产品的问题,向来未有定论),看看世界上制造业的发展历程,就会发现一些很有意思的现象。在本世纪早些的年代,西方国家的制造业经历了规模生产、提高质量等等促进生产力提高的过程。可是由于西方国家的人力资源成本不断的攀升,越来越难降低产品成本,所以西方国家又不可避免的经历了一次将制造业外移的过程(制造业外移的结果是成本大幅下降、国际贸易频繁、接受制造业的国家发展了自身的制造业),而西方国家只留下营销和设计的能力,掌握了产品生产的重点。 同样,IT行业也在经历这种过程:美国将软件外包给印度,硬件外包给台湾。而中国的硬件也在崛起,但是在软件行业,中国和其他国家的差距还是太大了,且不说在软件行业中处于核心地位的操作系统、数据库。即便是应用软件,中国的软件水平也实在低的可怜。在国外制造业刚刚迁移进中国的时候(改革开放),中国的小企业家同样没有任何管理经验、质量意识。但是随着制造业的发展和国外先进思想的进入,中国也诞生了极为出色的全球制造业巨头。而中国的软件行业现在正是处于刚刚有了一点管理思想,但还没有成熟的地步。我们有理由相信,在不久的将来中国也会诞生出出色的全球性软件企业。 憧憬归憧憬,现实的问题还是必须要考虑的。软件这个产品很奇特,软件企业的管理思想同样很奇特。不同于现在企业推崇的各种管理思想,软件企业的管理思想主要是针对项目的管理,确保项目的成功。

项目和需求
笑话里的猴子对应到项目就是指项目管理人员,这里要引入一个角色的概念(同样的人可以担任多种的角色),通常的项目管理角色包括:项目经理、项目复审员、变更控制经理、企业流程分析师、业务模型设计师、需求分析员、需求复审员、系统分析员 。在一个成功的项目里,多种角色职责明确,分工合作,共同完成项目的设计实施。那么这“猴子”在项目中都做了些什么呢UP(Rational Unified Process 瑞理统一过程,本文采用了众多的RUP的思想)把一个项目分成10个核心工作流程(Core Workflows)和4个阶段(Phases),并以核心工作流程为Y轴,阶段为X轴建立起一个项目视图 (图一)。

软件和需求的实践01
对应到RUP的工作流程,业务需求其实是RUP的业务建模流程(Business Modeling),在这个流程中,参与者主要是业务流程分析员(Business-Process Analyst)。主要的目的是对企业目前的业务流程进行评估,并根据要进行的项目,确定进行何种程度的业务建模(你要做一个ERP项目就意味着你必须优化业务流程,而上一个部门级MIS项目就没有必要用牛刀了)。然后你会得到一个叫做业务前景 (Business Vision)的东西,其实就是项目成功后会是个什么样子,并在涉众范围内达成一致。业务需求层次需要投入的精力视具体项目而定 ,而业务需求的确定对之后的用户需求和功能需求起了限定作用,业务需求就是需求过程的宪法,任何需求不得与之相违背。
到了用户需求层次上(RUP的需求工作流程),重心就转移到如何收集用户的需求上,即确定角色和角色的用例,需求分析是很难的,因为很多需求是隐性的,很难获取,更难保证需求完整,而需求又是易变的。一般来说,在过去作需求分析的时候,更多依靠的是阅读企业的文件,但是企业的文件往往有局限性,例如落后于当前的业务,不够明确,依赖于管理水平的高低,所以后来获取需求的方法逐渐倾向组织访谈会 (Interview)。
功能需求依赖于用户需求,可以说是用户需求在系统上的一个映射(Mapping)。开发者思考的角度从用户转移到开发者。在这个层次上,为用户做一个软件原型是一个很不错的主意。直到现在,用户对软件还是没有一个实实在在的概念,如果你给用户一个原型,用户就会说,”哦,我的XX系统原来就是这样的。”这就避免了用户在软件开发完成后才看到软件所带来的一些风险。是否有必要采用快速原型开发法和原型应开发到何种地步取决于具体的项目 ,很多时候,用一些非正规的方法来生成原型:如果你要开发一个WEB系统,让你的美工做几个页面给用户看看,如果你做一个C/S系统,做一个界面给用户,都已经足够用了,甚至你完全可以在黑板上画一画你将来的软件的面貌都可以。用户大都是比较友善的,不要把问题想的过于复杂。

需求的标准
讨论软件需求的文章有很多,对于需求的标准也不尽相同,但是在思想上是相同,都是为了保证项目的顺利进行。这里我总结一些比较通用的标准,可能并不完善,但你只要能保证做到这几点,你的项目就不容易失败:明确(Clear)、完整(Complete)、一致(Consistent)、可测试(Testable) ,此外还有其他的概念,如可跟踪、可修改等等。
明确:目前大多数的需求分析采用的仍然是自然语言(因为如果采用形式化语言的话,和用户的沟通将成为一个大问题,这意味着客户在开发软件之前必须先进行形式化语言培训,这是不现实的)。自然语言对需求分析最大的弊病就是它的二义性。 所以我们不得不对需求分析中采用的语言做某些限制。例如尽量采用主语+动作的简单表达方式。说白了,需求分析中的描述让人看上去像是刚学习写作的小孩子就对了,千万不要采用疑问句、修饰这些华丽的表达方式。
除了语言的二义性之外,注意不要使用行话,就是计算机术语。需求分析最重要的是和用户沟通,可是用户多半不是计算机的专业人士,如果在需求分析中使用了行话,就会造成用户理解上的困难。
打个比方,如果你要做一个银行的信用卡系统,你就可以这样描述软件需求:银行的卡部管理信用卡,每张信用卡只属于一个帐户。信用卡有卡号、余额。一张信用卡有多笔的交易记录。
完整:再也没有什么比软件开发接近完成时才发现遗漏了一项需求更糟的事情了。需求的完整性是非常非常重要的,想象一下遗漏需求而不得不返工,这简直就是恶梦。可是令人遗憾的是,需求的遗漏是很经常发生的事情,不仅仅是你的问题,更多的问题发生在用户那里,他们不知道该做些什么。要做到需求的完整性是很艰难的一件事情,它涉及到需求分析过程的各方各面,贯穿了整个过程,从最初的计划制定到最后的需求评审。
一致:一致性也是一个比较大的概念,很难用几句话讲清楚。简单的来说,就是用户需求必须和业务需求一致,功能需求必须和用户需求一致。严格的遵守不同层次间的一致性关系,就可以保证最后开发出来的软件系统不会偏离最初的实现目标。在实现过程中,我们还必须把一致性关系细化。比如说用户需求不能超出先前指定的范围。
可测试:大家觉得一个项目的测试从什么时候开始呢人说从编码完成后开始。更清楚一点的说是编码的时候同时进行单元测试,编码完成后进行系统测试。这些都没有错。但是实际上测试是从需求分析过程就开始了。需求分析是测试计划的输入和参照。这就要求需求分析是可测试的。什么是可测试呢我们要用新的系统完成报表自动化处理”,你觉得这个需求是可测试的吗然不是,报表包括哪些动化处理的标准是什么些在需求中都没有说明。因此这项需求是无法测试的,就是不具有可测试性。说到这里,大家可能就会明白之前的需求的几项标准都是为了保证需求的可测试性的。事实就是这样,只有系统的所有需求是可以被测试的,才能够保证软件始终围绕着用户的需要,保证软件系统是成功的。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作91338 人正在系统学习中 相关资源:锁屏 自动锁屏 定时锁屏 注销软件

来源:iteye_20683

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2011年11月8日
下一篇 2011年11月9日

相关推荐