1 贼和强盗
作者:章柏幸
8凡在我以先来的,都是贼,是强盗,羊却不听他们。
我们已经知道了需求分析的必要性,这也就意味着我们认为现今的需求过程尚不完善。这种不完善很大程度上体现在“问题陈述”和“人们真正想要的东西”之间的差距上,或者说,“问题陈述”没有能够陈述清楚“人们真正想要的东西”。
这里我们引进2个词语:歧义、含混性。
此处,歧义的意思是指我们得到的“问题陈述”导致了多种理解,以至于我们不能确定哪一种理解才能够真正说明“问题”。含混性是一种更为晦涩的表述,它的意思是“问题陈述”含混不清,甚至无法表达明确的意义。
在过去几年,软件过程和软件工程流行的时代,很多人已经被时尚所左右,言必称自动化,开口即软件工程,仿佛所有的开发问题都已经解决。更有甚者,有人还认为需求分析中的歧义的根源是因为“人”的参与。他们宣称“人”的不确定性导致了“陈述”的不确定性,由此导致了“人”提出的“问题陈述”的歧义。并且,他们认为只要排除掉需求分析过程中的人的因素,然后用一种严格论证、高度自动化的、规范的方法论来进行分析,就能够消除这种歧义了。那么,或许我们可以反问一下,这种分析是否也应该“剔除”具有严重不确定性的“顾客”呢,因为我们实在不能不把顾客当人看待的。
实际上,上节中比较极端的观点是对CASE、CAD等工具的一种病态的理解。工具能够帮助人们工作,但是却不能够完全替代人。我们不妨来考察一个如何杀死蟑螂的项目。
不听使唤的蟑螂
有人提出可以用一种自动化的方式杀死蟑螂,步骤如下:
1、 让蟑螂静止站立在砧板中间
2、 用蟑螂拍对准蟑螂猛拍一下
3、 把砧板、蟑螂拍上的脏东西洗干净
这种自动化方式和CASE或CAD工具所谓的自动化过程同出一辙,在一个CASE文档中,CASE工具也由三个步骤组成:
1、 分析并设计出明确的需求规格说明书
2、 建立功能点和源代码(及文档)一一对应的数据字典
3、 将需求规格说明书转化为源代码和文档
于是有人会说,自动化杀死蟑螂的方式纯粹是搞笑,因为没有哪一只蟑螂会乖乖地待在砧板中间,就算它碰巧站在了砧板中间,它也不会乖乖地一动不动等待你的拍子。这个理由恰好也是我们认为的CASE之类的自动化工具离不开“人”的因素的理由。因为我们没有办法用自动化工具分析出明确的需求规格说明书,也不能用它来保证这一需求规格说明书永不改变。
【拾人牙慧】
自动化方法干的是“大事情”。40年前需要很多个星期才能完成的工作量,今天只需要一个小时就能够搞定。而且,由于自动化工具的发展,我们还开始挑战那些在以前想都不敢想的系统。然而,随着工具的进步,软件产品在可用性方面的口碑却并没有多少提高。
对于那些需求明确、陈述无歧义、一定程度上模式化了的内容,自动化方法非常擅长;但是也还有一些涉及到人性心理方面的棘手问题却无法用这些方法来解决。换句话说,只要是有规律的、统一的开发过程,自动化方法非常擅长;而在不同项目或产品之间的差异和个性化,则需要更细致的分析。
我们不妨做一个简单的计算。
规模为S的项目中有P%的问题为公共问题,有Q%(Q+P=100)的问题为个性问题。
在时间T1时,我们每解决一个公共问题需要投入T,每解决一个个性问题需要投入M。解决个性问题在整个项目中所占的投入为:R1=M×Q/(T×P+M×Q)。
在时间T2时,我们每解决一个公共问题需要投入t,每解决一个个性问题需要投入m。解决个性问题在整个项目中所占的投入为:R2=m×Q/(t×P+m×Q)。
从T1到T2,自动化水平提高了,于是有T>>t,公共问题和个性问题的比例变化很小,而且对于每个个性问题的投入也变化很小,即有M≈m。从而可以得到R1<<R2。
这表明,随着自动化水平的急剧提高,我们在个性问题方面的投入比例也急剧提高。
个性问题,亦即是人性方面的因素反而随着自动化程度提高而愈显得重要了。这一特征在那些具有多年开发经验的人们当中早已成为了共识。也就是说,经验丰富的专家们在技术任务上的投入少了,而在人性因素方面的投入更多了。在那些小型的显而易见的问题上,他们完全放心交给别人去做了;而在那些看起来永远不会结束的问题上,他们被深深地吸引了。
【呀呀学语】
语言是我们表达思想的工具,也是某种文化的载体。在开发系统方法中,我们也有语言,那就是符号系统。相信所有人都遇到过因为语言不通而产生的交流障碍;同样,在符号系统上,我们也遇到了交流障碍。
语言文字所传递的信息包括“内涵”和“外延”两部分。人们在说话传递信息时,往往会附加上各种语态、表情、动作作为对其所说语音的外延;甚至我们可以认为,因为我们来自各个不同的省份县市,各种不同的方言乡音也传递了丰富的外延。
于是,对于同样的事件或需求,我相信没有任何两个人的描述是完全一致的。承认这一点对于我们直面需求分析的困难会有很大的帮助。
我们这里给出优秀符号系统的两个重要要求(当然这仅仅是众多要求中的两个),以帮助我们将来使用这些符号。例如说,首先符号系统要能够比较全面地表述我们所遇到的绝大部分问题;其次为了适合产品开发的过程化,符号系统的表述结果要比较容易保存和修订。这也是对一个优秀的CASE和CAD工具的基本要求:在任何时候都可以保留并修改我们当前的结果。
【大同世界】
在未来的大同世界里,人们都操两种语言,一种是代表本民族特色的方言,另一种是所有人都能听懂的世界语。这个世界语和现在语言界所谓的世界语大大不同,虽然后者的目标是成为前者,这差距就像是共产主义和社会主义之间一样大。
虽然大多数人都会认为自己的母语是美妙而完美的,但不可否认每一种语言都有其优缺点。类似的,每一种符号系统也都有其自己的利弊。这里我们引进一个概念:映射图。
我们把用符号系统的基本符号组合而成的信息集合称为映射图。这里的“映射”取自于逻辑上的对应关系。大家可以把之近似地联想成通过某种约定而建立的“需要表达的信息”和“符号单元”之间的对应关系。映射分为1-1对应、1-n对应、n-1对应三种。由于自然界所存在的信息是高阶的不可列无穷大,因此严格意义上的1-1对应是不存在的;反过来,严格意义上的1-1映射甚至可以说是毫无价值的。
在这里,我们用映射图来表示我们的符号系统的结果,映射图可以是一种语音,也可以是一幅地图,或者是图文并茂的VCD;只要它满足可再现、可修改、可保存,就可以。
质量好的映射图必须是能够让所有相关人员都能够理解的,就像是未来大同世界的世界语一样。当然这仅仅是一种理想的奢望。实际上,每种语言或符号系统的支持者都会声称他们的东西是最好的,听起来有点像是“王婆卖瓜”。这个时候人们一般会把其“瓜”的卖点放在“直观性”或“易读性”上,显而易见,这是一种好的符号系统应该具备的条件。
但是,对于从小在北京长大的孩子,很自然会认为普通话是直观而易读的;而对于在美国长大的孩子,则会认为美式英语是最美最简洁的。也就是说,对语言的培训能够增加在使用者角度上的“直观性”和“易读性”。这就像我们看技术文献一样,由于我们熟悉了大量的软件最新词汇,于是不会感到ISO、CMM之类的缩写艰涩难懂;而第一次上网的人可能会认为OICQ是“我爱重庆”的缩写。
简言之,前面说的意思就是符号系统本身是不可能完全“直观”和“易读”的。
如果,要让所有相关人员都能够理解某种符号系统,那么,最直接的办法就是培训这些相关人员。下面的步骤可以测试一下当前的映射图到底有多直观:
1、把每一幅映射图展示给那些不知道这种符号系统的人来看。这种方法能够揭示出符号系统中不直观的地方。当然,也有可能揭示的是这个映射图中需要表达的那部分信息本身的不直观。(对应到不同的语言,就相当于让一个讲闽南语的老乡在上海某个论坛用家乡话发言。)
2、让每个人用自己熟悉的符号系统重新描述一遍对映射图的理解,然后再让一个理解这两种符号系统的人来核对。这样可以揭示映射图中的一些人为的假设。(对应到不同的语言,就相当于每个人把所需要表达的意思用方言各自表达一遍,然后再让通晓两地方言的翻译来纠正其中的偏差)
3、使用某种能够把别的符号系统自动转换成某种“标准”的符号系统的自动化工具。(对应到不同的语言,就相当于让所有人都在发言之前学好普通话,再用普通话发言。)
上面讲到了因为不同的符号系统导致的对映射图的理解的分歧,这就相当于由于语言不通而导致了交流障碍。最直接最常见的办法就是推迟需求工作的进度,先让大家都来学习这种语言(或符号系统)。但是,这也是不切合实际的,因为这样有可能还会让大家失去对需求过程的兴趣和冲动。经验表明,把这些学习时间安排为需求阶段的一部分会好一些,因为这时候我们可以一边学习语言,一边解决问题。
【鸡同鸭讲】
学过信息论的人都知道,完全的全通系统是不存在的。换句话说,就像我们前面说的,在需求工作中,严格意义上的1-1映射是不存在的。这一点对于务实的人们来说感触最多。务实一词适合用来形容军人作战时的状态,这就像是某条军规中所说:“在地图和实际地形有出入的时候,要相信实际地形”。对于这一点,成语“纸上谈兵”已经概括得很好了。
但是我们相信这个世界上还是有很多很多热衷于“纸上谈兵”的人。特别是在使用那些所谓先进的自动化工具的时候,他们往往会忘记人们实际所需而开始相信他们的所画的诸如工作流图之类的是真正的问题所在。下面这个例子是我在这个月遇到的一个真实案例,目的是说明“纸上谈兵”的态度会带来需求的偏差和歧义。
我们在几个月前参与了一次投标,当然我们中标了。
作为一个工程项目,涉及到投标内容的相关方包括甲方(买家)、乙方(卖方)和设计方。设计方在设计方案的草图中选用了型号BX的产品,这一选型并没有在招标过程中写入技术说明书中,这是因为设计方只关注型号BX的产品技术指标能够满足设计要求。
中标之后的正式合同中,考虑到性价比问题,乙方和设计方就产品技术指标问题进行了磋商,并达成了一致,最终选用了型号BY的产品,BY产品完全能够满足BX产品在该项目中设计需求,因此,而在正式的技术协议书并没有出现BX和BY的任意字样。
随着项目的开展,甲方在验收的那一天突然提出了乙方所供产品型号不符合要求的反馈,并表示要拒收产品。其理由是,这一投标是甲方整体项目中的一部分,而甲方对其它部分的招标和实施都是按照BX型号的产品设计的。
那么,这份技术设计中的草图是否应该作为产品供货的限制呢?其中作为示意方式标注的产品型号是否具有合法的效力呢?或者说,设计方在写上型号BX时是否已经使设计中“所表达的本意”与“设计图纸”产生偏差了呢?
――citizen2yy
我这里要说的是,例子中的问题很大程度上与设计方所采用的符号系统有关,而且如果我们三方能够对“真正的要求”达成一个共识,事情就不会费那么多的周折。
【诫条】
1、 在生活(或开发项目)当中,我们往往会遇到一些不明是由的旁人(非专业人员)横加职责,这让我们很郁闷。很显然,每个人都不可能和我们设计者一样全盘投入到产品中来,但是他们却不愿意错过每一丝繁华。当非专业人员不愿意或者不屑于花时间来了解设计过程的时候,雇用一个明白事理而又口齿伶俐的调解人会比较有效,而符号系统及其产生的映射图在产品设计中就扮演了这个调解人的角色。
2、 人们不愿意参与设计过程的一个重要原因是现在的所谓“专业设计人员”的高高在上的姿态。千万要注意顾客和旁人(实际上是决定事态结果的裁决者)仅仅是对开发过程不了解,他们在别的方面(比如说法律、业务等)却是专家,这也是需要他们参与的原因。如果能够建立一个大家融洽交流的环境,相信世界会更美好。
3、 一部分自动化过程的固执而忠实的拥趸认为他们的“直观”的符号系统很容易被别人看懂,就像一个在北京胡同里长大的5岁孩童坚信“普通话是最容易学懂的语言”一样。改变这个孩子的简单方法,是让他去教一位外国小朋友怎么说普通话;改变这些固执的家伙的方法,是让他们把符号系统向100个不同学历、不同民族的听众解释清楚。
4、 对于同一个需求过程中的两批不同背景的专家,常常会倾向于说两种不同的符号系统。那么最好的办法就是用两种不同的符号系统都表述一遍。
5、 用一种大家都能听懂的语言来作为正式文档的语言会比较有效,那么在需求过程中也最好事先指定一种“大家都能理解的”符号系统作为正式文档。如果谁不懂的话,就让他去学好了。
6、 不同母语之间的翻译会有优劣之分,同样不同符号系统之间的翻译也有优劣。优劣的背后就是分歧,也就是歧义。需求过程经历了从真正最终用户——用户代表——需求分析员——需求规格说明书这么一长串的步骤,每一步都是一种翻译,因此保证每一个步骤都是最优的就显得格外重要了。
7、需要注意的是,需求过程并不完全是瀑布式的。随着过程的深入,我们极有可能会像老牛一样进行反刍。因此,我们的探索也会考虑到如何快捷地执行“撤销”操作。