1.1 功能描述
功能描述可以说是需求文档的衍生品,它完整且具体地描述了软件的功能。所谓完整,指的是每一项功能都必须准确地加以描述,不能有遗漏;所谓具体,就是用具体数值来描述某项功能的技术指标。它既是开发任务的起点,也是终点。在着手开发之前,开发人员依据这个文档,将整个开发任务分解为一系列子任务,并在开发过程中逐个加以实现;在开发任务完成之后,测试人员会依据这个文档对项目进行综合测试,并最终交付给用户,这就是开发任务的终点。
功能描述的写作方法与记叙文有相似之处:记叙文中包含了时间、地点、人物、事件四大关键要素,而功能描述中通常也会包含时间、空间、角色、事件等基本要素,也要描述角色(组件)在特定的时间、空间内的行为(所发生的事件)。
此外,功能描述又与说明文相像,要求文字简练准确,内容具有条理性、客观性和完整性,不强调修辞方法,等等。一篇好的功能描述为后续的程序开发提供了一个完整的框架及任务清单,我们的每一个开发步骤都会以这份文档为依据,因此,千万不可掉以轻心。
《水果配对》是一款挑战瞬间记忆能力的游戏:先后翻开两张卡片,如果图案相同,则增加游戏得分,并保持两张卡片的翻开状态;如果图案不同,则瞬间将两张卡片重新合上。
以上这段文字描述了游戏的功能,对普通人来说,这样的描述已经算是清楚明白了,但是对开发者而言,它还不够完整,也不够具体,那么究竟如何着手写出一篇完整的功能描述呢?
这个问题可以从记叙文的写作中获得一些启示。我们都知道,记叙文有时间、地点、人物、事件四大要素,只有具备了这些要素,一篇文章才称得上是记叙文。那么游戏的功能描述呢?它由哪些要素组成呢?我们仿照记叙文的四大要素,给出功能描述的五大要素,即:时间、空间、角色、行为、规则。这五个要素,确立了我们写作的五个维度。下面我们将结合图 1-1,给出《水果配对》游戏的功能描述。
图 1-1 《水果配对》游戏的用户界面
(1) 时间:设定游戏中与时间有关的因素。
a) 游戏时长:60 秒。
b) 卡片闪现时长:500 毫秒。
(2) 空间:设定游戏中用户界面的布局。
a) 用户界面顶部为信息提示区,用于显示游戏得分及游戏剩余时间。
b) 用户界面中部显示 16 张卡片,以 4×4 的方阵进行排列。
(3) 角色:设定游戏中被操作的对象,本游戏中为 16 张卡片。
(4) 行为:分为游戏行为、角色行为及玩家行为,下面交替加以描述。
a) 游戏行为(一)——游戏开始:分数清零,开始计时,为卡片随机分配正面图案。
b) 角色行为(一)——角色初始状态:卡片显示背面图案。
c) 玩家行为(一)——翻牌:玩家先翻开一张卡片,再翻开第二张卡片。
d) 角色行为(二):如果翻开的两张卡片图案相同,则两张卡片保持翻开状态。
e) 角色行为(三):如果翻开的两张卡片图案不同,则两张卡片闪现片刻后重新合上(显示背面图案)。
f) 游戏行为(二)——计分:成功翻开一对卡片,更新得分。
g) 游戏行为(三)——计时:更新游戏剩余时间。
h) 游戏行为(四)——游戏结束:玩家翻开了全部卡片,或游戏剩余时间为零。
i. 显示本次游戏得分。
ii. 显示游戏得分的历史记录。
iii. 允许用户选择重新开始或退出游戏。
(5) 规则:设定游戏中的规则,如角色之间的生克关系、游戏奖励机制等。
a) 每翻开一对卡片得 10 分。
b) 如果在规定时间内翻开所有卡片,则将剩余游戏时间换算为奖励得分:(秒数)×10,与翻牌得分一同计入总分。
c) 如果在规定时间内没有成功翻开全部卡片,则不计分。
有一种说法:功能说明中隐含了程序中的变量和过程,其中的名词有可能成为程序中的全局变量,而动词或动宾词组有可能成为程序中的过程。具体来说,在以上的游戏描述中,游戏时长、剩余时间及奖励得分等都有可能成为程序中的全局变量;而翻牌、闪现、合上等,有可能成为程序中的过程。如果名词、动词能够与变量、过程相对应,那么这个游戏描述可以为整个开发任务提供一个切入点和努力的方向,并提高开发效率。不过,毕竟游戏描述使用的是人类的自然语言,而自然语言存在很大的不确定性,同样一款游戏,不同的人会有不同的描述方法。因此,这种说法值得借鉴,但不足以作为技术标准,而将复杂的问题简单化。