高级需求分析技巧,用案例说明,如何从运行场景中挖掘功能需求?

发现功能需求的的目的,是要形成构建的产品的一份合约,因此,功能性需求必须十分详细的描述预期的产品将执行哪些活动。为了满足这个指标,功能性需求必须包含足够的细节,让开发能够构造出正确的产品,使需求分析师与利益相关方的误解减少到最低程度。

为了使需求更规范、清晰、有条理,就需要考虑发现和组织需求的方法。我们可以这样来考虑:

  • 首先:把每个用例看成一个大的需求集,描述清楚这些需求集之间的交互关系,这就自然的使需求与用例之间有了映射关系。
  • 其次:把视野集中在每个用例。一个用例表现了为实现一个大的目标所必需的行为,而每一个大目标需要若干小目标来实现,这个小目标就是事务。在用例点规模估计中,我们已经定义了事物就是从用户到系统,再回到用户的一个“环形路线”,我们可以把每个用例所包含的若干事务分离出来并进行命名。这就有了一个清晰的需求框架。
  • 最后:再把视野集中到每个事务,仔细分析为了完成这个小目标(事务),系统需要哪些功能?这些功能有哪些模糊不确定的地方?能不能据此定义开发?

这种从功能集到事务再到功能的层层分解方式,不但减少了需求定义的难度,而且是最后形成需求文档和用例文档之间有很好的追踪关系,下图展示了这种渐进式得到功能性需求的方法。

我们用已经讨论过的“预订房间”作为案例,讨论如何在场景中发现事务并细化功能的。

据此可以发现功能需求如下:

在完成了每个场景的功能提取之后,需要整体审视一下已经形成的功能表,看看哪些功能是重复的可以共享的,并把它们提取出来。虽然在编写用例场景的时候,已经利用用例的包含关系做了一些这方面的工作,但是基于下面一些原因可能是不充分或者不正确的:

  • 最初掌握的信息不足,不足以发现更多的共享功能;
  • 场景可能是由不同的人编写的,限于范围,不足以发现更大范围内的共享。

在掌握更多信息的情况下,我们会发现原来用例场景的不足,从而修正用例的场景,使他们趋于完善。我们用上一章讨论过的宾馆管理作为例子,最初编写场景的时候针对顾客和柜台服务员的应用场景,是由不同的人编写的,所做出的用例可能是下面的样子。

在针对每个场景提取功能需求之后,在统一审视的情况下,人们发现在每个用例中都存在“查询房间详情”的功能集。于是把它们提取出来,反过来修正原来的用例,如下图所示。

我们不可能一下子掌握所有情况,对情况的掌握是在过程中逐步完成的,这种后一步骤对前一步骤的修正称之为反馈。在软件工程中,有效的利用反馈过程的原理,可以大幅度提升每个过程的质量。

例如,前面我们在明确了客户需求之后,根据新掌握的信息,可能会修正原来确定的范围(总比到了最后范围蠕变强);在功能提取之后,可能会修正原来确定的场景;在进入设计阶段,根据掌握的更多设计信息,可能会修正最初确定的需求;在每个阶段集成测试并评审之后,我们可能会根据已经获得的新情况,修正已有设计,甚至提出需求变更要求。

遇到这些情况不要奇怪,这正是符合人们认识事物的螺旋上升法则,与其避开这种螺旋性,还不如承认它,并利用它帮助我们提升质量。不要怕修改,精雕细刻与粗制滥造根本性的区别,就是一个是反复修改的,一个是做出来就算了。那么这会不会影响效率呢?从一个节点看是会的。但是从整体上看,前期付出的努力会在后期获得丰厚的回报,并且会大大提升整体的效率。这种精益求精的文化,无论对于企业还是个人,都是良好的正向推动力。

时间: 2024-11-05 11:23:49

高级需求分析技巧,用案例说明,如何从运行场景中挖掘功能需求?的相关文章

如何使用GOOGLE高级搜索技巧

原文出处: 新浪博客(未找到原始出处) 一,GOOGLE简介 Google(www.google.com)是一个搜索引擎,由两个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc. 于1999年创立.2000年7月份,Google替代Inktomi成为Yahoo公司的搜索引擎,同年9月份,Google成为中国网易公司的搜索引擎.98年至今,GOOGLE已经获得30多项业界大奖. 二,GOOGLE特色 GOOGLE支持多达132种语言,包括简体中

(011) Linux之高级键盘技巧

十年运维系列之基础篇 - Linux 作者:曾林 联系:[email protected] 网站:www.jplatformx.com 版权:文章未经同意请勿转载 一.引言 这里指的高级键盘技巧其实有一个定语,那就是专门针对bash命令行而言的.bash使用了一个名为Readline的库(供不同的应用程序共享使用的线程集合)来实现命令行的编辑.比如,通过箭头键移动光标.除此之外,bash还有很多其他的功能,它们可以当做在工作中使用的附加工具. 这里需要注意的一点就是,下面的有些组合键(尤其对于那

非常实用的10个PHP高级应用技巧

PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语法.它可以比 CGI或者Perl更快速的执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多.下面介绍了十个PHP高级应用技巧. 1, 使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里. 这种方法把存储空间降到了接近四分之一(char(15) 的 15 个字节对整形的 4 个字节),计

[转]基于Protel DXP软件的PCB高级编辑技巧大全

来源:基于Protel DXP软件的PCB高级编辑技巧大全 一.放置坐标指示 放置坐标指示可以显示出PCB板上任何一点的坐标位置. 启用放置坐标的方法如下:从主菜单中执行命令 Place/Coordinate ,也可以用元件放置工具栏中的 (Place Coordinate)图标按钮. 进入放置坐标的状态后,鼠标将变成十字光标状,将鼠标移动到合适的位置,单击鼠标确定放置,如图1所示. 图 1  坐标指示放置 坐标指示属性设置可以通过以下方法之一: ·在用鼠标放置坐标时按 Tab 键,将弹出 Co

QT高级编程技巧(二)-- 编写多线程和并发应用

学习QT多线程编程之前,有必要先熟悉事件循环的概念.先看一个单线程界面程序的主函数代码: int main(int argc, char* argv[]) { QApplication app(argc, argv); // 构造主窗口对象并显示 MainWindow w; w.show(); // 进入事件循环 return app.exec(); } 在程序初始化完成后,主线程进入main()函数开始执行应用代码.一般地,我们在主线程上构建界面对象,然后进入事件循环以处理控件绘制.用户输入.

【转载】 python sort、sorted高级排序技巧

这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1. 排序基础 简单的升序排序是非常容易的.只需要调用sorted()方法.它返回一个新的list,新的list的元素基于小于运算符(lt)来排序. >>> sorted([5, 2,

ref:PHP反序列化漏洞成因及漏洞挖掘技巧与案例

ref:https://www.anquanke.com/post/id/84922 PHP反序列化漏洞成因及漏洞挖掘技巧与案例 一.序列化和反序列化 序列化和反序列化的目的是使得程序间传输对象会更加方便.序列化是将对象转换为字符串以便存储传输的一种方式.而反序列化恰好就是序列化的逆过程,反序列化会将字符串转换为对象供程序使用.在PHP中序列化和反序列化对应的函数分别为serialize()和unserialize().反序列化本身并不危险,但是如果反序列化时,传入反序列化函数的参数可以被用户控

谈判技巧与案例5本书,好评2本

最近看过的谈判技巧相关的书有5本.整理清单如下.其中前两本我认为还不错. 4星|<沃顿商学院最受欢迎的谈判课>:谈判中,真理和事实不如人和谈判过程重要 作者是谈判专家,亚马逊美国上介绍说是沃顿商学院的教授,国内的网站上介绍说是在沃顿商学院任教. 作者在书中整理了许多谈判的原则与机巧,看得出作者真的非常有经验.我读后认为比较重要的有以下几点: 1:开诚布公并积极推动谈判: 2:想清楚自己的目标: 3:注意倾听对方,站在对方的角度理解对方想要什么: 4:不争辩对错与是非: 书中的谈判场景涉及到许多

SQL高级查询技巧(两次JOIN同一个表,自包含JOIN,不等JOIN)

掌握了这些,就比较高级啦 Using the Same Table Twice 如下面查询中的branch字段 SELECT a.account_id, e.emp_id, b_a.name open_branch, b_e.name emp_branch FROM account AS a INNER JOIN branch AS b_a ON a.open_branch_id = b_a.branch_id INNER JOIN employee AS e ON a.open_emp_id