2.1 涉众分析
需求工程最困难的工作是编写出详细需求分析文档,包括面向用户、面向机器和其他软件系统的接口。如果前期需求分析不透彻或出现错误,将会给系统带来极大损害,甚至后患无穷,对其修改也是杯水车薪,最终导致项目失败。
需求工程任务的复杂性主要体现在以下方面。
(1)处理范围广泛
需求工程既要描述物理的实体,又要反映人类活动的特点,处理范围广泛。
(2)涉及诸多参与方
需求获取过程中往往涉及诸多参与方,包括客户、用户、领域专家、IT工作者等,他们有着不同的背景、关注点和表达方式等。
(3)处理内容多样
需求工程的处理内容既有来自用户的功能需求和非功能需求,又有软件将来所处的环境和约束方面的需求。
(4)处理结果要求严格
需求规格说明书要满足正确性、完整性和一致性等严格的要求,以免为后续软件开发活动留下后患。
(5)目标和功能随着时间演化变动
计算机要解决的现实世界问题是随着时间不断变化的,因此需求工程需要妥善处理目标和功能随着时间演化的变动情况。
需求获取是从人、文档或环境中获取需求的过程,主要包括问题和目标定义、涉众分析和执行需求获取三个方面的活动。
我们的软件应该坚持用户至上,体现对他们的人文关怀。需求获取过程中,用户是主体,面对广泛的涉众,我们如何判断和选择需求获取的关键用户,并且能更好地理解用户需求呢?这就需要进行涉众分析。
2.1.1 涉众类型与特征——以人为本
首先得认识到不同涉众的类型与特征,才能更好地相互理解、沟通与交流。
涉众类型与特征包括以下三个方面。
1.个人特征
个人特征包括年龄、性别、学历、职业、职务;生活方式、个性、对新技术的态度;技能;身体能力及限制,如色盲、左撇子等。对于左撇子用户,应考虑提供方便的鼠标左右键的切换功能;对于色盲用户,应考虑采用不同的亮度代替颜色变化来辅助用户识别颜色。
2.工作特征
工作特征包括用户使用模式及用户群体能力(利用程度、使用频率、用户思维能力等)、技能和经验(初学型、熟练型或专家型)。
针对初学型用户,应尽量提供完善的帮助和向导,帮助他们一步步地按照提示,逐渐熟练软件;对于熟练型用户,则只需在关键操作和易出错处进行提示和确认,以提高工作效率;对于专家型用户,软件可以提供一定的编程功能,以帮助其扩展软件功能。
3.地理和社会特征
地理和社会特征包括用户的国家和区域、文化背景和社会关系等。
2.1.2 换位思考,慈悲为怀
在实际工作中,常常出现需求获取的困难。
1.用户和需求分析人员之间交流的困难
因为涉众的不同类型与特征,造成知识理解的困难,用户说不清楚需求、分析人员理解有误。这就需要分析人员尽量多地去了解应用背景,理解业务流程,尽早地建构一个能和用户有效沟通的知识框架。
不同用户的计算机技能和经验、对需求的理解、表达水平、表达方式各不相同。有的客户不清楚具体的需求;有的用户心里清楚,但却表达不清或不知道怎么表达;有的用户具备一定的软件开发知识,能够清楚表达需求。
作为系统分析师,要学会引导用户清楚且完整地表达真实的需求,比如,可以由分析师先依据经验给出常规的需求,再由用户删除不需要的需求,最终确定用户真正的需求。一个有经验的分析师,能从用户的只言片语中挖掘出用户需求,并进一步提出自己的观点进行需求分析拓展。
因此,如果用户和需求分析人员之间存在交流困难,系统分析师可采用多次交流沟通的方式,例如第一次只是初步了解需求,然后将初步的需求进行分析和筛选,分析出哪些是合理需求,哪些是不合理的需求,以及哪些是需要进一步明确的需求。经过筛选和细化后,第二次交流可提供PPT或Word文档,与用户进行进一步的深入交流。如果交流顺利,第三次交流可通过建立快速原型得到精确的需求。整个需求分析过程也可以使用不断迭代的方式,直到获得完整和精确的需求为止。
此外,作为一名分析师,除了技能、经验和性格外,分析师与用户沟通的内容和风格不同,也会产生明显不同的结果。
(1)沟通的内容
即使我们与用户沟通的是同一件事情,但我们需要针对不同的用户准备不同的沟通内容。这里需要发挥同理性和换位思考的能力。Paul Graham曾在其《黑客与画家》一书中写道:“判断一个程序员是否具备换位思考的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。”
换位思考是一种常用的沟通技巧。将心比心、设身处地地站在对方的立场考虑问题,是相互理解不可或缺的心理机制。通过换位思考,设身处地地去理解别人,会给对方带来好感,对方会感受到自己被尊重,从而愿意与你进行更多的沟通与交流,这种现象称为“换位思考定律”。
“蹲下身来看看孩子的世界”,这也是一种典型的换位思考方式。就像汽车大王福特所说:“假如有什么成功的秘密的话,就是要学会换位思考,了解别人的态度和观点。因为这样不仅能更好地与对方进行沟通,而且可以更清楚地了解对方的思维轨迹,从而有的放矢、击中要害。”
孔子在《论语·学而》中说:“不患人之不己知,患不知人也。”意思是不要担心别人不了解自己,只要担心自己不了解别人。换位思考能够通过角色互换,对照内在的自己,发现自己的不足之处,进而进行自我完善。
因此,换位思考是一种豁达、一种理解、一种尊重,也是一种激励,更是一种智慧。
(2)沟通的风格
我们的眼神、姿态、行为、语气、语调,都在传递着各种不同的信息,可以产生不同的气场。语言也需要精心设计,不要用太过于耿直的方式,强硬地向用户灌输你的理念,要灵活变通,润物细无声。
佛教有一个名词叫“爱语”,意指慈爱的语言、态度与表情。把内心想要表达的关怀、体贴和勉励,透过语言、表情或手势等肢体行为表现出来,像点头、微笑等动作,都可以算是爱语。
只要你心里慈悲、柔软,你所表现出来的任何一个动作、表情,哪怕只是一句话,都会让人感到非常温暖。
这,就是爱语的力量!
真正的爱,是放下自己,一心一意为对方设想,真诚赞美、体谅对方。爱语是佛教的“四摄法”之一。“四摄法”即指四种摄化众生的方法——布施、爱语、利行、同事。例如,和老人家相处,要放缓步伐,就好像我们也是步履蹒跚的老人一样,这样他就会觉得很温馨。另外,我们要用对方听得懂的语言来进行沟通和交流,而且在态度上,必须是关怀的、慈悲的。要做到这样,必须是真诚为他人设想,把自己的利害得失放下,处处为对方着想,了解对方需要的是什么,让别人觉得你跟他很亲近,这样才是爱语的表现。
2.有些潜在的需求因为用户认为不值得提出而被忽略
用户毕竟没有开发经验,有些需求因为用户认为不值得提出而常常被忽略,但当用户看到原型或完整系统时,会突然想到一些潜在需求。
为了避免此种情况对项目造成破坏性影响,建议对于一些大的功能模块,分析员一定要建立快速原型让客户进行精确的需求确认,并在合同中对于“做什么”和“不做什么”一定要清晰详尽地表达,并着重注意发现和挖掘用户潜在的需求。
3.用户需求自身经常变动
《金刚经》云:“一切有为法,如梦幻泡影,如露亦如电,应作如是观。”这是《金刚经》对于“无常”的描述。
世间的一切只有变化是绝对的,所以软件系统的需求不断变化也是可以理解的。
(1)采取预防措施
分析师在进行需求分析时,需要尽可能地分析清楚哪些是稳定的需求,哪些是易变的需求,以便在进行系统设计时,将软件的核心建筑在稳定的需求上。
(2)对于“无常”的需求,反求诸其身
既然软件系统的需求是不断变化的,所以面对“无常”的需求,我们能不能停止自己的抱怨情绪,减少对别人的指责呢?
《中庸》中讲到:“正己而不求于人则无怨。上不怨天,下不尤人。”子曰:“射有似乎君子,失诸正鹄,反求诸其身。”
端正自己而不苛求别人,这样就不会有什么抱怨了。上不抱怨天,下不抱怨人。孔子说:“君子立身处世就像射箭一样,射不中,不怪靶子不正,只怪自己箭术不行。”
儒家哲学注重人的自身修养,倡导凡事要反求诸己。这本身也体现了慈悲精神。在大乘佛教中,佛、菩萨以追求慈悲及智慧为最高目标。慈指的是用爱护心给予众生以安乐;悲指的是用怜悯心解除众生的痛苦。
《菜根谭》中讲到:“反己者,触事皆成药石;尤人者,动念即是戈矛。一以辟众善之路,一以浚诸恶之源,相去霄壤矣。”
反省自己,任何事情都可能成为使自己警醒的良药;怨天尤人,心中的念头都会像戈矛一样伤害自己。一个是通向各种善行的途径,一个是形成恶行的源头,两者有天壤之别。
古今中外,无论是谦谦君子还是江湖勇士,无论是绅士风度还是骑士精神,都是讲慈悲仁义。《三国演义》中,关羽率领精兵在华容道截住了溃败而逃的曹操,他想起自己落魄时被曹操收留、以礼相待的往事,慈悲之心驱使他让出通道放走了曹操。事后,他敢做敢当,回营负荆请罪。结果,仁厚的诸葛亮也以仁慈之心原谅了他。
4.用户消极参与或越俎代庖
软件系统的目标是提高用户的工作效率、降低工作强度,但由于用户需要适应新系统的新操作和使用方式,所以不可避免地给用户带来了麻烦。有的用户担心新的软件系统使用麻烦等种种原因,造成情绪消极,不愿积极参与,尤其对于那些已经熟悉旧系统的年龄偏大的用户,他们在新旧系统更替的时期,可能因为担心出现问题而产生消极抵触情绪。还有的用户固执地要求某些功能,这需要分析人员换位思考,在充分理解用户的基础上,善意地沟通,赢得用户理解,缓解其内心的抵触情绪,让他们真正体会到软件系统带来的益处;同时注重对用户的跟踪培训,及时帮助用户渡过难关,尽可能地减少实施过程中给用户带来的不便。
5.多个相关方需求相互冲突,需求有二义性
如果有的需求牵涉客户不同部门或不同受众,就有可能出现不一致意见,造成客户内部需求冲突。
对于这种情况,需求工程师的处理方法一般是:或者请客户最高领导层决定需求,或者采用折中方案,使多方达成共识。一定要注意需求说明不能有二义性,更不能前后矛盾。
如何说服你的用户接受你的意见是每个IT工程师的必修课。沟通永远是解决问题的撒手锏,不仅仅是艺术。
6.需求方的期望值设置不合理
常常遇到的情况是需求方对项目进度的期望值设置不合理。例如,一个项目需要5个人6个月完成,而客户的期望值是4个月,也许客户还会觉得把人数加到10个就可以提前到3个月完成。这时需求分析人员可以通过对任务的分解细化,让客户明白工作量和进度管理的细节,获得客户的理解;也可以采用一些折中的方式,例如先用3个月时间完成部分功能,其他功能放在后面的版本升级。总之要尽可能将对方的预期设置在合理的范围内。
需求分析人员需要意识到期望值的存在,了解期望值管理,这样就能更好地解决问题,而不会被不合理的期望值所制约。