
王春晖 等:人机协作的用户故事场景提取与迭代演进
3187
collaborative approach to support the user story understanding and system functional requirements generation. This approach proposes to
include the scenarios as the fine-grained representation of user stories and presents a feature-scenario model to capture the elements of
user stories in three dimensions, i.e., the story description, the function attributes, and the scenarios. It designs a three-step algorithm to
accept the submission of user stories, extract the features of each user story, and construct its functional scenario. As there are
relationships among different user stories, it defines three types of correlative relations among them based on the functional scenarios.
With the help of the customers, it supports the measurement and the identification of these relations and then constructs the system’s view
of the functional requirements. It is also applicable when obtaining new user stories for tolerating the requirements evolution. A case study
shows the feasibility of this approach.
Key words: agile requirements engineering; user story; requirements elicitation; requirement evolution; user story relation mining
软件开发过程中,需求很难一次性完整获得,而且也会频繁发生变更.传统方法试图在开发前完成并确认整
个需求文档,但这样开发出的软件产品常常因不满足用户需要而使项目以失败告终
[1]
.敏捷方法注重领域用户
与开发团队的频繁交互,能够快速响应需求变化,在较短的时间内开发出满足用户需求的软件产品
[2]
.但开发者
如何能够准确理解领域用户需求并有效地维护和管理需求变更,仍然是困扰敏捷开发团队的难题.
一方面,在敏捷方法中,用户故事是领域用户表达需求的最主要方式,该种方式只对意图进行简短说明
[3]
,需
要开发者与领域用户进一步沟通,以形成系统功能说明.另一方面,在发布规划时
[3]
(规划迭代开发选择的用户故
事,确定项目时间表),需要根据领域用户对特定功能特征的急切程度以及用户故事间的关系排列用户故事的优
先级.目前,一般通过领域用户与开发者之间的反复交流和讨论,建立起用户故事索引表,人工梳理故事间的关
系
[13]
.大型软件开发一般会产生大量用户故事,每天都出现大量的新增需求,比如百度公司每天新增需求卡片
近 6 700 个
[4]
.用户故事间的关系可能错综复杂,它们常常重复和不一致.建立起完整的故事关系,特别是建立新
增的和已有的用户故事间的关系非常困难.如果能有一种(半)自动化的手段帮助处理用户故事文档,进行需求
抽取以及关联关系挖掘,将有可能辅助实现高效的用户故事管理.
为了降低敏捷团队成员间沟通和理解的困难程度,领域用户可以描述更多的系统行为,以方便开发者确定
系统功能.行为驱动的敏捷方法
[5,6]
提出使用场景(scenario)更细粒度的描述用户故事,表达用户故事在不同状况
下的系统活动,便于在开发前进行需求验证及测试.场景描述了用户故事在特定上下文中的结果.这种描述方法
以领域用户所希望的系统行为出发,引导领域用户提出需求.系统行为源于待开发软件产品的业务结果,表明,
为了达成业务结果应该如何去做.因而,容易被领域用户接受.同时,在场景中关注目标系统的细粒度行为需求,
更容易被开发者理解和实现.
一个软件系统通常有很多用户故事,需要一种有效的方式将这些用户故事组织在一起,建立用户故事之间
的关系,形成对未来系统的整体需求
[7,8]
.目前已有一些整合用户故事的方法
[911]
,它们通过建立用户故事与需求
模型之间的映射,实现从一组用户故事到需求模型的转换,包括从用户故事到 Use-Case 模型
[12]
、业务流模型
[10]
以及目标模型
[11]
等的转换.也有方法借助自然语言分析技术自动地从用户故事中提取概念模型,并检查需求的
完整性
[9,13,14]
.但是由于自然语言描述本身的二义性及用户故事描述的不规范,全自动的模型转换非常困难.目
前,大多数方法都仅提供模型编辑工具,辅助模型生成
[912]
等.
敏捷开发过程中,需求并不是事先定义好的,而是通过利益相关者之间的频繁交互,随着迭代开发过程逐
步变得清晰
[1]
.在每个迭代周期结束时,领域用户根据对已实现功能的测试及评估结果提出需求变更申
请,主要包括添加或删除功能或修改已实现的功能.变更的功能(用户故事)应该快速地融合到系统需求模型
中,以实现模型的快速更新,还需要检查更新的需求与前期版本需求是否存在冲突
[17]
.目前,用户故事管理的
办法主要是建立用户故事列表和索引卡,人工分析用户故事的变化
[3]
以及变更的成本和风险.有的研究通过
分析多个连续版本的需求文档来评估需求变更的风险
[18,19]
,也有的研究提供辅助平台,借助相关领域知识帮
助管理需求演进
[20]
.
本文提出一种敏捷需求工程场景下的人机协作式用户故事理解和系统功能需求获取方法.该方法提出带
场景的用户故事表示,当领域用户提交一组用户故事后,可根据用户故事元模型,借助用户故事模板以及句法规
则,采用自然语言分析技术,进行用户故事的特征抽取和功能表达.提出基于用户故事概念关系推理规则的用户
评论