本节书摘来异步社区《挖掘管理价值:企业软件项目管理实战》一书中的第2章,第2.4节,作者: 徐勤 责编: 杨海玲, 更多章节内容可以访问云栖社区“异步社区”公众号查看。
挖掘管理价值:企业软件项目管理实战
软件设计是根据需求的内容,运用计算机理论、技术和工具将其合理地、有机地、具体地转化为功能,并演示其实现的方法、过程和结果。设计人员在理解了用户的需求之后,首先在自己的脑海中会有一个大致的概念和思路,然后考虑如何去实现这些功能,当然这需要一定的专业知识和实践经验。这里就不阐述软件或数据库设计的理论知识了,而重点介绍如何将设计人员脑子里对软件的设计和理解反映到文字、图形和流程上,使得用户可以了解计算机是如何实现他们的需求的。我们用图 2-9 来说明软件设计的过程。
如图 2-9 所示,用户的需求仿佛就是混乱的揉合在一起的愿望和想法,经过设计人员的处理、分析和设计,就变成了清晰的、系统的、有效的软件功能或界面。
软件设计是一项创造性的工作,就好比绘画一样,有一定的规律和章法。尽管一些教科书阐述了一些基本的理论和方法,但是这些远远不够。在实践中你会发现,软件设计是一个大熔炉,不但会用到计算机的理论,甚至其他科学和艺术范畴也会融合进来,譬如美学、音乐、财务、机械工程、数学等。如果只局限于计算机的理论和方法,很难设计出一套灵活、有效、精致和满足用户体验的软件,因此软件设计人员要善于综合运用各种知识和经验,跳出束缚,大胆创新。
软件是个复杂的系统,是众多功能、操作和数据的结合体,就好比一幢大厦,里面有电梯、房间、水管、电路、大门、空调等。在设计软件的具体功能和界面之前,先要理顺软件的结构,否则就像盲人摸象一样无从下手。
软件的结构一般按照功能来进行分类组合,这里给出一个围墙模型,如图2-10所示。
在此图中“数据处理”是核心模块,所有的数据计算和处理都是它来完成,通常也是三层架构中的逻辑层。围绕着“数据处理”模块的有“用户操作界面”、“数据输出界面”、“数据接口”、“系统设置界面”和“系统管理界面”模块。
一般而言,用户分为三类:普通用户、超级用户和系统管理员。他们在系统内的分工和权限是不同的,因此他们的界面、操作方法也不同。“用户操作界面”模块是普通用户使用的,在此模块中,普通用户只能进行访问、查询和输入数据等一般的操作,此模块也是软件数据的主要来源窗口。“系统设置界面”模块是超级用户使用的,在此模块中,超级用户可以修改系统内的业务逻辑和普通用户的权限。“系统管理界面”是系统管理员使用的,在此界面中,系统管理员可以修改系统的数据算法和结构、用户的权限、以及系统流程等。
“数据输出界面”模块是各类报告、报表、数据导出和打印的界面。“数据接口”模块和“数据输出界面”模块类似,但是它更多的是一种无界面的机器与机器之间进行数据交互的模块,因此把它单列出来。在界面的外围是“用户登录”和“用户退出”模块,主要是负责在用户使用软件的时候认证用户信息和在用户关闭软件时保存相关信息。
界面的作用就是提供软件和用户交互的窗口,通过用户在界面上的操作,软件就知道用户行为和需要什么,因此界面的设计目的就是要解决什么样的控件布局和组合可以让用户获得所需要的东西。很多设计人员在做界面设计时往往走入一个误区,认为界面越华丽就越好,功能越多越好,其实不然,固然华丽无错、功能强大是好,但是却违背了设计的“够用”和“适用”原则。尽管青菜萝卜各有所爱,大部分的用户更偏向于简单好用。那么到底什么才是“够用”和“适用”呢?
“够用”是指除了用户需要的功能,不要额外地增加多余无关的信息、图片、内容和功能。
“适用”是指界面上提供的信息、图片和控件等是适合和方便用户使用的,不会让用户觉得不会用、不知道怎么用,或者难用,有的时候简洁反而更有效。
当然“够用”和“适用”原则也不是一蹴而就的,就像探寻迷宫一样,经过多次尝试才能找到最短的路径,界面也是通过不断的修正才逐渐趋向于“够用”和“适用”的。同时也不是一成不变的,随着用户需求的变化,“够用”和“适用”的标准也在变化着,可能以前的“够用”和“适用”的界面变得不“够用”和不“适用”了,也可能以前不“够用”和不“适用”的变得“够用”和“适用”了。总之,用户的体验才是衡量是否够用和适用的标准。
案例8:适当的界面设计
案例情景
金辉机械加工公司希望机床操作工人使用系统来输入工作单的信息。系统的设计要求是让操作工尽可能地快速和准确操作,不会影响到正常的工作,另外工作单上有工单编号和型号条形码。设计人员设计了两种界面用于工作单登记,如图2-11和图2-12所示。
案例分析
我们对比一下这两个界面,其基本的框架是一样的,只是内容和页面的元素不同。就功能而言,这两个页面都能满足用户的需求,即都能完成工作单的登记,也不存在哪个设计好与坏的问题,我们所要关注的是“是否够用和适用”。这两点的对比如表2-11所示。
因此经过综合评估,界面一最符合当前软件的需求,即满足了快速、高效和简单的要求。当然界面一并不是完满无缺的,它还需要在今后的使用中不断完善。界面二尽管也可以满足功能,但在当前情况下,不是完全适用,或许在其他场合可以使用,譬如产线领班的管理界面或是公共区域使用平台等。
案例启迪
对于企业应用的软件来说,实用是第一主义,而对于商业应用的软件来说,吸引力是第一主义,因此在不同的应用场合,软件的设计要符合实际应用场合的情境而不是设计者的意愿。
数据设计主要是定义数据的格式和结构。这里说的数据不光是关系数据库里的数据,还包括广义的任何软件处理的数据,如字符、警告信息、文件或语音等。设计人员往往只关注数据库结构的设计,认为数据库设计好了,软件的数据处理就成功了。要知道,不是所有的数据处理都是依赖数据库完成的,也不是所有的数据都用数据库来处理就一定又快又好。
那么我们在做数据设计的时候,应该注意什么呢?
下例是因数据库设计导致的数据迁移问题。
宝硕公司在2004年开发了一套生产管理系统,根据当时公司的策略使用了Oracle 9i作为数据库。在2010年的时候,宝硕公司被实达公司收购,实达公司的策略是使用微软的SQL作为数据库。因此,需要将该系统的数据库由Oracle 9i转换为SQL数据库,在进行转换的时候,发现原有的一些数据格式无法转换,具体如图2-13所示。
如JOBS表中的ROUTINE_IDS字段的数据类型是NCLOB,是Oracle的一个特殊的对象存储类型,并不能直接转换到SQL数据库中。为此需要开发专门的数据转换软件或脚本,这将大大增加数据库转换的成本和时间。如果在当初设计的时候,可以使用其他常用的类型或使用其他表格来保存一对多的关系,则不会有这些额外的工作。
数据库的设计应该考虑到软件的生命周期和数据库技术发展方向,鉴于新版本总是兼容旧版本,没有特殊需要,数据格式尽量使用通用格式,对于有特殊要求的数据,可以用代码或自定义类型来转换数据。
功能实现了信息的输入、处理和输出,同时它要求一定的交互操作来触发或激活功能的运行。无数个小功能(或者说是小算法)汇集成全部的功能,实现软件的作用。在设计功能的时候,我们应该注意以下几个方面。
独立性。一个功能只解决一个特定的问题,如加密和解密属于同一问题的两个方面,不要期望开发出一个全能的或者是万能的功能,这既不可能也不现实。特定的代码实现特定的功能,其好处在于代码精炼、执行效率高、交互性好、开发成功率高以及维护成本低。
多态性。一个特定的功能可以解决一个问题的多个方面或形式,如加密解密功能既可以解决64位加密也可以解决128位加密,既可以明文加密也可以图形加密。
自然性。功能的具体操作应该符合人使用的自然习惯,如按钮点击次序应该从左到右。
接口是软件与软件、机器与机器、数据库与数据库之间的数据交换窗口。不同软件和设备之间是不能直接简单地进行数据交换的,一定要进行特定的转换和处理以后才能保证交换的成功和正确。开发人员一般认为只要拿到其他软件或系统的API(Application Programming Interface)或者SDK(Software Development Kit)就可以进行数据交换了。其实不然,如果接口没有设计好,就直接开发代码交换数据,很可能无法交换数据,或是交换过程不稳定,或是可以交换但是效率低下。因此设计好高效率规范的接口非常重要。
在设计接口的时候,应该遵循以下原则。
华天(上海)公司使用Oracle公司的EBS作为本公司的ERP系统。为了能够节省大量的工作单打印纸,同时可以将纸张放入物料盘,计划将A4的纸张改成A5的尺寸。因此需要开发一套简单的打印工作单的软件,有关工作单的基本信息,BOM和制程将从ERP的数据库里定期同步过来。ERP的数据库服务器位于其母公司的总部美国洛杉矶,总部和上海分公司之间用2MB的带宽进行专线通信。
开发人员根据这个要求开发了多个数据库脚本,如表2-12所示。
这个接口设计完成后,通过了测试,也能够正常使用。但是在使用了1个月后,有人反应少数工作单的信息没有及时更新,导致投产数量和原材料领用发生错误,增加了报废。开发人员通过调试和检查,再次确认代码本身是正确的。测试环境和正式环境的差别在于,测试环境没有那么多的数据量。因此怀疑问题出在接口的同步上,通过将脚本运行的间隔时间调整为每2小时,则不再发生此类问题。但是如果运行间隔时间为2小时,则工作单信息更新不够及时,生产线要等待最少2小时后才能投产最新的工作单,会影响到产量。于是开发人员再三模拟,最后发现,只有当大量工作单出现的时候,才会发生这种情况。由于大量的工作单信息需要更新,加上网络带宽有限,结果前面一个脚本还没有执行完毕,后面一个周期的脚本又要执行了。开发人员于是将接口的工作机制做了如下修改。
通过上述改进,基本杜绝了工作单信息缺失和未更新的情况。由此可见,接口的质量和效率不仅仅取决于代码和逻辑,还取决于环境的影响。
软件设计完成以后,是否符合用户的需求呢?这就需要和用户一起来确定。由于设计人员和用户出于不同的视角,因而他们对设计的意见不尽相同,有的时候还会争执不下。那么如何评估软件设计的成果呢?唯用户意见为准则是不可取的,唯设计人员意见为规范也是不客观的。最好的方法是采用打分制进行客观的评估,令双方心服口服。
软件设计的评估的考察点由以下几个方面组成。
只要满足了这6个基本要求,就可以认为软件设计是合格的。当然光是合格还不够,好的软件设计应该是超出用户预期的,因为这些设计可能是用户潜在的需求,不是必须要完成的,这并不和前面说的“够用”和“适用”原则矛盾。那么怎样才能超出预期呢?这里给出一些建议以供参考。
明志公司委托一家软件公司开发了一个简单的仓库入库和领料系统。软件公司完成了设计,明志公司电脑部的软件经理对供应商提供的设计方案进行了评估。评估表的部分内容如表2-13所示。
表2-13中的每项评分范围从1到10,10为最符合,1为最不符合。如果某项没有必要进行评估,则可以不计分。综合分为计分项的平均分。
通过对设计页面和功能的打分,可以有针对性地、客观全面地评估设计结果,避免了人为的因素和主观的喜好。
软件设计文档是对软件设计思路和方案的记录,该文档通常包括以下内容。
案例9:从用户的需求出发提升软件设计
案例背景
斯特软件公司专门为全国的厨具制造商提供电子商务销售平台,该平台运行了一年多后,月度注册用户和销量始终维持在1万人和40万左右,连续几个月都没有显著增加。投资方对于平台的业绩非常不满意,希望尽快改变这种现状。斯特软件委托京通咨询公司通过多种渠道和方法收集用户的使用体验,经过大量细致的分析和比较,发现问题主要集中在以下三个方面:
(1)商品分类方式不适合。根据数据库的追踪数据显示,只有2.1%的用户在打开首页后能够在3次点击内(含第3次)完成订单。大部分客户在打开首页后就放弃了继续浏览,原因之一就是首页的商品分类菜单方式。客户一般出于两种目的浏览购物网站,一是无目的性地随便逛逛;二是有目地性地购买某个商品。对于第一类客户,商品的准确分类不能起到很大的吸引作用,因为客户的关注度不是商品的规格,而是商品的特点。对于第二类客户,因为他们有明确的购买目的,所以希望在第一次看到菜单时就能找到自己所需要的分类,如果经过第二次尝试还是没有找到所需要的分类,绝大部分的客户会放弃购物。
(2)“加入购物车”按钮位置不合适。最初的设计思想是,为了多给商品的照片和规格留出显示的位置,“加入购物车”按钮被放置在右下角。但是根据Complete公司对全球多数电子商务平台的调研的资料显示,“加入购物车”按钮的位置会直接影响到用户下单的第一意愿,以Wal-Mart和Target网站为例,其不同的“加入购物车”按钮的位置,导致“点击成交率”差异为9%左右。这就意味着如果客户喜欢该产品,但是因为没有注意到“加入购物车”的按钮而没有能够在第一时间下单。
(3)相同页面过多。即使是不同品牌、不同类型和不同包装的厨具,不仅其页面布局相同,绝大部分的文字内容也是相同的。明显不同的地方只有品名和规格,商品描述部分由于使用了嵌入框架技术(Iframe),其代码部分是通过另外一个页面(不同的URL)传递的。Google 对超过25%以上不同内容的网页才会认为是独特的网页,才行收录。因此在网站搜索方面,很多商品被引擎算法过滤掉,大大地降低了无目的性用户搜索到商品的机会。这是当初为了节省开发成本而始料未及的。
案件分析
斯特软件公司组成专门的业务改善小组,进一步完善平台结构和功能。改善小组针对京通公司提出的三点问题,逐项给出了改进的方案。
(1)首页分类菜单重新设计,不再以品牌为一级分类,改成按商品功能来分类。由于品牌认知度的不同,客户的第一动作就会去点击自己熟知的或者是排位靠前的品牌。但是从品牌代理的角度而言,一两种知名品牌对于销量的贡献并不是很大,相反有些小品牌的利润率却是很好。另外如果知名品牌的商品不能经常性地推陈出新的话,客户很快就会对平台失去兴趣。如果去除品牌的分类,在同一类商品中显示所有品牌的商品,将丰富页面的内容,同时多个品牌商品的不断更新也将满足客户尝鲜的心理。按照商品类别分类的另一个好处是满足了有目的性购物客户的快速定位要求。
(2)将“加入购物车”按钮放置在商品标价的下方,网页中部突出位置。无论客户是否对商品满意或者最终是否下单,都给以客户下单的意识驱动,增加客户购物成交的可能性。
(3)改变商品描述页面的代码,在保持总体风格一致的前提下,区别性地显示商品内容,对于不同类型的商品,使用不同的描述模板和主题颜色。依据商品的特点,增加精炼的广告性描述语。去除Iframe的结构,将所有HTML代码通过一个URL传递到客户端的浏览器。
平台开发组根据改善小组的意见,加上其他改进措施,很快推出了新版本。新版本上线后,给人以全新的感觉和体验,用户注册数量成倍增长,用户访问变得越来越频繁,销售量有了明显提升。
案例启迪
软件的设计不是一成不变的,一旦它不能满足业务的要求,就必须重新评估和做出调整。调整的原则依然是面向用户的“适用”和“够用”的原则。
案例10:从业务的角度出发提升软件设计
案例情景
宝硕公司被收购以后,其企业的文化也逐渐受到新公司的影响。新公司的一个显著特点就是业务管理完全依赖于系统数据,系统提供了强大的数据分析和处理功能。因此,宝硕公司的新管理层团队希望现有的系统可以提供更多智能化的和人性化的功能。开发人员经过收集和分析需求,结合过去用户反馈的一些问题,觉得现有的系统在以下几个方面可以增加一些更方便的功能,如表2-14所示。
案例分析
多从用户的角度考虑,就能发现很多有价值的改进空间。就好比房子,已经装修好了,只要添置家具和家电就可以住人了,软件本身就提供了坚实的使用基础,只要不断地在细节方面改进,软件设计就能做到出类拔萃。