程序原本(六十五):应用开发基础——应用开发的背景与成因(界面交互是功能性需求,但开发技术并非它的主要构成)

阅读数:26 2019 年 10 月 1 日 16:49

程序原本(六十五):应用开发基础——应用开发的背景与成因(界面交互是功能性需求,但开发技术并非它的主要构成)

界面交互是否算作功能性需求?

在程序员看来,显示身份档案这个功能实现为一个“信息列表”就足够了,因为一个列表(list)足以显示全部信息9。但是该档案也可能被显示在触摸屏、移动终端或者桌面电脑等设备中,因而对于实际的应用环境来说,“如何显示身份档案”是该应用的一个实际功能。这样的功能有可能是用户没有提出但使用环境有此要求的。更可能的情况下,“显示成何种形式”以及“如何操作它”已经包含在用户提交的功能需求当中。更进一步地:

9 想象一下把 xml 文件直接展示在文本编辑器或 WEB 浏览器中。

  • 用户可能要求同时显示指定个数的档案(列表);
  • 用户可能要求显示档案信息的部分或全部(卡片或详情);
  • 用户可能要求显示档案某一信息的局部或改换某种显示效果(显示头像);
  • 用户可能要求显示档案能被持续更新(实时刷新);
  • 用户可能要求某种或某类角色可以修改某些信息(操作员与主管);
  • 用户可能要求使用某种装备来输入某些信息(OCR 接口)。
  • ……

程序设计的阶段,我们可以将“信息列表”作为输出验证的手段,例如使用自动测试工具来验证接口(类似前面提到的ListCard()LoadCard()函数)中数据返回的正确性。但是对应用开发来说,根据用户的实际需求而组织一个合理的展示与交互界面,是我们必须完成的功能。在某些情况下,应用程序并不要求有太独特的界面与交互,例如标准的 Windows 桌面程序就可以直接在 Visual C++ 中用 MFC 标准组件完成。因此基于操作系统或特定环境下的界面与交互,“就程序员的感觉来说”,更像是一种实现的必需,很难被视为是用户功能性需求的一部分。

即便如此,对于一个真正意义上的应用软件产品来说,我们还是必须将界面与交互作为功能性需求。这种产品特性事实上构成了用户对功能的认识,例如界面是用户操作产品功能的一个不可或缺的部分,因此是功能性的。与之相对,安装过程与操作该产品的功能没有直接关系10,因此是非功能性的。

10 张三也许并不知道“户籍管理系统”如何安装到他工作的机器上,但这并不妨碍他使用这个系统。

考察这一分歧,我们还必须留意到界面与交互带来的细分领域问题:当它作为操作系统(以及其开发标准)的一部分提供时,它与程序员所在的计算机环境是同一领域的;而当它是构成某个独立领域的用户认识的一部分时(例如工业控制界面,或户籍管理系统特有的身份证扫描界面),它就是该领域下的一些领域知识。这一观点用在桌面应用或后台应用开发11,以及其他种种软件开发活动中也是适合的。

11 可以在 PC 机、移动设备以及其他的各种环境中找到“桌面”与“后台”的不同划分。一种不太严格的划分方式是:后台程序总是以控制台或类似方式与操作者交互,而桌面程序则采用种种“友好的”交互方式。

我需要进一步强调的是,程序员在界面开发中对界面绘制方式(或界面控件)的专业知识,在于“如何实现它”,而不是“如何让它表现得更符合用户需要”,后者是界面交互设计的职责12。举例来说,作为程序员,如何在窗体中正确地层叠多张 PNG 图是你所必须掌握的技术,而其中某一张图是否漂亮美观或符合客户的审美情趣,就不是你必备的程序开发技能13

12 这往往被归入产品的设计特性。Marty Cagan(网景副总裁、eBay 产品管理及设计高级副总裁)甚至将设计与功能区分开来,将设计特性作为产品属性而非具体的功能属性。参见《程序员》2011 年之“Marty Cagan 谈产品系列”。

13 你当然可以具有这样的技能,一专多能或者无所不能并非坏事,但在这里我们只讨论属于程序员的那个部分。

评论

发布