写点什么

认识 Elaine:一种以人物角色驱动探索架构重要型需求的方法

2014 年 7 月 25 日

本文由《IEEE Software》杂志首发,现在由InfoQ 和IEEE Computer Society 联合向您呈现。

从涉众那里获得的需求,常常只描述了系统的预期功能,而不涉及性能、可靠性、可移植性和可用性等系统质量方面的需求。人们常常假定系统会按预期标准运行,而忽视将这些非功能性目标写入需求。不幸的是,涉众和开发者们会以为他们已经达成了共识,而实际上却有着不同的期望。若不能在系统设计之前充分理解这些质量上的需求,那么在系统交付之后,很可能出现涉众因系统不符合期望而不满意的状况。而且,在后期针对这些关键性需求进行重构,要付出高昂的代价。

存在重要架构权衡的项目

下面,我把我们最近用来解决这一问题的简单方法分享给大家。我们有一个叫 TraceLab 的项目。在项目早期阶段,我们意识到很难设计出一个能够满足所有涉众关心的问题的架构方案。TraceLab 提供了一个虚拟的实验室环境,研究者们可以在这个环境中设计、执行、评估和交流实证软件工程实验(empirical software engineering experiments)。该项目的涉众要求一个高性能、多平台的方案,而且要能把用不同语言编写的可执行组件动态地载入到即插即用的环境中——保守地说,这是一个具有挑战性的需求。为了设计一个可行的方案,我们开发了一个以人物素描(persona sketch)为中心的方法流程 1。

这些人物素描有助于我们显式地获取各种涉众对系统质量的需求,并设计和评估要满足这些需求的架构方案。我们在另一个工业合作项目中也运用了同样的方法。在该项目中,我们设计并原型化了一个全企业范围的机电一体化追溯系统。这个系统采用了信息检索方法,使工程师们可以在多个分布式第三方 case 工具之间搜索相关的工件。比如,无论是从事热动力模型设计的工程师,还是从事代码开发的程序员,都可以通过打开集成开发环境(IDE)中的插件来查询与他们的模型中某个元素相关的需求列表(可能是存放在 IBM Rational DOORS 工具里)。因此,这个热动力系统需要有一个底层的追溯引擎(可以从第三方 case 工具获取数据)和一个图形化的用户界面插件(提供交互功能),这样工程师就可以发出追溯查询并查看结果了。我们首先研究了从推到拉、从集中式到分布式的各种方案,然后通过一系列人物素描对这些方案进行了验证。

发挥人物素描的作用

人物角色(persona)代表虚构的人物。在人机交互(HCI)领域,人物角色被用来支持用户交互设计。在一个典型的案例中,HCI 团队先对潜在用户进行调查研究,再对用户进行分组,然后设计、评估、确定一组人物角色。这些人物角色提供了一个透镜,使得与预期工作相关的看法和环境更加突出 2。由于我们的项目采用敏捷开发,我们无法承受在先期就投入数周乃至数月的时间来创建人物角色,因此,我们开展了一系列头脑风暴活动来创建和验证人物角色,然后通过工业合作伙伴的反馈意见来确认这些角色的确是有效的。

图 ****1 一个精通架构的人物角色。这个人物角色栩栩如生地描绘了一个典型的用户代表,它以用户故事的形式描述了质量需求。

认识 Elaine

图 1 描绘了我们为机电一体化项目创建的一个人物素描。Elaine 是一个经常使用 Pro/Engineer 来构建物理模型的机械工程师。她准备通过机电一体化追溯系统来帮她确保自己的模型符合监督管理规范。她特别关心性能问题,因为她知道系统需求保存在远程的资源库中,她不希望在建模时把时间耽误在等待搜索结果上。另外,她还关心访问的控制。虽然她需要访问需求说明书的基线版本,但她仍然希望对她的当前模型维持实施严格的访问控制。

除 Elaine 以外,我们还创建了其他三个人物角色(见图 2)。我们之所以选择这些人物角色,是因为他们能够带来不同的视角。John 是一个规范监察员,他关心的是把最新、最准确的信息汇总整理到各类报告里。Les 是项目的首席架构师,他关注性能、安全性和自适应性;特别要说的一点是,他意识到系统必须能够随着企业的变化而变化,而且如果各类工程师们采用了新的 case 工具,系统必须要能够支持这些工具。最后一位是 Mary,她是一名需求工程师,她负责需求的获取、规格化和管理。这些需求是机电一体化追溯系统中的重要部分。

(点击图片放大)

2 为机电一体化项目创建的四个人物角色。创建架构重要型角色是要讲究一定技巧的,识别出的人物角色组合要能够覆盖给定系统中的所有质量问题。

评估架构方案

用户故事是各人物角色描述中最重要的部分。这些故事应该是关乎架构的,也就是说,故事创建者们要能发现那些可能会驱动架构设计的问题。在《IEEE Software》杂志最近刊载的一篇文章中,Lianping Chen、Muhammad AliBabar 和 Bashar Nuseibeh 这样描述架构重要型需求(architecturally significant requirements):它们对系统有着巨大的影响,它们制衡其他需求,它们引入了约束、打破了假定,而且常常难以实现 3。

根据我们的经验,从人物角色的视角创建架构重要型用户故事,有助于我们对多种不同架构方案进行分析和评估。一些最基本的架构决策主要是决定采用推模型还是拉模型,追溯引擎应该是集中式还是分布式,如何针对各类独立、异构、第三方的 case 工具进行访问控制。对每一个候选的架构决策,我们根据它对人物角色实现其目标的支持程度来进行评估。图 3 是我们在分析过程中使用的模版,从中可以看出此分析针对的是“实现最快追溯查询响应时间”这一目标。

在进行分析时,首先确认并列举出所有与“响应时间”这一目标相关的用户故事,然后直观地标注出各个人物角色所关心的具体问题。值得注意的是,对于诸如“30 秒内追溯查询响应时间”这样的显式需求,在弄清能否以合理的代价实现它之前,我们不应把它看成是板上钉钉的。就这个例子来说,我们探索出了这样的一个集中式方案,那就是由数据所有者定期把追溯数据推送至追溯引擎服务器。

(点击图片放大)

3** 架构重要型用户故事总结。本例关注的是“响应时间”这一目标,表中列出了几个关键性问题及其对各角色人物的影响。在设计过程中,相关架构决策及其风险也被记录了下来。**

在设计过程早期,创建一些有架构经验的人物角色,是获取并分析涉众关切问题的一个轻量级方法。它既非常适合敏捷项目环境,也非常适用于更传统的环境。尽管我们目前只在两个项目中运用了这一方法,但我们已经发现它是一个易于实现的方案,而且能有效地使重要的架构问题更为突出。人物角色应该在项目开始时就被创建起来,接着在项目启动阶段引入并细化,然后用来达成共识并不断演进对架构重要关注点的理解,这促成了开发者、架构师和其他涉众之间持续的交流。

希望各位关注我们的方法,并在自己的项目中尝试运用。期待大家的反馈,点击这里与我联系。

参考文献

  1. J. Cleland-Huang, A. Czauderna, and E. Keenan,“A Persona-Based Approach for Exploring Architecturally Significant Requirements in Agile Projects,” Requirements Engineering for Software Quality, LNCS 7830, J. Doerr and A.L. Opdahl, eds., Springer, 2013, pp. 18–33.
  2. L. Nielsen, (2013): “Personas,” Encyclopedia of Human-Computer Interaction, 2nd ed., M. Soegaard and R.F. Dam, eds., Interaction Design Foundation, 2013.
  3. L. Chen, M. Ali Babar, and B. Nuseibeh, “Characterizing Architecturally Significant Requirements,” IEEE Software, vol. 30, no. 2, 2013, pp. 38–45.

关于作者

Jane Cleland-Huang是美国德保罗大学(DePaul University)副教授。点击这里与她联系。

本文最早刊载于 IEEE Software 杂志。IEEE Software 杂志旨在面向领先和未来的软件实践者传递可靠、有用、前沿的软件开发信息,帮助工程师和管理者们紧跟快速的技术变革。

查看英文原文: Meet Elaine: A Persona- Driven Approach to Exploring Architecturally Significant Requirements


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014 年 7 月 25 日 04:241560
用户头像

发布了 63 篇内容, 共 22.4 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

最简单的 K8S 部署文件编写姿势,没有之一!

Kevin Wan

golang Kubernetes

实践大于一切!Alibaba最新MySQL性能优化+高可用架构全彩版PDF

Java架构追梦

Java MySQL 学习 架构 面试

tron波场智能合约系统软件开发|tron波场智能合约APP开发

开發I852946OIIO

系统开发

智能警务平台搭建,公安一体化警务实战解决方案

t13823115967

智慧公安 智慧警务系统开发

iOS面试基础知识 (二)

iOSer

ios 面试题 iOS面试

《Tensorflow:实战Google深度学习框架》.pdf

田维常

线程池的7种创建方式,强烈推荐你用它...

王磊

Java

十一周作业

走走,停停……

智能合约DAPP软件系统开发

开發I852946OIIO

系统开发

IT民工闲话·点一盏灯

IT民工大叔

成长 IT 传承

英特尔正式发布全新一代内存和存储产品

intel001

刚刚,阿里云知行动手实验室正式开放公测了

阿里巴巴云原生

阿里云 开发者 云原生 k8s dubbo

3. 搞定收工,PropertyEditor就到这

YourBatman

Spring Framework 类型转换 PropertyEditor

为了SpringBoot提交Tomcat执行,我总结了这么多

996小迁

Java tomcat 架构 springboot

原来只想简单看一下String源码,没想到整理了这么多知识点

小Q

Java 学习 编程 面试 string

警惕”被讲故事“ | 读《叙事改变人生》

邓瑞恒Ryan

读书笔记 哲学 创业心态 社会学 世界观

记一次网络请求连接超时的事故

AI乔治

Java 架构 HTTP

区块链农产品溯源应用开发,农产品可追溯系统

135深圳3055源中瑞8032

盘点 2020 | 一枚程序员的跑步之路

Simon

程序员 跑步 锻炼 盘点2020

深入浅出 Go - sync/atomic 源码分析

哈希说

golang

Android uni-app 封装原生插件

anyRTC开发者

uni-app android 音视频 跨平台 聊天室

JVM的艺术—JAVA内存模型

云流

Java jdk JVM

我是如何拿到蚂蚁金服offer?看完2020年Java研发岗复盘经验总结,是时候让面试官懵逼了

比伯

Java 编程 架构 面试 程序人生

年终盘点 | 七年零故障支撑 双11 的消息中间件 RocketMQ,怎么做到的?

阿里巴巴云原生

阿里云 开源 云原生 中间件 消息队列

亿级流量背后战场,京东11.11大促全方位技术揭秘

京东科技开发者

云计算

智慧社区服务平台开发,平安小区建设

t13823115967

智慧城市 平安小区

mybatis分页插件如何实现?

田维常

mybatis

微信昵称可以加雪花了,个性又好看

程序员生活志

工具 微信名 雪花

实战排查|为什么遮挡推流摄像头,会导致播放绿屏?

阿里云视频云

音视频 WebRTC RTC bug RTMP

六个步骤,从零开始教你搭建基于WordPress的个人博客

华为云开发者社区

网站 WordPress 搭建

未雨绸缪,数据保护之NBU介质备份

华为云开发者社区

安全 数据 保护

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

认识Elaine:一种以人物角色驱动探索架构重要型需求的方法-InfoQ