所有软件工程过程模型的一个重要原则是:在试图设计一个解决方案之前,最好对问题
有所理解。在用户界面的设计中,理解问题就意味着了解:(1)通过界面和系统交互的人
(最终用户);(2)最终用户为完成工作要执行的任务;(3)作为界面的一部分而显示的内容;
(4)任务处理的环境。在接下来的几节中,为了给设计任务建立牢固的基础,我们来检查界
面分析的每个成分。
1 用户分析
在担忧技术上的问题之前,用户界面这个词完全有理由要求我们花时间去理解用户。之
前,我们提到每个用户对于软件都存在心理映像,而这可能与其他用户的心理映像存在着差
别。另外,用户的心理映像可能与软件工程师的设计模型相距甚远。设计师能够将得到的心
理映像和设计模型聚合在一起的唯一办法就是努力了解用户,同时了解这些用户是如何使用
系统的。为了完成这个任务,可以利用各种途径(用户访谈、销售输入、市场输入、支持输
入)获得的信息。
下列一组问题(改编自[Hac98])将有助于界面设计师更好地理解系统的用户:
- 用户是经过训练的专业人员、技术员、办事员,还是制造业工人?
- 用户平均正规教育水平如何?
- 用户是否具有学习书面资料的能力或者是否渴望接受集中培训?
- 用户是专业录入人员还是键盘恐惧者?
- 用户群体的年龄范围如何?
- 是否需要考虑用户的性别差异?
- 如何为用户完成的工作提供报酬?
- 用户是否在正常的办公时间内工作或者一直干到工作完成?
- 软件是用户所完成工作中的一个集成部分,还是偶尔使用一次?
- 用户群中使用的主要交流语言是什么?
- 如果用户在使用软件的过程中出错,结果会怎么样?
- 用户是否是系统所解决问题领域的专家?
- 用户是否想了解界面背后的技术?
提问
我们如何知道最终用户的人数和特征?
这些问题和类似问题的答案将帮助设计师了解:最终用户是什么人,什么可能令他们感到愉悦,如何对用户进行分类,他们对系统的心理模型是什么样子,用户界面必须具有哪些特性才能满足用户的需求。
2 任务分析和建模
任务分析的目标就是给出下列问题的答案:
- 在指定环境下用户将完成什么工作?
- 用户工作时将完成什么任务和子任务?
- 在工作中用户将处理什么特殊的问题域对象?
- 工作任务的顺序(工作流)如何?
- 任务的层次关系如何?
为了回答这些问题,软件工程师必须利用本书前面所讨论的分析技术,只不过在此种情况下,要将这些技术应用到用户界面。
用例。在前面几章中,我们提到过用例描述了参与者(在用户界面设计中,参与者通常是某个人)和系统的交互方式。作为任务分析的一部分,设计用例用来显示最终用户如何完成指定的相关工作任务。在大多数情况下,用例采用第一人称并以非正式形式(一段简单的文字)来书写。例如,假如一家小的软件公司想专门为公司室内设计师开发一个计算机辅助设计系统。为了更好地理解他们是如何工作的,实际的室内设计工程师应该描述特定的设计功能。在室内设计师被问到“如何确定室内家具摆放位置”的时候,室内设计师写下了如下非正式的用例描述:
关键点
用户的目的是通过用户界面来完成一个或多个任务。为了实现这一点,用户界面必须提供用户达到目标的机制。
我从勾画房间的平面图、窗户与门的尺寸和位置开始设计。我非常关心射入房间的光线,关心窗外的风景(如果它很漂亮,就会吸引我的注意力),关心无障碍墙的长度,关心房间内活动空间的通道大小。我接下来会查看客户和我选取的家具清单……接着,我会为客户画出一个房屋的透视图(三维图画),让客户感受到房间看起来应该是什么样的。
这个用例给出了计算机辅助设计系统中一项重要工作任务的基本描述。从这个描述中,软件工程师能够提炼出任务、对象和整个交互流程。另外,系统中能够使得室内设计师感到愉悦的其他特征也被构思出来。例如,可以将房屋中每一扇窗户的风景都拍摄成一张数码相片。在画房屋透视图时,通过每扇窗户就可以看到窗外的真实景象。
SafeHome 用户界面设计的用例
[场景] Vinod的工作间,用户界面设计正在进行。
[人物] Vinod和Jamie,SafeHome软件工程团队成员。
[对话]
Jamie: 我拦住我们的市场部联系人,让她写了一份监视界面的用例。
Vinod: 站在谁的角度来写?
Jamie: 当然是房主,还会有谁?
Vinod: 还有系统管理员这个角色。即使是房主担任这个角色,这也是一个不同的视角。“管理员”启动系统,配置零件,布置平面图,安置摄像机……
Jamie: 当房主想看视频时,我只是让她扮演房主的角色。Vinod :好的,这只是监视功能界面主要
行为之一。但是,我们也应该调查一下系统管理员的行为。
Jamie (有些不悦): 你是对的。
(Jamie 离开去找销售人员。几个小时以后她回来了。)
Jamie: 我真走运,找到了市场部联系人,我们一起完成了系统管理员的用例。我们应该把“管理”定义为可以应用所有其他SafeHome功能的一个功能。这是我们提
出的用例。
(Jamie给Vinod看这个非正式的用例。)
非正式用例: 我想能够在任何时候设置和编辑系统的布置方案。当我启动系统时,我选择某个管理功能。系统询问我是否要建立一个新的系统布置方案,或者询问我是否编辑已有的方案。如果我选择了一个新建方案,系统呈现一个绘画屏幕,在网格上可以画出建筑平面图来。为了绘画简便,应该提供墙壁、窗户和门的图标。我只是将图标伸展到合适的长度。系统将把长度显示为英尺或者米(我可以选择度量系统)。我能够从传感器和摄像机库中进行选择,并且将它们放置在平面图中。我
标记每个传感器和摄像机,或者系统自动进行标记。我可以通过合适的菜单对传感器和摄像机进行设置。如果选择编辑,就可以移动传感器和摄像机,添加新的或删除已有的传感器和摄像机,编辑平面图并编辑摄像机和传感器的设置。在每种情形下,我希望系统能够进行一致性检查并且帮助我避免出错。
Vinod(看完脚本之后): 好的,对于绘画程序,可能有一些有用的设计模式或可复用的图形用户界面构件。我打赌,通过使用可复用构件,我们可以实现某些或大部分管理员界面。
Jamie: 同意!我马上进行查看。
任务细化。界面设计的任务分析采用了一种详细阐述的办法来辅助理解用户界面必须采纳的用户活动。
首先,工程师必须定义完成系统或应用程序目标所需的任务并对任务进行划分。例如,考虑前面讨论的为室内设计师开发的计算机辅助设计系统。通过观察工作中的室内设计师,软件工程师了解到,室内设计由一系列的主要活动组成:家具布置(在前面用例设计中提到过)、结构和材料的选择、墙壁和窗户装饰物的选择、(向客户)展示、计算成本、购物。其中任何一个都可以被细化成一系列的子任务。例如,使用用例中的信息,可以将家具布置任务细化为下面的子任务:(1)根据房屋的尺寸画出平面图;(2)将门窗安置在合适的位置;(3a)使用家具模型在平面图上描绘相应比例的家具轮廓;(3b)使用饰件模板在平面设计图上勾勒相应比例的饰件;(4)移动家具和饰件轮廓线到达理想的位置;(5)标记所有的家具和饰件轮廓;(6)标出尺寸以显示其位置;(7)为用户勾画透视图。也可以应用类似的方法对其他主任务进行细化。
上面的每个子任务都可以进一步细化。其中子任务1~6可以通过在界面中操纵信息和执行各种动作来完成。另一方面,子任务7可以在软件中自动完成,并且几乎不用直接与用户交互。界面的设计模型应该以一种与用户模型(典型室内设计师的轮廓图)和系统感觉(室内设计师期望系统自动提供)相一致的方式来配合这些任务。
建议
尽管对象细化十分有用,但它应当作为独立的方法去使用。任务分析的过程中,应当考虑用户的声音。
对象细化。软件工程师这时不是着眼于用户必须完成的任务,而是需要检查用例和来自用户的其他信息,并且提取室内设计师需要使用的物理对象。这些对象可以分为不同的类。需要定义每个类的属性,并且通过对
然而,事实可能不是这样。室内设计师可能想要指定所画的透视图、缩放比例、色彩的运用和其他信息。与透视渲染相关的用例将提供解决这些问题的信息。
每个对象动作的评估为设计师提供一个操作列表。例如,家具模板可能被转换成一个名为Furniture的类,这个类包括size、shape和location等属性。室内设计师会从Furniture类中选择对象,将其移动到平面图(在此处,平面图是另一个对象)中的某个位置上,拖曳家具的轮廓,依此类推。任务选择(select)、移动(move)、拖曳(draw)等都是操作。用户界面分析模型不能对任何一种操作都提供文字实现。然而,随着设计的不断细化,对每个操作的细节都会进行定义。
工作流分析。当大量扮演着不同角色的用户使用某个用户界面时,有时候除了任务分析和对象细化之外,还有必要进行工作流分析。该技术使得软件工程师可以很好地理解在涉及多个成员(角色)时,工作过程是如何完成的。假设某个公司打算将处方药的开方和给药过程全部自动化。全部过程将围绕着一个WebApp进行考虑,医生(或者他们的助手)、药剂师和病人等都可以访问这个应用系统。用UML泳道图(活动图的一种变形)能够有效地表示工作流。
下面只考虑工作过程中的一小部分:当病人请求重填处方时发生的情形。图给出了一个泳道图,该图表明了前面提及的三个角色的任务和决定。这些信息可以通过访谈或每个角色书写的用例获取。不管怎样,事件流(图中显示的)使得界面设计师认识到三个关键的界面特征:
处方重填功能的泳道图
1.每个用户通过界面实现不同的任务,因此,为病人设计的界面在感观上与为药剂师或医生设计的界面有所不同。
2.为医生和药剂师设计的界面应该能够访问和显示来自辅助信息源的信息(例如,药剂师应能够访问库存详细清单,而医生应能够访问其他可选药物信息)。
3.泳道图中的很多活动都可以采用任务分析和对象求精使其进一步细化(例如,“填写处方”隐含着邮购支付、访问药房,或者访问特殊药品分发中心)。
引述
使技术适应用户要比用户适应技术好。—— Larry Marine
层次表示。在界面分析时,会产生相应的细化过程。一旦建立了工作流,就为每个用户类型都定义一个任务层次。该任务层次来自于为用户定义的每项任务的逐步细化。例如,考虑重填处方的用户任务请求,任务层次如下:
- 重填处方请求
- 提供辨识信息
- 指定姓名
- 指定用户ID
- 指定个人身份识别号码(PIN)和密码
- 指定处方序号
- 指定重填处方所需的日期
为了完成填写处方的任务,定义了三个子任务。可以将其中的第一个子任务“提供辨识
信息”进一步细化成三个另外的子任务。
3 显示内容分析
数据对象可能:(1)由应用中其他部分的构件(与界面无关)生成;(2)由应用所访问数据库中存储的数据获得;(3)从系统外部传递到正在讨论的应用中。
在界面分析步骤中,要考虑内容的格式和美感(当它要显示在界面上时)。其中需要提问和回答的问题包括:
- 不同类型的数据是否要放置到屏幕上固定的位置(例如,照片一般显示在右上角)?
- 用户能否定制内容的屏幕位置?
- 是否对所有内容赋予适当的屏幕标识?
- 为了便于理解,应如何划分长篇报告?
- 对于大集合的数据,是否存在直接移动到摘要信息的机制?
- 输出图形的大小是否需要适合所使用显示设备的限制?
- 如何使用颜色来增强理解?
- 出错信息和警告应如何呈现给用户?
对这些(和其他)问题的回答有助于软件工程师建立起内容表示的需求。
提问
作为用户界面设计的一部分,我们如何决定所显示内容的格式和美感?
4 工作环境分析
Hackos和Redish[Hac98]在讨论工作环境分析的重要性时这样写道:“人们不能孤立地
完成任务。他们会受到周围活动的影响,如工作场所的物理特征,使用设备的类型,与其他
人的工作关系等。”在某些应用中,计算机系统的用户界面被放在“用户友好”的位置(例如,合适的亮度、良好的显示高度、简单方便的键盘操作),但有些地方(例如,工厂的地板和飞机座舱)亮度可能不是很适合,噪音也可能是个问题,也许不能选择使用键盘、鼠标或触摸屏,显示方位也不甚理想。界面设计师可能会受到某些因素的限制,这些因素会减弱易用性。
除了物理的环境因素之外,工作场所的文化氛围也起着作用。可否采用某种方式(例
如,每次交互所用时间、交互的准确性)来度量系统的交互?在提供一个输入前,两个或多
个人员是否一定要共享信息?如何为系统用户提供支持?在界面设计开始之前,应该对上述
问题和更多的相关问题给予回答。